Files
lcbp3/specs/01-requirements/01-03-modules/01-03-03-rfa.md
T
admin 4cd0952482
CI / CD Pipeline / build (push) Failing after 1m52s
CI / CD Pipeline / deploy (push) Has been skipped
260324:1349 Refactor RFA #01
2026-03-24 13:49:30 +07:00

9.8 KiB
Raw Blame History

3.3 RFA Management (การจัดการเอกสารขออนุมัติ)


title: 'Functional Requirements: RFA Management' version: 1.8.1 status: updated owner: Nattanin Peancharoen last_updated: 2026-03-24 related:

  • specs/01-requirements/01-01-objectives.md
  • specs/01-requirements/01-03-modules/01-03-00-index.md
  • specs/01-requirements/01-03-modules/01-03-02-correspondence.md
  • specs/01-requirements/01-03-modules/01-03-06-unified-workflow.md
  • specs/01-requirements/01-06-edge-cases-and-rules.md (EC-RFA-001 ถึง EC-RFA-004)
  • specs/03-Data-and-Storage/03-01-data-dictionary.md (§4.14.6)
  • specs/01-requirements/01-02-business-rules/01-02-01-rbac-matrix.md

3.3.1. วัตถุประสงค์

เอกสารขออนุมัติ (RFA — Request For Approval) ใช้สำหรับส่งเอกสารหรือสิ่งของเพื่อขออนุมัติจากผู้ว่าจ้างหรือที่ปรึกษา ภายในโครงการ (Project) — ไม่ได้จำกัดแค่แบบก่อสร้าง ประเภทของ RFA (RFA Type) เป็นตัวกำหนดว่าต้องแนบ Drawing Revision หรือไฟล์แนบ:

  • ประเภทที่อ้างอิง Drawing (DDW, SDW, ADW): ผูก Drawing Revision ได้หลายรายการผ่าน rfa_items
  • ประเภทอื่น (DOC, MAT, ฯลฯ): แนบได้เพียง 1 ไฟล์ผ่าน correspondence_attachments

3.3.2. โครงสร้างข้อมูล (Database Tables)

RFA ใช้ pattern Correspondence + Extension:

Table บทบาท
correspondences ข้อมูลหลัก: เลขเอกสาร, subject, project, originator, recipients
rfas ข้อมูลเฉพาะ RFA: rfa_type_id (FK → rfa_types)
rfa_revisions ประวัติแต่ละ Revision: status, approve code, details JSON
rfa_items รายการ Drawing Revision ที่อ้างอิงใน Revision นั้น (เฉพาะ type DDW/SDW/ADW)
rfa_types Master: ประเภท RFA (ผูกกับ Contract)
rfa_status_codes Master: สถานะ RFA
rfa_approve_codes Master: ผลการอนุมัติ

ข้อสำคัญ: rfas.id ใช้ FK ชี้ไปที่ correspondences.id (ไม่มี AUTO_INCREMENT ของตัวเอง)


3.3.3. ประเภทเอกสาร (RFA Types)

  • rfa_types เป็น Master ที่ผูกกับ Contract (ไม่ใช่ Project) — contract_id FK
  • แต่ละ Contract มี RFA Types ของตัวเอง สามารถเพิ่มใหม่ได้ในภายหลัง
  • ไฟล์แนบรองรับรูปแบบ PDF
  • RFA สามารถมีได้หลาย Revision (Rev.A, Rev.B, ...)

type_code ที่กำหนด drawing requirement:

type_code ชื่อ Attachment Mechanism บังคับ
DDW Drawing for Design rfa_items → Shop Drawing Revision ≥ 1
SDW Shop Drawing rfa_items → Shop Drawing Revision ≥ 1
ADW As-Built Drawing rfa_items → As-Built Drawing Revision ≥ 1
อื่นๆ เช่น DOC, MAT correspondence_attachments (1 ไฟล์) ไม่บังคับ

3.3.4. Fields ที่ต้องกรอกเมื่อสร้าง RFA

Field Required หมายเหตุ
Project UUID — กรองจาก Project ที่ผู้ใช้มีสิทธิ์
Contract UUID — filter ตาม Project ที่เลือก
Discipline INT id — filter ตาม Contract ที่เลือก
RFA Type INT id — filter ตาม Contract ที่เลือก
To Organization UUID — ผู้รับหลัก (recipients type = 'TO')
Subject ขั้นต่ำ 5 ตัวอักษร
Body เนื้อหาเพิ่มเติม
Description คำอธิบายสั้น
Remarks หมายเหตุ
Due Date กำหนดส่งคืน
Shop Drawing Revisions บังคับเมื่อ type = DDW/SDW UUID[]
As-Built Drawing Revisions บังคับเมื่อ type = ADW UUID[]

Document Number Preview

