Files
admin 0240d80da5
CI / CD Pipeline / build (push) Successful in 6m1s
CI / CD Pipeline / deploy (push) Failing after 6m42s
690514:2019 204-rfa-approval-refactor #01
2026-05-14 20:19:21 +07:00

30 KiB

Feature Specification: RFA Approval System Refactor (TeamBinder/InEight-Style)

Feature Branch: 204-rfa-approval-refactor Created: 2026-05-11 Status: Draft Input: User description: "refactor ระบบการอนุมัติเอกสาร, RFA ให้เหมือนกับ TeamBinder หรือ InEight"


Overview

ปรับปรุงระบบการอนุมัติเอกสาร RFA (Request for Approval) ให้มีความยืดหยุ่นและครบถ้วนตามมาตรฐานระดับสูงของอุตสาหกรรมก่อสร้าง (TeamBinder, InEight) รองรับการทำงานแบบ Multi-Disciplinary Review, Response Codes มาตรฐาน, และ Distribution Matrix อัตโนมัติ


User Scenarios & Testing

User Story 1 - Review Teams by Discipline (Priority: P1)

ผู้จัดการโครงการสามารถกำหนดกลุ่มผู้ตรวจสอบ (Review Teams) ตามสาขาวิชา (Disciplines) แทนการระบุรายบุคคล เพื่อให้การมอบหมายงานยืดหยุ่นและรวดเร็ว

Why this priority: ฟีเจอร์หลักที่แยกระบบปัจจุบันกับมาตรฐานอุตสาหกรรม - ช่วยลดเวลาในการกำหนดผู้ตรวจสอบและรองรับการเปลี่ยนแปลงบุคคลในโครงการ

Independent Test: สามารถทดสอบโดยสร้าง Review Team ที่มีหลาย Disciplines และส่ง RFA เข้า workflow - ระบบต้องสามารถมอบหมายให้ทุก Discipline พร้อมกันได้

Acceptance Scenarios:

  1. Given ผู้ใช้มีสิทธิ์จัดการ Review Teams, When สร้าง Review Team ใหม่ชื่อ "Structural Review Team" พร้อมกำหนด Disciplines: Structural, Civil, Then ระบบบันทึกทีมและสามารถใช้กับ RFA ได้
  2. Given RFA ถูกส่งเข้า workflow และใช้ Review Team ที่มี 3 Disciplines, When ระบบประมวลผล, Then สร้าง Review Tasks สำหรับแต่ละ Discipline พร้อมกัน
  3. Given Reviewer ในทีมเปลี่ยนตำแหน่งหรือลาออก, When Admin อัปเดตสมาชิกใน Review Team, Then RFA ที่รออยู่ต้องอัปเดตผู้รับผิดชอบโดยอัตโนมัติ

User Story 2 - Response Codes & Sub-Status (Priority: P1)

วิศวกรสามารถเลือก Response Code มาตรฐาน (1A, 1B, 1C, 2, 3, 4) พร้อม Sub-Status ที่บ่งบอกความหมายเฉพาะทาง เพื่อสื่อสารสถานะงานได้ชัดเจนและสอดคล้องกับมาตรฐานอุตสาหกรรม

Why this priority: ปรับปรุงการสื่อสารระหว่างฝ่ายต่างๆ ลดความกำกวมในการอนุมัติ และสนับสนุนการทำ Final Acceptance Certificate (FAC)

Independent Test: สามารถทดสอบโดยเปิดหน้าอนุมัติ RFA และตรวจสอบว่า Response Codes แสดงตาม Category ของเอกสาร - เลือก Code 1C ต้องมีการแจ้งเตือนฝ่ายสัญญา

Acceptance Scenarios:

  1. Given RFA ประเภท Shop Drawing, When Reviewer เปิดหน้าอนุมัติ, Then แสดงเฉพาะ Response Codes ที่เกี่ยวข้องกับ Engineering/Drawings (1A-1G, 2, 3, 4)
  2. Given Reviewer เลือก Code 1C (Change Order) หรือ 1D (Alternative), When บันทึกการอนุมัติ, Then ระบบส่งแจ้งเตือนไปยังฝ่ายสัญญา/BOQ อัตโนมัติ
  3. Given RFA ได้รับ Code 2 (Approved as Noted), When ดูรายงานสถานะ, Then แสดงสถานะ "Approved with Minor Comments" พร้องานที่ต้องแก้ไข

User Story 3 - Delegation & Proxy (Priority: P2)

