ตารางสรุปหน้าที่และผลลัพธ์ (Output) ของแต่ละ Node ใน LCBP3 Migration Workflow v1.8.1 คแบ่งกลุ่มตามขั้นตอนการทำงานเพื่อให้เข้าใจได้ง่ายขึ้นครับ:

## 🚀 กลุ่มที่ 1: จุดเริ่มต้นและเตรียมการ (Initialization & Preflight)

| ชือ Node             | หน้าที่ (Function)                                                                           | ผลลัพธ์ (Output)                                              |
| -------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| Form Trigger         | จุดเริ่มต้นของ Workflow แสดงฟอร์มให้ผู้ใช้เลือกโมเดล AI, ขนาด Batch และระบุตำแหน่งไฟล์ Excel | ข้อมูลจากผู้ใช้ (Model, Batch Size, Excel Path)               |
| Set Configuration    | ตั้งค่าตัวแปรระบบ (Config) เช่น URL, Token, โฟลเดอร์ทำงาน และเกณฑ์การตัดสินใจของ AI          | ชุดตัวแปร config ไว้ใช้ตลอด Workflow                          |
| Check Backend Health | เรียก API ทดสอบว่าระบบ Backend พร้อมทำงานหรือไม่                                             | สถานะ HTTP 200 (OK)                                           |
| Fetch Categories     | ดึงข้อมูล Master Data หมวดหมู่เอกสารจาก Backend                                              | รายการหมวดหมู่เอกสารทั้งหมดในระบบ                             |
| Fetch Tags           | ดึงข้อมูล Master Data แท็กที่มีอยู่จาก Backend                                               | รายชื่อแท็กทั้งหมดในระบบ                                      |
| File Mount Check     | ตรวจสอบว่าไฟล์ Excel และโฟลเดอร์ PDF มีอยู่จริง และเช็คสิทธิ์การเขียนไฟล์ Log                | สถานะ preflight_ok: true พร้อมรายชื่อหมวดหมู่/แท็กที่ดึงมาได้ |

## 📂 กลุ่มที่ 2: เตรียมข้อมูลและการแบ่งชุด (Data Ingestion & Batching)

| ชือ Node                 | หน้าที่ (Function)                                                                             | ผลลัพธ์ (Output)                                                      |
| ------------------------ | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Read Checkpoint          | อ่านฐานข้อมูลว่าครั้งที่แล้วประมวลผล Excel ถึงบรรทัดที่เท่าไหร่ (Resume capability)            | ตัวเลข last_processed_index ล่าสุด                                    |
| Read Excel Binary        | อ่านไฟล์ Excel ต้นฉบับขึ้นมาเป็นข้อมูลไบนารี                                                   | ข้อมูล Binary ของ Excel                                               |
| Read Excel               | แปลงข้อมูล Binary ให้เป็นตารางข้อมูล JSON                                                      | JSON Array ของข้อมูลเอกสารทุกแถว                                      |
| Process Batch + Encoding | ตัดแบ่งแถวตามจำนวน BATCH_SIZE เริ่มจากจุด Checkpoint และแปลง Encoding ให้รองรับภาษาไทย (UTF-8) | ข้อมูลเอกสาร 1 ชุด (เช่น 2 รายการ) ที่พร้อมทำงาน                      |
| File Validator           | ตรวจสอบว่าไฟล์ PDF ที่ระบุใน Excel มีอยู่จริงในโฟลเดอร์ ป้องกัน Path Traversal                 | เฉพาะรายการที่มีไฟล์ PDF อยู่จริง (รายการ Error จะถูกตัดและส่งไป Log) |

## 🧠 กลุ่มที่ 3: สกัดข้อความและวิเคราะห์ด้วย AI (Text Extraction & AI Analysis)

