Files
lcbp3/specs/01-requirements/01-03-modules/01-03-01-project-management.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

125 lines
4.9 KiB
Markdown

# 3.1 Project Management (การจัดการโครงสร้างโครงการและองค์กร)
---
title: "Functional Requirements: Project 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/03-Data-and-Storage/03-01-data-dictionary.md
- specs/01-requirements/01-02-business-rules/01-02-01-rbac-matrix.md
---
## 3.1.1. วัตถุประสงค์
จัดการโครงสร้างหลักของระบบ ได้แก่ **Project → Contract → Organization → Discipline** — ทุกเอกสารในระบบผูกอยู่กับ Project และ/หรือ Contract เสมอ
---
## 3.1.2. โครงสร้างข้อมูล (Database Tables)
| Table | บทบาท |
|---|---|
| `projects` | ข้อมูล Master โครงการ: code, name, is_active |
| `contracts` | สัญญา ผูกกับ Project (N:1) |
| `organizations` | ข้อมูล Master องค์กร: code, name, role |
| `organization_roles` | Master: ประเภทองค์กร (OWNER/DESIGNER/ฯลฯ) |
| `project_organizations` | M:N: Project ↔ Organization |
| `contract_organizations` | M:N: Contract ↔ Organization + role_in_contract |
| `disciplines` | สาขางาน ผูกกับ Contract (N:1) |
### Hierarchy
```
Project (1)
└── Contract (N)
├── Organization (M:N via contract_organizations)
└── Discipline (N)
Project ↔ Organization (M:N via project_organizations)
```
---
## 3.1.3. Projects
| Field | Type | หมายเหตุ |
|---|---|---|
| `project_code` | VARCHAR(50) UNIQUE | รหัสโครงการ |
| `project_name` | VARCHAR(255) | ชื่อโครงการ |
| `is_active` | TINYINT(1) | 1 = Active |
- ปัจจุบันมี **4 โครงการ** — รองรับการเพิ่มในอนาคต
- จัดการโดย Superadmin เท่านั้น
---
## 3.1.4. Contracts
| Field | Type | หมายเหตุ |
|---|---|---|
| `project_id` | INT FK | ผูกกับ Project |
| `contract_code` | VARCHAR(50) UNIQUE | รหัสสัญญา |
| `contract_name` | VARCHAR(255) | ชื่อสัญญา |
| `start_date` / `end_date` | DATE | ระยะเวลาสัญญา |
| `is_active` | BOOLEAN | สถานะ |
- 1 Project มีได้หลาย Contract (≥ 1)
- Document Number ผูกกับ Contract (ไม่ใช่ Project)
---
## 3.1.5. Organizations และ Organization Roles
### Organization Roles (organization_roles)
| role_name | ความหมาย | สามารถอยู่ใน |
|---|---|---|
| `OWNER` | เจ้าของโครงการ | หลาย Project / หลาย Contract |
| `DESIGNER` | ผู้ออกแบบ | หลาย Project / หลาย Contract |
| `CONSULTANT` | ที่ปรึกษา | หลาย Project / หลาย Contract |
| `CONTRACTOR` | ผู้รับเหมา | **1 Contract / 1 Project เท่านั้น** |
| `THIRD PARTY` | บุคคลที่สาม | หลาย Project / หลาย Contract |
### project_organizations (M:N)
- ผูก Organization เข้า Project — ไม่มี role_in_contract ระดับ Project
### contract_organizations (M:N)
- ผูก Organization เข้า Contract พร้อม `role_in_contract` (Owner/Designer/Consultant/Contractor)
- 1 Organization สามารถมีหลาย role ใน Contract เดียวกันได้
---
## 3.1.6. Disciplines (สาขางาน)
Discipline ผูกกับ **Contract** (ไม่ใช่ Project):
| Field | หมายเหตุ |
|---|---|
| `contract_id` | FK → contracts |
| `discipline_code` | VARCHAR(10) เช่น GEN, STR, MEP |
| `code_name_th` / `code_name_en` | ชื่อภาษาไทย/อังกฤษ |
| `is_active` | สถานะ |
- UNIQUE KEY `(contract_id, discipline_code)` — code ซ้ำได้ระหว่าง Contract
- ใช้กรอง RFA Type และ Correspondence ต่อ Contract
---
## 3.1.7. การสร้างและสิทธิ์ (RBAC)
| การกระทำ | Role ที่อนุญาต | Scope |
|---|---|---|
| สร้าง / แก้ไข Project | Superadmin | Global |
| สร้าง / แก้ไข Contract | Superadmin, Org Admin | Project |
| สร้าง / แก้ไข Organization | Superadmin | Global |
| เพิ่ม Organization เข้า Project/Contract | Superadmin | Global |
| จัดการ Disciplines | Superadmin, Org Admin | Contract |
| ดู Project / Contract | ทุกคนที่มีสิทธิ์ใน Project | Project |