251202:0000

This commit is contained in:
2025-12-02 06:58:05 +07:00
parent fc0580e14c
commit 9fc7f692d9

View File

@@ -15,37 +15,41 @@ related:
---
## 3.11.1. วัตถุประสงค์:
## 3.11.1. วัตถุประสงค์
- ระบบต้องสามารถสร้างเลขที่เอกสาร (Running Number) ได้โดยอัตโนมัติและยืดหยุ่นสูง
- ระบต้องสามารถกำหนด รูปแบบ(template) เลขที่เอกสารได้ สำหรับแต่ละโครงการ, ชนิดเอกสาร, ประเภทเอกสาร
## 3.11.2. Logic การนับเลข (Counter Logic):
## 3.11.2. Logic การนับเลข (Counter Logic)
- การนับเลขจะต้องรองรับการแยกตาม Key ที่ซับซ้อนขึ้น ตามแต่ละ รูปแบบ(template) ได้
## 3.11.3. Format Template:
## 3.11.3. Format Template
- รองรับการกำหนดรูปแบบด้วย Token Replacement เช่น:
- transmittal to owner: คคง.-สคฉ.3-03-21-0117-2568
- other transmittal: ผรม.2-คคง.-0117-2568
- LCBP3-C2-RFI-ROW-0029-A
- Correspondence type LETTEE คคง.-สคฉ.3-0985-2568
- รองรับการกำหนดรูปแบบด้วย Token Replacement
- transmittal to owner:
- {ORG}-{ORG}-{TYPE}-{SEQ:4}-{YEAR B.D.} -> คคง.-สคฉ.3-03-21-0117-2568
- other transmittal:
- {ORG}-{ORG}-{TYPE}-{SEQ:4}-{YEAR B.D.} -> ผรม.2-คคง.-0117-2568
- RFA:
- {PROJECT}-{ORG}-{TYPE}-{DISCIPLINE}-{SEQ:4}-{REV} -> LCBP3-C2-RFI-ROW-0029-A
- Correspondence type LETTER:
- {ORG}-{ORG}-{TYPE}-{SEQ:4}-{YEAR B.D.} -> คคง.-สคฉ.3-0985-2568
- Correspondence รองรับ Token: {ORG}-{ORG}-{TYPE}-{SEQ:4}-{YEAR B.D.} -> คคง.-สคฉ.3-STR-0001-2568
- RFA รองรับ Token: {PROJECT}-{ORG}-{TYPE}-{DISCIPLINE}-{SEQ:4}-{REV} -> TEAM-RFA-STR-0001-A
- Transmittal รองรับ Token: {PROJECT}-{ORG}-{TYPE}-{DISCIPLINE}-{SEQ:4}-{REV} -> TEAM-TR-STR-0001-A
## 3.11.4. Transmittal Logic:
## 3.11.4. Transmittal Logic
- รองรับเงื่อนไขพิเศษสำหรับ Transmittal ที่เลขอาจเปลี่ยนตามผู้รับ (To Owner vs To Contractor)
## 3.11.5. กลไกความปลอดภัย:
## 3.11.5. กลไกความปลอดภัย
- ยังคงใช้ Redis Distributed Lock และ Optimistic Locking เพื่อป้องกันเลขซ้ำหรือข้าม
## 3.11.6. ต้องมี retry mechanism และ fallback strategy เมื่อการ generate เลขที่เอกสารล้มเหลว
## 3.11.7. Fallback Logic (เพิ่ม):
## 3.11.7. Fallback Logic (เพิ่ม)
- กรณีที่เอกสารประเภทนั้นไม่มี discipline_id หรือ sub_type_id (เป็นค่า NULL หรือไม่ระบุ) ให้ระบบใช้ค่า Default (เช่น 0) ในการจัดกลุ่ม Counter เพื่อป้องกัน Error และรับประกันความถูกต้องของ Running Number (Uniqueness Guarantee)
- Scenario 1: Redis Unavailable