ผู้ตรวจสอบสามารถมอบหมายอำนาจ (Delegate) ให้ผู้อื่นทำงานแทนเมื่อไม่อยู่หรือไม่สะดวก โดยกำหนดระยะเวลาและขอบเขตอำนาจได้

Why this priority: ป้องกันการคั่งค้างของ workflow เมื่อผู้ตรวจสอบไม่ว่าง รองรับการทำงานแบบ Hybrid/Remote

Independent Test: สามารถทดสอบโดยผู้ใช้ A ตั้งค่า Delegate ให้ผู้ใช้ B แล้วส่ง RFA มา - ผู้ใช้ B ต้องเห็นงานใน Inbox และสามารถอนุมัติแทนได้

Acceptance Scenarios:

  1. Given ผู้ใช้ต้องการลาพักร้อน 1 สัปดาห์, When ตั้งค่า Delegation ให้ colleague พร้อมระบุวันที่เริ่ม-สิ้นสุด, Then งานที่ส่งมาระหว่างนี้ไปที่ Delegatee โดยอัตโนมัติ
  2. Given มีงาน RFA รออยู่ใน Inbox และผู้ใช้ตั้งค่า Delegation ไว้, When มีการส่งงานใหม่เข้ามา, Then ระบบมอบหมายให้ Delegatee พร้อมแสดงว่าเป็น "Delegated from [Original User]"
  3. Given Delegation หมดอายุ, When มีงานใหม่ส่งมา, Then งานกลับมาที่ผู้ใช้เจ้าของงานเดิม และยกเลิกสิทธิ์ Delegatee

User Story 4 - Auto-Reminders & Escalation (Priority: P2)

ระบบส่งการแจ้งเตือนอัตโนมัติเมื่องานใกล้ครบกำหนด และส่งขึ้นระดับ (Escalate) เมื่อเกินกำหนด ตาม SLA ที่กำหนดไว้

Why this priority: ลดความล่าช้าใน workflow และปรับปรุง on-time delivery rate ของเอกสาร

Independent Test: สามารถทดสอบโดยสร้าง RFA ที่มี Due Date ในอีก 1 วัน และตรวจสอบว่าระบบส่ง Reminder ตามที่ตั้งค่าไว้

Acceptance Scenarios:

  1. Given RFA มี Due Date ในอีก 2 วัน, When ถึงเวลา 9:00 ของวันที่ตั้งค่า Reminder, Then ส่งอีเมล/แจ้งเตือนไปยังผู้รับผิดชอบ
  2. Given RFA เกินกำหนด 1 วัน, When ถึงเงื่อนไข Escalation, Then ส่งแจ้งเตือนไปยัง Manager ของผู้รับผิดชอบ พร้อมสถานะ Overdue
  3. Given Admin ตั้งค่า Reminder Frequency เป็น "Daily" สำหรับงาน Overdue, When งานค้างเกินกำหนด, Then ส่ง Reminder ทุกวันจนกว่าจะดำเนินการ

User Story 5 - Distribution Matrix (Priority: P2)

ระบบกระจายเอกสารอัตโนมัติไปยังผู้ที่เกี่ยวข้องหลังจาก RFA ได้รับการอนุมัติ ตาม Distribution Matrix ที่กำหนดไว้ตามประเภทเอกสารและ Response Code

Why this priority: ลด manual work ในการส่งเอกสารต่อ ป้องกันการส่งตกหล่น และสนับสนุนการทำ Transmittal อัตโนมัติ

Independent Test: สามารถทดสอบโดยอนุมัติ RFA ที่มี Distribution Matrix แล้วตรวจสอบว่าเอกสารถูกส่งไปยังผู้รับที่กำหนดใน Matrix โดยอัตโนมัติ

Acceptance Scenarios:

  1. Given RFA ประเภท Shop Drawing ได้รับ Code 1A (Full Approval), When อนุมัติสำเร็จ, Then ระบบส่งเอกสารไปยัง Site Team, QS, และ Document Control ตาม Distribution Matrix
  2. Given Distribution Matrix มีเงื่อนไข "Send only if Code = 1A, 1B, or 2", When RFA ได้รับ Code 3 (Rejected), Then ไม่ส่งเอกสารตาม Matrix (แจ้งเฉพาะผู้ส่ง)
  3. Given Admin อัปเดต Distribution Matrix เพิ่มผู้รับใหม่, When RFA ถัดไปได้รับการอนุมัติ, Then ส่งเอกสารไปยังผู้รับใหม่ด้วย