| ชือ Node                     | หน้าที่ (Function)                                                                         | ผลลัพธ์ (Output)                                                      |
| ---------------------------- | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
| Read PDF File                | อ่านไฟล์ PDF ของรายการที่ผ่านเข้ามาเป็นข้อมูลไบนารี                                        | ข้อมูล Binary ของไฟล์ PDF                                             |
| Extract PDF Text             | ส่งไฟล์ PDF ให้ Apache Tika ทำ OCR / สกัดตัวอักษร                                          | ข้อความดิบ (Text) ที่อ่านได้จากหน้า PDF                               |
| Check Fallback State         | ตรวจสอบใน DB ว่าระบบกำลังอยู่ในโหมดใช้โมเดล AI สำรองหรือไม่                                | สถานะ is_fallback_active                                              |
| Fetch DB Context             | ดึงข้อมูลโปรเจกต์ แผนก และองค์กร เพื่อใช้เป็นบริบทให้ AI อ้างอิง                           | ข้อมูลอ้างอิงรหัสและชื่อต่างๆ จากระบบเก่า                             |
| Build AI Prompt              | ประกอบร่างข้อความ (Prompt) โดยรวมข้อมูลจาก Excel, ข้อความใน PDF และบริบท เพื่อสั่งงาน AI   | คำสั่งในฟิลด์ ollama_payload                                          |
| Ollama AI Analysis           | ส่ง Prompt ยิงเข้า Server Ollama เพื่อให้ AI วิเคราะห์ จัดหมวดหมู่ และสรุปข้อมูล           | ข้อความอธิบายหรือ JSON ที่ AI ตอบกลับมา                               |
| Parse & Validate AI Response | แปลงคำตอบ AI เป็น JSON Object ตรวจสอบว่าโครงสร้างถูกต้อง และจัดรูปแบบให้ตรงกับ Backend     | ข้อมูลเดิม + ผลลัพธ์ ai_result (หรือ parse_error ถ้า AI ตอบผิดรูปแบบ) |
| Update Fallback State        | นับจำนวน Error ลง DB หาก AI ทำงานพลาดหลายครั้ง ระบบจะสลับไปใช้ Fallback Model โดยอัตโนมัติ | อัปเดตตาราง migration_fallback_state สำเร็จ                           |

## 🔀 กลุ่มที่ 4: การตัดสินใจและการนำเข้าระบบ (Routing & Ingestion)

| ชือ Node                        | หน้าที่ (Function)                                                                   | ผลลัพธ์ (Output)                                                    |
| ------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------- |
| Confidence Router               | ตรวจประเมินคะแนนความมั่นใจ (Confidence) จาก AI และกำหนดเส้นทาง route_index ให้เอกสาร | สถานะชั่วคราวและค่า route_index (0, 1, 2, 3)                        |
| Route by Confidence Switch Node | แบ่งเส้นทางข้อมูลออกเป็น 4 ขา ตามค่าจาก Router                                       | กระจายข้อมูลไปทาง Staging(High), Staging(Review), Reject หรือ Error |
| Restore Binary                  | (หลังแยกสาย) ดึงข้อมูล Binary ของ PDF กลับมาแนบกับข้อมูลอีกครั้งเตรียมอัปโหลด        | JSON + Binary PDF ของไฟล์นั้นๆ                                      |
| Upload to Backend               | ยิง API นำไฟล์ PDF ฝากไว้ที่ Temp Storage ของ Backend DMS                            | รหัสไฟล์ temp_attachment_id ของ Backend                             |
| Build Enqueue Payload           | ประกอบร่างข้อมูลผลวิเคราะห์ AI เข้ากับรหัสไฟล์ เพื่อเตรียมโยนเข้าคิว Migration       | โครงสร้าง JSON ที่พร้อมส่งเข้า API Queue (enqueue_payload)          |
| Enqueue to Review Queue         | ยิงข้อมูลเข้า API Backend เพื่อบันทึกเข้าสู่ Review Queue ระบบ DMS                   | สถานะสำเร็จจากการรับข้อมูลของ Backend                               |
| Save Checkpoint                 | บันทึกประวัติลง Database ว่าประมวลผลผ่านเอกสารชุดนี้เรียบร้อยแล้ว                    | อัปเดต last_processed_index สำเร็จ                                  |
| Delay                           | หน่วงเวลา (เช่น 2 วินาที) ก่อนวนรอบขึ้นไปทำข้อมูล Batch ถัดไป                        | วนลูปกลับไปที่จุด Read Checkpoint                                   |

## 🚨 กลุ่มที่ 5: การจัดการข้อผิดพลาด (Error Logging)

| ชือ Node          | หน้าที่ (Function)                                                         | ผลลัพธ์ (Output)                      |
| ----------------- | -------------------------------------------------------------------------- | ------------------------------------- |
| Log Reject to CSV | หาก AI ให้คะแนนต่ำกว่าเกณฑ์ จะบันทึกเหตุผลทิ้งไว้ในไฟล์ CSV                | บรรทัดข้อมูลใน reject_log.csv         |
| Log Error to CSV  | หากเกิดข้อผิดพลาดในการประมวลผล (เช่น หาไฟล์ไม่เจอ, AI หลอน) จะบันทึกลง CSV | บรรทัดข้อมูลใน error_log.csv          |
| Log Error to DB   | ยิง API ของ Backend เพื่อบันทึก Error เข้าสู่ Database ส่วนกลาง            | ข้อมูล Error ในตาราง migration_errors |
