สมอง SML

คลังความรู้ / Process Engine

#process#workflow#handler#audit#log#helper

กลุ่ม route workflow เมนูกระบวนการระบบ (Workflow Menus)

POST /process/workflow/{action} (และ /api/v1/process/workflow/{action}) เป็น route รวมของ "เมนูกระบวนการ" ที่พอร์ตมาจาก SML Account (C#): เปลี่ยนรหัส, ผ่านรายการบัญชี, ตรวจข้อมูล, ปิดงวด/ปิดปี, ดู log ตรวจสอบ, ตัดค่าเสื่อมสินทรัพย์, เครื่องมือระบบ, โหลดจังหวัด และผู้ช่วย AI handler ตัวเดียวคือ Handler.Workflow ใช้ switch ตาม {action} (ไม่ใช้ helper serve แบบกลุ่มอื่น) ดู ตัวกระจายคำขอของ process (Process dispatcher)

ทำงานอย่างไร

รูปแบบของ handler (workflow_handler.go:18-37,165-175)

  • ต้องมี token ที่ผ่าน middleware (ไม่มี = 401) และอ่าน ProviderCode, DatabaseName, Username จาก claims เสมอ (ใส่ใน input ฟิลด์ json:"-" ไม่รับจาก body)
  • อ่าน body เป็น JSON จำกัด 1 MiB (MaxBytesReader 1<<20); action province-list ไม่ต้องมี body
  • สำเร็จ: ตอบ {"ok": true, "data": ...}; พลาด: log เตือน (process/workflow failed พร้อม action และ user) แล้วตอบ error; action ที่ไม่รู้จัก = 404 "unknown workflow action"

ตาราง action ทั้งหมด (สิทธิ์จาก permission.go)

action สิทธิ์ อยู่ใน โน้ต
change-code Admin workflow.go:230 เปลี่ยนรหัสหลัก สินค้า/ลูกหนี้/เจ้าหนี้/ผังบัญชี (Change Code)
audit-list Admin workflow.go:976 หัวข้อ "หน้าจอตรวจสอบ log" ด้านล่าง
check-ic-trans read ถ้า apply=false นอกนั้น Admin sysproc_tools.go:47 เครื่องมือกระบวนการระบบ ตรวจ ic_trans / คำนวณแต้มใหม่ / นำเข้าที่อยู่จัดส่ง (Sysproc Tools)
point-recal write sysproc_tools.go:152 เครื่องมือกระบวนการระบบ ตรวจ ic_trans / คำนวณแต้มใหม่ / นำเข้าที่อยู่จัดส่ง (Sysproc Tools)
import-transport-label write sysproc_tools.go:219 เครื่องมือกระบวนการระบบ ตรวจ ic_trans / คำนวณแต้มใหม่ / นำเข้าที่อยู่จัดส่ง (Sysproc Tools)
province-list read province_load.go:68 โหลดข้อมูลจังหวัด/อำเภอ/ตำบลมาตรฐาน (Province Load)
province-load write province_load.go:176 โหลดข้อมูลจังหวัด/อำเภอ/ตำบลมาตรฐาน (Province Load)
ai-report-sql, ai-report-analyze, ai-bank-reconcile, ai-audit-copilot, ai-smart-reorder, ai-auto-gl ไม่มีรายการใน routeRights จึงตกเป็น Admin (permission.go:130-133; อนุมานจากโค้ด ไม่ได้ทดสอบ runtime) ai_copilot.go ผู้ช่วย AI แบบกฎคำนวณ 6 ตัว (AI Copilot ai-*)
journal-list (read), journal-pass (write), gl-check (read), gl-close (Admin) ตามวงเล็บ workflow.go:442,480,554,817 กลุ่มบัญชีแยกประเภท (นอกขอบเขตโน้ตชุดนี้ ดู ภาพรวมระบบบัญชี SML AI Account (Accounting Overview))
fa-depreciation, asset-sale write หรือ del ตาม body (delete/op) fa_depreciation.go:794, fa_sale.go:382 กลุ่มสินทรัพย์ถาวร (นอกขอบเขตโน้ตชุดนี้)

สิทธิ์ทั้งหมดอธิบายที่ การตรวจสิทธิ์เมนูของ route process (Process route rights)

ตัวช่วยร่วมใน workflow.go (ใช้ซ้ำทั่วทั้งกลุ่ม process)

หน้าจอตรวจสอบ log (audit-list, AuditList :976)

  • Input: kind (login | menu | trans | master | full), dateFrom, dateTo (YYYY-MM-DD บังคับ), search (ไม่เกิน 100 ตัวอักษร)
  • แต่ละ kind มี SELECT คงที่ใน auditQueries (workflow.go:957-973):
    • login: ตาราง logs ที่ function_type = 0
    • menu: logs ที่ function_type = 1
    • trans: logs ที่ function_type = 2 (ได้ log จากกระบวนการต่าง ๆ รวมเอกสาร)
    • master: master_logs (แปลง data2/data1 เป็นข้อความ UTF-8 เป็นข้อมูลเก่า/ใหม่)
    • full: ตาราง erp_logs; ถ้าฐานนี้ไม่มี erp_logs.doc_no ตอบ note ว่า SML เก็บไว้ในฐานข้อมูล logs แยก ไม่มีแถว
  • ค้นหา search เป็น ILIKE %คำ% (escape \ % _ ก่อน) บนคอลัมน์ที่กำหนดต่อ kind (ผู้ใช้, เครื่อง, เมนู, เลขเอกสาร, รหัส)
  • เรียง date_time DESC จำกัด 5000 แถว; ผลเป็น columns[] ตามลำดับ SELECT และ rows[] แผนที่คอลัมน์ -> ข้อความ (scanStringRows)
  • สิทธิ์ Admin เพราะ log มีข้อมูลทุกผู้ใช้

ที่มาในโค้ด

  • backend/internal/adapter/inbound/http/process/workflow_handler.go:18-176 - Workflow (case ละ action: :38 change-code ... :159 ai-auto-gl)
  • backend/internal/adapter/inbound/http/router.go:164,205 - ผูก /workflow/{action} ในกลุ่ม route ของ /process และ /api/v1/process
  • backend/internal/adapter/inbound/http/process/permission.go:36,45,50,51,96-122,130 - สิทธิ์ต่อ action
  • backend/internal/application/process/workflow.go:25-89 - ตัวช่วยร่วม
  • backend/internal/application/process/workflow.go:936-1017 - AuditList และ auditQueries

ดูเพิ่ม