User Story 6 - Master Approval Matrix Management (Priority: P3)

ผู้ดูแลระบบสามารถจัดการ Master Approval Matrix ที่เป็นมาตรฐานขององค์กร แยกตามหมวดงานและสถานะย่อย ให้ใช้งานทั่วทั้งโครงการ

Why this priority: มาตรฐานการอนุมัติให้สอดคล้องกับบริษัทและอุตสาหกรรม ลดความสับสนในการใช้ Response Codes

Independent Test: สามารถทดสอบโดยสร้าง Master Approval Matrix ใหม่ และตรวจสอบว่า RFA แสดง Response Codes ตาม Matrix ที่กำหนด

Acceptance Scenarios:

  1. Given Admin ต้องการสร้างมาตรฐานใหม่สำหรับโครงการก่อสร้างสะพาน, When สร้าง Master Approval Matrix พร้อมกำหนดหมวดงานและ Sub-status, Then สามารถใช้กับโครงการที่เลือกได้
  2. Given Master Approval Matrix ถูกใช้งานในโครงการหลายแห่ง, When Admin แก้ไข Matrix, Then ระบบแสดง Warning ว่าจะมีผลกับโครงการที่ใช้งานอยู่

Edge Cases

  1. Race Condition: สอง Reviewer ในทีมเดียวกันกดอนุมัติพร้อมกัน - ระบบต้องจัดการด้วย Optimistic Locking หรือ Redlock
  2. Circular Delegation: ผู้ใช้ A Delegate ให้ B, B Delegate ให้ C, C พยายาม Delegate ให้ A - ระบบต้องตรวจจับและป้องกัน
  3. Expired Review Task: Review Task ค้างนานเกินกำหนดและถูก Reassign - ต้องบันทึกประวัติการเปลี่ยนแปลง
  4. Invalid Response Code: Reviewer พยายามใช้ Response Code ที่ไม่สอดคล้องกับ Category ของเอกสาร - ระบบต้องแสดงข้อผิดพลาดและไม่บันทึก
  5. Concurrent Review: หลาย Disciplines ต้อง Review พร้อมกัน แต่มี Discipline หนึ่งปฏิเสธ - ต้องหยุด workflow และแจ้งผู้ส่ง

Requirements

Functional Requirements

Review Teams & Disciplines

  • FR-001: ระบบ MUST รองรับการสร้าง Review Teams ที่มีหลาย Disciplines
  • FR-002: Review Teams MUST สามารถกำหนดเป็น Default ตามประเภท RFA ได้
  • FR-002.1: เมื่อมีการส่ง Revision ใหม่ของ RFA เดิม, ระบบ MUST ดึงรายชื่อ Review Team และ Disciplines จาก Revision ล่าสุดมาเป็น Default เพื่อความต่อเนื่อง (Inherit Previous Team) แต่ผู้ส่งยังคงสามารถปรับเปลี่ยนได้หากจำเป็น
  • FR-003: เมื่อ RFA เข้า workflow ที่ใช้ Review Team, ระบบ MUST สร้าง Review Tasks สำหรับแต่ละ Discipline พร้อมกัน (Parallel Review)
  • FR-004: Review Tasks MUST แสดงสถานะรวม (Aggregate Status) เช่น "2 of 3 Disciplines Approved"
  • FR-004.5: Parallel Review MUST ใช้กฎ Lead Consolidation - ระบบอนุญาตให้ทุก Disciplines ตรวจสอบจนครบ โดยที่ Lead Discipline จะเป็นผู้พิจารณาความเห็นจากทุกฝ่ายและเป็นผู้สรุปสถานะสุดท้าย (Final Response Code) ของ RFA นั้นๆ
  • FR-004.6: ในระหว่าง Parallel Review, Reviewers ทุกคน MUST สามารถเห็นคอมเมนต์และสถานะเบื้องต้นของกันและกันได้ (Full Transparency) เพื่อช่วยในการประสานงานข้ามสายงาน (Cross-discipline coordination)

