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,21 @@
// File: docs/ai-knowledge-base/playbooks/core/context-recovery.md
# Playbook: AI Context Recovery (ฟื้นฟูบริบทการทำงาน)
## 🚨 เมื่อไหร่ที่ต้องใช้?
- เมื่อเริ่ม Session ใหม่กับ AI
- เมื่อ AI เริ่มให้คำตอบที่หลุดออกจากมาตรฐานโครงการ
- เมื่อมีการข้ามเฟสการทำงานขนาดใหญ่
## 🏗️ Steps for Recovery
1. **Initialize Standards**: สั่งให้ AI อ่าน `docs/ai-knowledge-base/prompts/core/master-prompt.md`
2. **Scan Current Module**: ระบุโมดูลที่กำลังทำงาน และให้ AI อ่านไฟล์ใน `specs/` ที่เกี่ยวข้อง
3. **Verify DB State**: ให้ AI อ่านไฟล์ Schema ล่าสุดเพื่อยืนยันโครงสร้างตาราง
4. **Task Alignment**: ตรวจสอบไฟล์ `tasks.md` ของฟีเจอร์นั้นๆ เพื่อหาจุดที่ทำค้างไว้
5. **Conflict Resolution**: หาก AI พบว่าโค้ดปัจจุบันขัดกับ Specs ให้ทำการแก้ไขทันที
## 🚀 Recovery Command (Prompt)
"โปรดอ่าน Master Prompt และตรวจสอบสถานะปัจจุบันของโมดูล [ชื่อโมดูล] จากไฟล์ Specs และ Tasks เพื่อเตรียมตัวเริ่มงานต่อจากจุดที่ค้างไว้"
---
// Change Log:
// - 2026-05-14: Initial context recovery playbook
@@ -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
@@ -0,0 +1,16 @@
// File: docs/ai-knowledge-base/playbooks/infra/omada-vlan-recovery.md
# Playbook: Omada VLAN Recovery
## 🚨 Scenario
VLAN ใช้งานไม่ได้ หรือ Client ไม่สามารถรับ IP ได้หลังจากมีการเปลี่ยน Config
## 🛠️ Recovery Steps
1. **Check Controller Connection**: ตรวจสอบว่า Omada Controller ยังออนไลน์อยู่หรือไม่
2. **Revert Last Change**: หากจำได้ ให้ Revert การตั้งค่าล่าสุดทันที
3. **Switch Log Audit**: เข้าไปดู Log ของ Switch ในหน้า Omada เพื่อหา Error (e.g. Loop Detected)
4. **Port Profile Verification**: ตรวจสอบว่า Port ที่ Client ต่ออยู่ ใช้ Profile VLAN ที่ถูกต้อง
5. **Re-adopt Device**: หาก Switch สถานะเป็น "Disconnected" ให้ลองทำการ Re-adopt หรือ Restart Switch
---
// Change Log:
// - 2026-05-14: Initial Omada recovery playbook
@@ -0,0 +1,16 @@
// File: docs/ai-knowledge-base/playbooks/infra/switch-reset-safe.md
# Playbook: Safe Switch Reset & Re-adoption
## 🎯 Objective
การทำ Factory Reset และทำการ Adopt ใหม่ใน Omada Controller โดยไม่ให้ระบบล่มเป็นเวลานาน
## 🏗️ Steps
1. **Backup Config**: ตรวจสอบว่ามี Backup ของ Omada Controller ล่าสุดหรือไม่
2. **Physical Reset**: กดปุ่ม Reset ที่ตัว Switch ค้างไว้จนไฟกะพริบ
3. **Omada Discovery**: รอจน Switch ปรากฏขึ้นมาในสถานะ "Pending"
4. **Adopt & Provision**: คลิก Adopt และรอให้ Controller ทำการส่ง Config (Provisioning) ไปยัง Switch
5. **VLAN Check**: ตรวจสอบว่า Port ต่างๆ ยังทำงานตาม VLAN Profile เดิมหรือไม่
---
// Change Log:
// - 2026-05-14: Initial safe reset playbook