690514:2019 204-rfa-approval-refactor #01
CI / CD Pipeline / build (push) Successful in 6m1s
CI / CD Pipeline / deploy (push) Failing after 6m42s

This commit is contained in:
2026-05-14 20:19:21 +07:00
parent 07cc6d47b1
commit 0240d80da5
183 changed files with 20050 additions and 1017 deletions
@@ -0,0 +1,19 @@
// File: docs/ai-knowledge-base/playbooks/dms/cross-module-linking.md
# Playbook: Cross-Module Linking (การเชื่อมโยงข้อมูลข้ามโมดูล)
## 🎯 Objective
รักษาความถูกต้องและความเชื่อมโยงของข้อมูล (Data Integrity) ระหว่างโมดูลต่างๆ เช่น การผูก RFA เข้ากับ Drawing หรือ Correspondence
## 🏗️ Linking Rules
1. **Use PublicId**: การเชื่อมโยงข้ามโมดูลต้องใช้ `publicId` (UUIDv7) เท่านั้น
2. **Atomic Updates**: หากการเชื่อมโยงส่งผลต่อสถานะของทั้งสองโมดูล ต้องทำภายใน Database Transaction เดียวกัน
3. **Audit Trail**: ต้องบันทึกประวัติการเชื่อมโยง (e.g. "Drawing X linked to RFA Y")
4. **Validation**: ก่อนสร้าง Link ต้องตรวจสอบว่าทั้งสอง Entity มีอยู่จริงและอยู่ในสถานะที่อนุญาตให้เชื่อมโยงได้
## 🛠️ Implementation Example
- **RFA to Drawing**: เมื่อ RFA ได้รับการอนุมัติ ให้ทำการอัปเดตสถานะของ Drawing ที่เกี่ยวข้องโดยอัตโนมัติ
- **Correspondence to Transmittal**: บันทึกว่าจดหมายฉบับนี้ถูกส่งไปพร้อมกับ Transmittal เลขที่เท่าไหร่
---
// Change Log:
// - 2026-05-14: Initial cross-module linking playbook
@@ -0,0 +1,18 @@
// File: docs/ai-knowledge-base/playbooks/dms/drawing-revision-flow.md
# Playbook: Drawing Revision Management
## 🔄 Revision Flow
1. **Initial Upload**: Drawing ถูกอัปโหลดเข้าระบบครั้งแรก (Revision 0 หรือ A)
2. **Review & Approval**: ผ่านกระบวนการ RFA
3. **Revision Up**: เมื่อมีการแก้ไข ให้ผู้ใช้อัปโหลดไฟล์ใหม่โดยอ้างอิง `publicId` เดิม
4. **Auto-Numbering**: ระบบจะเจนเลขที่ Revision ถัดไปตาม Rule (e.g. 0 -> 1 หรือ A -> B)
5. **Supersede**: Revision เก่าจะถูกทำเครื่องหมายเป็น "Superseded" (แต่ไฟล์ยังอยู่สำหรับการตรวจสอบย้อนหลัง)
## 🏗️ Technical Implementation
- ใช้ **Redis Redlock** ในการจองเลขที่ Revision เพื่อป้องกันเลขซ้ำ
- เก็บประวัติทั้งหมดไว้ใน `drawing_revisions` table
- แสดงเฉพาะ Revision ล่าสุด (Current) ในหน้ารายการหลัก ยกเว้นผู้ใช้จะเลือกดู History
---
// Change Log:
// - 2026-05-14: Initial drawing revision playbook
@@ -0,0 +1,27 @@
// File: docs/ai-knowledge-base/playbooks/dms/rfa-lifecycle.md
# Playbook: RFA Lifecycle Management
## 🔄 Lifecycle Stages
1. **Draft**: ผู้สร้างเตรียมเอกสารและอัปโหลดไฟล์
2. **Submitted**: ส่งเข้าระบบเพื่อรอการตรวจสอบ (Review)
3. **Reviewing**: ทีมที่ปรึกษาหรือหน่วยงานที่เกี่ยวข้องตรวจสอบ
4. **Responded**: ให้ความเห็น (Comment) กลับมา
5. **Approved / Rejected**: สถานะสุดท้ายของการอนุมัติ
6. **Closed**: สิ้นสุดกระบวนการ
## 🛡️ Business Rules (ADR-001)
- การเปลี่ยนสถานะต้องใช้ **Workflow Engine** เท่านั้น
- ต้องมีการทำ **Optimistic Locking** ผ่าน `@VersionColumn` เพื่อป้องกันการอนุมัติพร้อมกัน
- ทุกการเปลี่ยนสถานะต้องบันทึก **Audit Log** และ **Workflow History**
- หากมีการอัปโหลดไฟล์ใหม่ ต้องย้ายจาก `temp` ไป `permanent` และสแกน ClamAV
## 🛠️ Implementation Steps
1. ตรวจสอบสิทธิ์ผู้ใช้ผ่าน `CaslGuard`
2. ดึงข้อมูล RFA พร้อมสถานะปัจจุบันจาก DB
3. ตรวจสอบความถูกต้องของสถานะต้นทาง (Source State) และสถานะปลายทาง (Target State)
4. ทำการ Update ใน Database Transaction
5. ส่งการแจ้งเตือนผ่าน `BullMQ`
---
// Change Log:
// - 2026-05-14: Initial RFA lifecycle playbook
@@ -0,0 +1,17 @@
// File: docs/ai-knowledge-base/playbooks/dms/transmittal-process.md
# Playbook: Transmittal Process
## 🔄 Transmittal Workflow
1. **Creation**: DC (Document Control) สร้าง Transmittal และเลือกเอกสาร (Attachments) ที่ต้องการส่ง
2. **Review**: หัวหน้าทีมตรวจสอบความถูกต้องของรายการเอกสาร
3. **Issuance**: ส่งมอบเอกสารอย่างเป็นทางการ (เปลี่ยนสถานะเป็น Issued)
4. **Acknowledgment**: ผู้รับเซ็นรับเอกสารในระบบ (เปลี่ยนสถานะเป็น Received)
## 📋 Standard Actions
- **Generate Cover Sheet**: ระบบสร้าง PDF หน้าปกที่มีรายการเอกสารและ QR Code
- **Link Documents**: เอกสารที่ถูกส่งจะถูกบันทึกความเชื่อมโยง (Link) กับ Transmittal ID
- **Notification**: ส่งอีเมลแจ้งเตือนผู้รับพร้อมลิงก์ดาวน์โหลด
---
// Change Log:
// - 2026-05-14: Initial transmittal process playbook