Response Codes & Master Approval Matrix

  • FR-005: ระบบ MUST ใช้ Master Approval Matrix ตามมาตรฐานที่กำหนด
  • FR-006: Response Codes MUST แสดงตาม Category ของเอกสาร (Engineering, Material, Contract, Testing, ESG) และระบบ MUST จำกัดตัวเลือก (Filter) ให้ทั้ง Reviewer และ Lead เห็นเฉพาะโค้ดที่อยู่ในหมวดหมู่นั้นๆ เท่านั้น
  • FR-006.1: หาก Final Response Code มีผลกระทบต่อ Cost หรือ Schedule (ตาม Matrix), ระบบ MUST ทำการ Flag และแจ้งเตือนบน Management Dashboard ทันที เพื่อให้ฝ่ายบริหารดำเนินการต่อภายนอกระบบได้ทันท่วงที
  • FR-007: Code 1C (Change Order), 1D (Alternative), 3 (Rejected) MUST trigger การแจ้งเตือนไปยังฝ่ายที่เกี่ยวข้องโดยอัตโนมัติ
  • FR-008: ระบบ MUST บันทึกประวัติการเปลี่ยน Response Code (Audit Trail)
  • FR-009: Reviewer MUST สามารถเพิ่ม Comments พร้อม Response Code ได้

Delegation & Proxy

  • FR-010: ผู้ใช้ MUST สามารถตั้งค่า Delegation ได้ พร้อมกำหนดระยะเวลาเริ่มต้น-สิ้นสุด
  • FR-011: Delegation MUST รองรับการกำหนด Scope (เฉพาะบางประเภทเอกสาร หรือทั้งหมด)
  • FR-012: ระบบ MUST ตรวจจับและป้องกัน Circular Delegation และไม่อนุญาตให้มีการมอบหมายงานต่อ (Sub-delegation) ในระดับผู้ใช้งานปกติ (Single Level Only) ยกเว้น Admin ที่มีสิทธิ์ในการ Reassign หรืองานจัดการมอบหมายงานใหม่ได้เสมอ
  • FR-013: เมื่อ Delegation หมดอายุ, งานใหม่ MUST กลับไปยังผู้ใช้เดิมโดยอัตโนมัติ
  • FR-014: Delegatee MUST เห็นงานที่ได้รับมอบหมายแยกจากงานของตนเอง (Badge "Delegated")

Auto-Reminders & Escalation

  • FR-015: ระบบ MUST ส่ง Reminder ตาม Schedule ที่กำหนด (1 วันก่อน Due, วัน Due, ทุกวันหลัง Due)
  • FR-016: Escalation MUST ดำเนินการแบบลำดับชั้น (L1 -> L2) โดยที่แต่ละระดับจะมีการแจ้งเตือน 3 ครั้งก่อนจะยกระดับขึ้นไปตามเกณฑ์ที่ตั้งไว้ และเมื่อถึงระดับสูงสุด (L2) ระบบ MUST ส่งแจ้งเตือนรายวัน (Daily) จนกว่าจะมีการดำเนินการ
  • FR-016.1: ระบบ MUST บันทึกประวัติการ Escalation และการตอบสนองของผู้บริหารใน Audit Trail
  • FR-017: Admin MUST สามารถตั้งค่า Reminder Rules ต่อโครงการ/ประเภทเอกสารได้
  • FR-018: ระบบ MUST บันทึกประวัติการส่ง Reminder (ส่งเมื่อไหร่, ใครได้รับ)

Frontend Workflow Visualization

  • FR-019.1: Parallel Review MUST แสดงผลด้วย Horizontal Stepper - แถบความคืบหนันแนวนอนแสดงสถานะแต่ละ Discipline [Structural ▓▓▓░] [Civil ▓▓▓▓] [MEP ▓░░░]
  • FR-019.2: เมื่อมี Code 3 (Rejected) จาก Discipline ใด MUST แสดง Modal Dialog แจ้งการ Veto พร้อมรายละเอียด Discipline ที่ reject
  • FR-019.3: Navigation ระหว่าง Discipline details MUST ใช้ Side Panel layout - ซ้ายรายการ Disciplines, ขวาแสดงรายละเอียด Comments + Attachments ของ Discipline ที่เลือก
  • FR-019.4: Project Manager MUST สามารถ Override Veto ได้ - บังคับผ่าน RFA แม้มี Code 3 จาก Discipline พร้อมบันทึกเหตุผล, Audit trail ว่าเป็น forced approval, และแจ้งเตือนทุก stakeholder ที่เกี่ยวข้อง

