Volume 12 · Business Logic & Workflows
เล่มนี้เจาะลึก business logic ของระบบ VTRC — state machine, approval chain, การคำนวณ และเงื่อนไขทางธุรกิจของแต่ละ domain (leave, welfare, fund, payroll, study, ...)
เล่มนี้คืออะไร
Volume 12 ตอบคำถาม "ระบบทำงานอย่างไร" ในระดับ business rule — ไม่ใช่แค่ "เรียก API อะไร" (อยู่ใน Volume 11) แต่เจาะว่า
- เอกสารการลาเปลี่ยนสถานะอย่างไร ใครเป็นคนอนุมัติ กี่ขั้น
- การเบิกค่ารักษาพยาบาลคำนวณยอดเบิกได้อย่างไร จ่ายเงินผ่านช่องทางใด
- กองทุนสงเคราะห์คำนวณเงินสมทบอย่างไร เปลี่ยนอัตราได้เมื่อใด
- สลิปเงินเดือนและภ.ง.ด. ถูกสร้างและเข้ารหัสอย่างไร
หลักการสำคัญ — logic กระจายอยู่ 2 ระบบ
ระบบ VTRC แบ่งการทำงาน business logic ออกเป็น 2 ส่วน:
| ระบบ | ทำหน้าที่ |
|---|---|
| vtrc-api | workflow engine — เก็บ status, history, จัดการ approval chain, ส่ง notification, สร้างเอกสาร (PDF/Excel) |
| cu-central-api | HR data + calculation — คำนวณยอดลาคงเหลือ, สิทธิ์การเบิก, ข้อมูลเงินเดือน, ภาษี, ข้อมูลสมาชิกกองทุน |
ข้อสังเกตสำคัญ — vtrc-api ไม่ได้คำนวณตัวเลขสำคัญเองเลย เช่น วันลาคงเหลือ, สิทธิ์เบิก, ภาษี, เงินสมทบ — ตัวเลขเหล่านี้ถูกส่งต่อไป cu-central-api ทั้งหมด
ตัวเลขที่ควรจำ
| ตัวเลข | ค่า | ที่มา |
|---|---|---|
| Domain ที่มี workflow | 5 | Leave, Welfare, Fund, Study, Auth |
| State machine ที่ซับซ้อนที่สุด | WDHospital | 10 สถานะ |
| Multi-level approval | Leave | สูงสุด N ขั้น (ตาม config) |
| Single-level approval | Welfare, Fund, Study | 1 ขั้น |
| Cron jobs ที่ทำงาน | 3 | fund rate, delegate expire, stat log |
| Cron jobs ที่ถูกปิด | 1 | auto-cancel leave (0734) |
| Notification channels | 3 | in-app, push (FCM), public device |
| Cross-service calls | 12+ | vtrc-api → cu-central-api |
| ไฟล์ controller ที่ใหญ่ที่สุด | hospital.js | ~3,200 บรรทัด |
โครงสร้างบท
| บท | ชื่อ | คำถามที่ตอบ |
|---|---|---|
| 11.1 | Workflow pattern ร่วม | ทุก domain ใช้โครงสร้างเดียวกันอย่างไร |
| 11.2 | Leave (การลา) | state machine, multi-level approval, balance check |
| 11.3 | Welfare / WDHospital | 10-state machine, payment export 3 ระบบ |
| 11.4 | Payroll / Payslip / Tax | PDF + qpdf + signed URL |
| 11.5 | Provident Fund | member lifecycle, rate change window |
| 11.6 | Study Leave | composite model + transaction |
| 11.7 | Authentication & Registration | login LDAP, registration, OTP |
| 11.8 | Delegate & Role | มอบอำนาจอนุมัติแทน |
| 11.9 | Notification system | event → channel → audience |
| 11.10 | Publication + Conicle + Cron | post/document publish, Conicle SSO, cron jobs |
| 11.11 | Scorecard + known bugs + magic numbers | bug ที่พบ, dead code, แนวทางปรับปรุง |
สิ่งที่ Volume นี้ไม่ cover
- API endpoint reference — อยู่ใน Volume 11
- DB schema + ERD — อยู่ใน Volume 9
- Security vulnerability — อยู่ใน Volume 10
- Deployment / infrastructure — อยู่ใน Volume 13 (ยังไม่ได้เขียน)
- Frontend interaction — อยู่ใน Volume 7 และ Volume 8
หมายเหตุเรื่อง path notation
ทุก file:line reference ใช้ path relative จาก src/ ของ vtrc-api:
| Service | Base path |
|---|---|
| vtrc-api | vtrc-api/api/src/ |
| cu-central-api | cu-central-api/main-api/src/ |
ตัวอย่าง: lib/controllers/hrmi/hrmi.js:1219 หมายถึง vtrc-api/api/src/lib/controllers/hrmi/hrmi.js บรรทัดที่ 1219