ระบบแสดง Preview เลขเอกสารแบบ Real-time ก่อน Submit เมื่อกรอกครบ: Project + Correspondence Type + Discipline + To Organization โดยเรียก POST /api/correspondences/preview-number


3.3.5. การสร้างและสิทธิ์ (RBAC)

การกระทำ Role ที่อนุญาต หมายเหตุ
สร้าง RFA (Draft) Document Control, Org Admin, Superadmin ภายในองค์กรตัวเอง
Submit RFA Document Control, Org Admin, Superadmin เปลี่ยนสถานะ Draft → FAP/FRE
แก้ไข/ถอนกลับ/ยกเลิก หลัง Submit Org Admin ขึ้นไปเท่านั้น พร้อมระบุเหตุผล
ดู RFA ที่ Draft เฉพาะคนในองค์กรเดียวกัน องค์กรอื่นมองไม่เห็น
ดู RFA ที่ Submitted แล้ว ทุกคนที่มีสิทธิ์ใน Project
จัดการ RFA Types (Master) Superadmin Global

3.3.6. การอ้างอิง Drawing Revisions (rfa_items)

  • 1 RFA Revision สามารถอ้างอิง Drawing Revision ได้หลายรายการ
  • 1 แถวใน rfa_items อ้างอิง Drawing Revision ได้ เพียง 1 รายการเท่านั้น โดยต้องเป็น shop_drawing_revision หรือ asbuilt_drawing_revision อย่างใดอย่างหนึ่ง (ไม่ใช่ทั้งคู่)
  • item_type ENUM: 'SHOP' | 'AS_BUILT' — กำหนดว่า FK ไหนที่ต้อง NOT NULL
  • 1 Drawing Revision สามารถถูกอ้างอิงโดยหลาย RFA ได้ (แต่ดู EC-RFA-001)

Unique Constraint:

  • (rfa_revision_id, shop_drawing_revision_id) — ห้าม Drawing เดิมซ้ำใน RFA เดียวกัน
  • (rfa_revision_id, asbuilt_drawing_revision_id) — เช่นเดียวกัน

3.3.7. Status Codes (rfa_status_codes)

status_code ชื่อ ความหมาย
DFT Draft ฉบับร่าง — มองเห็นเฉพาะ Originator Org
FAP For Approve ส่งเพื่อขออนุมัติ
FRE For Review ส่งเพื่อตรวจสอบ
FCO For Construction อนุมัติให้ก่อสร้างได้
ASB AS-Built แบบก่อสร้างจริง
OBS Obsolete ไม่ใช้งานแล้ว
CC Canceled ยกเลิก

3.3.8. Approve Codes (rfa_approve_codes)

ผลการอนุมัติบันทึกใน rfa_revisions.rfa_approve_code_id:

approve_code ชื่อ ความหมาย
1A Approved by Authority อนุมัติโดยหน่วยงานที่มีอำนาจ
1C Approved by CSC อนุมัติโดย CSC
1N Approved As Note อนุมัติพร้อมบันทึก
1R Approved with Remarks อนุมัติพร้อมข้อสังเกต
3C Consultant Comments มีความเห็นจากที่ปรึกษา
3R Revise and Resubmit ขอให้แก้ไขและส่งใหม่
4X Reject ปฏิเสธ
5N No Further Action ไม่ต้องดำเนินการเพิ่มเติม

3.3.9. Workflow (Unified Workflow)

RFA ใช้ Unified Workflow Engine — ดูรายละเอียดที่ 01-03-06-unified-workflow.md

สถานะการสร้าง Revision ใหม่:

  • ห้ามมี 2 Active Revision พร้อมกัน (EC-RFA-002)
  • สร้าง Rev.B ได้ก็ต่อเมื่อ Rev.A มีผลสุดท้ายแล้ว (3R, 4X, หรือ Approved)

3.3.10. Business Rules และ Edge Cases

รหัส กฎ Severity
EC-RFA-001 1 Shop Drawing Revision มี Active RFA ได้สูงสุด 1 ฉบับ (ยกเว้นถูก REJECTED/CANCELLED แล้ว) 🔴 Critical
EC-RFA-002 ห้ามสร้าง Revision ใหม่ถ้า Revision ก่อนหน้ายังไม่มีคำตอบสุดท้าย 🟠 High
EC-RFA-003 Discipline ต้องเลือกก่อนเสมอ ไม่มี Auto-detection (AI Classification เป็น Phase 3) 🟡 Medium
EC-RFA-004 Transmittal ที่มี RFA Submit ได้ก็ต่อเมื่อทุก RFA อยู่ในสถานะ READY (ไม่ใช่ DRAFT) 🟠 High

ดูรายละเอียดครบที่ 01-06-edge-cases-and-rules.md หมวด "Module 4: RFA & Drawing Edge Cases"