Distribution Matrix

  • FR-019: Distribution Matrix MUST กำหนดผู้รับตาม: ประเภทเอกสาร + Response Code + สถานะเอกสาร และระบบ MUST อนุญาตให้ผู้สรุปผล (Lead/PM) เพิ่มผู้รับเพิ่มเติมแบบ Manual ได้ก่อนการส่งออกเฉพาะครั้งนั้นๆ
  • FR-020: ระบบ MUST สร้าง Transmittal Records อัตโนมัติหลังการอนุมัติตาม Distribution Matrix ผ่าน BullMQ Queue (Async, ภายใน 5 นาที)
  • FR-021: Distribution Matrix MUST รองรับเงื่อนไข "Send Only If" (เช่น Code 1A, 1B เท่านั้น)
  • FR-022: ระบบ MUST แสดงรายงาน Distribution Status (ส่งแล้วกี่ราย, ค้างกี่ราย)

Integration with Existing Systems

  • FR-023: ต้องใช้ Unified Workflow Engine (ADR-001) ที่มีอยู่แล้ว
  • FR-024: ต้องใช้ BullMQ (ADR-008) สำหรับ Reminders และ Distribution Jobs
  • FR-025: ต้องใช้ CASL (ADR-016) สำหรับสิทธิ์ Reviewer และ Delegation

Key Entities

ReviewTeam

  • ตัวแทนกลุ่มผู้ตรวจสอบที่จัดการตามสาขาวิชา
  • Attributes: name, description, projectId, defaultForRfaTypes, isActive
  • Relationships: has many ReviewTeamMember, has many ReviewTask

ReviewTeamMember

  • สมาชิกใน Review Team พร้อม Discipline ที่รับผิดชอบ
  • Attributes: teamId, userId, disciplineId, role, priorityOrder
  • Relationships: belongs to ReviewTeam, belongs to User, belongs to Discipline

ReviewTask

  • งานตรวจสอบที่สร้างเมื่อ RFA เข้า workflow
  • Attributes: rfaRevisionId, teamId, disciplineId, assignedToUserId, status, dueDate, responseCode, comments
  • Relationships: belongs to RfaRevision, belongs to ReviewTeam

ResponseCodeMatrix

  • Master Approval Matrix ที่กำหนด Response Codes ตาม Category
  • Attributes: code, subStatus, category, descriptionTh, descriptionEn, implications, requiresNotificationTo
  • Relationships: has many ResponseCodeRule

ResponseCodeRule

  • กฎการใช้ Response Code ตามประเภทเอกสาร
  • Attributes: matrixId, documentTypeId, isEnabled, requiresComments, triggersNotification

Delegation

  • การมอบหมายอำนาจจากผู้ใช้หนึ่งไปอีกผู้ใช้
  • Attributes: delegatorId, delegateeId, startDate, endDate, scope, documentTypes, isActive
  • Relationships: belongs to User (delegator), belongs to User (delegatee)

ReminderRule

  • กฎการส่ง Reminder ตาม SLA
  • Attributes: name, projectId, documentTypeId, triggerDays, reminderType, recipients, messageTemplate
  • Relationships: has many ReminderSchedule

DistributionMatrix

  • กำหนดการกระจายเอกสารหลังอนุมัติ
  • Attributes: name, documentTypeId, responseCode, status, recipients, conditions, isActive
  • Relationships: has many DistributionRecipient

DistributionRecipient

  • ผู้รับเอกสารใน Distribution Matrix
  • Attributes: matrixId, recipientType (USER/ORGANIZATION/TEAM), recipientId, deliveryMethod

Success Criteria

Measurable Outcomes

  • SC-001: ผู้ใช้สามารถกำหนด Review Team ได้ในเวลาน้อยกว่า 2 นาที (เทียบกับระบบเดิมที่ต้องเลือกรายบุคคล)
  • SC-002: Response Code ถูกใช้งานได้ถูกต้อง 95%+ ของเวลาทั้งหมด (ลดการใช้ผิดประเภท)
  • SC-003: ลดเวลาในการอนุมัติ RFA โดยเฉลี่ย 30% จากการใช้ Parallel Review และ Response Codes ที่ชัดเจน
  • SC-004: 0% ของเอกสารที่ค้างงานเนื่องจากผู้ตรวจสอบไม่อยู่ (ใช้ Delegation)
  • SC-005: 100% ของเอกสารที่อนุมัติถูกกระจายตาม Distribution Matrix โดยไม่ต้อง manual intervention
  • SC-006: On-time delivery rate ของ RFA ปรับปรุงจาก baseline เป็นอย่างน้อย 85%
  • SC-007: ผู้ใช้พึงพอใจกับระบบอนุมัติใหม่ (NPS > 40)

Clarifications

