diff --git a/specs/01-requirements/03.11-document-numbering.md b/specs/01-requirements/03.11-document-numbering.md index 3cba5ad..f4e676d 100644 --- a/specs/01-requirements/03.11-document-numbering.md +++ b/specs/01-requirements/03.11-document-numbering.md @@ -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