10 KiB
3.3 RFA Management (การจัดการเอกสารขออนุมัติ)
title: 'Functional Requirements: RFA Management' version: 1.8.2 status: updated owner: Nattanin Peancharoen last_updated: 2026-03-31 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.1–4.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, ฯลฯ): แนบไฟล์ผ่าน revision attachment model (
correspondence_revision_attachments+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_idFK- แต่ละ 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_revision_attachments |
ไม่บังคับ |
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
Frontend Routing (v1.8.2)
- รายการ RFA ใช้หน้า Correspondence แบบรวมผ่าน filter:
/correspondences?type=RFA - เส้นทาง
/rfasและ/rfaใช้ redirect ไปยังหน้า list ข้างต้น - หน้าเฉพาะทางของ RFA ยังคงอยู่:
/rfas/new/rfas/[uuid]/rfas/[uuid]/edit
เหตุผล: RFA ยังใช้ extension table (rfas, rfa_revisions, rfa_items) และมีฟอร์ม/รายละเอียดเฉพาะทาง
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_typeENUM:'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"