Session 2026-05-13

  • Q1: Parallel Review consensus model for conflicting decisions? → A: Lead Consolidation - Allow all disciplines to complete their review, then the Lead Discipline consolidates all comments and makes the final decision.
  • Q2: Delegation Depth and sub-delegation rules? → A: Single Level Only (No sub-delegation) for regular users, but Admin retains full override power to reassign or manage delegations as needed.
  • Q3: Manual overrides in Distribution Matrix? → A: Flexible Recipients - Allow Lead/PM to manually add additional recipients during the final approval step for a specific RFA.
  • Q4: Escalation Cycle and notification frequency? → A: 3-Strike Escalation - Notify current escalation level 3 times before moving up to the next level (Progressive). Once the highest level (L2) is reached, send daily reminders until resolved.
  • Q5: Transparency between Disciplines during Parallel Review? → A: Full Transparency - All reviewers can see each other's comments and partial results in real-time.
  • Q6: Handling Cost/Schedule Implications from Response Codes? → A: Dashboard Flagging - Record the impact and notify management via dashboard/reporting without blocking the RFA flow.
  • Q7: Review Team persistence on resubmissions? → A: Inherit Previous Team - Automatically default to the same team and disciplines from the previous version for continuity.
  • Q8: Response Code visibility constraints for Reviewers? → A: Category Scoped - Filter the available codes based on the RFA category for both Reviewers and Leads to ensure consistency.

Session 2026-05-11

  • Q1: Master Approval Matrix scope and inheritance model? → A: Global base + Project overrides - Default Matrix inherited organization-wide, projects can override specific codes/rules as needed (Option B)
  • Q2: Parallel Review consensus model when Disciplines have conflicting decisions? → A: Lead Consolidation (Updated 2026-05-13) - Formerly Majority with Veto.
  • Q3: Escalation chain depth for overdue RFA reviews? → A: 2 levels - Direct manager first, then Project Manager/Director if still unresolved after additional delay (Option B)
  • Q4: Distribution Matrix execution timing relative to approval? → A: Async after approval - Approval returns immediately, distribution queued via BullMQ and processed automatically within 5 minutes (Option C)
  • Q5: Frontend pattern for displaying Parallel Review progress? → A: Horizontal Stepper - แถบความคืบหนันแนวนอนแสดงสถานะแต่ละ Discipline (Option A)
  • Q6: How to display Veto/Consensus status เมื่อมีการ Reject? → A: Modal Dialog - Popup แจ้งเมื่อมีการ Reject พร้อมรายละเอียด Discipline ที่ระบุ (Option B)
  • Q7: Navigation pattern between Discipline details for Reviewer? → A: Side Panel - ซ้ายรายการ Disciplines, ขวาแสดงรายละเอียดที่เลือก (Option D)
  • Q8: Can a decision be overridden and by whom? → A: Project Manager Override - PM สามารถบังคับผ่านการตัดสินใจของ Lead ได้ พร้อมบันทึกเหตุผล และแจ้งเตือนทุก stakeholder (Option B)

Assumptions

  1. ผู้ใช้มีความคุ้นเคยกับ Response Codes มาตรฐานอุตสาหกรรม - จำเป็นต้องมี Training Material ประกอบ
  2. โครงสร้าง Discipline Master Data มีอยู่แล้ว - ใช้จากระบบ User Management ที่มีอยู่
  3. Unified Workflow Engine (ADR-001) มีความสามารถรองรับ Parallel Tasks - อาจต้องปรับปรุง DSL
  4. BullMQ Infrastructure พร้อมใช้งาน - สำหรับ Reminders และ Background Jobs

Dependencies

  • ADR-001: Unified Workflow Engine (ต้องรองรับ Parallel Review Tasks)
  • ADR-008: BullMQ Notification Strategy
  • ADR-016: CASL Authorization (สำหรับ Reviewer สิทธิ์)
  • ADR-019: UUID Strategy (สำหรับ Entities ใหม่)
  • ADR-021: Workflow Context (สำหรับ Step Attachments)
  • Existing: Discipline, User, Organization Master Data

Risks & Mitigations

Risk Impact Mitigation
ผู้ใช้ไม่คุ้นเคยกับ Response Codes ใหม่ High ทำ Training Workshop พร้อม Quick Reference Guide
Workflow Engine ไม่รองรับ Parallel Review High ประเมิน DSL ก่อนเริ่ม, อาจต้อง Refactor Engine
Performance ช้าจาก Complex Matrix Lookup Medium ทำ Caching สำหรับ Matrix และ Rules
Circular Delegation ซับซ้อน Low Validation ตั้งแต่ต้น, Limit depth ของ chain