;
shopDrawingRevisionIds?: number[];
- items: RFAItem[];
}
diff --git a/specs/07-database/data-dictionary-v1.5.1.md b/infrastructure/backup/data-dictionary-v1.5.1.md
similarity index 100%
rename from specs/07-database/data-dictionary-v1.5.1.md
rename to infrastructure/backup/data-dictionary-v1.5.1.md
diff --git a/specs/07-database/lcbp3-v1.5.1-schema.sql b/infrastructure/backup/lcbp3-v1.5.1-schema.sql
similarity index 99%
rename from specs/07-database/lcbp3-v1.5.1-schema.sql
rename to infrastructure/backup/lcbp3-v1.5.1-schema.sql
index 3a92ced..106f6ca 100644
--- a/specs/07-database/lcbp3-v1.5.1-schema.sql
+++ b/infrastructure/backup/lcbp3-v1.5.1-schema.sql
@@ -455,7 +455,7 @@ CREATE TABLE correspondence_revisions (
received_date DATETIME COMMENT 'วันที่ลงรับเอกสาร',
due_date DATETIME COMMENT 'วันที่ครบกำหนด',
description TEXT COMMENT 'คำอธิบายการแก้ไขใน Revision นี้',
- details JSON COMMENT 'ข้อมูลเฉพาะ (เช่น RFI details)',
+ details JSON COMMENT 'ข้อมูลเฉพาะ (เช่น LETTER details)',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้างเอกสาร',
created_by INT COMMENT 'ผู้สร้าง',
updated_by INT COMMENT 'ผู้แก้ไขล่าสุด',
diff --git a/specs/07-database/lcbp3-v1.5.1-seed-basic.sql b/infrastructure/backup/lcbp3-v1.5.1-seed-basic.sql
similarity index 100%
rename from specs/07-database/lcbp3-v1.5.1-seed-basic.sql
rename to infrastructure/backup/lcbp3-v1.5.1-seed-basic.sql
diff --git a/specs/07-database/lcbp3-v1.5.1-seed-contractdrawing.sql b/infrastructure/backup/lcbp3-v1.5.1-seed-contractdrawing.sql
similarity index 100%
rename from specs/07-database/lcbp3-v1.5.1-seed-contractdrawing.sql
rename to infrastructure/backup/lcbp3-v1.5.1-seed-contractdrawing.sql
diff --git a/specs/07-database/lcbp3-v1.5.1-seed-permissions.sql b/infrastructure/backup/lcbp3-v1.5.1-seed-permissions.sql
similarity index 100%
rename from specs/07-database/lcbp3-v1.5.1-seed-permissions.sql
rename to infrastructure/backup/lcbp3-v1.5.1-seed-permissions.sql
diff --git a/specs/00-overview/README.md b/specs/00-overview/README.md
index 2d04076..0369abc 100644
--- a/specs/00-overview/README.md
+++ b/specs/00-overview/README.md
@@ -1,9 +1,9 @@
# LCBP3-DMS - Project Overview
**Project Name:** Laem Chabang Port Phase 3 - Document Management System (LCBP3-DMS)
-**Version:** 1.5.1
-**Status:** Active Development (~80% Complete)
-**Last Updated:** 2025-12-09
+**Version:** 1.6.0
+**Status:** Active Development (~95% Complete)
+**Last Updated:** 2025-12-13
---
@@ -188,7 +188,7 @@ lcbp3/
│ ├── 04-operations/ # Deployment & operations
│ ├── 05-decisions/ # Architecture Decision Records (17 ADRs)
│ ├── 06-tasks/ # Development tasks & progress
-│ ├── 07-database/ # Database schema v1.5.1 & seed data
+│ ├── 07-database/ # Database schema v1.6.0 & seed data
│ └── 09-history/ # Archived implementations
│
├── docker-compose.yml # Docker services configuration
@@ -384,9 +384,9 @@ lcbp3/
## 📝 Document Control
-- **Version:** 1.5.1
+- **Version:** 1.6.0
- **Status:** Active Development
-- **Last Updated:** 2025-12-09
+- **Last Updated:** 2025-12-13
- **Next Review:** 2026-01-01
- **Owner:** System Architect
- **Classification:** Internal Use Only
@@ -397,6 +397,7 @@ lcbp3/
| Version | Date | Description |
| ------- | ---------- | ------------------------------------------ |
+| 1.6.0 | 2025-12-13 | Schema refactoring, documentation updated |
| 1.5.1 | 2025-12-09 | TASK-FE-011/012 completed, docs updated |
| 1.5.1 | 2025-12-02 | Reorganized documentation structure |
| 1.5.0 | 2025-12-01 | Complete specification with ADRs and tasks |
diff --git a/specs/00-overview/glossary.md b/specs/00-overview/glossary.md
index 8ba1639..86c2364 100644
--- a/specs/00-overview/glossary.md
+++ b/specs/00-overview/glossary.md
@@ -1,7 +1,7 @@
# Glossary - คำศัพท์และคำย่อทางเทคนิค
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -471,26 +471,26 @@ Logging library สำหรับ Node.js
## 📚 Acronyms Reference (อ้างอิงตัวย่อ)
-| Acronym | Full Form | Thai |
-| ------- | --------------------------------- | ------------------------------- |
+| Acronym | Full Form | Thai |
+| ------- | --------------------------------- | -------------------------- |
| ADR | Architecture Decision Record | บันทึกการตัดสินใจทางสถาปัตยกรรม |
-| API | Application Programming Interface | ส่วนต่อประสานโปรแกรม |
-| CRUD | Create, Read, Update, Delete | สร้าง อ่าน แก้ไข ลบ |
-| DMS | Document Management System | ระบบจัดการเอกสาร |
+| API | Application Programming Interface | ส่วนต่อประสานโปรแกรม |
+| CRUD | Create, Read, Update, Delete | สร้าง อ่าน แก้ไข ลบ |
+| DMS | Document Management System | ระบบจัดการเอกสาร |
| DTO | Data Transfer Object | วัตถุถ่ายโอนข้อมูล |
-| JWT | JSON Web Token | โทเคนเว็บ JSON |
+| JWT | JSON Web Token | โทเคนเว็บ JSON |
| LCBP3 | Laem Chabang Port Phase 3 | ท่าเรือแหลมฉบังระยะที่ 3 |
-| MVP | Minimum Viable Product | ผลิตภัณฑ์ขั้นต่ำที่ใช้งานได้ |
+| MVP | Minimum Viable Product | ผลิตภัณฑ์ขั้นต่ำที่ใช้งานได้ |
| ORM | Object-Relational Mapping | การแมปวัตถุกับฐานข้อมูล |
-| RBAC | Role-Based Access Control | การควบคุมการเข้าถึงตามบทบาท |
-| REST | Representational State Transfer | การถ่ายโอนสถานะแบบนำเสนอ |
-| RFA | Request for Approval | เอกสารขออนุมัติ |
-| RTO | Recovery Time Objective | เวลาเป้าหมายในการกู้คืน |
+| RBAC | Role-Based Access Control | การควบคุมการเข้าถึงตามบทบาท |
+| REST | Representational State Transfer | การถ่ายโอนสถานะแบบนำเสนอ |
+| RFA | Request for Approval | เอกสารขออนุมัติ |
+| RTO | Recovery Time Objective | เวลาเป้าหมายในการกู้คืน |
| RPO | Recovery Point Objective | จุดเป้าหมายในการกู้คืน |
-| UAT | User Acceptance Testing | การทดสอบการยอมรับของผู้ใช้ |
+| UAT | User Acceptance Testing | การทดสอบการยอมรับของผู้ใช้ |
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
**Next Review:** 2026-03-01
diff --git a/specs/00-overview/quick-start.md b/specs/00-overview/quick-start.md
index ec9c578..4d3b9e3 100644
--- a/specs/00-overview/quick-start.md
+++ b/specs/00-overview/quick-start.md
@@ -1,7 +1,7 @@
# Quick Start Guide
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -579,5 +579,5 @@ git push origin feature/my-feature
**Welcome aboard! 🎉**
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
diff --git a/specs/01-requirements/03.11-document-numbering.md b/specs/01-requirements/03.11-document-numbering.md
index ac6922a..ab96423 100644
--- a/specs/01-requirements/03.11-document-numbering.md
+++ b/specs/01-requirements/03.11-document-numbering.md
@@ -2,7 +2,7 @@
---
title: 'Functional Requirements: Document Numbering Management'
-version: 1.5.1
+version: 1.6.0
status: draft
owner: Nattanin Peancharoen
last_updated: 2025-12-02
diff --git a/specs/01-requirements/README.md b/specs/01-requirements/README.md
index 999a0dd..d0e4075 100644
--- a/specs/01-requirements/README.md
+++ b/specs/01-requirements/README.md
@@ -1,8 +1,8 @@
# 📋 Requirements Specification
-**Version:** 1.5.1
+**Version:** 1.6.0
**Status:** Active
-**Last Updated:** 2025-12-02
+**Last Updated:** 2025-12-13
---
@@ -66,6 +66,12 @@ This directory contains the functional and non-functional requirements for the L
## 🔄 Recent Changes
+### v1.6.0 (2025-12-13)
+
+- ✅ **Schema Refactoring** - Major restructuring of correspondence and RFA tables
+- ✅ Updated data dictionary for schema v1.6.0
+- ✅ Breaking changes documented in CHANGELOG.md
+
### v1.5.1 (2025-12-02)
- ✅ **Reorganized Document Numbering documentation**
@@ -172,8 +178,8 @@ All requirements documents must meet these criteria:
## 📝 Document Control
-- **Version:** 1.5.1
+- **Version:** 1.6.0
- **Owner:** System Architect (Nattanin Peancharoen)
-- **Last Review:** 2025-12-10
+- **Last Review:** 2025-12-13
- **Next Review:** 2026-01-01
- **Classification:** Internal Use Only
diff --git a/specs/02-architecture/README.md b/specs/02-architecture/README.md
index 94bbfcb..f22e454 100644
--- a/specs/02-architecture/README.md
+++ b/specs/02-architecture/README.md
@@ -10,9 +10,9 @@
| Attribute | Value |
| ------------------ | -------------------------------- |
-| **Version** | 1.5.1 |
+| **Version** | 1.6.0 |
| **Status** | Active |
-| **Last Updated** | 2025-12-02 |
+| **Last Updated** | 2025-12-13 |
| **Owner** | Nattanin Peancharoen |
| **Classification** | Internal Technical Documentation |
@@ -463,6 +463,7 @@ sequenceDiagram
| Version | Date | Author | Changes |
| ------- | ---------- | ----------- | ---------------------------------- |
+| 1.6.0 | 2025-12-13 | Nattanin P. | Schema refactoring v1.6.0 |
| 1.5.0 | 2025-11-30 | Nattanin P. | Initial architecture specification |
| 1.4.5 | 2025-11-29 | - | Added security requirements |
| 1.4.4 | 2025-11-28 | - | Enhanced resilience patterns |
@@ -489,7 +490,7 @@ sequenceDiagram
-**LCBP3-DMS Architecture Specification v1.5.0**
+**LCBP3-DMS Architecture Specification v1.6.0**
[System Architecture](./system-architecture.md) • [API Design](./api-design.md) • [Data Model](./data-model.md)
diff --git a/specs/02-architecture/api-design.md b/specs/02-architecture/api-design.md
index 8545ffc..8f082da 100644
--- a/specs/02-architecture/api-design.md
+++ b/specs/02-architecture/api-design.md
@@ -3,7 +3,7 @@
---
**title:** 'API Design'
-**version:** 1.5.1
+**version:** 1.6.0
**status:** active
**owner:** Nattanin Peancharoen
**last_updated:** 2025-12-02
@@ -546,7 +546,7 @@ X-API-Deprecation-Info: https://docs.np-dms.work/migration/v2
**Document Control:**
-- **Version:** 1.5.1
+- **Version:** 1.6.0
- **Status:** Active
-- **Last Updated:** 2025-12-02
+- **Last Updated:** 2025-12-13
- **Owner:** Nattanin Peancharoen
diff --git a/specs/02-architecture/system-architecture.md b/specs/02-architecture/system-architecture.md
index 6e26a58..001c08d 100644
--- a/specs/02-architecture/system-architecture.md
+++ b/specs/02-architecture/system-architecture.md
@@ -943,9 +943,9 @@ graph LR
**Document Control:**
-- **Version:** 1.5.1
+- **Version:** 1.6.0
- **Status:** Active
-- **Last Updated:** 2025-12-02
+- **Last Updated:** 2025-12-13
- **Owner:** Nattanin Peancharoen
```
diff --git a/specs/04-operations/README.md b/specs/04-operations/README.md
index 6bae253..867f3e7 100644
--- a/specs/04-operations/README.md
+++ b/specs/04-operations/README.md
@@ -1,7 +1,7 @@
# Operations Documentation
**Project:** LCBP3-DMS (Laem Chabang Port Phase 3 - Document Management System)
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -185,6 +185,6 @@ graph TB
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Status:** Active
**Classification:** Internal Use Only
diff --git a/specs/04-operations/backup-recovery.md b/specs/04-operations/backup-recovery.md
index 022a6e1..829421e 100644
--- a/specs/04-operations/backup-recovery.md
+++ b/specs/04-operations/backup-recovery.md
@@ -1,7 +1,7 @@
# Backup & Recovery Procedures
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -369,6 +369,6 @@ WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 YEAR);
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/04-operations/deployment-guide.md b/specs/04-operations/deployment-guide.md
index cdfa963..9779e6a 100644
--- a/specs/04-operations/deployment-guide.md
+++ b/specs/04-operations/deployment-guide.md
@@ -3,7 +3,7 @@
---
**Project:** LCBP3-DMS (Laem Chabang Port Phase 3 - Document Management System)
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
**Owner:** Operations Team
**Status:** Active
@@ -932,6 +932,6 @@ docker exec lcbp3-mariadb mysql -u root -p -e "
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
**Next Review:** 2026-06-01
diff --git a/specs/04-operations/document-numbering-operations.md b/specs/04-operations/document-numbering-operations.md
index 61e3630..36c0133 100644
--- a/specs/04-operations/document-numbering-operations.md
+++ b/specs/04-operations/document-numbering-operations.md
@@ -2,7 +2,7 @@
---
title: 'Operations Guide: Document Numbering System'
-version: 1.5.1
+version: 1.6.0
status: draft
owner: Operations Team
last_updated: 2025-12-02
diff --git a/specs/04-operations/environment-setup.md b/specs/04-operations/environment-setup.md
index e9f1e3c..f1b0a5f 100644
--- a/specs/04-operations/environment-setup.md
+++ b/specs/04-operations/environment-setup.md
@@ -1,7 +1,7 @@
# Environment Setup & Configuration
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -458,6 +458,6 @@ docker exec lcbp3-backend env | grep NODE_ENV
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/04-operations/incident-response.md b/specs/04-operations/incident-response.md
index 4546d38..5aeef31 100644
--- a/specs/04-operations/incident-response.md
+++ b/specs/04-operations/incident-response.md
@@ -1,7 +1,7 @@
# Incident Response Procedures
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -478,6 +478,6 @@ Database connection pool was exhausted due to slow queries not releasing connect
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/04-operations/maintenance-procedures.md b/specs/04-operations/maintenance-procedures.md
index a6fc528..cb28039 100644
--- a/specs/04-operations/maintenance-procedures.md
+++ b/specs/04-operations/maintenance-procedures.md
@@ -1,7 +1,7 @@
# Maintenance Procedures
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -496,6 +496,6 @@ echo "Security maintenance completed: $(date)"
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/04-operations/monitoring-alerting.md b/specs/04-operations/monitoring-alerting.md
index 8195070..d120508 100644
--- a/specs/04-operations/monitoring-alerting.md
+++ b/specs/04-operations/monitoring-alerting.md
@@ -1,7 +1,7 @@
# Monitoring & Alerting
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -438,6 +438,6 @@ ab -n 1000 -c 10 \
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/04-operations/security-operations.md b/specs/04-operations/security-operations.md
index 923c86d..e4b9001 100644
--- a/specs/04-operations/security-operations.md
+++ b/specs/04-operations/security-operations.md
@@ -1,7 +1,7 @@
# Security Operations
**Project:** LCBP3-DMS
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
---
@@ -439,6 +439,6 @@ echo "Account compromise response completed for User ID: $USER_ID"
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-01
**Next Review:** 2026-03-01
diff --git a/specs/05-decisions/README.md b/specs/05-decisions/README.md
index f7ab98f..7384a09 100644
--- a/specs/05-decisions/README.md
+++ b/specs/05-decisions/README.md
@@ -1,6 +1,6 @@
# Architecture Decision Records (ADRs)
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Updated:** 2025-12-02
**Project:** LCBP3-DMS (Laem Chabang Port Phase 3 - Document Management System)
@@ -28,45 +28,45 @@ Architecture Decision Records (ADRs) เป็นเอกสารที่บ
### Core Architecture Decisions
-| ADR | Title | Status | Date | Summary |
-| --------------------------------------------------- | ------------------------------- | ----------- | ---------- | ---------------------------------------------------------------------------- |
+| ADR | Title | Status | Date | Summary |
+| --------------------------------------------------- | ------------------------------- | ---------- | ---------- | ------------------------------------------------------------------------- |
| [ADR-001](./ADR-001-unified-workflow-engine.md) | Unified Workflow Engine | ✅ Accepted | 2025-11-30 | ใช้ DSL-based Workflow Engine สำหรับ Correspondences, RFAs, และ Circulations |
-| [ADR-002](./ADR-002-document-numbering-strategy.md) | Document Numbering Strategy | ✅ Accepted | 2025-11-30 | Double-lock mechanism (Redis + DB Optimistic Lock) สำหรับเลขที่เอกสาร |
-| [ADR-003](./ADR-003-file-storage-approach.md) | Two-Phase File Storage Approach | ✅ Accepted | 2025-11-30 | Upload → Temp → Commit to Permanent เพื่อป้องกัน Orphan Files |
+| [ADR-002](./ADR-002-document-numbering-strategy.md) | Document Numbering Strategy | ✅ Accepted | 2025-11-30 | Double-lock mechanism (Redis + DB Optimistic Lock) สำหรับเลขที่เอกสาร |
+| [ADR-003](./ADR-003-file-storage-approach.md) | Two-Phase File Storage Approach | ✅ Accepted | 2025-11-30 | Upload → Temp → Commit to Permanent เพื่อป้องกัน Orphan Files |
### Security & Access Control
-| ADR | Title | Status | Date | Summary |
-| ------------------------------------------- | ----------------------------- | ----------- | ---------- | ------------------------------------------------------------- |
+| ADR | Title | Status | Date | Summary |
+| ------------------------------------------- | ----------------------------- | ---------- | ---------- | ------------------------------------------------------------- |
| [ADR-004](./ADR-004-rbac-implementation.md) | RBAC Implementation (4-Level) | ✅ Accepted | 2025-11-30 | Hierarchical RBAC: Global → Organization → Project → Contract |
### Technology & Infrastructure
-| ADR | Title | Status | Date | Summary |
-| --------------------------------------------------- | ------------------------------------ | ----------- | ---------- | -------------------------------------------------------------- |
-| [ADR-005](./ADR-005-technology-stack.md) | Technology Stack Selection | ✅ Accepted | 2025-11-30 | Full Stack TypeScript: NestJS + Next.js + MariaDB + Redis |
+| ADR | Title | Status | Date | Summary |
+| --------------------------------------------------- | ------------------------------------ | ---------- | ---------- | ------------------------------------------------------------ |
+| [ADR-005](./ADR-005-technology-stack.md) | Technology Stack Selection | ✅ Accepted | 2025-11-30 | Full Stack TypeScript: NestJS + Next.js + MariaDB + Redis |
| [ADR-006](./ADR-006-redis-caching-strategy.md) | Redis Usage & Caching Strategy | ✅ Accepted | 2025-11-30 | Redis สำหรับ Distributed Lock, Cache, Queue, และ Rate Limiting |
-| [ADR-009](./ADR-009-database-migration-strategy.md) | Database Migration & Deployment | ✅ Accepted | 2025-12-01 | TypeORM Migrations พร้อม Blue-Green Deployment |
-| [ADR-015](./ADR-015-deployment-infrastructure.md) | Deployment & Infrastructure Strategy | ✅ Accepted | 2025-12-01 | Docker Compose with Blue-Green Deployment on QNAP |
-| [ADR-016](./ADR-016-security-authentication.md) | Security & Authentication Strategy | ✅ Accepted | 2025-12-01 | JWT + bcrypt + OWASP Security Best Practices |
+| [ADR-009](./ADR-009-database-migration-strategy.md) | Database Migration & Deployment | ✅ Accepted | 2025-12-01 | TypeORM Migrations พร้อม Blue-Green Deployment |
+| [ADR-015](./ADR-015-deployment-infrastructure.md) | Deployment & Infrastructure Strategy | ✅ Accepted | 2025-12-01 | Docker Compose with Blue-Green Deployment on QNAP |
+| [ADR-016](./ADR-016-security-authentication.md) | Security & Authentication Strategy | ✅ Accepted | 2025-12-01 | JWT + bcrypt + OWASP Security Best Practices |
### API & Integration
-| ADR | Title | Status | Date | Summary |
-| --------------------------------------------------- | ----------------------------- | ----------- | ---------- | ----------------------------------------------------------------------------- |
-| [ADR-007](./ADR-007-api-design-error-handling.md) | API Design & Error Handling | ✅ Accepted | 2025-12-01 | Standard REST API with Custom Error Format + NestJS Exception Filters |
+| ADR | Title | Status | Date | Summary |
+| --------------------------------------------------- | ----------------------------- | ---------- | ---------- | --------------------------------------------------------------------------- |
+| [ADR-007](./ADR-007-api-design-error-handling.md) | API Design & Error Handling | ✅ Accepted | 2025-12-01 | Standard REST API with Custom Error Format + NestJS Exception Filters |
| [ADR-008](./ADR-008-email-notification-strategy.md) | Email & Notification Strategy | ✅ Accepted | 2025-12-01 | BullMQ + Redis Queue สำหรับ Multi-channel Notifications (Email, LINE, In-app) |
### Observability
-| ADR | Title | Status | Date | Summary |
-| --------------------------------------------------- | ----------------------------- | ----------- | ---------- | ------------------------------------------------------------- |
+| ADR | Title | Status | Date | Summary |
+| --------------------------------------------------- | ----------------------------- | ---------- | ---------- | ------------------------------------------------------------ |
| [ADR-010](./ADR-010-logging-monitoring-strategy.md) | Logging & Monitoring Strategy | ✅ Accepted | 2025-12-01 | Winston Structured Logging พร้อม Future ELK Stack Integration |
### Frontend Architecture
-| ADR | Title | Status | Date | Summary |
-| ------------------------------------------------ | -------------------------------- | ----------- | ---------- | ----------------------------------------------------- |
+| ADR | Title | Status | Date | Summary |
+| ------------------------------------------------ | -------------------------------- | ---------- | ---------- | ----------------------------------------------------- |
| [ADR-011](./ADR-011-nextjs-app-router.md) | Next.js App Router & Routing | ✅ Accepted | 2025-12-01 | App Router with Server Components and Nested Layouts |
| [ADR-012](./ADR-012-ui-component-library.md) | UI Component Library (Shadcn/UI) | ✅ Accepted | 2025-12-01 | Shadcn/UI + Tailwind CSS for Full Component Ownership |
| [ADR-013](./ADR-013-form-handling-validation.md) | Form Handling & Validation | ✅ Accepted | 2025-12-01 | React Hook Form + Zod for Type-Safe Forms |
@@ -356,5 +356,5 @@ graph TB
---
-**Version:** 1.5.1
+**Version:** 1.6.0
**Last Review:** 2025-12-02
diff --git a/specs/06-tasks/TASK-BE-015-schema-v160-migration.md b/specs/06-tasks/TASK-BE-015-schema-v160-migration.md
new file mode 100644
index 0000000..5f077d0
--- /dev/null
+++ b/specs/06-tasks/TASK-BE-015-schema-v160-migration.md
@@ -0,0 +1,251 @@
+# Task: Backend Schema v1.6.0 Migration
+
+**Status:** ✅ Completed
+**Priority:** P1 (High - Breaking Changes)
+**Estimated Effort:** 3-5 days
+**Dependencies:** Schema v1.6.0 already created
+**Owner:** Backend Team
+
+---
+
+## 📋 Overview
+
+อัพเดท Backend Entities และ DTOs ให้ตรงกับ Schema v1.6.0 ที่มีการ Refactor โครงสร้างตาราง
+
+---
+
+## 🎯 Objectives
+
+- [x] Update Correspondence Entities
+- [x] Update RFA Entities (Shared PK Pattern)
+- [x] Update DTOs for new field names
+- [x] Update Services for new relationships
+- [x] Add/Update Unit Tests
+
+---
+
+## 📝 Schema Changes Summary
+
+### Breaking Changes ⚠️
+
+| Table | Change | Impact |
+| --------------------------- | ---------------------------------------------- | --------------- |
+| `correspondence_recipients` | FK → `correspondences(id)` | Update relation |
+| `rfa_items` | `rfarev_correspondence_id` → `rfa_revision_id` | Rename column |
+
+### Column Changes
+
+| Table | Old | New | Notes |
+| -------------------------- | ------------------- | ----------------------------- | ----------- |
+| `correspondence_revisions` | `title` | `subject` | Rename |
+| `correspondence_revisions` | - | `body`, `remarks` | Add columns |
+| `rfa_revisions` | `title` | `subject` | Rename |
+| `rfa_revisions` | `correspondence_id` | - | Remove |
+| `rfa_revisions` | - | `body`, `remarks`, `due_date` | Add columns |
+
+### Architecture Changes
+
+| Table | Change |
+| ------ | ---------------------------------------------------- |
+| `rfas` | Shared PK with `correspondences` (no AUTO_INCREMENT) |
+| `rfas` | `id` references `correspondences(id)` |
+
+---
+
+## 🛠️ Implementation Steps
+
+### 1. Update CorrespondenceRevision Entity
+
+```typescript
+// File: backend/src/modules/correspondence/entities/correspondence-revision.entity.ts
+
+// BEFORE
+@Column()
+title: string;
+
+// AFTER
+@Column()
+subject: string;
+
+@Column({ type: 'text', nullable: true })
+body: string;
+
+@Column({ type: 'text', nullable: true })
+remarks: string;
+
+@Column({ name: 'schema_version', default: 1 })
+schemaVersion: number;
+```
+
+### 2. Update CorrespondenceRecipient Entity
+
+```typescript
+// File: backend/src/modules/correspondence/entities/correspondence-recipient.entity.ts
+
+// BEFORE
+@ManyToOne(() => CorrespondenceRevision, { onDelete: 'CASCADE' })
+@JoinColumn({ name: 'correspondence_id', referencedColumnName: 'correspondenceId' })
+revision: CorrespondenceRevision;
+
+// AFTER
+@ManyToOne(() => Correspondence, { onDelete: 'CASCADE' })
+@JoinColumn({ name: 'correspondence_id' })
+correspondence: Correspondence;
+```
+
+### 3. Update RFA Entity (Shared PK Pattern)
+
+```typescript
+// File: backend/src/modules/rfa/entities/rfa.entity.ts
+
+// BEFORE
+@PrimaryGeneratedColumn()
+id: number;
+
+// AFTER
+@PrimaryColumn()
+id: number;
+
+@OneToOne(() => Correspondence, { onDelete: 'CASCADE' })
+@JoinColumn({ name: 'id' })
+correspondence: Correspondence;
+```
+
+### 4. Update RfaRevision Entity
+
+```typescript
+// File: backend/src/modules/rfa/entities/rfa-revision.entity.ts
+
+// REMOVE
+@Column({ name: 'correspondence_id' })
+correspondenceId: number;
+
+// RENAME
+@Column()
+subject: string; // was: title
+
+// ADD
+@Column({ type: 'text', nullable: true })
+body: string;
+
+@Column({ type: 'text', nullable: true })
+remarks: string;
+
+@Column({ name: 'due_date', type: 'datetime', nullable: true })
+dueDate: Date;
+```
+
+### 5. Update RfaItem Entity
+
+```typescript
+// File: backend/src/modules/rfa/entities/rfa-item.entity.ts
+
+// BEFORE
+@Column({ name: 'rfarev_correspondence_id' })
+rfaRevCorrespondenceId: number;
+
+// AFTER
+@Column({ name: 'rfa_revision_id' })
+rfaRevisionId: number;
+
+@ManyToOne(() => RfaRevision, { onDelete: 'CASCADE' })
+@JoinColumn({ name: 'rfa_revision_id' })
+rfaRevision: RfaRevision;
+```
+
+### 6. Update DTOs
+
+```typescript
+// correspondence/dto/create-correspondence-revision.dto.ts
+export class CreateCorrespondenceRevisionDto {
+ subject: string; // was: title
+ body?: string;
+ remarks?: string;
+}
+
+// rfa/dto/create-rfa-revision.dto.ts
+export class CreateRfaRevisionDto {
+ subject: string; // was: title
+ body?: string;
+ remarks?: string;
+ dueDate?: Date;
+}
+```
+
+---
+
+## 🗂️ Files to Modify
+
+### Entities
+
+| File | Status | Changes |
+| ------------------------------------ | ------ | ----------------------------------------- |
+| `correspondence.entity.ts` | ✅ | Minor: add recipients relation |
+| `correspondence-revision.entity.ts` | ✅ | Rename title→subject, add body/remarks |
+| `correspondence-recipient.entity.ts` | ✅ | FK change to correspondence |
+| `rfa.entity.ts` | ✅ | Shared PK pattern |
+| `rfa-revision.entity.ts` | ✅ | Remove correspondenceId, add body/remarks |
+| `rfa-item.entity.ts` | ✅ | Rename column |
+
+### DTOs
+
+| File | Status | Changes |
+| --------------------------------------- | ------ | ------------------------------- |
+| `create-correspondence-revision.dto.ts` | ✅ | title→subject, add body/remarks |
+| `update-correspondence-revision.dto.ts` | ✅ | Same |
+| `create-rfa-revision.dto.ts` | ✅ | title→subject, add fields |
+| `update-rfa-revision.dto.ts` | ✅ | Same |
+| `create-rfa-item.dto.ts` | ✅ | Column rename |
+
+### Services
+
+| File | Status | Changes |
+| --------------------------- | ------ | -------------------------------- |
+| `correspondence.service.ts` | ✅ | Update queries for new relations |
+| `rfa.service.ts` | ✅ | Handle Shared PK creation |
+
+---
+
+## ✅ Verification
+
+### Unit Tests
+
+```bash
+# Run existing tests to verify compatibility
+pnpm test:watch correspondence
+pnpm test:watch rfa
+```
+
+### Integration Tests
+
+1. Create new Correspondence → verify subject field saved
+2. Create new RFA → verify Shared PK pattern works
+3. Verify recipients linked to correspondence (not revision)
+4. Verify RFA items linked via rfa_revision_id
+
+---
+
+## 📚 Related Documents
+
+- [Schema v1.6.0](../07-database/lcbp3-v1.6.0-schema.sql)
+- [Data Dictionary v1.6.0](../07-database/data-dictionary-v1.6.0.md)
+- [CHANGELOG v1.6.0](../../CHANGELOG.md)
+
+---
+
+## 🚨 Risks & Mitigation
+
+| Risk | Impact | Mitigation |
+| ----------------- | ------ | ------------------------------------ |
+| Breaking frontend | High | Update frontend types simultaneously |
+| Data migration | Medium | Schema already handles FK changes |
+| Test failures | Low | Update tests with new field names |
+
+---
+
+## 📌 Notes
+
+- Schema v1.6.0 SQL files already exist in `specs/07-database/`
+- This task focuses on **backend code changes only**
+- Frontend will need separate task for DTO/type updates
+- Consider feature flag for gradual rollout
diff --git a/specs/06-tasks/TASK-FE-016-schema-v160-adaptation.md b/specs/06-tasks/TASK-FE-016-schema-v160-adaptation.md
new file mode 100644
index 0000000..4243fff
--- /dev/null
+++ b/specs/06-tasks/TASK-FE-016-schema-v160-adaptation.md
@@ -0,0 +1,263 @@
+# Task: Frontend Schema v1.6.0 Adaptation
+
+**Status:** ✅ Completed
+**Priority:** P1 (High - Breaking Changes)
+**Estimated Effort:** 2-3 days
+**Dependencies:** TASK-BE-015 (Backend Migration)
+**Owner:** Frontend Team
+
+---
+
+## 📋 Overview
+
+อัพเดท Frontend Types, Services และ Forms ให้รองรับ Schema v1.6.0
+
+---
+
+## 🎯 Objectives
+
+- [x] Update TypeScript Interfaces/Types
+- [x] Update Form Components (field names)
+- [x] Update API Service Calls
+- [x] Update List/Table Columns
+- [x] Verify E2E functionality
+
+---
+
+## 📊 Business Rule Changes Analysis
+
+### 1. Correspondence Revisions ⚠️ UI IMPACT
+
+| Change | Old Field | New Field | Business Rule |
+| ---------- | --------- | --------- | --------------------------------------- |
+| **Rename** | `title` | `subject` | Form label เปลี่ยนจาก "หัวเรื่อง" เป็น "เรื่อง" |
+| **Add** | - | `body` | เพิ่ม Rich Text Editor สำหรับเนื้อความ |
+| **Add** | - | `remarks` | เพิ่ม Textarea สำหรับหมายเหตุ |
+| **Add** | - | `dueDate` | เพิ่ม Date Picker สำหรับกำหนดส่ง |
+
+**UI Impact:**
+- Correspondence Form: เพิ่ม 3 fields ใหม่
+- Correspondence List: เปลี่ยน column header
+- Correspondence Detail: แสดง body และ remarks
+
+### 2. Correspondence Recipients ⚠️ RELATION CHANGE
+
+| Before | After | Business Rule |
+| ------------------------ | ---------------------- | -------------------------- |
+| Recipients ผูกกับ Revision | Recipients ผูกกับ Master | ผู้รับคงที่ตลอด Revisions ทั้งหมด |
+
+**UI Impact:**
+- ย้าย Recipients Selection ออกจาก Revision Form
+- ไปอยู่ใน Master Correspondence Form แทน
+- Recipients จะไม่เปลี่ยนเมื่อสร้าง New Revision
+
+### 3. RFA System 🔄 ARCHITECTURE CHANGE
+
+| Change | Description | Business Rule |
+| ---------------- | -------------------------- | -------------------------------------------- |
+| **Shared ID** | RFA.id = Correspondence.id | สร้าง Correspondence ก่อน แล้ว RFA ใช้ ID เดียวกัน |
+| **Subject** | `title` → `subject` | เหมือนกับ Correspondence |
+| **Body/Remarks** | เพิ่ม fields ใหม่ | เหมือนกับ Correspondence |
+| **Due Date** | เพิ่ม field | กำหนดวันที่ต้องตอบกลับ |
+
+**UI Impact:**
+- RFA Form: เพิ่ม body, remarks, dueDate
+- RFA Creation Flow: อาจต้อง adjust การ submit
+
+### 4. RFA Items ⚠️ API CHANGE
+
+| Before | After | Impact |
+| ------------------------ | --------------- | ------------------------------------------- |
+| `rfaRevCorrespondenceId` | `rfaRevisionId` | เปลี่ยน property name ใน API request/response |
+
+---
+
+## 🛠️ Implementation Steps
+
+### 1. Update TypeScript Types
+
+```typescript
+// lib/types/correspondence.ts
+
+// BEFORE
+interface CorrespondenceRevision {
+ title: string;
+ // ...
+}
+
+// AFTER
+interface CorrespondenceRevision {
+ subject: string; // renamed from title
+ body?: string; // NEW
+ remarks?: string; // NEW
+ dueDate?: string; // NEW
+ schemaVersion?: number; // NEW
+ // ...
+}
+
+// Move recipients to master level
+interface Correspondence {
+ // ...existing fields
+ recipients: CorrespondenceRecipient[]; // MOVED from revision
+}
+```
+
+```typescript
+// lib/types/rfa.ts
+
+// BEFORE
+interface RfaRevision {
+ correspondenceId: number;
+ title: string;
+ // ...
+}
+
+// AFTER
+interface RfaRevision {
+ // correspondenceId: REMOVED
+ subject: string; // renamed from title
+ body?: string; // NEW
+ remarks?: string; // NEW
+ dueDate?: string; // NEW
+ // ...
+}
+
+// BEFORE
+interface RfaItem {
+ rfaRevCorrespondenceId: number;
+ // ...
+}
+
+// AFTER
+interface RfaItem {
+ rfaRevisionId: number; // renamed
+ // ...
+}
+```
+
+### 2. Update Form Components
+
+```typescript
+// app/(dashboard)/correspondences/new/page.tsx
+// app/(dashboard)/correspondences/[id]/edit/page.tsx
+
+// CHANGES:
+// 1. Rename form field: title → subject
+// 2. Add new fields: body, remarks, dueDate
+// 3. Move recipients to master section (not revision)
+
+ {/* was: title */}
+ {/* NEW */}
+ {/* NEW */}
+ {/* NEW */}
+```
+
+### 3. Update List Columns
+
+```typescript
+// components/correspondence/correspondence-list.tsx
+
+const columns = [
+ // BEFORE: { header: 'หัวเรื่อง', accessorKey: 'title' }
+ // AFTER:
+ { header: 'เรื่อง', accessorKey: 'subject' },
+ { header: 'กำหนดส่ง', accessorKey: 'dueDate' }, // NEW column
+];
+```
+
+### 4. Update API Services
+
+```typescript
+// lib/services/correspondence.service.ts
+// lib/services/rfa.service.ts
+
+// Update DTO property names in API calls
+// Ensure field mapping matches backend changes
+```
+
+---
+
+## 🗂️ Files to Modify
+
+### Types
+
+| File | Status | Changes |
+| ----------------------------- | ------ | --------------------------------------- |
+| `lib/types/correspondence.ts` | ✅ | title→subject, add body/remarks/dueDate |
+| `lib/types/rfa.ts` | ✅ | Same + remove correspondenceId |
+
+### Forms
+
+| File | Status | Changes |
+| ---------------------------------------------------- | ------ | ---------------------- |
+| `app/(dashboard)/correspondences/new/page.tsx` | ✅ | Add new fields, rename |
+| `app/(dashboard)/correspondences/[id]/edit/page.tsx` | ✅ | Same |
+| `app/(dashboard)/rfas/new/page.tsx` | ✅ | Add new fields, rename |
+| `app/(dashboard)/rfas/[id]/edit/page.tsx` | ✅ | Same |
+
+### Lists/Tables
+
+| File | Status | Changes |
+| --------------------------------------------------- | ------ | ------------- |
+| `components/correspondence/correspondence-list.tsx` | ✅ | Column rename |
+| `components/rfa/rfa-list.tsx` | ✅ | Column rename |
+
+### Services
+
+| File | Status | Changes |
+| ---------------------------------------- | ------ | ----------- |
+| `lib/services/correspondence.service.ts` | ✅ | DTO mapping |
+| `lib/services/rfa.service.ts` | ✅ | DTO mapping |
+
+---
+
+## ✅ Verification
+
+### Manual Testing
+
+1. **Correspondence Flow:**
+ - [ ] Create new correspondence → verify subject, body, remarks saved
+ - [ ] Edit existing → verify field display correctly
+ - [ ] List view shows "เรื่อง" column
+
+2. **RFA Flow:**
+ - [ ] Create new RFA → verify new fields
+ - [ ] Add RFA Items → verify API works with new field names
+ - [ ] Due date displays and functions correctly
+
+3. **Recipients:**
+ - [ ] Recipients assigned at master level
+ - [ ] Creating new revision doesn't reset recipients
+
+### E2E Tests
+
+```bash
+pnpm test:e2e -- --grep "correspondence"
+pnpm test:e2e -- --grep "rfa"
+```
+
+---
+
+## 📚 Related Documents
+
+- [TASK-BE-015](./TASK-BE-015-schema-v160-migration.md) - Backend Migration
+- [Schema v1.6.0](../07-database/lcbp3-v1.6.0-schema.sql)
+- [CHANGELOG v1.6.0](../../CHANGELOG.md)
+
+---
+
+## 🚨 Risks & Mitigation
+
+| Risk | Impact | Mitigation |
+| ---------------------- | ------ | ---------------------------- |
+| Field name mismatch | High | Coordinate with backend team |
+| Form validation errors | Medium | Test all forms thoroughly |
+| List display issues | Low | Update column configs |
+
+---
+
+## 📌 Notes
+
+- ต้องรอ Backend deploy ก่อน จึงจะ test ได้
+- Recipients logic change อาจส่งผลต่อ business flow
+- Consider feature flag for gradual rollout
diff --git a/specs/06-tasks/backend-progress-report.md b/specs/06-tasks/backend-progress-report.md
index 256af50..9e2f524 100644
--- a/specs/06-tasks/backend-progress-report.md
+++ b/specs/06-tasks/backend-progress-report.md
@@ -20,6 +20,7 @@
| **TASK-BE-011** | Notification & Audit | ✅ **Done** | 100% | Global Audit Interceptor & Notification Module active. |
| **TASK-BE-012** | Master Data Management | ✅ **Done** | 100% | Disciplines, SubTypes, Tags, Config APIs complete. |
| **TASK-BE-013** | User Management | ✅ **Done** | 100% | CRUD, Assignments, Preferences, Soft Delete complete. |
+| **TASK-BE-015** | Schema v1.6.0 Migration | ✅ **Done** | 100% | Correspondence/RFA Shared PK, New Fields (2025-12-13). |
## 🛠 Detailed Findings by Component
diff --git a/specs/06-tasks/frontend-progress-report.md b/specs/06-tasks/frontend-progress-report.md
index 908a58c..33bf67e 100644
--- a/specs/06-tasks/frontend-progress-report.md
+++ b/specs/06-tasks/frontend-progress-report.md
@@ -22,6 +22,7 @@
| **TASK-FE-013** | Circulation & Transmittal | ✅ **Done** | 100% | Circulation and Transmittal modules implemented with DataTable. |
| **TASK-FE-014** | Reference Data UI | ✅ **Done** | 100% | Generic CRUD Table refactored (Skeleton/Dialogs). All pages linked. |
| **TASK-FE-015** | Security Admin UI | ✅ **Done** | 100% | RBAC Matrix, Roles, Active Sessions, System Logs implemented. |
+| **TASK-FE-016** | Schema v1.6.0 Adaptation | ✅ **Done** | 100% | Update Forms/Types/Lists for v1.6.0 changes (2025-12-13). |
## 🛠 Detailed Status by Component
diff --git a/specs/07-database/data-dictionary-v1.6.0.md b/specs/07-database/data-dictionary-v1.6.0.md
new file mode 100644
index 0000000..c24d6aa
--- /dev/null
+++ b/specs/07-database/data-dictionary-v1.6.0.md
@@ -0,0 +1,1729 @@
+# **ตารางฐานข้อมูล (Data Dictionary) - LCBP3-DMS (V1.6.0)**
+
+เอกสารนี้สรุปโครงสร้างตาราง,
+FOREIGN KEYS (FK),
+และ Constraints ที่สำคัญทั้งหมดในฐานข้อมูล LCBP3 - DMS (v1.6.0) เพื่อใช้เป็นเอกสารอ้างอิงสำหรับทีมพัฒนา Backend (NestJS) และ Frontend (Next.js) โดยอิงจาก Requirements และ SQL Script ล่าสุด ** สถานะ: ** FINAL GUIDELINE ** วันที่: ** 2025 -12 -13 ** อ้างอิง: ** Requirements v1.6.0 & FullStackJS Guidelines v1.6.0 ** Classification: ** Internal Technical Documentation ## 📝 สรุปรายการปรับปรุง (Summary of Changes in v1.6.0)
+1.** Schema Refactoring **: ปรับโครงสร้างตาราง `correspondences`, `correspondence_revisions`, `rfas`, `rfa_revisions` ให้เป็นมาตรฐานเดียวกัน
+2.** Shared PK Pattern **: ตาราง `rfas` ใช้ ID ร่วมกับ `correspondences` (FK Reference แทน AUTO_INCREMENT)
+3.** Column Rename **: เปลี่ยน `title` เป็น `subject` ในตาราง revision และเพิ่ม `body`, `remarks`
+4.** Virtual Columns **: เพิ่ม Virtual Columns สำหรับ Index ข้อมูลจาก JSON details
+5.** FK Updates **: `correspondence_recipients` FK ชี้ไป `correspondences(id)` แทน `correspondence_revisions` ---
+
+## **1. 🏢 Core & Master Data Tables (องค์กร, โครงการ, สัญญา)**
+
+### 1.1 organization_roles
+
+* * Purpose **: MASTER TABLE FOR organization role TYPES IN the system | COLUMN Name | Data TYPE | Constraints | Description | | ----------- | ----------- | --------------------------- | ---------------------------------------------------------------- |
+| id | INT | PRIMARY KEY,
+AUTO_INCREMENT | UNIQUE identifier FOR organization role | | role_name | VARCHAR(20) | NOT NULL,
+UNIQUE | Role name (
+ CONTRACTOR,
+ THIRD PARTY
+) |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp | ** INDEXES **: - PRIMARY KEY (id) - UNIQUE (role_name) ** Business Rules **: - Predefined system roles FOR organization TYPES - Cannot be deleted IF referenced by organizations ---
+
+### 1.2 organizations
+
+* * Purpose **: MASTER TABLE storing ALL organizations involved IN the system | COLUMN Name | Data TYPE | Constraints | Description | | ----------------- | ------------ | ----------------------------------- | ---------------------------------------- |
+| id | INT | PRIMARY KEY,
+AUTO_INCREMENT | UNIQUE identifier FOR organization | | organization_code | VARCHAR(20) | NOT NULL,
+UNIQUE | Organization code (e.g., 'กทท.', 'TEAM') | | organization_name | VARCHAR(255) | NOT NULL | FULL organization name | | is_active | BOOLEAN | DEFAULT TRUE | Active STATUS (1 = active, 0 = inactive) | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last
+UPDATE timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp | ** INDEXES **: - PRIMARY KEY (id) - UNIQUE (organization_code) - INDEX (is_active) ** Relationships **: - Referenced by: users,
+ project_organizations,
+ contract_organizations,
+ correspondences,
+ circulations ---
+
+ ### 1.3 projects
+
+ * * Purpose **: MASTER TABLE FOR ALL projects IN the system | COLUMN Name | Data TYPE | Constraints | Description | | ------------ | ------------ | --------------------------- | ----------------------------- |
+ | id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier FOR project | | project_code | VARCHAR(50) | NOT NULL,
+ UNIQUE | Project code (e.g., 'LCBP3') | | project_name | VARCHAR(255) | NOT NULL | FULL project name | | is_active | TINYINT(1) | DEFAULT 1 | Active STATUS |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+** INDEXES **: - PRIMARY KEY (id) - UNIQUE (project_code) - INDEX (is_active) ** Relationships **: - Referenced by: contracts,
+ correspondences,
+ document_number_formats,
+ drawings ---
+
+ ### 1.4 contracts
+
+ * * Purpose **: MASTER TABLE FOR contracts within projects | COLUMN Name | Data TYPE | Constraints | Description | | ------------- | ------------ | ----------------------------------- | ------------------------------ |
+ | id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier FOR contract | | project_id | INT | NOT NULL,
+ FK | Reference TO projects TABLE | | contract_code | VARCHAR(50) | NOT NULL,
+ UNIQUE | Contract code | | contract_name | VARCHAR(255) | NOT NULL | FULL contract name | | description | TEXT | NULL | Contract description | | start_date | DATE | NULL | Contract START date | | end_date | DATE | NULL | Contract
+END date | | is_active | BOOLEAN | DEFAULT TRUE | Active STATUS | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last
+UPDATE timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp | ** INDEXES **: - PRIMARY KEY (id) - UNIQUE (contract_code) - FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE - INDEX (project_id, is_active) ** Relationships **: - Parent: projects - Referenced by: contract_organizations,
+ user_assignments ---
+
+ ### 1.5 disciplines (NEW v1.5.1)
+
+ * * Purpose **: เก็บข้อมูลสาขางาน (Disciplines) แยกตามสัญญา (Req 6B) | COLUMN Name | Data TYPE | Constraints | Description | |: -------------- | :----------- | :----------- | :--------------------- |
+ | id | INT | PK,
+ AI | UNIQUE identifier | | contract_id | INT | FK,
+ NOT NULL | ผูกกับสัญญา | | discipline_code | VARCHAR(10) | NOT NULL | รหัสสาขา (เช่น GEN, STR) | | code_name_th | VARCHAR(255) | NULL | ชื่อไทย | | code_name_en | VARCHAR(255) | NULL | ชื่ออังกฤษ | | is_active | TINYINT(1) | DEFAULT 1 | สถานะการใช้งาน | ** INDEXES **: - UNIQUE (contract_id, discipline_code) ---
+
+ ## **2. 👥 Users & RBAC Tables (ผู้ใช้, สิทธิ์, บทบาท)**
+
+ ### 2.1 users
+
+ * * Purpose **: MASTER TABLE storing ALL system users | COLUMN Name | Data TYPE | Constraints | Description | | ----------------------- | ------------ | ----------------------------------- | -------------------------------- |
+ | user_id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier FOR user | | username | VARCHAR(50) | NOT NULL,
+ UNIQUE | Login username | | password_hash | VARCHAR(255) | NOT NULL | Hashed PASSWORD (bcrypt) | | first_name | VARCHAR(50) | NULL | User 's first name |
+| last_name | VARCHAR(50) | NULL | User' s last name | | email | VARCHAR(100) | NOT NULL,
+ UNIQUE | Email address | | line_id | VARCHAR(100) | NULL | LINE messenger ID | | primary_organization_id | INT | NULL,
+ FK | PRIMARY organization affiliation | | is_active | TINYINT(1) | DEFAULT 1 | Active STATUS | | failed_attempts | INT | DEFAULT 0 | Failed login attempts counter | | locked_until | DATETIME | NULL | Account LOCK expiration time | | last_login_at | TIMESTAMP | NULL | Last successful login timestamp | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last
+UPDATE timestamp | | deleted_at | DATETIME | NULL | Deleted at | ** INDEXES **: - PRIMARY KEY (user_id) - UNIQUE (username) - UNIQUE (email) - FOREIGN KEY (primary_organization_id) REFERENCES organizations(id) ON DELETE
+SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: organizations (primary_organization_id) - Referenced by: user_assignments,
+ audit_logs,
+ notifications,
+ circulation_routings ---
+
+ ### 2.2 roles
+
+ * * Purpose **: MASTER TABLE defining system roles WITH scope levels | COLUMN Name | Data TYPE | Constraints | Description | | ----------- | ------------ | --------------------------- | ---------------------------------------------------- |
+ | role_id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier FOR role | | role_name | VARCHAR(100) | NOT NULL | Role name (e.g., 'Superadmin', 'Document Control') | | scope | ENUM | NOT NULL | Scope LEVEL: GLOBAL,
+ Organization,
+ Project,
+ Contract | | description | TEXT | NULL | Role description | | is_system | BOOLEAN | DEFAULT FALSE | System role flag (cannot be deleted) |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+** INDEXES **: - PRIMARY KEY (role_id) - INDEX (scope) ** Relationships **: - Referenced by: role_permissions,
+ user_assignments ---
+
+ ### 2.3 permissions
+
+ * * Purpose **: MASTER TABLE defining ALL system permissions | COLUMN Name | Data TYPE | Constraints | Description | | --------------- | ------------ | --------------------------- | ------------------------------------------------------ |
+ | permission_id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier FOR permission | | permission_name | VARCHAR(100) | NOT NULL,
+ UNIQUE | Permission code (e.g., 'rfas.create', 'document.view') | | description | TEXT | NULL | Permission description | | module | VARCHAR(50) | NULL | Related module name | | scope_level | ENUM | NULL | Scope: GLOBAL,
+ ORG,
+ PROJECT | | is_active | TINYINT(1) | DEFAULT 1 | Active STATUS |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+** INDEXES **: - PRIMARY KEY (permission_id) - UNIQUE (permission_name) - INDEX (module) - INDEX (scope_level) - INDEX (is_active) ** Relationships **: - Referenced by: role_permissions ---
+
+ ### 2.4 role_permissions
+
+ * * Purpose **: Junction TABLE mapping roles TO permissions (M :N) | COLUMN Name | Data TYPE | Constraints | Description | | ------------- | --------- | --------------- | ------------------------------ |
+ | role_id | INT | PRIMARY KEY,
+ FK | Reference TO roles TABLE | | permission_id | INT | PRIMARY KEY,
+ FK | Reference TO permissions TABLE | ** INDEXES **: - PRIMARY KEY (role_id, permission_id) - FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE CASCADE - FOREIGN KEY (permission_id) REFERENCES permissions(permission_id) ON DELETE CASCADE - INDEX (permission_id) ** Relationships **: - Parent: roles,
+ permissions ---
+
+ ### 2.5 user_assignments
+
+ * * Purpose **: Junction TABLE assigning users TO roles WITH scope context | COLUMN Name | Data TYPE | Constraints | Description | | ------------------- | --------- | --------------------------- | ---------------------------------- |
+ | id | INT | PRIMARY KEY,
+ AUTO_INCREMENT | UNIQUE identifier | | user_id | INT | NOT NULL,
+ FK | Reference TO users TABLE | | role_id | INT | NOT NULL,
+ FK | Reference TO roles TABLE | | organization_id | INT | NULL,
+ FK | Organization scope (IF applicable) | | project_id | INT | NULL,
+ FK | Project scope (IF applicable) | | contract_id | INT | NULL,
+ FK | Contract scope (IF applicable) | | assigned_by_user_id | INT | NULL,
+ FK | User who made the assignment | | assigned_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Assignment timestamp | ** INDEXES **: - PRIMARY KEY (id) - FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE - FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE CASCADE - FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE - FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE - FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE CASCADE - FOREIGN KEY (assigned_by_user_id) REFERENCES users(user_id) - INDEX (user_id, role_id) - INDEX (organization_id) - INDEX (project_id) - INDEX (contract_id) ** Relationships **: - Parent: users,
+ roles,
+ organizations,
+ projects,
+ contracts ---
+
+ ### 2.6 project_organizations
+
+ * * Purpose **: Junction TABLE linking projects TO participating organizations (M :N) | COLUMN Name | Data TYPE | Constraints | Description | | --------------- | --------- | --------------- | -------------------------------- |
+ | project_id | INT | PRIMARY KEY,
+ FK | Reference TO projects TABLE | | organization_id | INT | PRIMARY KEY,
+ FK | Reference TO organizations TABLE | ** INDEXES **: - PRIMARY KEY (project_id, organization_id) - FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE - FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE - INDEX (organization_id) ** Relationships **: - Parent: projects,
+ organizations ---
+
+ ### 2.7 contract_organizations
+
+ * * Purpose **: Junction TABLE linking contracts TO participating organizations WITH roles (M :N) | COLUMN Name | Data TYPE | Constraints | Description | | ---------------- | ------------ | --------------- | ------------------------------------------------------------------------- |
+ | contract_id | INT | PRIMARY KEY,
+ FK | Reference TO contracts TABLE | | organization_id | INT | PRIMARY KEY,
+ FK | Reference TO organizations TABLE | | role_in_contract | VARCHAR(100) | NULL | Organization 's role in contract (Owner, Designer, Consultant, Contractor) |
+
+**Indexes**:
+
+* PRIMARY KEY (contract_id, organization_id)
+* FOREIGN KEY (contract_id) REFERENCES contracts(id) ON DELETE CASCADE
+* FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE
+* INDEX (organization_id)
+* INDEX (role_in_contract)
+
+**Relationships**:
+
+* Parent: contracts, organizations
+
+---
+
+### 2.8 user_preferences (NEW v1.5.1)
+
+**Purpose**: เก็บการตั้งค่าส่วนตัวของผู้ใช้ (Req 5.5, 6.8.3)
+
+| Column Name | Data Type | Constraints | Description |
+| :----------- | :---------- | :---------------- | :-------------- |
+| user_id | INT | PK, FK | User ID |
+| notify_email | BOOLEAN | DEFAULT TRUE | รับอีเมลแจ้งเตือน |
+| notify_line | BOOLEAN | DEFAULT TRUE | รับไลน์แจ้งเตือน |
+| digest_mode | BOOLEAN | DEFAULT FALSE | รับแจ้งเตือนแบบรวม |
+| ui_theme | VARCHAR(20) | DEFAULT ' light ' | UI Theme |
+
+---
+
+### 2.9 refresh_tokens (NEW v1.5.1)
+
+**Purpose**: เก็บ Refresh Tokens สำหรับการทำ Authentication และ Token Rotation
+
+| Column Name | Data Type | Constraints | Description |
+| :---------------- | :----------- | :------------------------ | :------------------------------------ |
+| token_id | INT | PK, AI | Unique Token ID |
+| user_id | INT | FK, NOT NULL | เจ้าของ Token |
+| token_hash | VARCHAR(255) | NOT NULL | Hash ของ Refresh Token (Security) |
+| expires_at | DATETIME | NOT NULL | วันหมดอายุของ Token |
+| is_revoked | BOOLEAN | DEFAULT FALSE | สถานะถูกยกเลิก (True = ใช้งานไม่ได้) |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | เวลาที่สร้าง |
+| replaced_by_token | VARCHAR(255) | NULL | Token ใหม่ที่มาแทนที่ (กรณี Token Rotation) |
+
+**Indexes**:
+
+* PRIMARY KEY (token_id)
+* FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
+* INDEX (user_id)
+
+**Relationships**:
+
+* Parent: users
+
+---
+
+## **3. ✉️ Correspondences Tables (เอกสารหลัก, Revisions, Workflows)**
+
+### 3.1 correspondence_types
+
+**Purpose**: Master table for correspondence document types
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | --------------------------- | --------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique identifier |
+| type_code | VARCHAR(50) | NOT NULL, UNIQUE | Type code (e.g., ' RFA ', ' RFI ', ' TRANSMITTAL ') |
+| type_name | VARCHAR(255) | NOT NULL | Full type name |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (type_code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: correspondences, document_number_formats, document_number_counters
+
+---
+
+### 3.2 correspondence_sub_types (NEW v1.5.1)
+
+**Purpose**: เก็บประเภทหนังสือย่อย (Sub Types) สำหรับ Mapping เลขรหัส (Req 6B)
+
+| Column Name | Data Type | Constraints | Description |
+| :--------------------- | :----------- | :----------- | :------------------------ |
+| id | INT | PK, AI | Unique identifier |
+| contract_id | INT | FK, NOT NULL | ผูกกับสัญญา |
+| correspondence_type_id | INT | FK, NOT NULL | ผูกกับประเภทเอกสารหลัก |
+| sub_type_code | VARCHAR(20) | NOT NULL | รหัสย่อย (เช่น MAT, SHP) |
+| sub_type_name | VARCHAR(255) | NULL | ชื่อประเภทหนังสือย่อย |
+| sub_type_number | VARCHAR(10) | NULL | เลขรหัสสำหรับ Running Number |
+
+---
+
+### 3.3 correspondences (UPDATE v1.5.1)
+
+**Purpose**: Master table for correspondence documents (non-revisioned data)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------- | ------------ | --------------------------- | ------------------------------------------ |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Master correspondence ID |
+| correspondence_number | VARCHAR(100) | NOT NULL | Document number (from numbering system) |
+| correspondence_type_id | INT | NOT NULL, FK | Reference to correspondence_types |
+| **discipline_id** | **INT** | **NULL, FK** | **[NEW] สาขางาน (ถ้ามี)** |
+| is_internal_communication | TINYINT(1) | DEFAULT 0 | Internal (1) or external (0) communication |
+| project_id | INT | NOT NULL, FK | Reference to projects table |
+| originator_id | INT | NULL, FK | Originating organization |
+| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| created_by | INT | NULL, FK | User who created the record |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types(id) ON DELETE RESTRICT
+* **FOREIGN KEY (discipline_id) REFERENCES disciplines(id) ON DELETE SET NULL**
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* FOREIGN KEY (originator_id) REFERENCES organizations(id) ON DELETE SET NULL
+* FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
+* UNIQUE KEY (project_id, correspondence_number)
+* INDEX (correspondence_type_id)
+* INDEX (originator_id)
+* INDEX (deleted_at)
+
+**Relationships**:
+
+* Parent: correspondence_types, **disciplines**, projects, organizations, users
+* Children: correspondence_revisions, correspondence_recipients, correspondence_tags, correspondence_references, correspondence_attachments, circulations, transmittals
+
+---
+
+### 3.4 correspondence_revisions (UPDATE v1.5.1)
+
+**Purpose**: Child table storing revision history of correspondences (1:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------ | ------------ | --------------------------------- | -------------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
+| correspondence_id | INT | NOT NULL, FK | Master correspondence ID |
+| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
+| revision_label | VARCHAR(10) | NULL | Display revision (A, B, 1.1...) |
+| is_current | BOOLEAN | DEFAULT FALSE | Current revision flag |
+| correspondence_status_id | INT | NOT NULL, FK | Current status of this revision |
+| title | VARCHAR(255) | NOT NULL | Document title |
+| document_date | DATE | NULL | Document date |
+| issued_date | DATETIME | NULL | Issue date |
+| received_date | DATETIME | NULL | Received date |
+| due_date | DATETIME | NULL | Due date for response |
+| description | TEXT | NULL | Revision description |
+| details | JSON | NULL | Type-specific details (e.g., RFI questions) |
+| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | Revision creation timestamp |
+| created_by | INT | NULL, FK | User who created revision |
+| updated_by | INT | NULL, FK | User who last updated |
+| v_ref_project_id | INT | GENERATED ALWAYS AS (...) VIRTUAL | Virtual Column ดึง Project ID จาก JSON details เพื่อทำ Index |
+| v_ref_type | VARCHAR(50) | GENERATED ALWAYS AS (...) VIRTUAL | Virtual Column ดึง Type จาก JSON details |
+| v_doc_subtype | VARCHAR(50) | GENERATED ALWAYS AS (...) VIRTUAL | Virtual Column ดึง Type จาก JSON details |
+| schema_version | INT | DEFAULT 1 | Version of the schema used with this details |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* FOREIGN KEY (correspondence_status_id) REFERENCES correspondence_status(id) ON DELETE RESTRICT
+* FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
+* FOREIGN KEY (updated_by) REFERENCES users(user_id) ON DELETE SET NULL
+* UNIQUE KEY (correspondence_id, revision_number)
+* UNIQUE KEY (correspondence_id, is_current)
+* INDEX (correspondence_status_id)
+* INDEX (is_current)
+* INDEX (document_date)
+* INDEX (issued_date)
+* INDEX (v_ref_project_id)
+* INDEX (v_ref_type)
+* INDEX (v_doc_subtype)
+
+---
+
+### 3.5 correspondence_recipients
+
+**Purpose**: Junction table for correspondence recipients (TO/CC) (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------- | -------------------- | --------------- | ---------------------------- |
+| correspondence_id | INT | PRIMARY KEY, FK | Reference to correspondences |
+| recipient_organization_id | INT | PRIMARY KEY, FK | Recipient organization |
+| recipient_type | ENUM(' TO ', ' CC ') | PRIMARY KEY | Recipient type |
+
+**Indexes**:
+
+* PRIMARY KEY (correspondence_id, recipient_organization_id, recipient_type)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondence_revisions(correspondence_id) ON DELETE CASCADE
+* FOREIGN KEY (recipient_organization_id) REFERENCES organizations(id) ON DELETE RESTRICT
+* INDEX (recipient_organization_id)
+* INDEX (recipient_type)
+
+**Relationships**:
+
+* Parent: correspondences, organizations
+
+---
+
+### 3.6 tags
+
+**Purpose**: Master table for document tagging system
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | ----------------------------------- | ------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique tag ID |
+| tag_name | VARCHAR(100) | NOT NULL, UNIQUE | Tag name |
+| description | TEXT | NULL | Tag description |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (tag_name)
+* INDEX (tag_name) - For autocomplete
+
+**Relationships**:
+
+* Referenced by: correspondence_tags
+
+---
+
+### 3.7 correspondence_tags
+
+**Purpose**: Junction table linking correspondences to tags (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------- | --------- | --------------- | ---------------------------- |
+| correspondence_id | INT | PRIMARY KEY, FK | Reference to correspondences |
+| tag_id | INT | PRIMARY KEY, FK | Reference to tags |
+
+**Indexes**:
+
+* PRIMARY KEY (correspondence_id, tag_id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
+* INDEX (tag_id)
+
+**Relationships**:
+
+* Parent: correspondences, tags
+
+---
+
+### 3.8 correspondence_references
+
+**Purpose**: Junction table for cross-referencing correspondences (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| --------------------- | --------- | --------------- | ------------------------------------- |
+| src_correspondence_id | INT | PRIMARY KEY, FK | Source correspondence ID |
+| tgt_correspondence_id | INT | PRIMARY KEY, FK | Target (referenced) correspondence ID |
+
+**Indexes**:
+
+* PRIMARY KEY (src_correspondence_id, tgt_correspondence_id)
+* FOREIGN KEY (src_correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* FOREIGN KEY (tgt_correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* INDEX (tgt_correspondence_id)
+
+**Relationships**:
+
+* Parent: correspondences (both sides)
+
+---
+
+## **4. 📐 approval: RFA Tables (เอกสารขออนุมัติ, Workflows)**
+
+### 4.1 rfa_types
+
+**Purpose**: Master table for RFA (Request for Approval) types
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | --------------------------- | ------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique identifier |
+| type_code | VARCHAR(20) | NOT NULL, UNIQUE | Type code (DWG, DOC, MAT, etc.) |
+| type_name | VARCHAR(100) | NOT NULL | Full type name |
+| description | TEXT | NULL | Type description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (type_code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: rfas
+
+---
+
+### 4.2 rfa_status_codes
+
+**Purpose**: Master table for RFA status codes
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | --------------------------- | --------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique identifier |
+| status_code | VARCHAR(20) | NOT NULL, UNIQUE | Status code (DFT, FAP, FRE, etc.) |
+| status_name | VARCHAR(100) | NOT NULL | Full status name |
+| description | TEXT | NULL | Status description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (status_code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: rfa_revisions
+
+---
+
+### 4.3 rfa_approve_codes
+
+**Purpose**: Master table for RFA approval result codes
+
+| Column Name | Data Type | Constraints | Description |
+| ------------ | ------------ | --------------------------- | -------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique identifier |
+| approve_code | VARCHAR(20) | NOT NULL, UNIQUE | Approval code (1A, 1C, 3R, etc.) |
+| approve_name | VARCHAR(100) | NOT NULL | Full approval name |
+| description | TEXT | NULL | Code description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (approve_code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: rfa_revisions
+
+---
+
+### 4.4 rfas (UPDATE v1.5.1)
+
+**Purpose**: Master table for RFA documents (non-revisioned data)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------- | --------- | --------------------------- | --------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Master RFA ID |
+| rfa_type_id | INT | NOT NULL, FK | Reference to rfa_types |
+| **discipline_id** | **INT** | **NULL, FK** | **[NEW] สาขางาน (ถ้ามี)** |
+| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| created_by | INT | NULL, FK | User who created the record |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (rfa_type_id) REFERENCES rfa_types(id)
+* **FOREIGN KEY (discipline_id) REFERENCES disciplines(id) ON DELETE SET NULL**
+* FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
+* INDEX (rfa_type_id)
+* INDEX (deleted_at)
+
+**Relationships**:
+
+* Parent: rfa_types, **disciplines**, users
+* Children: rfa_revisions
+
+---
+
+### 4.5 rfa_revisions (UPDATE v1.5.1)
+
+**Purpose**: Child table storing revision history of RFAs (1:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------- | ------------ | --------------------------------- | ----------------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
+| correspondence_id | INT | NOT NULL, FK | Link to correspondence (RFA as correspondence) |
+| rfa_id | INT | NOT NULL, FK | Master RFA ID |
+| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
+| revision_label | VARCHAR(10) | NULL | Display revision (A, B, 1.1...) |
+| is_current | BOOLEAN | DEFAULT FALSE | Current revision flag |
+| rfa_status_code_id | INT | NOT NULL, FK | Current RFA status |
+| rfa_approve_code_id | INT | NULL, FK | Approval result code |
+| title | VARCHAR(255) | NOT NULL | RFA title |
+| document_date | DATE | NULL | Document date |
+| issued_date | DATE | NULL | Issue date for approval |
+| received_date | DATETIME | NULL | Received date |
+| approved_date | DATE | NULL | Approval date |
+| description | TEXT | NULL | Revision description |
+| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | Revision creation timestamp |
+| created_by | INT | NULL, FK | User who created revision |
+| updated_by | INT | NULL, FK | User who last updated |
+| details | JSON | NULL | Type-specific details (e.g., RFI questions) |
+| v_ref_drawing_count | INT | GENERATED ALWAYS AS (...) VIRTUAL | Virtual Column ดึง Drawing Count จาก JSON details เพื่อทำ Index |
+| schema_version | INT | DEFAULT 1 | Version of the schema used with this details |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* FOREIGN KEY (rfa_id) REFERENCES rfas(id) ON DELETE CASCADE
+* FOREIGN KEY (rfa_status_code_id) REFERENCES rfa_status_codes(id)
+* FOREIGN KEY (rfa_approve_code_id) REFERENCES rfa_approve_codes(id) ON DELETE SET NULL
+* FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
+* FOREIGN KEY (updated_by) REFERENCES users(user_id) ON DELETE SET NULL
+* UNIQUE KEY (rfa_id, revision_number)
+* UNIQUE KEY (rfa_id, is_current)
+* INDEX (rfa_status_code_id)
+* INDEX (rfa_approve_code_id)
+* INDEX (is_current)
+* INDEX (v_ref_drawing_count): ตัวอย่างการ Index ข้อมูลตัวเลขใน JSON
+
+**Relationships**:
+
+* Parent: correspondences, rfas, rfa_status_codes, rfa_approve_codes, users
+* Children: rfa_items, rfa_workflows
+
+---
+
+### 4.6 rfa_items
+
+**Purpose**: Junction table linking RFA revisions to shop drawing revisions (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------ | --------- | --------------- | ------------------------------ |
+| rfarev_correspondence_id | INT | PRIMARY KEY, FK | RFA revision correspondence ID |
+| shop_drawing_revision_id | INT | PRIMARY KEY, FK | Shop drawing revision ID |
+
+**Indexes**:
+
+* PRIMARY KEY (rfarev_correspondence_id, shop_drawing_revision_id)
+* FOREIGN KEY (rfarev_correspondence_id) REFERENCES rfa_revisions(correspondence_id) ON DELETE CASCADE
+* FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions(id) ON DELETE CASCADE
+* INDEX (shop_drawing_revision_id)
+
+**Relationships**:
+
+* Parent: rfa_revisions, shop_drawing_revisions
+
+**Business Rules**:
+
+* Used primarily for RFA type = ' DWG ' (Shop Drawing)
+* One RFA can contain multiple shop drawings
+* One shop drawing can be referenced by multiple RFAs
+
+---
+
+### 4.7 rfa_workflows
+
+**Purpose**: Transaction log table tracking actual RFA approval workflow execution
+
+| Column Name | Data Type | Constraints | Description |
+| --------------- | --------- | ----------------------------------- | ------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique workflow log ID |
+| rfa_revision_id | INT | NOT NULL, FK | Reference to RFA revision |
+| step_number | INT | NOT NULL | Current step number |
+| organization_id | INT | NOT NULL, FK | Organization responsible |
+| assigned_to | INT | NULL, FK | Assigned user ID |
+| action_type | ENUM | NULL | Action type: REVIEW, APPROVE, ACKNOWLEDGE |
+| status | ENUM | NULL | Status: PENDING, IN_PROGRESS, COMPLETED, REJECTED |
+| comments | TEXT | NULL | Comments/remarks |
+| completed_at | DATETIME | NULL | Completion timestamp |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| state_context | JSON\* | NULL | เก็บข้อมูล Context ของ Workflow ณ ขณะนั้น (Snapshot) |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (rfa_revision_id) REFERENCES rfa_revisions(id) ON DELETE CASCADE
+* FOREIGN KEY (organization_id) REFERENCES organizations(id)
+* FOREIGN KEY (assigned_to) REFERENCES users(user_id)
+* INDEX (rfa_revision_id, step_number)
+* INDEX (assigned_to, status)
+* INDEX (status)
+
+**Relationships**:
+
+* Parent: rfa_revisions, organizations, users
+
+**Business Rules**:
+
+* Records actual workflow execution history
+* Tracks who did what and when
+* Multiple records per RFA revision (one per step)
+* Status changes tracked via updated_at
+
+---
+
+## **5. 📐 Drawings Tables (แบบ, หมวดหมู่)**
+
+### 5.1 contract_drawing_volumes
+
+**Purpose**: Master table for contract drawing volume classification
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | ----------------------------------- | ------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique volume ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| volume_code | VARCHAR(50) | NOT NULL | Volume code |
+| volume_name | VARCHAR(255) | NOT NULL | Volume name |
+| description | TEXT | NULL | Volume description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* UNIQUE KEY (project_id, volume_code)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Parent: projects
+* Referenced by: contract_drawings
+
+**Business Rules**:
+
+* Volume codes must be unique within a project
+* Used for organizing large sets of contract drawings
+
+---
+
+### 5.2 contract_drawing_cats
+
+**Purpose**: Master table for contract drawing main categories
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | ----------------------------------- | ------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique category ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| cat_code | VARCHAR(50) | NOT NULL | Category code |
+| cat_name | VARCHAR(255) | NOT NULL | Category name |
+| description | TEXT | NULL | Category description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* UNIQUE KEY (project_id, cat_code)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Parent: projects
+* Referenced by: contract_drawing_subcat_cat_maps
+
+**Business Rules**:
+
+* Category codes must be unique within a project
+* Hierarchical relationship with sub-categories via mapping table
+
+---
+
+### 5.3 contract_drawing_sub_cats
+
+**Purpose**: Master table for contract drawing sub-categories
+
+| Column Name | Data Type | Constraints | Description |
+| ------------ | ------------ | ----------------------------------- | ------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique sub-category ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| sub_cat_code | VARCHAR(50) | NOT NULL | Sub-category code |
+| sub_cat_name | VARCHAR(255) | NOT NULL | Sub-category name |
+| description | TEXT | NULL | Sub-category description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* UNIQUE KEY (project_id, sub_cat_code)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Parent: projects
+* Referenced by: contract_drawings, contract_drawing_subcat_cat_maps
+
+**Business Rules**:
+
+* Sub-category codes must be unique within a project
+* Can be mapped to multiple main categories via mapping table
+
+---
+
+### 5.4 contract_drawing_subcat_cat_maps
+
+**Purpose**: Junction table mapping sub-categories to main categories (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | --------- | --------------- | -------------------------- |
+| project_id | INT | PRIMARY KEY, FK | Reference to projects |
+| sub_cat_id | INT | PRIMARY KEY, FK | Reference to sub-category |
+| cat_id | INT | PRIMARY KEY, FK | Reference to main category |
+
+**Indexes**:
+
+* PRIMARY KEY (project_id, sub_cat_id, cat_id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* FOREIGN KEY (sub_cat_id) REFERENCES contract_drawing_sub_cats(id) ON DELETE CASCADE
+* FOREIGN KEY (cat_id) REFERENCES contract_drawing_cats(id) ON DELETE CASCADE
+* INDEX (sub_cat_id)
+* INDEX (cat_id)
+
+**Relationships**:
+
+* Parent: projects, contract_drawing_sub_cats, contract_drawing_cats
+
+**Business Rules**:
+
+* Allows flexible categorization
+* One sub-category can belong to multiple main categories
+* All three fields required for uniqueness
+
+---
+
+### 5.5 contract_drawings
+
+**Purpose**: Master table for contract drawings (from contract specifications)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | ----------------------------------- | ------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique drawing ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| condwg_no | VARCHAR(255) | NOT NULL | Contract drawing number |
+| title | VARCHAR(255) | NOT NULL | Drawing title |
+| sub_cat_id | INT | NULL, FK | Reference to sub-category |
+| volume_id | INT | NULL, FK | Reference to volume |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+| updated_by | INT | NULL, FK | User who last updated |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* FOREIGN KEY (sub_cat_id) REFERENCES contract_drawing_sub_cats(id) ON DELETE RESTRICT
+* FOREIGN KEY (volume_id) REFERENCES contract_drawing_volumes(id) ON DELETE RESTRICT
+* FOREIGN KEY (updated_by) REFERENCES users(user_id)
+* UNIQUE KEY (project_id, condwg_no)
+* INDEX (sub_cat_id)
+* INDEX (volume_id)
+* INDEX (deleted_at)
+
+**Relationships**:
+
+* Parent: projects, contract_drawing_sub_cats, contract_drawing_volumes, users
+* Referenced by: shop_drawing_revision_contract_refs, contract_drawing_attachments
+
+**Business Rules**:
+
+* Drawing numbers must be unique within a project
+* Represents baseline/contract drawings
+* Referenced by shop drawings for compliance tracking
+* Soft delete preserves history
+
+---
+
+### 5.6 shop_drawing_main_categories
+
+**Purpose**: Master table for shop drawing main categories (discipline-level)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------ | ------------ | ----------------------------------- | ------------------------------------ |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique category ID |
+| main_category_code | VARCHAR(50) | NOT NULL, UNIQUE | Category code (ARCH, STR, MEP, etc.) |
+| main_category_name | VARCHAR(255) | NOT NULL | Category name |
+| description | TEXT | NULL | Category description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (main_category_code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: shop_drawing_sub_categories, shop_drawings
+
+**Business Rules**:
+
+* Global categories (not project-specific)
+* Typically represents engineering disciplines
+
+---
+
+### 5.7 shop_drawing_sub_categories
+
+**Purpose**: Master table for shop drawing sub-categories (component-level)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------- | ------------ | ----------------------------------- | ----------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique sub-category ID |
+| sub_category_code | VARCHAR(50) | NOT NULL, UNIQUE | Sub-category code (STR-COLUMN, ARCH-DOOR, etc.) |
+| sub_category_name | VARCHAR(255) | NOT NULL | Sub-category name |
+| main_category_id | INT | NOT NULL, FK | Reference to main category |
+| description | TEXT | NULL | Sub-category description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (sub_category_code)
+* FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories(id)
+* INDEX (main_category_id)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Parent: shop_drawing_main_categories
+* Referenced by: shop_drawings
+
+**Business Rules**:
+
+* Global sub-categories (not project-specific)
+* Hierarchical under main categories
+* Represents specific drawing types or components
+
+---
+
+### 5.8 shop_drawings
+
+**Purpose**: Master table for shop drawings (contractor-submitted)
+
+| Column Name | Data Type | Constraints | Description |
+| ---------------- | ------------ | ----------------------------------- | -------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique drawing ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| drawing_number | VARCHAR(100) | NOT NULL, UNIQUE | Shop drawing number |
+| title | VARCHAR(500) | NOT NULL | Drawing title |
+| main_category_id | INT | NOT NULL, FK | Reference to main category |
+| sub_category_id | INT | NOT NULL, FK | Reference to sub-category |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+| deleted_at | DATETIME | NULL | Soft delete timestamp |
+| updated_by | INT | NULL, FK | User who last updated |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (drawing_number)
+* FOREIGN KEY (project_id) REFERENCES projects(id)
+* FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories(id)
+* FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories(id)
+* FOREIGN KEY (updated_by) REFERENCES users(user_id)
+* INDEX (project_id)
+* INDEX (main_category_id)
+* INDEX (sub_category_id)
+* INDEX (deleted_at)
+
+**Relationships**:
+
+* Parent: projects, shop_drawing_main_categories, shop_drawing_sub_categories, users
+* Children: shop_drawing_revisions
+
+**Business Rules**:
+
+* Drawing numbers are globally unique across all projects
+* Represents contractor shop drawings
+* Can have multiple revisions
+* Soft delete preserves history
+
+---
+
+### 5.9 shop_drawing_revisions
+
+**Purpose**: Child table storing revision history of shop drawings (1:N)
+
+| Column Name | Data Type | Constraints | Description |
+| --------------- | ----------- | --------------------------- | ------------------------------ |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
+| shop_drawing_id | INT | NOT NULL, FK | Master shop drawing ID |
+| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
+| revision_label | VARCHAR(10) | NULL | Display revision (A, B, C...) |
+| revision_date | DATE | NULL | Revision date |
+| description | TEXT | NULL | Revision description/changes |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Revision creation timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (shop_drawing_id) REFERENCES shop_drawings(id) ON DELETE CASCADE
+* UNIQUE KEY (shop_drawing_id, revision_number)
+* INDEX (revision_date)
+
+**Relationships**:
+
+* Parent: shop_drawings
+* Referenced by: rfa_items, shop_drawing_revision_contract_refs, shop_drawing_revision_attachments
+
+**Business Rules**:
+
+* Revision numbers are sequential starting from 0
+* Each revision can reference multiple contract drawings
+* Each revision can have multiple file attachments
+* Linked to RFAs for approval tracking
+
+---
+
+### 5.10 shop_drawing_revision_contract_refs
+
+**Purpose**: Junction table linking shop drawing revisions to referenced contract drawings (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------ | --------- | --------------- | ---------------------------------- |
+| shop_drawing_revision_id | INT | PRIMARY KEY, FK | Reference to shop drawing revision |
+| contract_drawing_id | INT | PRIMARY KEY, FK | Reference to contract drawing |
+
+**Indexes**:
+
+* PRIMARY KEY (shop_drawing_revision_id, contract_drawing_id)
+* FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions(id) ON DELETE CASCADE
+* FOREIGN KEY (contract_drawing_id) REFERENCES contract_drawings(id) ON DELETE CASCADE
+* INDEX (contract_drawing_id)
+
+**Relationships**:
+
+* Parent: shop_drawing_revisions, contract_drawings
+
+**Business Rules**:
+
+* Tracks which contract drawings each shop drawing revision is based on
+* Ensures compliance with contract specifications
+* One shop drawing revision can reference multiple contract drawings
+
+---
+
+## **6. 🔄 Circulations Tables (ใบเวียนภายใน)**
+
+### 6.1 circulation_status_codes
+
+**Purpose**: Master table for circulation workflow status codes
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ----------- | --------------------------- | --------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique status ID |
+| code | VARCHAR(20) | NOT NULL, UNIQUE | Status code (OPEN, IN_REVIEW, COMPLETED, CANCELLED) |
+| description | VARCHAR(50) | NOT NULL | Status description |
+| sort_order | INT | DEFAULT 0 | Display order |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (code)
+* INDEX (is_active)
+* INDEX (sort_order)
+
+**Relationships**:
+
+* Referenced by: circulations
+
+**Seed Data**: 4 status codes
+
+* OPEN: Initial status when created
+* IN_REVIEW: Under review by recipients
+* COMPLETED: All recipients have responded
+* CANCELLED: Withdrawn/cancelled
+
+---
+
+### 6.2 circulations
+
+**Purpose**: Master table for internal circulation sheets (document routing)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------------- | ------------ | ----------------------------------- | ----------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique circulation ID |
+| correspondence_id | INT | UNIQUE, FK | Link to correspondence (1:1 relationship) |
+| organization_id | INT | NOT NULL, FK | Organization that owns this circulation |
+| circulation_no | VARCHAR(100) | NOT NULL | Circulation sheet number |
+| circulation_subject | VARCHAR(500) | NOT NULL | Subject/title |
+| circulation_status_code | VARCHAR(20) | NOT NULL, FK | Current status code |
+| created_by_user_id | INT | NOT NULL, FK | User who created circulation |
+| submitted_at | TIMESTAMP | NULL | Submission timestamp |
+| closed_at | TIMESTAMP | NULL | Closure timestamp |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* UNIQUE (correspondence_id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id)
+* FOREIGN KEY (organization_id) REFERENCES organizations(id)
+* FOREIGN KEY (circulation_status_code) REFERENCES circulation_status_codes(code)
+* FOREIGN KEY (created_by_user_id) REFERENCES users(user_id)
+* INDEX (organization_id)
+* INDEX (circulation_status_code)
+* INDEX (created_by_user_id)
+
+**Relationships**:
+
+* Parent: correspondences, organizations, circulation_status_codes, users
+* Children: circulation_routings, circulation_attachments
+
+**Business Rules**:
+
+* Internal document routing within organization
+* One-to-one relationship with correspondences
+* Tracks document review/approval workflow
+* Status progression: OPEN → IN_REVIEW → COMPLETED/CANCELLED
+
+---
+
+## **7. 📤 Transmittals Tables (เอกสารนำส่ง)**
+
+### 7.1 transmittals
+
+**Purpose**: Child table for transmittal-specific data (1:1 with correspondences)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------- | --------- | --------------- | --------------------------------------------------------- |
+| correspondence_id | INT | PRIMARY KEY, FK | Reference to correspondences (1:1) |
+| purpose | ENUM | NULL | Purpose: FOR_APPROVAL, FOR_INFORMATION, FOR_REVIEW, OTHER |
+| remarks | TEXT | NULL | Additional remarks |
+
+**Indexes**:
+
+* PRIMARY KEY (correspondence_id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* INDEX (purpose)
+
+**Relationships**:
+
+* Parent: correspondences
+* Children: transmittal_items
+
+**Business Rules**:
+
+* One-to-one relationship with correspondences
+* Transmittal is a correspondence type for forwarding documents
+* Contains metadata about the transmission
+
+---
+
+### 7.2 transmittal_items
+
+**Purpose**: Junction table listing documents included in transmittal (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ---------------------- | ------------ | --------------------------- | --------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique item ID |
+| transmittal_id | INT | NOT NULL, FK | Reference to transmittal |
+| item_correspondence_id | INT | NOT NULL, FK | Reference to document being transmitted |
+| quantity | INT | DEFAULT 1 | Number of copies |
+| remarks | VARCHAR(255) | NULL | Item-specific remarks |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (transmittal_id) REFERENCES transmittals(correspondence_id) ON DELETE CASCADE
+* FOREIGN KEY (item_correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* UNIQUE KEY (transmittal_id, item_correspondence_id)
+* INDEX (item_correspondence_id)
+
+**Relationships**:
+
+* Parent: transmittals, correspondences
+
+**Business Rules**:
+
+* One transmittal can contain multiple documents
+* Tracks quantity of physical copies (if applicable)
+* Links to any type of correspondence document
+
+---
+
+## **8. 📎 File Management Tables (ไฟล์แนบ)**
+
+### 8.1 attachments
+
+**Purpose**: Central repository for all file attachments in the system
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------- | ------------ | --------------------------- | -------------------------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique attachment ID |
+| original_filename | VARCHAR(255) | NOT NULL | Original filename from upload |
+| stored_filename | VARCHAR(255) | NOT NULL | System-generated unique filename |
+| file_path | VARCHAR(500) | NOT NULL | Full file path on server (/share/dms-data/) |
+| mime_type | VARCHAR(100) | NOT NULL | MIME type (application/pdf, image/jpeg, etc.) |
+| file_size | INT | NOT NULL | File size in bytes |
+| uploaded_by_user_id | INT | NOT NULL, FK | User who uploaded file |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Upload timestamp |
+| is_temporary | BOOLEAN | DEFAULT TRUE | ระบุว่าเป็นไฟล์ชั่วคราว (ยังไม่ได้ Commit) |
+| temp_id\* | VARCHAR(100) | NULL | ID ชั่วคราวสำหรับอ้างอิงตอน Upload Phase 1 (อาจใช้ร่วมกับ id หรือแยกก็ได้) |
+| expires_at | DATETIME | NULL | เวลาหมดอายุของไฟล์ Temp (เพื่อให้ Cron Job ลบออก) |
+| checksum | VARCHAR(64) | NULL | SHA-256 Checksum สำหรับ Verify File Integrity [Req 3.9.3] |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (uploaded_by_user_id) REFERENCES users(user_id) ON DELETE CASCADE
+* INDEX (stored_filename)
+* INDEX (mime_type)
+* INDEX (uploaded_by_user_id)
+* INDEX (created_at)
+
+**Relationships**:
+
+* Parent: users
+* Referenced by: correspondence_attachments, circulation_attachments, shop_drawing_revision_attachments, contract_drawing_attachments
+
+**Business Rules**:
+
+* Central storage prevents file duplication
+* Stored filename prevents naming conflicts
+* File path points to QNAP NAS storage
+* Original filename preserved for download
+* One file record can be linked to multiple documents
+
+---
+
+### 8.2 correspondence_attachments
+
+**Purpose**: Junction table linking correspondences to file attachments (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ----------------- | --------- | --------------- | ---------------------------- |
+| correspondence_id | INT | PRIMARY KEY, FK | Reference to correspondences |
+| attachment_id | INT | PRIMARY KEY, FK | Reference to attachments |
+| is_main_document | BOOLEAN | DEFAULT FALSE | Main/primary document flag |
+
+**Indexes**:
+
+* PRIMARY KEY (correspondence_id, attachment_id)
+* FOREIGN KEY (correspondence_id) REFERENCES correspondences(id) ON DELETE CASCADE
+* FOREIGN KEY (attachment_id) REFERENCES attachments(id) ON DELETE CASCADE
+* INDEX (attachment_id)
+* INDEX (is_main_document)
+
+**Relationships**:
+
+* Parent: correspondences, attachments
+
+**Business Rules**:
+
+* One correspondence can have multiple attachments
+* One attachment can be linked to multiple correspondences
+* is_main_document identifies primary file (typically PDF)
+
+---
+
+### 8.3 circulation_attachments
+
+**Purpose**: Junction table linking circulations to file attachments (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ---------------- | --------- | --------------- | -------------------------- |
+| circulation_id | INT | PRIMARY KEY, FK | Reference to circulations |
+| attachment_id | INT | PRIMARY KEY, FK | Reference to attachments |
+| is_main_document | BOOLEAN | DEFAULT FALSE | Main/primary document flag |
+
+**Indexes**:
+
+* PRIMARY KEY (circulation_id, attachment_id)
+* FOREIGN KEY (circulation_id) REFERENCES circulations(id) ON DELETE CASCADE
+* FOREIGN KEY (attachment_id) REFERENCES attachments(id) ON DELETE CASCADE
+* INDEX (attachment_id)
+* INDEX (is_main_document)
+
+**Relationships**:
+
+* Parent: circulations, attachments
+
+---
+
+### 8.4 shop_drawing_revision_attachments
+
+**Purpose**: Junction table linking shop drawing revisions to file attachments (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------------ | --------- | --------------- | ---------------------------------- |
+| shop_drawing_revision_id | INT | PRIMARY KEY, FK | Reference to shop drawing revision |
+| attachment_id | INT | PRIMARY KEY, FK | Reference to attachments |
+| file_type | ENUM | NULL | File type: PDF, DWG, SOURCE, OTHER |
+| is_main_document | BOOLEAN | DEFAULT FALSE | Main/primary document flag |
+
+**Indexes**:
+
+* PRIMARY KEY (shop_drawing_revision_id, attachment_id)
+* FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions(id) ON DELETE CASCADE
+* FOREIGN KEY (attachment_id) REFERENCES attachments(id) ON DELETE CASCADE
+* INDEX (attachment_id)
+* INDEX (file_type)
+* INDEX (is_main_document)
+
+**Relationships**:
+
+* Parent: shop_drawing_revisions, attachments
+
+**Business Rules**:
+
+* file_type categorizes drawing file formats
+* Typically includes PDF for viewing and DWG for editing
+* SOURCE may include native CAD files
+
+---
+
+### 8.5 contract_drawing_attachments
+
+**Purpose**: Junction table linking contract drawings to file attachments (M:N)
+
+| Column Name | Data Type | Constraints | Description |
+| ------------------- | --------- | --------------- | ---------------------------------- |
+| contract_drawing_id | INT | PRIMARY KEY, FK | Reference to contract drawing |
+| attachment_id | INT | PRIMARY KEY, FK | Reference to attachments |
+| file_type | ENUM | NULL | File type: PDF, DWG, SOURCE, OTHER |
+| is_main_document | BOOLEAN | DEFAULT FALSE | Main/primary document flag |
+
+**Indexes**:
+
+* PRIMARY KEY (contract_drawing_id, attachment_id)
+* FOREIGN KEY (contract_drawing_id) REFERENCES contract_drawings(id) ON DELETE CASCADE
+* FOREIGN KEY (attachment_id) REFERENCES attachments(id) ON DELETE CASCADE
+* INDEX (attachment_id)
+* INDEX (file_type)
+* INDEX (is_main_document)
+
+**Relationships**:
+
+* Parent: contract_drawings, attachments
+
+---
+
+## **9. 🔢 Document Numbering System Tables (ระบบเลขที่เอกสาร)**
+
+### 9.1 document_number_formats
+
+**Purpose**: Master table defining numbering formats for each document type
+
+| Column Name | Data Type | Constraints | Description |
+| ---------------------- | ------------ | --------------------------- | -------------------------------------------- |
+| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique format ID |
+| project_id | INT | NOT NULL, FK | Reference to projects |
+| correspondence_type_id | INT | NOT NULL, FK | Reference to correspondence_types |
+| format_string | VARCHAR(100) | NOT NULL | Format pattern (e.g., {ORG}-{TYPE}-{YYYY}-#) |
+| description | TEXT | NULL | Format description |
+| is_active | TINYINT(1) | DEFAULT 1 | Active status |
+
+**Indexes**:
+
+* PRIMARY KEY (id)
+* FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
+* FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types(id) ON DELETE CASCADE
+* UNIQUE KEY (project_id, correspondence_type_id)
+* INDEX (is_active)
+
+**Relationships**:
+
+* Parent: projects, correspondence_types
+
+**Business Rules**:
+
+* Defines how document numbers are constructed
+* Supports placeholders: {PROJ}, {ORG}, {TYPE}, {YYYY}, {MM}, {#}
+
+---
+
+### 9.2 document_number_counters (UPDATE v1.5.1)
+
+**Purpose**: Transaction table tracking running numbers (High Concurrency)
+
+| Column Name | Data Type | Constraints | Description |
+| -------------------------- | --------- | ------------- | -------------------------------------------- |
+| project_id | INT | PK, NOT NULL | โครงการ |
+| originator_organization_id | INT | PK, NOT NULL | องค์กรผู้ส่ง |
+| recipient_organization_id | INT | PK, NOT NULL | [NEW] องค์กรผู้รับ (-1 = ทุกองค์กร) |
+| correspondence_type_id | INT | PK, NOT NULL | ประเภทเอกสาร |
+| sub_type_id | INT | PK, DEFAULT 0 | [NEW] ประเภทย่อย สำหรับ TRANSMITTAL (0 = ไม่ระบุ) |
+| rfa_type_id | INT | PK, DEFAULT 0 | [NEW] ประเภท RFA (0 = ไม่ใช่ RFA) |
+| discipline_id | INT | PK, DEFAULT 0 | [NEW] สาขางาน (0 = ไม่ระบุ) |
+| current_year | INT | PK, NOT NULL | ปี ค.ศ. ของตัวนับ (auto-reset ทุกปี) |
+| last_number | INT | DEFAULT 0 | เลขล่าสุดที่ถูกใช้งานไปแล้ว |
+| updated_at | TIMESTAMP | ON UPDATE | เวลาที่อัปเดตล่าสุด |
+
+**Indexes**:
+
+* **PRIMARY KEY (project_id, originator_organization_id, recipient_organization_id, correspondence_type_id, sub_type_id, rfa_type_id, discipline_id, current_year)**
+
+**Business Rules**:
+
+* **Composite Primary Key 8 Columns**: เพื่อรองรับการรันเลขที่ซับซ้อนตาม Req 6B
+* **Concurrency Control**: ใช้ Redis Lock หรือ Optimistic Locking ในการอัปเดต `last_number`
+* **Reset Rule**: `current_year` เปลี่ยน -> เริ่มนับ 1 ใหม่
+
+---
+
+### 9.3 document_number_audit (NEW v1.5.1)
+
+**Purpose**: Audit log for document number generation (Debugging & Tracking)
+
+| Column Name | Data Type | Constraints | Description |
+| :---------------- | :----------- | :---------- | :---------------------------------- |
+| id | BIGINT | PK, AI | Unique ID |
+| transaction_id | VARCHAR(36) | NOT NULL | UUID ของ Transaction การขอเลข |
+| counter_key_json | JSON | NOT NULL | ค่า Key ที่ใช้ในการ Query (เก็บเป็น JSON) |
+| generated_number | VARCHAR(100) | NOT NULL | เลขที่ได้ |
+| requested_by | INT | FK | User ที่ขอเลข |
+| requested_at | TIMESTAMP | DEFAULT NOW | เวลาที่ขอ |
+| execution_time_ms | INT | NULL | เวลาที่ใช้ในการประมวลผล (ms) |
+
+---
+
+### 9.4 document_number_errors (NEW v1.5.1)
+
+**Purpose**: Error log for failed document number generation
+
+| Column Name | Data Type | Constraints | Description |
+| :--------------- | :---------- | :---------- | :------------------------------- |
+| id | BIGINT | PK, AI | Unique ID |
+| transaction_id | VARCHAR(36) | NOT NULL | UUID ของ Transaction |
+| error_code | VARCHAR(50) | NOT NULL | รหัส Error (เช่น ERR_LOCK_TIMEOUT) |
+| error_message | TEXT | NOT NULL | รายละเอียด Error |
+| counter_key_json | JSON | NULL | ค่า Key ที่พยายามใช้ |
+| occurred_at | TIMESTAMP | DEFAULT NOW | เวลาที่เกิด Error |
+
+---
+
+## **10. ⚙️ Unified Workflow Engine Tables (NEW v1.5.1)**
+
+### 10.1 workflow_definitions
+
+**Purpose**: เก็บแม่แบบ (Template) ของ Workflow (Req 3.6)
+
+| Column Name | Data Type | Constraints | Description |
+| :------------ | :----------- | :----------- | :--------------------------------------------- |
+| id | INT | PK, AI | Unique ID |
+| workflow_code | VARCHAR(50) | UNIQUE | รหัส Workflow (เช่น WF-RFA-GENERIC) |
+| workflow_name | VARCHAR(255) | NOT NULL | ชื่อ Workflow |
+| description | TEXT | NULL | คำอธิบาย |
+| module | VARCHAR(50) | NOT NULL | ใช้กับ Module ไหน (RFA, CORRESPONDENCE) |
+| steps_config | JSON | NOT NULL | การตั้งค่า Step (Sequence, Approvers, Conditions) |
+| is_active | BOOLEAN | DEFAULT TRUE | สถานะการใช้งาน |
+| version | INT | DEFAULT 1 | เวอร์ชันของ Definition |
+
+**Business Rules**:
+* `steps_config` เก็บ Logic ของ Workflow ทั้งหมดในรูปแบบ JSON เพื่อความยืดหยุ่น
+
+---
+
+### 10.2 workflow_instances
+
+**Purpose**: เก็บสถานะของ Workflow ที่กำลังรันอยู่จริง (Runtime)
+
+| Column Name | Data Type | Constraints | Description |
+| :--------------------- | :----------- | :----------- | :----------------------------------------- |
+| id | BIGINT | PK, AI | Unique ID |
+| workflow_definition_id | INT | FK, NOT NULL | อ้างอิง Definition |
+| business_key | VARCHAR(100) | INDEX | ID ของเอกสารที่ผูกกับ Workflow นี้ (เช่น RFA-001) |
+| current_step_name | VARCHAR(100) | NOT NULL | ชื่อ Step ปัจจุบัน |
+| status | ENUM | NOT NULL | IN_PROGRESS, COMPLETED, TERMINATED |
+| context_data | JSON | NULL | ข้อมูลประกอบการตัดสินใจ (Variables) |
+| started_at | TIMESTAMP | DEFAULT NOW | เวลาที่เริ่ม |
+| completed_at | TIMESTAMP | NULL | เวลาที่จบ |
+
+---
+
+### 10.3 workflow_histories
+
+**Purpose**: เก็บประวัติการดำเนินการในแต่ละ Step (Audit Trail)
+
+| Column Name | Data Type | Constraints | Description |
+| :------------------- | :----------- | :----------- | :--------------------------------- |
+| id | BIGINT | PK, AI | Unique ID |
+| workflow_instance_id | BIGINT | FK, NOT NULL | อ้างอิง Instance |
+| step_name | VARCHAR(100) | NOT NULL | ชื่อ Step |
+| action | VARCHAR(50) | NOT NULL | การกระทำ (APPROVE, REJECT, COMMENT) |
+| actor_id | INT | FK, NULL | User ที่กระทำ |
+| comments | TEXT | NULL | ความเห็นเพิ่มเติม |
+| performed_at | TIMESTAMP | DEFAULT NOW | เวลาที่กระทำ |
+
+---
+
+## **11. 🖥️ System & Logs Tables (ระบบ, บันทึก)**
+
+### 11.1 json_schemas (NEW v1.5.1)
+
+**Purpose**: เก็บ Schema สำหรับ Validate JSON Columns (Req 3.12)
+
+| Column Name | Data Type | Constraints | Description |
+| :---------- | :---------- | :----------- | :------------------------------------- |
+| id | INT | PK, AI | Unique ID |
+| schema_code | VARCHAR(50) | UNIQUE | รหัส Schema (เช่น RFA_DETAILS_V1) |
+| schema_body | JSON | NOT NULL | JSON Schema Draft 7/2020-12 definition |
+| description | TEXT | NULL | คำอธิบาย |
+| is_active | BOOLEAN | DEFAULT TRUE | สถานะ |
+
+---
+
+### 11.2 audit_logs (UPDATE v1.5.1)
+
+**Purpose**: Centralized audit logging for all system actions
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | --------------------------- | ----------------------------------------- |
+| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | Unique log ID |
+| user_id | INT | NULL, FK | User who performed action |
+| action | VARCHAR(50) | NOT NULL | Action name (CREATE, UPDATE, DELETE, etc) |
+| module | VARCHAR(50) | NOT NULL | Module name (USERS, RFA, etc) |
+| entity_id | VARCHAR(50) | NULL | ID of affected entity |
+| old_values | JSON | NULL | Data before change |
+| new_values | JSON | NULL | Data after change |
+| ip_address | VARCHAR(45) | NULL | User IP address |
+| user_agent | VARCHAR(255) | NULL | User browser/client info |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Log timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id, created_at) -- **Partition Key**
+* INDEX (user_id)
+* INDEX (module)
+* INDEX (action)
+* INDEX (created_at)
+* INDEX (entity_id)
+
+**Partitioning**:
+* **PARTITION BY RANGE (YEAR(created_at))**: แบ่ง Partition รายปี เพื่อประสิทธิภาพในการเก็บข้อมูลระยะยาว
+
+---
+
+### 11.3 notifications (UPDATE v1.5.1)
+
+**Purpose**: System notifications for users
+
+| Column Name | Data Type | Constraints | Description |
+| ----------- | ------------ | --------------------------- | ----------------------------------- |
+| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | Unique notification ID |
+| user_id | INT | NOT NULL, FK | Recipient user ID |
+| title | VARCHAR(255) | NOT NULL | Notification title |
+| message | TEXT | NOT NULL | Notification body |
+| link | VARCHAR(500) | NULL | Action link URL |
+| type | VARCHAR(50) | DEFAULT ' INFO ' | Type: INFO, WARNING, ERROR, SUCCESS |
+| is_read | BOOLEAN | DEFAULT FALSE | Read status |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Notification timestamp |
+
+**Indexes**:
+
+* PRIMARY KEY (id, created_at) -- **Partition Key**
+* FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
+* INDEX (user_id, is_read)
+* INDEX (created_at)
+
+**Partitioning**:
+* **PARTITION BY RANGE (YEAR(created_at))**: แบ่ง Partition รายปี
+
+---
+
+## **12. 🔍 Views (มุมมองข้อมูล)**
+
+### 12.1 v_correspondence_details
+
+**Purpose**: Denormalized view for correspondence listing and searching
+
+```sql
+CREATE VIEW v_correspondence_details AS
+SELECT
+ c.id,
+ c.correspondence_number,
+ c.correspondence_type_id,
+ ct.type_name,
+ c.project_id,
+ p.project_code,
+ c.originator_id,
+ org.organization_code AS originator_code,
+ cr.title,
+ cr.revision_number,
+ cr.correspondence_status_id,
+ cs.status_name,
+ cr.document_date,
+ cr.created_at
+FROM correspondences c
+JOIN correspondence_revisions cr ON c.id = cr.correspondence_id AND cr.is_current = 1
+JOIN correspondence_types ct ON c.correspondence_type_id = ct.id
+JOIN projects p ON c.project_id = p.id
+LEFT JOIN organizations org ON c.originator_id = org.id
+LEFT JOIN correspondence_status cs ON cr.correspondence_status_id = cs.id;
+```
+
+### 12.2 v_rfa_details
+
+**Purpose**: Denormalized view for RFA listing and searching
+
+```sql
+CREATE VIEW v_rfa_details AS
+SELECT
+ r.id,
+ c.correspondence_number AS rfa_number,
+ rt.type_code AS rfa_type,
+ rr.title,
+ rr.revision_number,
+ rsc.status_name AS rfa_status,
+ rac.approve_name AS approval_result,
+ rr.document_date,
+ rr.due_date
+FROM rfas r
+JOIN correspondences c ON r.id = c.id -- Assuming 1:1 mapping logic or shared ID
+JOIN rfa_revisions rr ON r.id = rr.rfa_id AND rr.is_current = 1
+JOIN rfa_types rt ON r.rfa_type_id = rt.id
+JOIN rfa_status_codes rsc ON rr.rfa_status_code_id = rsc.id
+LEFT JOIN rfa_approve_codes rac ON rr.rfa_approve_code_id = rac.id;
+```
+
+---
+
+## **13. 📊 Index Summaries (สรุป Index)**
+
+### 13.1 Performance Indexes
+
+| Table Name | Index Columns | Purpose |
+| :----------------------- | :------------------------------------------------- | :----------------------------- |
+| correspondences | (project_id, correspondence_number) | Fast lookup by document number |
+| correspondences | (correspondence_type_id) | Filter by type |
+| correspondence_revisions | (correspondence_id, is_current) | Get current revision |
+| rfas | (rfa_type_id) | Filter by RFA type |
+| rfa_revisions | (rfa_id, is_current) | Get current RFA revision |
+| rfa_revisions | (rfa_status_code_id) | Filter by status |
+| audit_logs | (created_at) | Date range queries |
+| audit_logs | (user_id) | User activity history |
+| audit_logs | (module, action) | Action type analysis |
+| notifications | (user_id, is_read) | Unread notifications query |
+| document_number_counters | (project_id, correspondence_type_id, current_year) | Running number generation |
+| workflow_instances | (business_key) | Workflow lookup by document ID |
+| workflow_instances | (status) | Monitor active workflows |
+
+### 13.2 Unique Constraints
+
+| Table Name | Columns | Description |
+| :---------------------- | :----------------------------------- | :--------------------------------- |
+| users | (username) | Unique login name |
+| users | (email) | Unique email address |
+| organizations | (organization_code) | Unique organization code |
+| projects | (project_code) | Unique project code |
+| contracts | (contract_code) | Unique contract code |
+| correspondences | (project_id, correspondence_number) | Unique document number per project |
+| rfas | (drawing_number) | Unique shop drawing number |
+| document_number_formats | (project_id, correspondence_type_id) | One format per type per project |
+| workflow_definitions | (workflow_code) | Unique workflow code |
+
+---
+
+## **14. 🛡️ Data Integrity Constraints (ความถูกต้องของข้อมูล)**
+
+### 14.1 Soft Delete Policy
+
+* **Tables with `deleted_at`**:
+ * users
+ * organizations
+ * projects
+ * contracts
+ * correspondences
+ * rfas
+ * shop_drawings
+ * contract_drawings
+* **Rule**: Records are never physically deleted. `deleted_at` is set to timestamp.
+* **Query Rule**: All standard queries MUST include `WHERE deleted_at IS NULL`.
+
+### 14.2 Foreign Key Cascades
+
+* **ON DELETE CASCADE**:
+ * Used for child tables that cannot exist without parent (e.g., `correspondence_revisions`, `rfa_revisions`, `correspondence_attachments`).
+* **ON DELETE RESTRICT**:
+ * Used for master data references to prevent accidental deletion of used data (e.g., `correspondence_types`, `organizations`).
+* **ON DELETE SET NULL**:
+ * Used for optional references (e.g., `created_by`, `originator_id`).
+
+---
+
+## **15. 🔐 Security & Permissions Model (ความปลอดภัย)**
+
+### 15.1 Row-Level Security (RLS) Logic
+
+* **Organization Scope**: Users can only see documents where `originator_id` OR `recipient_organization_id` matches their organization.
+* **Project Scope**: Users can only see documents within projects they are assigned to.
+* **Confidentiality**: Documents marked `is_confidential` are visible ONLY to specific roles or users.
+
+### 15.2 Role-Based Access Control (RBAC)
+
+* **Permissions** are granular (e.g., `correspondence.view`, `correspondence.create`).
+* **Roles** aggregate permissions (e.g., `Document Controller` = `view` + `create` + `edit`).
+* **Assignments** link Users to Roles within a Context (Global, Project, or Organization).
+
+---
+
+## **16. 🔄 Data Migration & Seeding (การย้ายข้อมูล)**
+
+### 16.1 Initial Seeding (V1.5.1)
+
+1. **Master Data**:
+ * `organizations`: Owner, Consultant, Contractor
+ * `projects`: LCBP3
+ * `correspondence_types`: LETTER, MEMO, TRANSMITTAL, RFA
+ * `rfa_types`: DWG, MAT, DOC, RFI
+ * `rfa_status_codes`: DFT, PEND, APPR, REJ
+ * `disciplines`: GEN, STR, ARC, MEP (New V1.5.1)
+2. **System Users**:
+ * `admin`: Super Admin
+ * `system`: System Bot for automated tasks
+
+### 16.2 Migration Strategy
+
+* **Schema Migration**: Use TypeORM Migrations or raw SQL scripts (versioned).
+* **Data Migration**:
+ * **V1.4.5 -> V1.5.1**:
+ * Run SQL script `8_lcbp3_v1_5_1.sql`
+ * Populate `disciplines` table.
+ * Update `document_number_counters` PK (Requires careful migration of existing counters).
+ * Initialize `workflow_definitions`.
+
+---
+
+## **17. 📈 Monitoring & Maintenance (การดูแลรักษา)**
+
+### 17.1 Database Maintenance
+
+* **Daily**: Incremental Backup.
+* **Weekly**: Full Backup + `OPTIMIZE TABLE` for heavy tables (`audit_logs`, `notifications`).
+* **Monthly**: Archive old `audit_logs` partitions to cold storage.
+
+### 17.2 Health Checks
+
+* Monitor `document_number_errors` for numbering failures.
+* Monitor `workflow_instances` for stuck workflows (`status = ' IN_PROGRESS '` > 7 days).
+* Check `document_number_counters` for gaps or resets.
+
+---
+
+## **18. 📖 Glossary (คำศัพท์)**
+
+* **RFA**: Request for Approval (เอกสารขออนุมัติ)
+* **Transmittal**: Document Transmittal Sheet (ใบนำส่งเอกสาร)
+* **Shop Drawing**: แบบก่อสร้างที่ผู้รับเหมาจัดทำ
+* **Contract Drawing**: แบบสัญญา (แบบตั้งต้น)
+* **Revision**: ฉบับแก้ไข (0, 1, 2, A, B, C)
+* **Originator**: ผู้จัดทำ/ผู้ส่งเอกสาร
+* **Recipient**: ผู้รับเอกสาร
+* **Workflow**: กระบวนการทำงาน/อนุมัติ
+* **Discipline**: สาขางาน (เช่น โยธา, สถาปัตย์, ไฟฟ้า)
+
+---
+
+**End of Data Dictionary V1.5.1**
diff --git a/specs/07-database/lcbp3-v1.6.0-schema.sql b/specs/07-database/lcbp3-v1.6.0-schema.sql
new file mode 100644
index 0000000..bdd54c8
--- /dev/null
+++ b/specs/07-database/lcbp3-v1.6.0-schema.sql
@@ -0,0 +1,1857 @@
+-- ==========================================================
+-- DMS v1.6.0 Document Management System Database
+-- Deploy Script Schema
+-- Server: Container Station on QNAP TS-473A
+-- Database service: MariaDB 11.8
+-- database web ui: phpmyadmin 5-apache
+-- database development ui: DBeaver
+-- backend service: NestJS
+-- frontend service: next.js
+-- reverse proxy: jc21/nginx-proxy-manager:latest
+-- cron service: n8n
+-- ==========================================================
+-- [v1.6.0 UPDATE] Refactor Schema
+-- Update: Upgraded from v1.5.1
+-- Last Updated: 2025-12-13
+-- Major Changes:
+-- 1. ปรับปรุง: corespondences, correspondence_revisions, correspondence_recipients, rfas, rfa_revisions
+-- ==========================================================
+SET NAMES utf8mb4;
+
+SET time_zone = '+07:00';
+
+-- ปิดการตรวจสอบ Foreign Key ชั่วคราวเพื่อให้สามารถลบตารางได้ทั้งหมด
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP VIEW IF EXISTS v_document_statistics;
+
+DROP VIEW IF EXISTS v_documents_with_attachments;
+
+DROP VIEW IF EXISTS v_user_all_permissions;
+
+DROP VIEW IF EXISTS v_audit_log_details;
+
+DROP VIEW IF EXISTS v_user_tasks;
+
+DROP VIEW IF EXISTS v_contract_parties_all;
+
+DROP VIEW IF EXISTS v_current_rfas;
+
+DROP VIEW IF EXISTS v_current_correspondences;
+
+-- DROP PROCEDURE IF EXISTS sp_get_next_document_number;
+-- 🗑️ DROP TABLE SCRIPT: LCBP3-DMS v1.4.2
+-- คำเตือน: ข้อมูลทั้งหมดจะหายไป กรุณา Backup ก่อนรันบน Production
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ============================================================
+-- ส่วนที่ 1: ตาราง System, Logs & Preferences (ตารางปลายทาง/ส่วนเสริม)
+-- ============================================================
+DROP TABLE IF EXISTS backup_logs;
+
+DROP TABLE IF EXISTS search_indices;
+
+DROP TABLE IF EXISTS notifications;
+
+DROP TABLE IF EXISTS audit_logs;
+
+-- [NEW v1.4.2] ตารางการตั้งค่าส่วนตัวของผู้ใช้ (FK -> users)
+DROP TABLE IF EXISTS user_preferences;
+
+-- [NEW v1.4.2] ตารางเก็บ Schema สำหรับ Validate JSON (Stand-alone)
+DROP TABLE IF EXISTS json_schemas;
+
+-- [v1.5.1 NEW] ตาราง Audit และ Error Log สำหรับ Document Numbering
+DROP TABLE IF EXISTS document_number_errors;
+
+DROP TABLE IF EXISTS document_number_audit;
+
+-- ============================================================
+-- ส่วนที่ 2: ตาราง Junction (เชื่อมโยงข้อมูล M:N)
+-- ============================================================
+DROP TABLE IF EXISTS correspondence_tags;
+
+DROP TABLE IF EXISTS shop_drawing_revision_contract_refs;
+
+DROP TABLE IF EXISTS contract_drawing_subcat_cat_maps;
+
+-- ============================================================
+-- ส่วนที่ 3: ตารางไฟล์แนบและการเชื่อมโยง (Attachments)
+-- ============================================================
+DROP TABLE IF EXISTS contract_drawing_attachments;
+
+DROP TABLE IF EXISTS circulation_attachments;
+
+DROP TABLE IF EXISTS shop_drawing_revision_attachments;
+
+DROP TABLE IF EXISTS correspondence_attachments;
+
+DROP TABLE IF EXISTS attachments;
+
+-- ตารางหลักเก็บ path ไฟล์
+-- ============================================================
+-- ส่วนที่ 4: ตาราง Workflow & Routing (Process Logic)
+-- ============================================================
+-- Correspondence Workflow
+-- ============================================================
+-- ส่วนที่ 5: ตาราง Mapping สิทธิ์และโครงสร้าง (Access Control)
+-- ============================================================
+DROP TABLE IF EXISTS role_permissions;
+
+DROP TABLE IF EXISTS user_assignments;
+
+DROP TABLE IF EXISTS contract_organizations;
+
+DROP TABLE IF EXISTS project_organizations;
+
+-- ============================================================
+-- ส่วนที่ 6: ตารางรายละเอียดของเอกสาร (Revisions & Items)
+-- ============================================================
+DROP TABLE IF EXISTS transmittal_items;
+
+DROP TABLE IF EXISTS shop_drawing_revisions;
+
+DROP TABLE IF EXISTS rfa_items;
+
+DROP TABLE IF EXISTS rfa_revisions;
+
+DROP TABLE IF EXISTS correspondence_references;
+
+DROP TABLE IF EXISTS correspondence_recipients;
+
+DROP TABLE IF EXISTS correspondence_revisions;
+
+-- [Modified v1.4.2] มี Virtual Columns
+-- ============================================================
+-- ส่วนที่ 7: ตารางเอกสารหลัก (Core Documents)
+-- ============================================================
+DROP TABLE IF EXISTS circulations;
+
+DROP TABLE IF EXISTS transmittals;
+
+DROP TABLE IF EXISTS contract_drawings;
+
+DROP TABLE IF EXISTS shop_drawings;
+
+DROP TABLE IF EXISTS rfas;
+
+DROP TABLE IF EXISTS correspondences;
+
+-- ============================================================
+-- ส่วนที่ 8: ตารางหมวดหมู่และข้อมูลหลัก (Master Data)
+-- ============================================================
+-- [NEW 6B] ลบตารางใหม่ที่เพิ่มเข้ามาเพื่อป้องกัน Error เวลา Re-deploy
+DROP TABLE IF EXISTS correspondence_sub_types;
+
+DROP TABLE IF EXISTS disciplines;
+
+DROP TABLE IF EXISTS shop_drawing_sub_categories;
+
+DROP TABLE IF EXISTS shop_drawing_main_categories;
+
+DROP TABLE IF EXISTS contract_drawing_sub_cats;
+
+DROP TABLE IF EXISTS contract_drawing_cats;
+
+DROP TABLE IF EXISTS contract_drawing_volumes;
+
+DROP TABLE IF EXISTS circulation_status_codes;
+
+DROP TABLE IF EXISTS rfa_approve_codes;
+
+DROP TABLE IF EXISTS rfa_status_codes;
+
+DROP TABLE IF EXISTS rfa_types;
+
+DROP TABLE IF EXISTS correspondence_status;
+
+DROP TABLE IF EXISTS correspondence_types;
+
+DROP TABLE IF EXISTS document_number_counters;
+
+-- [Modified v1.4.2] มี version column
+DROP TABLE IF EXISTS document_number_formats;
+
+DROP TABLE IF EXISTS tags;
+
+-- ============================================================
+-- ส่วนที่ 9: ตารางผู้ใช้ บทบาท และโครงสร้างรากฐาน (Root Tables)
+-- ============================================================
+DROP TABLE IF EXISTS organization_roles;
+
+DROP TABLE IF EXISTS roles;
+
+DROP TABLE IF EXISTS permissions;
+
+DROP TABLE IF EXISTS contracts;
+
+DROP TABLE IF EXISTS projects;
+
+DROP TABLE IF EXISTS refresh_tokens;
+
+DROP TABLE IF EXISTS users;
+
+-- Referenced by user_preferences, audit_logs, etc.
+DROP TABLE IF EXISTS organizations;
+
+-- Referenced by users, projects, etc.
+-- =====================================================
+-- 1. 🏢 Core & Master Data (องค์กร, โครงการ, สัญญา)
+-- =====================================================
+-- ตาราง Master เก็บประเภทบทบาทขององค์กร
+CREATE TABLE organization_roles (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ role_name VARCHAR(20) NOT NULL UNIQUE COMMENT 'ชื่อบทบาท (OWNER, DESIGNER, CONSULTANT, CONTRACTOR, THIRD PARTY)',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บประเภทบทบาทขององค์กร';
+
+-- ตาราง Master เก็บข้อมูลองค์กรทั้งหมดที่เกี่ยวข้องในระบบ
+CREATE TABLE organizations (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ organization_code VARCHAR(20) NOT NULL UNIQUE COMMENT 'รหัสองค์กร',
+ organization_name VARCHAR(255) NOT NULL COMMENT 'ชื่อองค์กร',
+ role_id INT COMMENT 'บทบาทขององค์กร',
+ is_active BOOLEAN DEFAULT TRUE COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)',
+ FOREIGN KEY (role_id) REFERENCES organization_roles (id) ON DELETE
+ SET NULL
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลองค์กรทั้งหมดที่เกี่ยวข้องในระบบ';
+
+-- ตาราง Master เก็บข้อมูลโครงการ
+CREATE TABLE projects (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสโครงการ',
+ project_name VARCHAR(255) NOT NULL COMMENT 'ชื่อโครงการ',
+ -- parent_project_id INT COMMENT 'รหัสโครงการหลัก (ถ้ามี)',
+ -- contractor_organization_id INT COMMENT 'รหัสองค์กรผู้รับเหมา (ถ้ามี)',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ -- FOREIGN KEY (parent_project_id) REFERENCES projects(id) ON DELETE SET NULL,
+ -- FOREIGN KEY (contractor_organization_id) REFERENCES organizations(id) ON DELETE SET NULL
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลโครงการ';
+
+-- ตาราง Master เก็บข้อมูลสัญญา
+CREATE TABLE contracts (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL,
+ contract_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสสัญญา',
+ contract_name VARCHAR(255) NOT NULL COMMENT 'ชื่อสัญญา',
+ description TEXT COMMENT 'คำอธิบายสัญญา',
+ start_date DATE COMMENT 'วันที่เริ่มสัญญา',
+ end_date DATE COMMENT 'วันที่สิ้นสุดสัญญา',
+ is_active BOOLEAN DEFAULT TRUE,
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลสัญญา';
+
+-- =====================================================
+-- 2. 👥 Users & RBAC (ผู้ใช้, สิทธิ์, บทบาท)
+-- =====================================================
+-- ตาราง Master เก็บข้อมูลผู้ใช้งาน (User)
+CREATE TABLE users (
+ user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ username VARCHAR(50) NOT NULL UNIQUE COMMENT 'ชื่อผู้ใช้งาน',
+ password_hash VARCHAR(255) NOT NULL COMMENT 'รหัสผ่าน (Hashed)',
+ first_name VARCHAR(50) COMMENT 'ชื่อจริง',
+ last_name VARCHAR(50) COMMENT 'นามสกุล',
+ email VARCHAR(100) NOT NULL UNIQUE COMMENT 'อีเมล',
+ line_id VARCHAR(100) COMMENT 'LINE ID',
+ primary_organization_id INT COMMENT 'สังกัดองค์กร',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ failed_attempts INT DEFAULT 0 COMMENT 'จำนวนครั้งที่ล็อกอินล้มเหลว',
+ locked_until DATETIME COMMENT 'ล็อกอินไม่ได้จนถึงเวลา',
+ last_login_at TIMESTAMP NULL COMMENT 'วันที่และเวลาที่ล็อกอินล่าสุด',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL DEFAULT NULL COMMENT 'วันที่ลบ',
+ FOREIGN KEY (primary_organization_id) REFERENCES organizations (id) ON DELETE
+ SET NULL
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลผู้ใช้งาน (User)';
+
+-- ตารางเก็บ Refresh Tokens สำหรับ Authentication
+CREATE TABLE refresh_tokens (
+ token_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ user_id INT NOT NULL COMMENT 'เจ้าของ Token',
+ token_hash VARCHAR(255) NOT NULL COMMENT 'Hash ของ Refresh Token',
+ expires_at DATETIME NOT NULL COMMENT 'วันหมดอายุ',
+ is_revoked TINYINT(1) DEFAULT 0 COMMENT 'สถานะยกเลิก (1=Revoked)',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ replaced_by_token VARCHAR(255) NULL COMMENT 'Token ใหม่ที่มาแทนที่ (Rotation)',
+ FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเก็บ Refresh Tokens สำหรับ Authentication';
+
+-- ตาราง Master เก็บ "บทบาท" ของผู้ใช้ในระบบ
+CREATE TABLE roles (
+ role_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ -- role_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสบทบาท (เช่น SUPER_ADMIN, ADMIN, EDITOR, VIEWER)',
+ role_name VARCHAR(100) NOT NULL COMMENT 'ชื่อบทบาท',
+ scope ENUM(
+ 'Global',
+ 'Organization',
+ 'Project',
+ 'Contract'
+ ) NOT NULL,
+ -- ขอบเขตของบทบาท (จากข้อ 4.3)
+ description TEXT COMMENT 'คำอธิบายบทบาท',
+ is_system BOOLEAN DEFAULT FALSE COMMENT '(1 = บทบาทของระบบ ลบไม่ได้)',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บ "บทบาท" ของผู้ใช้ในระบบ';
+
+-- ตาราง Master เก็บ "สิทธิ์" (Permission) หรือ "การกระทำ" ทั้งหมดในระบบ
+CREATE TABLE permissions (
+ permission_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ permission_name VARCHAR(100) NOT NULL UNIQUE COMMENT 'รหัสสิทธิ์ (เช่น rfas.create, rfas.view)',
+ description TEXT COMMENT 'คำอธิบายสิทธิ์',
+ module VARCHAR(50) COMMENT 'โมดูลที่เกี่ยวข้อง',
+ scope_level ENUM('GLOBAL', 'ORG', 'PROJECT') COMMENT 'ระดับขอบเขตของสิทธิ์',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บ "สิทธิ์" (Permission) หรือ "การกระทำ" ทั้งหมดในระบบ';
+
+-- ตารางเชื่อมระหว่าง roles และ permissions (M:N)
+CREATE TABLE role_permissions (
+ role_id INT COMMENT 'ID ของบทบาท',
+ permission_id INT COMMENT 'ID ของสิทธิ์',
+ PRIMARY KEY (role_id, permission_id),
+ FOREIGN KEY (role_id) REFERENCES roles (role_id) ON DELETE CASCADE,
+ FOREIGN KEY (permission_id) REFERENCES permissions (permission_id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง roles และ permissions (M :N)';
+
+-- search.advanced
+-- ตารางเชื่อมผู้ใช้ (users)
+CREATE TABLE user_assignments (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ user_id INT NOT NULL,
+ role_id INT NOT NULL,
+ -- คอลัมน์สำหรับกำหนดขอบเขต (จะใช้เพียงอันเดียวต่อแถว)
+ organization_id INT NULL,
+ project_id INT NULL,
+ contract_id INT NULL,
+ assigned_by_user_id INT,
+ -- ผู้ที่มอบหมายบทบาทนี้
+ assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE,
+ FOREIGN KEY (role_id) REFERENCES roles (role_id) ON DELETE CASCADE,
+ FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE,
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE CASCADE,
+ FOREIGN KEY (assigned_by_user_id) REFERENCES users (user_id),
+ -- Constraint เพื่อให้แน่ใจว่ามีเพียงขอบเขตเดียวที่ถูกกำหนดในแต่ละแถว
+ CONSTRAINT chk_scope CHECK (
+ (
+ organization_id IS NOT NULL
+ AND project_id IS NULL
+ AND contract_id IS NULL
+ )
+ OR (
+ organization_id IS NULL
+ AND project_id IS NOT NULL
+ AND contract_id IS NULL
+ )
+ OR (
+ organization_id IS NULL
+ AND project_id IS NULL
+ AND contract_id IS NOT NULL
+ )
+ OR (
+ organization_id IS NULL
+ AND project_id IS NULL
+ AND contract_id IS NULL
+ ) -- สำหรับ Global scope
+ )
+);
+
+CREATE TABLE project_organizations (
+ project_id INT NOT NULL,
+ organization_id INT NOT NULL,
+ PRIMARY KEY (project_id, organization_id),
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE
+);
+
+CREATE TABLE contract_organizations (
+ contract_id INT NOT NULL,
+ organization_id INT NOT NULL,
+ role_in_contract VARCHAR(100),
+ -- เช่น 'Owner', 'Designer', 'Consultant', 'Contractor '
+ PRIMARY KEY (contract_id, organization_id),
+ FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE CASCADE,
+ FOREIGN KEY (organization_id) REFERENCES organizations (id) ON DELETE CASCADE
+);
+
+-- =====================================================
+-- 3. ✉️ Correspondences (เอกสารหลัก, Revisions)
+-- =====================================================
+-- ตารางเก็บข้อมูลสาขางาน (Disciplines) แยกตามสัญญา
+CREATE TABLE disciplines (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ contract_id INT NOT NULL COMMENT 'ผูกกับสัญญา',
+ discipline_code VARCHAR(10) NOT NULL COMMENT 'รหัสสาขา (เช่น GEN, STR)',
+ code_name_th VARCHAR(255) COMMENT 'ชื่อไทย',
+ code_name_en VARCHAR(255) COMMENT 'ชื่ออังกฤษ',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE CASCADE,
+ UNIQUE KEY uk_discipline_contract (contract_id, discipline_code)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเก็บข้อมูลสาขางาน (Disciplines) ตาม Req 6B';
+
+-- ตาราง Master เก็บประเภทเอกสารโต้ตอบ
+CREATE TABLE correspondence_types (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ type_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสประเภท (เช่น RFA, RFI)',
+ type_name VARCHAR(255) NOT NULL COMMENT 'ชื่อประเภท',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน ',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บประเภทเอกสารโต้ตอบ';
+
+-- ตารางเก็บประเภทหนังสือย่อย (Sub Types) สำหรับ Mapping เลขรหัส
+CREATE TABLE correspondence_sub_types (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ contract_id INT NOT NULL COMMENT 'ผูกกับสัญญา',
+ correspondence_type_id INT NOT NULL COMMENT 'ผูกกับประเภทเอกสารหลัก (เช่น RFA)',
+ sub_type_code VARCHAR(20) NOT NULL COMMENT 'รหัสย่อย (เช่น MAT, SHP)',
+ sub_type_name VARCHAR(255) COMMENT 'ชื่อประเภทหนังสือย่อย',
+ sub_type_number VARCHAR(10) COMMENT 'เลขรหัสสำหรับ Running Number (เช่น 11, 22)',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE CASCADE,
+ FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเก็บประเภทหนังสือย่อย (Sub Types) ตาม Req 6B';
+
+-- ตาราง Master เก็บสถานะของเอกสาร
+CREATE TABLE correspondence_status (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ status_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสสถานะหนังสือ (เช่น DRAFT, SUBOWN)',
+ status_name VARCHAR(255) NOT NULL COMMENT 'ชื่อสถานะหนังสือ',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บสถานะของเอกสาร';
+
+-- ตาราง "แม่" ของเอกสารโต้ตอบ เก็บข้อมูลที่ไม่เปลี่ยนตาม Revision
+CREATE TABLE correspondences (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง (นี่คือ "Master ID" ที่ใช้เชื่อมโยง)',
+ correspondence_type_id INT NOT NULL COMMENT 'ประเภทเอกสาร ใช้แบ่งแยกว่าเป็น RFA หรือ อื่นๆ',
+ correspondence_number VARCHAR(100) NOT NULL COMMENT 'เลขที่เอกสาร (สร้างจาก DocumentNumberingModule)',
+ discipline_id INT NULL COMMENT 'สาขางาน (ถ้ามี)',
+ is_internal_communication TINYINT(1) DEFAULT 0 COMMENT '(1 = ภายใน, 0 = ภายนอก)',
+ project_id INT NOT NULL COMMENT 'อยู่ในโครงการ',
+ originator_id INT COMMENT 'องค์กรผู้ส่ง',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ created_by INT COMMENT 'ผู้สร้าง',
+ deleted_at DATETIME NULL COMMENT 'สำหรับ Soft Delete',
+ FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types (id) ON DELETE RESTRICT,
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (originator_id) REFERENCES organizations (id) ON DELETE SET NULL,
+ FOREIGN KEY (created_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ -- Foreign Key ที่รวมเข้ามาจาก ALTER (ระบุชื่อ Constraint ตามที่ต้องการ)
+ CONSTRAINT fk_corr_discipline FOREIGN KEY (discipline_id) REFERENCES disciplines (id) ON DELETE SET NULL,
+ UNIQUE KEY uq_corr_no_per_project (project_id, correspondence_number)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "แม่" ของเอกสารโต้ตอบ เก็บข้อมูลที่ไม่เปลี่ยนตาม Revision';
+
+-- ตารางเชื่อมผู้รับ (TO/CC) สำหรับเอกสารแต่ละฉบับ (M:N)
+CREATE TABLE correspondence_recipients (
+ correspondence_id INT COMMENT 'ID ของเอกสาร',
+ recipient_organization_id INT COMMENT 'ID องค์กรผู้รับ',
+ recipient_type ENUM('TO', 'CC ') COMMENT 'ประเภทผู้รับ (TO หรือ CC)',
+ PRIMARY KEY (
+ correspondence_id,
+ recipient_organization_id,
+ recipient_type
+ ),
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (recipient_organization_id) REFERENCES organizations (id) ON DELETE RESTRICT
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมผู้รับ (TO / CC) สำหรับเอกสารแต่ละฉบับ (M :N)';
+
+-- ตาราง "ลูก" เก็บประวัติการแก้ไข (Revisions) ของ correspondences (1:N)
+CREATE TABLE correspondence_revisions (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
+
+ correspondence_id INT NOT NULL COMMENT 'Master ID',
+ revision_number INT NOT NULL COMMENT 'หมายเลข Revision (0, 1, 2...)',
+ revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
+ is_current BOOLEAN DEFAULT FALSE COMMENT '(1 = Revision ปัจจุบัน)',
+
+ -- ข้อมูลเนื้อหาที่เปลี่ยนได้
+ correspondence_status_id INT NOT NULL COMMENT 'สถานะของ Revision นี้',
+
+ subject VARCHAR(500) NOT NULL COMMENT 'หัวข้อเรื่อง',
+ description TEXT COMMENT 'คำอธิบายการแก้ไขใน Revision นี้',
+ body TEXT NULL COMMENT 'เนื้อความ (ถ้ามี)',
+ remarks TEXT COMMENT 'หมายเหตุ',
+
+ document_date DATE COMMENT 'วันที่ในเอกสาร',
+ issued_date DATETIME COMMENT 'วันที่ออกเอกสาร',
+ received_date DATETIME COMMENT 'วันที่ลงรับเอกสาร',
+ due_date DATETIME COMMENT 'วันที่ครบกำหนด',
+
+ -- Standard Meta Columns
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้างเอกสาร',
+ created_by INT COMMENT 'ผู้สร้าง',
+ updated_by INT COMMENT 'ผู้แก้ไขล่าสุด',
+
+ -- ส่วนของ JSON และ Schema Version
+ details JSON COMMENT 'ข้อมูลเฉพาะ (เช่น LETTET details)',
+ schema_version INT DEFAULT 1 COMMENT 'เวอร์ชันของ Schema ที่ใช้กับ details',
+
+ -- Generated Virtual Columns (ดึงค่าจาก JSON โดยอัตโนมัติ)
+ v_ref_project_id INT GENERATED ALWAYS AS (
+ CAST(JSON_UNQUOTE(JSON_EXTRACT(details, '$.projectId')) AS UNSIGNED)
+ ) VIRTUAL COMMENT 'Virtual Column: Project ID จาก JSON',
+
+ v_doc_subtype VARCHAR(50) GENERATED ALWAYS AS (
+ JSON_UNQUOTE(JSON_EXTRACT(details, '$.subType'))
+ ) VIRTUAL COMMENT 'Virtual Column: Document Subtype จาก JSON',
+
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (correspondence_status_id) REFERENCES correspondence_status (id) ON DELETE RESTRICT,
+ FOREIGN KEY (created_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ FOREIGN KEY (updated_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ UNIQUE KEY uq_master_revision_number (correspondence_id, revision_number ),
+ UNIQUE KEY uq_master_current (correspondence_id, is_current),
+ INDEX idx_corr_rev_v_project (v_ref_project_id),
+ INDEX idx_corr_rev_v_subtype (v_doc_subtype)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติการแก้ไข (Revisions) ของ correspondences (1 :N)';
+
+-- ตาราง Master เก็บ Tags ทั้งหมดที่ใช้ในระบบ
+CREATE TABLE tags (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ tag_name VARCHAR(100) NOT NULL UNIQUE COMMENT 'ชื่อ Tag',
+ description TEXT COMMENT 'คำอธิบายแท็ก',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บ Tags ทั้งหมดที่ใช้ในระบบ';
+
+-- ตารางเชื่อมระหว่าง correspondences และ tags (M:N)
+CREATE TABLE correspondence_tags (
+ correspondence_id INT COMMENT 'ID ของเอกสาร',
+ tag_id INT COMMENT 'ID ของ Tag',
+ PRIMARY KEY (correspondence_id, tag_id),
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง correspondences และ tags (M :N)';
+
+-- ตารางเชื่อมการอ้างอิงระหว่างเอกสาร (M:N)
+CREATE TABLE correspondence_references (
+ src_correspondence_id INT COMMENT 'ID เอกสารต้นทาง',
+ tgt_correspondence_id INT COMMENT 'ID เอกสารเป้าหมาย',
+ PRIMARY KEY (
+ src_correspondence_id,
+ tgt_correspondence_id
+ ),
+ FOREIGN KEY (src_correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (tgt_correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมการอ้างอิงระหว่างเอกสาร (M :N)';
+
+-- =====================================================
+-- 4. 📐 approval: RFA (เอกสารขออนุมัติ, Workflows)
+-- =====================================================
+-- ตาราง Master สำหรับประเภท RFA
+CREATE TABLE rfa_types (
+ id INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ contract_id INT NOT NULL COMMENT 'ผูกกับสัญญา',
+ type_code VARCHAR(20) NOT NULL COMMENT 'รหัสประเภท RFA (เช่น DWG, DOC, MAT)',
+ type_name_th VARCHAR(100) NOT NULL COMMENT 'ชื่อประเภท RFA th',
+ type_name_en VARCHAR(100) NOT NULL COMMENT 'ชื่อประเภท RFA en',
+ remark TEXT COMMENT 'หมายเหตุ',
+ -- sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน ',
+ UNIQUE KEY uk_rfa_types_contract_code (contract_id, type_code),
+ FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับประเภท RFA';
+
+-- ตาราง Master สำหรับสถานะ RFA
+CREATE TABLE rfa_status_codes (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ status_code VARCHAR(20) NOT NULL UNIQUE COMMENT 'รหัสสถานะ RFA (เช่น DFT - Draft, FAP - For Approve)',
+ status_name VARCHAR(100) NOT NULL COMMENT 'ชื่อสถานะ',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับสถานะ RFA';
+
+-- ตาราง Master สำหรับรหัสผลการอนุมัติ RFA
+CREATE TABLE rfa_approve_codes (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ approve_code VARCHAR(20) NOT NULL UNIQUE COMMENT 'รหัสผลการอนุมัติ (
+ เช่น 1A - Approved,
+ 3R - Revise
+ and Resubmit
+ )',
+ approve_name VARCHAR(100) NOT NULL COMMENT 'ชื่อผลการอนุมัติ',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับรหัสผลการอนุมัติ RFA';
+
+CREATE TABLE rfas (
+ id INT PRIMARY KEY COMMENT 'ID ของตาราง (RFA Master ID)', -- ❌ ไม่มี AUTO_INCREMENT
+ rfa_type_id INT NOT NULL COMMENT 'ประเภท RFA',
+ -- discipline_id INT NULL COMMENT 'สาขางาน (ถ้ามี)',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ created_by INT COMMENT 'ผู้สร้าง',
+ deleted_at DATETIME NULL COMMENT 'สำหรับ Soft Delete',
+ FOREIGN KEY (rfa_type_id) REFERENCES rfa_types (id),
+ FOREIGN KEY (created_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ -- CONSTRAINT fk_rfa_discipline FOREIGN KEY (discipline_id) REFERENCES disciplines (id) ON DELETE SET NULL,
+ CONSTRAINT fk_rfas_parent FOREIGN KEY (id) REFERENCES correspondences (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "แม่" ของ RFA (มีความสัมพันธ์ 1 :N กับ rfa_revisions)';
+
+-- ตาราง "ลูก" เก็บประวัติ (Revisions) ของ rfas (1:N)
+CREATE TABLE rfa_revisions (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
+
+ rfa_id INT NOT NULL COMMENT 'Master ID ของ RFA',
+ revision_number INT NOT NULL COMMENT 'หมายเลข Revision (0, 1, 2...)',
+ revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
+ is_current BOOLEAN DEFAULT FALSE COMMENT '(1 = Revision ปัจจุบัน)',
+
+ -- ข้อมูลเฉพาะของ RFA Revision ที่ซับซ้อน
+ rfa_status_code_id INT NOT NULL COMMENT 'สถานะ RFA',
+ rfa_approve_code_id INT COMMENT 'ผลการอนุมัติ',
+ subject VARCHAR(500) NOT NULL COMMENT 'หัวข้อเรื่อง',
+ description TEXT COMMENT 'คำอธิบายการแก้ไขใน Revision นี้',
+ body TEXT NULL COMMENT 'เนื้อความ (ถ้ามี)',
+ remarks TEXT COMMENT 'หมายเหตุ',
+
+ document_date DATE COMMENT 'วันที่ในเอกสาร',
+ issued_date DATE COMMENT 'วันที่ส่งขออนุมัติ',
+ received_date DATETIME COMMENT 'วันที่ลงรับเอกสาร',
+ due_date DATETIME COMMENT 'วันที่ครบกำหนด',
+ approved_date DATE COMMENT 'วันที่อนุมัติ',
+
+ -- Standard Meta Columns
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้างเอกสาร',
+ created_by INT COMMENT 'ผู้สร้าง',
+ updated_by INT COMMENT 'ผู้แก้ไขล่าสุด',
+
+ -- ส่วนของ JSON และ Schema Version
+ details JSON NULL COMMENT 'RFA Specific Details',
+ schema_version INT DEFAULT 1 COMMENT 'Version ของ JSON Schema',
+
+ -- Generated Virtual Columns (ดึงค่าจาก JSON โดยอัตโนมัติ)
+ v_ref_drawing_count INT GENERATED ALWAYS AS (
+ JSON_UNQUOTE(
+ JSON_EXTRACT(details, '$.drawingCount')
+ )
+ ) VIRTUAL,
+
+ FOREIGN KEY (rfa_id) REFERENCES rfas (id) ON DELETE CASCADE,
+ FOREIGN KEY (rfa_status_code_id) REFERENCES rfa_status_codes (id),
+ FOREIGN KEY (rfa_approve_code_id) REFERENCES rfa_approve_codes (id) ON DELETE SET NULL,
+ FOREIGN KEY (created_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ FOREIGN KEY (updated_by) REFERENCES users (user_id) ON DELETE SET NULL,
+ UNIQUE KEY uq_rr_rev_number (rfa_id, revision_number),
+ UNIQUE KEY uq_rr_current (rfa_id, is_current)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติ (Revisions) ของ rfas (1 :N)';
+
+-- ตารางเชื่อมระหว่าง rfa_revisions (ที่เป็นประเภท DWG) กับ shop_drawing_revisions (M:N)
+CREATE TABLE rfa_items (
+ rfa_revision_id INT COMMENT 'ID ของ RFA Revision',
+ shop_drawing_revision_id INT COMMENT 'ID ของ Shop Drawing Revision',
+ PRIMARY KEY (
+ rfa_revision_id,
+ shop_drawing_revision_id
+ ),
+ FOREIGN KEY (rfa_revision_id) REFERENCES rfa_revisions (id) ON DELETE CASCADE,
+ FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง rfa_revisions (ที่เป็นประเภท DWG) กับ shop_drawing_revisions (M :N)';
+
+-- =====================================================
+-- 5. 📐 Drawings (แบบ, หมวดหมู่)
+-- =====================================================
+-- ตาราง Master สำหรับ "เล่ม" ของแบบคู่สัญญา
+CREATE TABLE contract_drawing_volumes (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ volume_code VARCHAR(50) NOT NULL COMMENT 'รหัสเล่ม',
+ volume_name VARCHAR(255) NOT NULL COMMENT 'ชื่อเล่ม',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ UNIQUE KEY ux_volume_project (project_id, volume_code)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับ "เล่ม" ของแบบคู่สัญญา';
+
+-- ตาราง Master สำหรับ "หมวดหมู่หลัก" ของแบบคู่สัญญา
+CREATE TABLE contract_drawing_cats (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ cat_code VARCHAR(50) NOT NULL COMMENT 'รหัสหมวดหมู่หลัก',
+ cat_name VARCHAR(255) NOT NULL COMMENT 'ชื่อหมวดหมู่หลัก',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ UNIQUE KEY ux_cat_project (project_id, cat_code)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับ "หมวดหมู่หลัก" ของแบบคู่สัญญา';
+
+-- ตาราง Master สำหรับ "หมวดหมู่ย่อย" ของแบบคู่สัญญา
+CREATE TABLE contract_drawing_sub_cats (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ sub_cat_code VARCHAR(50) NOT NULL COMMENT 'รหัสหมวดหมู่ย่อย',
+ sub_cat_name VARCHAR(255) NOT NULL COMMENT 'ชื่อหมวดหมู่ย่อย',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ UNIQUE KEY ux_subcat_project (project_id, sub_cat_code)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับ "หมวดหมู่ย่อย" ของแบบคู่สัญญา';
+
+-- ตารางเชื่อมระหว่าง หมวดหมู่หลัก-ย่อย (M:N)
+CREATE TABLE contract_drawing_subcat_cat_maps (
+ project_id INT COMMENT 'ID ของโครงการ',
+ sub_cat_id INT COMMENT 'ID ของหมวดหมู่ย่อย',
+ cat_id INT COMMENT 'ID ของหมวดหมู่หลัก',
+ PRIMARY KEY (
+ project_id,
+ sub_cat_id,
+ cat_id
+ ),
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (sub_cat_id) REFERENCES contract_drawing_sub_cats (id) ON DELETE CASCADE,
+ FOREIGN KEY (cat_id) REFERENCES contract_drawing_cats (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง หมวดหมู่หลัก - ย่อย (M :N)';
+
+-- ตาราง Master เก็บข้อมูล "แบบคู่สัญญา"
+CREATE TABLE contract_drawings (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ condwg_no VARCHAR(255) NOT NULL COMMENT 'เลขที่แบบสัญญา',
+ title VARCHAR(255) NOT NULL COMMENT 'ชื่อแบบสัญญา',
+ sub_cat_id INT COMMENT 'หมวดหมู่ย่อย',
+ volume_id INT COMMENT 'เล่ม',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ',
+ updated_by INT COMMENT 'ผู้แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (sub_cat_id) REFERENCES contract_drawing_sub_cats (id) ON DELETE RESTRICT,
+ FOREIGN KEY (volume_id) REFERENCES contract_drawing_volumes (id) ON DELETE RESTRICT,
+ UNIQUE KEY ux_condwg_no_project (project_id, condwg_no)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูล "แบบคู่สัญญา"';
+
+-- ตาราง Master สำหรับ "หมวดหมู่หลัก" ของแบบก่อสร้าง
+CREATE TABLE shop_drawing_main_categories (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ main_category_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสหมวดหมู่หลัก (เช่น ARCH, STR)',
+ main_category_name VARCHAR(255) NOT NULL COMMENT 'ชื่อหมวดหมู่หลัก',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับ "หมวดหมู่หลัก" ของแบบก่อสร้าง';
+
+-- ตาราง Master สำหรับ "หมวดหมู่ย่อย" ของแบบก่อสร้าง
+CREATE TABLE shop_drawing_sub_categories (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ sub_category_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสหมวดหมู่ย่อย (เช่น STR - COLUMN)',
+ sub_category_name VARCHAR(255) NOT NULL COMMENT 'ชื่อหมวดหมู่ย่อย',
+ main_category_id INT NOT NULL COMMENT 'หมวดหมู่หลัก',
+ description TEXT COMMENT 'คำอธิบาย',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories (id)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master สำหรับ "หมวดหมู่ย่อย" ของแบบก่อสร้าง';
+
+-- ตาราง Master เก็บข้อมูล "แบบก่อสร้าง"
+CREATE TABLE shop_drawings (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ drawing_number VARCHAR(100) NOT NULL UNIQUE COMMENT 'เลขที่ Shop Drawing',
+ title VARCHAR(500) NOT NULL COMMENT 'ชื่อแบบ',
+ main_category_id INT NOT NULL COMMENT 'หมวดหมู่หลัก',
+ sub_category_id INT NOT NULL COMMENT 'หมวดหมู่ย่อย',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ deleted_at DATETIME NULL COMMENT 'วันที่ลบ',
+ updated_by INT COMMENT 'ผู้แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id),
+ FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories (id),
+ FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories (id)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูล "แบบก่อสร้าง"';
+
+-- ตาราง "ลูก" เก็บประวัติ (Revisions) ของ shop_drawings (1:N)
+CREATE TABLE shop_drawing_revisions (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
+ shop_drawing_id INT NOT NULL COMMENT 'Master ID',
+ revision_number INT NOT NULL COMMENT 'หมายเลข Revision (เช่น 0, 1, 2...)',
+ revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
+ revision_date DATE COMMENT 'วันที่ของ Revision',
+ description TEXT COMMENT 'คำอธิบายการแก้ไข',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ FOREIGN KEY (shop_drawing_id) REFERENCES shop_drawings (id) ON DELETE CASCADE,
+ UNIQUE KEY ux_sd_rev_drawing_revision (shop_drawing_id, revision_number)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติ (Revisions) ของ shop_drawings (1 :N)';
+
+-- ตารางเชื่อมระหว่าง shop_drawing_revisions กับ contract_drawings (M:N)
+CREATE TABLE shop_drawing_revision_contract_refs (
+ shop_drawing_revision_id INT COMMENT 'ID ของ Shop Drawing Revision',
+ contract_drawing_id INT COMMENT 'ID ของ Contract Drawing',
+ PRIMARY KEY (
+ shop_drawing_revision_id,
+ contract_drawing_id
+ ),
+ FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions (id) ON DELETE CASCADE,
+ FOREIGN KEY (contract_drawing_id) REFERENCES contract_drawings (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง shop_drawing_revisions กับ contract_drawings (M :N)';
+
+-- =====================================================
+-- 6. 🔄 Circulations (ใบเวียนภายใน)
+-- =====================================================
+-- ตาราง Master เก็บสถานะใบเวียน
+CREATE TABLE circulation_status_codes (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ code VARCHAR(20) NOT NULL UNIQUE COMMENT 'รหัสสถานะการดำเนินงาน',
+ description VARCHAR(50) NOT NULL COMMENT 'คำอธิบายสถานะการดำเนินงาน',
+ sort_order INT DEFAULT 0 COMMENT 'ลำดับการแสดงผล',
+ is_active TINYINT(1) DEFAULT 1 COMMENT 'สถานะการใช้งาน '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บสถานะใบเวียน';
+
+-- ตาราง "แม่" ของใบเวียนเอกสารภายใน
+CREATE TABLE circulations (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตารางใบเวียน',
+ correspondence_id INT UNIQUE COMMENT 'ID ของเอกสาร (จากตาราง correspondences)',
+ organization_id INT NOT NULL COMMENT 'ID ขององค์กรณ์ที่เป็นเจ้าของใบเวียนนี้',
+ circulation_no VARCHAR(100) NOT NULL COMMENT 'เลขที่ใบเวียน',
+ circulation_subject VARCHAR(500) NOT NULL COMMENT 'เรื่องใบเวียน',
+ circulation_status_code VARCHAR(20) NOT NULL COMMENT 'รหัสสถานะใบเวียน',
+ created_by_user_id INT NOT NULL COMMENT 'ID ของผู้สร้างใบเวียน',
+ submitted_at TIMESTAMP NULL COMMENT 'วันที่ส่งใบเวียน',
+ closed_at TIMESTAMP NULL COMMENT 'วันที่ปิดใบเวียน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id),
+ FOREIGN KEY (organization_id) REFERENCES organizations (id),
+ FOREIGN KEY (circulation_status_code) REFERENCES circulation_status_codes (code),
+ FOREIGN KEY (created_by_user_id) REFERENCES users (user_id)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "แม่" ของใบเวียนเอกสารภายใน';
+
+-- =====================================================
+-- 7. 📤 Transmittals (เอกสารนำส่ง)
+-- =====================================================
+-- ตารางข้อมูลเฉพาะของเอกสารนำส่ง (เป็นตารางลูก 1:1 ของ correspondences)
+CREATE TABLE transmittals (
+ correspondence_id INT PRIMARY KEY COMMENT 'ID ของเอกสาร',
+ purpose ENUM(
+ 'FOR_APPROVAL',
+ 'FOR_INFORMATION',
+ 'FOR_REVIEW',
+ 'OTHER '
+ ) COMMENT 'วัตถุประสงค์',
+ remarks TEXT COMMENT 'หมายเหตุ',
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางข้อมูลเฉพาะของเอกสารนำส่ง (เป็นตารางลูก 1 :1 ของ correspondences)';
+
+-- ตารางเชื่อมระหว่าง transmittals และเอกสารที่นำส่ง (M:N)
+CREATE TABLE transmittal_items (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของรายการ',
+ transmittal_id INT NOT NULL COMMENT 'ID ของ Transmittal',
+ item_correspondence_id INT NOT NULL COMMENT 'ID ของเอกสารที่แนบไป',
+ quantity INT DEFAULT 1 COMMENT 'จำนวน',
+ remarks VARCHAR(255) COMMENT 'หมายเหตุสำหรับรายการนี้',
+ FOREIGN KEY (transmittal_id) REFERENCES transmittals (correspondence_id) ON DELETE CASCADE,
+ FOREIGN KEY (item_correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ UNIQUE KEY ux_transmittal_item (
+ transmittal_id,
+ item_correspondence_id
+ )
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อมระหว่าง transmittals และเอกสารที่นำส่ง (M :N)';
+
+-- =====================================================
+-- 8. 📎 File Management (ไฟล์แนบ)
+-- =====================================================
+-- ตาราง "กลาง" เก็บไฟล์แนบทั้งหมดของระบบ
+-- 2.2 Attachments - Two-Phase Storage & Security
+-- รองรับ: Backend Plan T2.2, Req 3.9.1
+-- เหตุผล: จัดการไฟล์ขยะ (Orphan Files) และตรวจสอบความถูกต้องไฟล์
+CREATE TABLE attachments (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของไฟล์แนบ',
+ original_filename VARCHAR(255) NOT NULL COMMENT 'ชื่อไฟล์ดั้งเดิมตอนอัปโหลด',
+ stored_filename VARCHAR(255) NOT NULL COMMENT 'ชื่อไฟล์ที่เก็บจริงบน Server (ป้องกันชื่อซ้ำ)',
+ file_path VARCHAR(500) NOT NULL COMMENT 'Path ที่เก็บไฟล์ (บน QNAP / share / dms - data /)',
+ mime_type VARCHAR(100) NOT NULL COMMENT 'ประเภทไฟล์ (เช่น application / pdf)',
+ file_size INT NOT NULL COMMENT 'ขนาดไฟล์ (bytes)',
+ is_temporary BOOLEAN DEFAULT TRUE COMMENT 'True = ยังไม่ Commit ลง DB จริง',
+ temp_id VARCHAR(100) NULL COMMENT 'ID ชั่วคราวสำหรับอ้างอิงตอน Upload Phase 1',
+ uploaded_by_user_id INT NOT NULL COMMENT 'ผู้อัปโหลดไฟล์',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่อัปโหลด',
+ expires_at DATETIME NULL COMMENT 'เวลาหมดอายุของไฟล์ Temp',
+ CHECKSUM VARCHAR(64) NULL COMMENT 'SHA -256 Checksum',
+ FOREIGN KEY (uploaded_by_user_id) REFERENCES users (user_id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "กลาง" เก็บไฟล์แนบทั้งหมดของระบบ';
+
+-- ตารางเชื่อม correspondences กับ attachments (M:N)
+CREATE TABLE correspondence_attachments (
+ correspondence_id INT COMMENT 'ID ของเอกสาร',
+ attachment_id INT COMMENT 'ID ของไฟล์แนบ',
+ is_main_document BOOLEAN DEFAULT FALSE COMMENT '(1 = ไฟล์หลัก)',
+ PRIMARY KEY (correspondence_id, attachment_id),
+ FOREIGN KEY (correspondence_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (attachment_id) REFERENCES attachments (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อม correspondences กับ attachments (M :N)';
+
+-- ตารางเชื่อม circulations กับ attachments (M:N)
+CREATE TABLE circulation_attachments (
+ circulation_id INT COMMENT 'ID ของใบเวียน',
+ attachment_id INT COMMENT 'ID ของไฟล์แนบ',
+ is_main_document BOOLEAN DEFAULT FALSE COMMENT '(1 = ไฟล์หลักของใบเวียน)',
+ PRIMARY KEY (circulation_id, attachment_id),
+ FOREIGN KEY (circulation_id) REFERENCES circulations (id) ON DELETE CASCADE,
+ FOREIGN KEY (attachment_id) REFERENCES attachments (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อม circulations กับ attachments (M :N)';
+
+-- ตารางเชื่อม shop_drawing_revisions กับ attachments (M:N)
+CREATE TABLE shop_drawing_revision_attachments (
+ shop_drawing_revision_id INT COMMENT 'ID ของ Shop Drawing Revision',
+ attachment_id INT COMMENT 'ID ของไฟล์แนบ',
+ file_type ENUM(
+ 'PDF',
+ 'DWG',
+ 'SOURCE',
+ 'OTHER '
+ ) COMMENT 'ประเภทไฟล์',
+ is_main_document BOOLEAN DEFAULT FALSE COMMENT '(1 = ไฟล์หลัก)',
+ PRIMARY KEY (
+ shop_drawing_revision_id,
+ attachment_id
+ ),
+ FOREIGN KEY (shop_drawing_revision_id) REFERENCES shop_drawing_revisions (id) ON DELETE CASCADE,
+ FOREIGN KEY (attachment_id) REFERENCES attachments (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อม shop_drawing_revisions กับ attachments (M :N)';
+
+-- ตารางเชื่อม contract_drawings กับ attachments (M:N)
+CREATE TABLE contract_drawing_attachments (
+ contract_drawing_id INT COMMENT 'ID ของ Contract Drawing',
+ attachment_id INT COMMENT 'ID ของไฟล์แนบ',
+ file_type ENUM(
+ 'PDF',
+ 'DWG',
+ 'SOURCE',
+ 'OTHER '
+ ) COMMENT 'ประเภทไฟล์',
+ is_main_document BOOLEAN DEFAULT FALSE COMMENT '(1 = ไฟล์หลัก)',
+ PRIMARY KEY (
+ contract_drawing_id,
+ attachment_id
+ ),
+ FOREIGN KEY (contract_drawing_id) REFERENCES contract_drawings (id) ON DELETE CASCADE,
+ FOREIGN KEY (attachment_id) REFERENCES attachments (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเชื่อม contract_drawings กับ attachments (M :N)';
+
+-- =====================================================
+-- 9. 🔢 Document Numbering (การสร้างเลขที่เอกสาร)
+-- =====================================================
+-- ตาราง Master เก็บ "รูปแบบ" Template ของเลขที่เอกสาร
+CREATE TABLE document_number_formats (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ correspondence_type_id INT NOT NULL COMMENT 'ประเภทเอกสาร',
+ format_template VARCHAR(255) NOT NULL COMMENT 'รูปแบบ Template (เช่น { ORG_CODE } - { TYPE_CODE } - { SEQ :4 })',
+ description TEXT COMMENT 'คำอธิบายรูปแบบนี้',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types (id) ON DELETE CASCADE,
+ UNIQUE KEY uk_project_type (
+ project_id,
+ correspondence_type_id
+ )
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บ "รูปแบบ" Template ของเลขที่เอกสาร';
+
+-- ==========================================================
+-- [v1.5.1 UPDATE] ตารางเก็บ "ตัวนับ" (Running Number) ล่าสุด
+-- เปลี่ยนแปลงหลัก:
+-- - PRIMARY KEY: เปลี่ยนจาก 5 คอลัมน์เป็น 8 คอลัมน์
+-- - เพิ่มคอลัมน์: recipient_organization_id, sub_type_id, rfa_type_id
+-- - เพิ่ม INDEXES สำหรับ performance
+-- - เพิ่ม CONSTRAINTS สำหรับ data validation
+-- เหตุผล: รองรับ 10 token types และ granular counter management
+-- รองรับ: Backend Plan T2.3, Req 3.11.5, specs v1.5.1
+-- ==========================================================
+CREATE TABLE document_number_counters (
+ -- [v1.5.1] Composite Primary Key Columns (8 columns total)
+ project_id INT NOT NULL COMMENT 'โครงการ',
+ originator_organization_id INT NOT NULL COMMENT 'องค์กรผู้ส่ง',
+ -- เปลี่ยนจาก NULL เป็น DEFAULT -1
+ recipient_organization_id INT NOT NULL DEFAULT -1 COMMENT '[v1.5.1 NEW] องค์กรผู้รับ (-1 = ทุกองค์กร)',
+ -- recipient_organization_id INT NULL COMMENT '[v1.5.1 NEW] องค์กรผู้รับ (NULL = ทุกองค์กร)',
+ correspondence_type_id INT NOT NULL COMMENT 'ประเภทเอกสาร (LETTER, RFA, TRANSMITTAL, etc.)',
+ sub_type_id INT DEFAULT 0 COMMENT '[v1.5.1 NEW] ประเภทย่อย สำหรับ TRANSMITTAL (0 = ไม่ระบุ)',
+ rfa_type_id INT DEFAULT 0 COMMENT '[v1.5.1 NEW] ประเภท RFA เช่น SHD, RPT, MAT (0 = ไม่ใช่ RFA)',
+ discipline_id INT DEFAULT 0 COMMENT 'สาขางาน เช่น TER, STR, GEO (0 = ไม่ระบุ)',
+ current_year INT NOT NULL COMMENT 'ปี ค.ศ. ของตัวนับ (auto-reset ทุกปี)',
+ -- Counter Data
+ version INT DEFAULT 0 NOT NULL COMMENT 'Optimistic Lock Version (TypeORM @VersionColumn)',
+ last_number INT DEFAULT 0 COMMENT 'เลขที่ล่าสุดที่ใช้ไปแล้ว (auto-increment)',
+ -- [v1.5.1 UPDATE] Primary Key: 5 columns -> 8 columns
+ -- ใช้ COALESCE เพื่อรองรับ NULL ใน recipient_organization_id
+ PRIMARY KEY (
+ project_id,
+ originator_organization_id,
+ recipient_organization_id,
+ -- [v1.5.1 NEW] Handle NULL values
+ correspondence_type_id,
+ sub_type_id,
+ -- [v1.5.1 NEW]
+ rfa_type_id,
+ -- [v1.5.1 NEW]
+ discipline_id,
+ current_year
+ ),
+ -- Foreign Keys
+ FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY (originator_organization_id) REFERENCES organizations (id) ON DELETE CASCADE,
+ -- NOTE: recipient_organization_id uses -1 as sentinel for "all organizations"
+ -- Therefore NO FK constraint is applied here (would fail for -1)
+ FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types (id) ON DELETE CASCADE,
+ -- [v1.5.1 NEW] Performance Indexes
+ INDEX idx_counter_lookup (
+ project_id,
+ correspondence_type_id,
+ current_year
+ ),
+ INDEX idx_counter_org (
+ originator_organization_id,
+ current_year
+ ),
+ -- [v1.5.1 NEW] Data Validation Constraints
+ -- CONSTRAINT chk_last_number_positive CHECK (last_number >= 0),
+ -- CONSTRAINT chk_current_year_valid CHECK (current_year BETWEEN 2020 AND 2100)
+ -- Constraints
+ CONSTRAINT chk_last_number_positive CHECK (last_number >= 0),
+ CONSTRAINT chk_current_year CHECK (
+ current_year BETWEEN 2020 AND 2100
+ ),
+ CONSTRAINT chk_recipient_special CHECK (
+ recipient_organization_id = -1
+ OR recipient_organization_id > 0
+ )
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '[v1.5.1 UPDATE] ตารางเก็บ Running Number Counters - รองรับ 8-column composite PK';
+
+-- ==========================================================
+-- [v1.5.1 NEW] ตารางเก็บ Audit Trail สำหรับการสร้างเลขที่เอกสาร
+-- เพิ่มตาราง: document_number_audit
+-- เหตุผล: บันทึกประวัติการสร้างเลขที่ รองรับ audit requirement ≥ 7 ปี
+-- รองรับ: Req 3.11.8, Backend Plan T2.8
+-- ==========================================================
+CREATE TABLE document_number_audit (
+ id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID ของ audit record',
+ -- Document Info
+ document_id INT NOT NULL COMMENT 'ID ของเอกสารที่สร้างเลขที่ (correspondences.id)',
+ generated_number VARCHAR(100) NOT NULL COMMENT 'เลขที่เอกสารที่สร้าง (ผลลัพธ์)',
+ counter_key JSON NOT NULL COMMENT 'Counter key ที่ใช้ (JSON format) - 8 fields',
+ template_used VARCHAR(200) NOT NULL COMMENT 'Template ที่ใช้ในการสร้าง',
+ -- User Info
+ user_id INT NOT NULL COMMENT 'ผู้ขอสร้างเลขที่',
+ ip_address VARCHAR(45) COMMENT 'IP address ของผู้ขอ (IPv4/IPv6)',
+ user_agent TEXT COMMENT 'User agent string (browser info)',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่/เวลาที่สร้าง',
+ -- Performance & Error Tracking
+ retry_count INT DEFAULT 0 COMMENT 'จำนวนครั้งที่ retry ก่อนสำเร็จ',
+ lock_wait_ms INT COMMENT 'เวลารอ Redis lock (milliseconds)',
+ total_duration_ms INT COMMENT 'เวลารวมทั้งหมดในการสร้าง (milliseconds)',
+ fallback_used ENUM('NONE', 'DB_LOCK', 'RETRY') DEFAULT 'NONE' COMMENT 'Fallback strategy ที่ถูกใช้ (NONE=normal, DB_LOCK=Redis down, RETRY=conflict)',
+ -- Indexes for performance
+ INDEX idx_document_id (document_id),
+ INDEX idx_user_id (user_id),
+ INDEX idx_created_at (created_at),
+ INDEX idx_generated_number (generated_number),
+ -- Foreign Keys
+ FOREIGN KEY (document_id) REFERENCES correspondences (id) ON DELETE CASCADE,
+ FOREIGN KEY (user_id) REFERENCES users (user_id)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '[v1.5.1 NEW] Audit Trail สำหรับการสร้างเลขที่เอกสาร - เก็บ ≥ 7 ปี';
+
+-- ==========================================================
+-- [v1.5.1 NEW] ตารางเก็บ Error Logs สำหรับ Document Numbering
+-- เพิ่มตาราง: document_number_errors
+-- เหตุผล: ติดตาม errors, troubleshooting, monitoring
+-- รองรับ: Req 3.11.6, Ops monitoring requirements
+-- ==========================================================
+CREATE TABLE document_number_errors (
+ id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID ของ error record',
+ -- Error Classification
+ error_type ENUM(
+ 'LOCK_TIMEOUT',
+ -- Redis lock timeout
+ 'VERSION_CONFLICT',
+ -- Optimistic lock version mismatch
+ 'DB_ERROR',
+ -- Database connection/query error
+ 'REDIS_ERROR',
+ -- Redis connection error
+ 'VALIDATION_ERROR' -- Template/input validation error
+ ) NOT NULL COMMENT 'ประเภท error (5 types)',
+ -- Error Details
+ error_message TEXT COMMENT 'ข้อความ error (stack top)',
+ stack_trace TEXT COMMENT 'Stack trace แบบเต็ม (สำหรับ debugging)',
+ context_data JSON COMMENT 'Context ของ request (user, project, counter_key, etc.)',
+ -- User Info
+ user_id INT COMMENT 'ผู้ที่เกิด error',
+ ip_address VARCHAR(45) COMMENT 'IP address',
+ -- Timestamps
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่เกิด error',
+ resolved_at TIMESTAMP NULL COMMENT 'วันที่แก้ไขแล้ว (NULL = ยังไม่แก้)',
+ -- Indexes for troubleshooting
+ INDEX idx_error_type (error_type),
+ INDEX idx_created_at (created_at),
+ INDEX idx_user_id (user_id),
+ INDEX idx_unresolved (resolved_at) -- Find unresolved errors
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '[v1.5.1 NEW] Error Log สำหรับ Document Numbering System';
+
+-- =====================================================
+-- 10. ⚙️ System & Logs (ระบบและ Log)
+-- =====================================================
+-- 1.1 JSON Schemas Registry
+-- รองรับ: Backend Plan T2.5.1, Req 6.11.1
+-- เหตุผล: เพื่อ Validate โครงสร้าง JSON Details ของเอกสารแต่ละประเภทแบบ Centralized
+CREATE TABLE json_schemas (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ schema_code VARCHAR(100) NOT NULL COMMENT 'รหัส Schema (เช่น RFA_DWG)',
+ version INT NOT NULL DEFAULT 1 COMMENT 'เวอร์ชันของ Schema',
+ table_name VARCHAR(100) NOT NULL COMMENT 'ชื่อตารางเป้าหมาย (เช่น rfa_revisions)',
+ schema_definition JSON NOT NULL COMMENT 'โครงสร้าง Data Schema (AJV Standard)',
+ ui_schema JSON NULL COMMENT 'โครงสร้าง UI Schema สำหรับ Frontend',
+ virtual_columns JSON NULL COMMENT 'Config สำหรับสร้าง Virtual Columns',
+ migration_script JSON NULL COMMENT 'Script สำหรับแปลงข้อมูลจากเวอร์ชันก่อนหน้า',
+ is_active BOOLEAN DEFAULT TRUE COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ -- ป้องกัน Schema Code ซ้ำกันใน Version เดียวกัน
+ UNIQUE KEY uk_schema_version (schema_code, version)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'ตารางเก็บ JSON Schema และ Configuration';
+
+-- 1.2 User Preferences
+-- รองรับ: Req 5.5, 6.8.3
+-- เหตุผล: แยกการตั้งค่า Notification และ UI ออกจากตาราง Users หลัก
+CREATE TABLE user_preferences (
+ user_id INT PRIMARY KEY,
+ notify_email BOOLEAN DEFAULT TRUE,
+ notify_line BOOLEAN DEFAULT TRUE,
+ digest_mode BOOLEAN DEFAULT FALSE COMMENT 'รับแจ้งเตือนแบบรวม (Digest) แทน Real - time',
+ ui_theme VARCHAR(20) DEFAULT 'light',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ CONSTRAINT fk_user_prefs_user FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
+
+-- ตารางเก็บบันทึกการกระทำของผู้ใช้
+-- 4.1 Audit Logs Enhancements
+-- รองรับ: Req 6.1
+-- เหตุผล: รองรับ Distributed Tracing และระบุความรุนแรง
+CREATE TABLE audit_logs (
+ audit_id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID ของ Log',
+ request_id VARCHAR(100) NULL COMMENT 'Trace ID linking to app logs',
+ user_id INT COMMENT 'ผู้กระทำ',
+ ACTION VARCHAR(100) NOT NULL COMMENT 'การกระทำ (
+ เช่น rfa.create,
+ correspondence.update,
+ login.success
+ )',
+ severity ENUM(
+ 'INFO',
+ 'WARN',
+ 'ERROR',
+ 'CRITICAL '
+ ) DEFAULT 'INFO',
+ entity_type VARCHAR(50) COMMENT 'ตาราง / โมดูล (เช่น ''rfa '', ''correspondence '')',
+ entity_id VARCHAR(50) COMMENT 'Primary ID ของระเบียนที่ได้รับผลกระทำ',
+ details_json JSON COMMENT 'ข้อมูลบริบท',
+ ip_address VARCHAR(45) COMMENT 'IP Address',
+ user_agent VARCHAR(255) COMMENT 'User Agent',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'เวลาที่กระทำ',
+ -- [แก้ไข] รวม created_at เข้ามาใน Primary Key เพื่อรองรับ Partition
+ PRIMARY KEY (audit_id, created_at),
+ -- [แก้ไข] ใช้ Index ธรรมดาแทน Foreign Key เพื่อไม่ให้ติดข้อจำกัดของ Partition Table
+ INDEX idx_audit_user (user_id),
+ INDEX idx_audit_action (ACTION),
+ INDEX idx_audit_entity (entity_type, entity_id),
+ INDEX idx_audit_created (created_at)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางเก็บบันทึกการกระทำของผู้ใช้' -- [เพิ่ม] คำสั่ง Partition
+PARTITION BY RANGE (YEAR(created_at)) (
+ PARTITION p_old
+ VALUES LESS THAN (2024),
+ PARTITION p2024
+ VALUES LESS THAN (2025),
+ PARTITION p2025
+ VALUES LESS THAN (2026),
+ PARTITION p2026
+ VALUES LESS THAN (2027),
+ PARTITION p2027
+ VALUES LESS THAN (2028),
+ PARTITION p2028
+ VALUES LESS THAN (2029),
+ PARTITION p2029
+ VALUES LESS THAN (2030),
+ PARTITION p2030
+ VALUES LESS THAN (2031),
+ PARTITION p_future
+ VALUES LESS THAN MAXVALUE
+);
+
+-- ตารางสำหรับจัดการการแจ้งเตือน (Email/Line/System)
+CREATE TABLE notifications (
+ id INT NOT NULL AUTO_INCREMENT COMMENT 'ID ของการแจ้งเตือน',
+ user_id INT NOT NULL COMMENT 'ID ผู้ใช้',
+ title VARCHAR(255) NOT NULL COMMENT 'หัวข้อการแจ้งเตือน',
+ message TEXT NOT NULL COMMENT 'รายละเอียดการแจ้งเตือน',
+ notification_type ENUM('EMAIL', 'LINE', 'SYSTEM ') NOT NULL COMMENT 'ประเภท (EMAIL, LINE, SYSTEM)',
+ is_read BOOLEAN DEFAULT FALSE COMMENT 'สถานะการอ่าน',
+ entity_type VARCHAR(50) COMMENT 'เช่น ''rfa '',
+ ''circulation ''',
+ entity_id INT COMMENT 'ID ของเอนทิตีที่เกี่ยวข้อง',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ -- [แก้ไข] รวม created_at เข้ามาใน Primary Key
+ PRIMARY KEY (id, created_at),
+ -- [แก้ไข] ใช้ Index ธรรมดาแทน Foreign Key
+ INDEX idx_notif_user (user_id),
+ INDEX idx_notif_type (notification_type),
+ INDEX idx_notif_read (is_read),
+ INDEX idx_notif_created (created_at)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางสำหรับจัดการการแจ้งเตือน (Email / Line / System)' -- [เพิ่ม] คำสั่ง Partition
+PARTITION BY RANGE (YEAR(created_at)) (
+ PARTITION p_old
+ VALUES LESS THAN (2024),
+ PARTITION p2024
+ VALUES LESS THAN (2025),
+ PARTITION p2025
+ VALUES LESS THAN (2026),
+ PARTITION p2026
+ VALUES LESS THAN (2027),
+ PARTITION p2027
+ VALUES LESS THAN (2028),
+ PARTITION p2028
+ VALUES LESS THAN (2029),
+ PARTITION p2029
+ VALUES LESS THAN (2030),
+ PARTITION p2030
+ VALUES LESS THAN (2031),
+ PARTITION p_future
+ VALUES LESS THAN MAXVALUE
+);
+
+-- ตารางสำหรับจัดการดัชนีการค้นหาขั้นสูง (Full-text Search)
+CREATE TABLE search_indices (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของดัชนี',
+ entity_type VARCHAR(50) NOT NULL COMMENT 'ชนิดเอนทิตี (เช่น ''correspondence '', ''rfa '')',
+ entity_id INT NOT NULL COMMENT 'ID ของเอนทิตี',
+ content TEXT NOT NULL COMMENT 'เนื้อหาที่จะค้นหา',
+ indexed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง / อัปเดตัชนี '
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางสำหรับจัดการดัชนีการค้นหาขั้นสูง (Full - text Search)';
+
+-- ตารางสำหรับบันทึกประวัติการสำรองข้อมูล
+CREATE TABLE backup_logs (
+ id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของการสำรอง',
+ backup_type ENUM('DATABASE', 'FILES', 'FULL') NOT NULL COMMENT 'ประเภท (DATABASE, FILES, FULL)',
+ backup_path VARCHAR(500) NOT NULL COMMENT 'ตำแหน่งไฟล์สำรอง',
+ file_size BIGINT COMMENT 'ขนาดไฟล์',
+ STATUS ENUM(
+ 'STARTED',
+ 'COMPLETED',
+ 'FAILED'
+ ) NOT NULL COMMENT 'สถานะ',
+ started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'เวลาเริ่มต้น',
+ completed_at TIMESTAMP NULL COMMENT 'เวลาเสร็จสิ้น',
+ error_message TEXT COMMENT 'ข้อความผิดพลาด (ถ้ามี)'
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางสำหรับบันทึกประวัติการสำรองข้อมูล';
+
+-- ============================================================
+-- ส่วนที่ 11: Unified Workflow Engine (Phase 6A/Phase 3)
+-- ============================================================
+DROP TABLE IF EXISTS workflow_histories;
+
+DROP TABLE IF EXISTS workflow_instances;
+
+DROP TABLE IF EXISTS workflow_definitions;
+
+-- 1. ตารางเก็บนิยาม Workflow (Definition / DSL)
+CREATE TABLE workflow_definitions (
+ id CHAR(36) NOT NULL PRIMARY KEY COMMENT 'UUID ของ Workflow Definition',
+ workflow_code VARCHAR(50) NOT NULL COMMENT 'รหัส Workflow เช่น RFA_FLOW_V1, CORRESPONDENCE_FLOW_V1',
+ version INT NOT NULL DEFAULT 1 COMMENT 'หมายเลข Version',
+ description TEXT NULL COMMENT 'คำอธิบาย Workflow',
+ dsl JSON NOT NULL COMMENT 'นิยาม Workflow ต้นฉบับ (YAML/JSON Format)',
+ compiled JSON NOT NULL COMMENT 'โครงสร้าง Execution Tree ที่ Compile แล้ว',
+ is_active BOOLEAN DEFAULT TRUE COMMENT 'สถานะการใช้งาน',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
+ -- ป้องกันการมี Workflow Code และ Version ซ้ำกัน
+ UNIQUE KEY uq_workflow_version (workflow_code, version)
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'ตารางเก็บนิยามกฎการเดินเอกสาร (Workflow DSL)';
+
+-- สร้าง Index สำหรับการค้นหา Workflow ที่ Active ล่าสุดได้เร็วขึ้น
+CREATE INDEX idx_workflow_active ON workflow_definitions (workflow_code, is_active, version);
+
+-- 2. ตารางเก็บ Workflow Instance (สถานะเอกสารจริง)
+CREATE TABLE workflow_instances (
+ id CHAR(36) NOT NULL PRIMARY KEY COMMENT 'UUID ของ Instance',
+ definition_id CHAR(36) NOT NULL COMMENT 'อ้างอิง Definition ที่ใช้',
+ entity_type VARCHAR(50) NOT NULL COMMENT 'ประเภทเอกสาร (rfa_revision, correspondence_revision, circulation)',
+ entity_id VARCHAR(50) NOT NULL COMMENT 'ID ของเอกสาร (String/Int)',
+ current_state VARCHAR(50) NOT NULL COMMENT 'สถานะปัจจุบัน',
+ STATUS ENUM(
+ 'ACTIVE',
+ 'COMPLETED',
+ 'CANCELLED',
+ 'TERMINATED'
+ ) DEFAULT 'ACTIVE' COMMENT 'สถานะภาพรวม',
+ context JSON NULL COMMENT 'ตัวแปร Context สำหรับตัดสินใจ',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ CONSTRAINT fk_wf_inst_def FOREIGN KEY (definition_id) REFERENCES workflow_definitions (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'ตารางเก็บสถานะการเดินเรื่องของเอกสาร';
+
+CREATE INDEX idx_wf_inst_entity ON workflow_instances (entity_type, entity_id);
+
+CREATE INDEX idx_wf_inst_state ON workflow_instances (current_state);
+
+-- 3. ตารางเก็บประวัติ (Audit Log / History)
+CREATE TABLE workflow_histories (
+ id CHAR(36) NOT NULL PRIMARY KEY COMMENT 'UUID',
+ instance_id CHAR(36) NOT NULL COMMENT 'อ้างอิง Instance',
+ from_state VARCHAR(50) NOT NULL COMMENT 'สถานะต้นทาง',
+ to_state VARCHAR(50) NOT NULL COMMENT 'สถานะปลายทาง',
+ ACTION VARCHAR(50) NOT NULL COMMENT 'Action ที่กระทำ',
+ action_by_user_id INT NULL COMMENT 'User ID ผู้กระทำ',
+ COMMENT TEXT NULL COMMENT 'ความเห็น',
+ metadata JSON NULL COMMENT 'Snapshot ข้อมูล ณ ขณะนั้น',
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT fk_wf_hist_inst FOREIGN KEY (instance_id) REFERENCES workflow_instances (id) ON DELETE CASCADE
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'ตารางประวัติการเปลี่ยนสถานะ Workflow';
+
+CREATE INDEX idx_wf_hist_instance ON workflow_histories (instance_id);
+
+CREATE INDEX idx_wf_hist_user ON workflow_histories (action_by_user_id);
+
+-- ============================================================
+-- 5. PARTITIONING PREPARATION (Advance - Optional)
+-- ============================================================
+-- หมายเหตุ: การทำ Partitioning บนตารางที่มีอยู่แล้ว (audit_logs, notifications)
+-- มักจะต้อง Drop Primary Key เดิม แล้วสร้างใหม่โดยรวม Partition Key (created_at) เข้าไป
+-- ขั้นตอนนี้ควรทำแยกต่างหากเมื่อระบบเริ่มมีข้อมูลเยอะ หรือทำใน Maintenance Window
+--
+-- ตัวอย่าง SQL สำหรับ Audit Logs (Reference Only):
+-- ALTER TABLE audit_logs DROP PRIMARY KEY, ADD PRIMARY KEY (audit_id, created_at);
+-- ALTER TABLE audit_logs PARTITION BY RANGE (YEAR(created_at)) (
+-- PARTITION p2024 VALUES LESS THAN (2025),
+-- PARTITION p2025 VALUES LESS THAN (2026),
+-- PARTITION p_future VALUES LESS THAN MAXVALUE
+-- );
+-- =====================================================
+-- CREATE INDEXES
+-- =====================================================
+-- Indexes for correspondences
+CREATE INDEX idx_corr_type ON correspondences(correspondence_type_id);
+
+CREATE INDEX idx_corr_project ON correspondences(project_id);
+
+CREATE INDEX idx_rfa_rev_v_drawing_count ON rfa_revisions (v_ref_drawing_count);
+
+-- Indexes for document_number_formats
+CREATE INDEX idx_document_number_formats_project ON document_number_formats (project_id);
+
+CREATE INDEX idx_document_number_formats_type ON document_number_formats (correspondence_type_id);
+
+CREATE INDEX idx_document_number_formats_project_type ON document_number_formats (project_id, correspondence_type_id);
+
+-- Indexes for document_number_counters
+CREATE INDEX idx_document_number_counters_project ON document_number_counters (project_id);
+
+CREATE INDEX idx_document_number_counters_org ON document_number_counters (originator_organization_id);
+
+CREATE INDEX idx_document_number_counters_type ON document_number_counters (correspondence_type_id);
+
+CREATE INDEX idx_document_number_counters_year ON document_number_counters (current_year);
+
+-- Indexes for tags
+CREATE INDEX idx_tags_name ON tags (tag_name);
+
+CREATE INDEX idx_tags_created_at ON tags (created_at);
+
+-- Indexes for correspondence_tags
+CREATE INDEX idx_correspondence_tags_correspondence ON correspondence_tags (correspondence_id);
+
+CREATE INDEX idx_correspondence_tags_tag ON correspondence_tags (tag_id);
+
+-- Indexes for audit_logs
+CREATE INDEX idx_audit_logs_user ON audit_logs (user_id);
+
+CREATE INDEX idx_audit_logs_action ON audit_logs (ACTION);
+
+CREATE INDEX idx_audit_logs_entity ON audit_logs (entity_type, entity_id);
+
+CREATE INDEX idx_audit_logs_created_at ON audit_logs (created_at);
+
+CREATE INDEX idx_audit_logs_ip ON audit_logs (ip_address);
+
+-- Indexes for notifications
+CREATE INDEX idx_notifications_user ON notifications (user_id);
+
+CREATE INDEX idx_notifications_type ON notifications (notification_type);
+
+CREATE INDEX idx_notifications_read ON notifications (is_read);
+
+CREATE INDEX idx_notifications_entity ON notifications (entity_type, entity_id);
+
+CREATE INDEX idx_notifications_created_at ON notifications (created_at);
+
+-- Indexes for search_indices
+CREATE INDEX idx_search_indices_entity ON search_indices (entity_type, entity_id);
+
+CREATE INDEX idx_search_indices_indexed_at ON search_indices (indexed_at);
+
+-- Indexes for backup_logs
+CREATE INDEX idx_backup_logs_type ON backup_logs (backup_type);
+
+CREATE INDEX idx_backup_logs_status ON backup_logs (STATUS);
+
+CREATE INDEX idx_backup_logs_started_at ON backup_logs (started_at);
+
+CREATE INDEX idx_backup_logs_completed_at ON backup_logs (completed_at);
+
+-- =====================================================
+-- Additional Composite Indexes for Performance
+-- =====================================================
+-- Composite index for document_number_counters for faster lookups
+CREATE INDEX idx_doc_counter_composite ON document_number_counters (
+ project_id,
+ originator_organization_id,
+ correspondence_type_id,
+ current_year
+);
+
+-- Composite index for notifications for user-specific queries
+CREATE INDEX idx_notifications_user_unread ON notifications (user_id, is_read, created_at);
+
+-- Composite index for audit_logs for reporting
+CREATE INDEX idx_audit_logs_reporting ON audit_logs (created_at, entity_type, ACTION);
+
+-- Composite index for search_indices for entity-based queries
+CREATE INDEX idx_search_entities ON search_indices (entity_type, entity_id, indexed_at);
+
+-- สร้าง Index สำหรับ Cleanup Job
+CREATE INDEX idx_attachments_temp_cleanup ON attachments (is_temporary, expires_at);
+
+CREATE INDEX idx_attachments_temp_id ON attachments (temp_id);
+
+CREATE INDEX idx_audit_request_id ON audit_logs (request_id);
+
+-- =====================================================
+-- SQL Script for LCBP3-DMS (V1.4.0) - MariaDB
+-- Generated from Data Dictionary
+-- =====================================================
+-- =====================================================
+-- 11. 📊 Views & Procedures (วิว และ โปรซีเดอร์)
+-- =====================================================
+-- View แสดง Revision "ปัจจุบัน" ของ correspondences ทั้งหมด (ที่ไม่ใช่ RFA)
+CREATE VIEW v_current_correspondences AS
+SELECT c.id AS correspondence_id,
+ c.correspondence_number,
+ c.correspondence_type_id,
+ ct.type_code AS correspondence_type_code,
+ ct.type_name AS correspondence_type_name,
+ c.project_id,
+ p.project_code,
+ p.project_name,
+ c.originator_id,
+ org.organization_code AS originator_code,
+ org.organization_name AS originator_name,
+ cr.id AS revision_id,
+ cr.revision_number,
+ cr.revision_label,
+ cr.subject,
+ cr.document_date,
+ cr.issued_date,
+ cr.received_date,
+ cr.due_date,
+ cr.correspondence_status_id,
+ cs.status_code,
+ cs.status_name,
+ cr.created_by,
+ u.username AS created_by_username,
+ cr.created_at AS revision_created_at
+FROM correspondences c
+ INNER JOIN correspondence_types ct ON c.correspondence_type_id = ct.id
+ INNER JOIN projects p ON c.project_id = p.id
+ LEFT JOIN organizations org ON c.originator_id = org.id
+ INNER JOIN correspondence_revisions cr ON c.id = cr.correspondence_id
+ INNER JOIN correspondence_status cs ON cr.correspondence_status_id = cs.id
+ LEFT JOIN users u ON cr.created_by = u.user_id
+WHERE cr.is_current = TRUE
+ AND c.correspondence_type_id NOT IN(
+ SELECT id
+ FROM correspondence_types
+ WHERE type_code = 'RFA'
+ )
+ AND c.deleted_at IS NULL;
+
+-- View แสดง Revision "ปัจจุบัน" ของ rfa_revisions ทั้งหมด
+CREATE VIEW v_current_rfas AS
+SELECT
+ r.id AS rfa_id,
+ r.rfa_type_id,
+ rt.type_code AS rfa_type_code,
+ rt.type_name_th AS rfa_type_name_th,
+ rt.type_name_en AS rfa_type_name_en,
+ c.correspondence_number,
+ c.discipline_id, -- ✅ ดึงจาก Correspondences
+ d.discipline_code, -- ✅ Join เพิ่มเพื่อแสดง code
+ c.project_id,
+ p.project_code,
+ p.project_name,
+ c.originator_id,
+ org.organization_name AS originator_name,
+ rr.id AS revision_id,
+ rr.revision_number,
+ rr.revision_label,
+ rr.subject,
+ rr.document_date,
+ rr.issued_date,
+ rr.received_date,
+ rr.approved_date,
+ rr.rfa_status_code_id,
+ rsc.status_code AS rfa_status_code,
+ rsc.status_name AS rfa_status_name,
+ rr.rfa_approve_code_id,
+ rac.approve_code AS rfa_approve_code,
+ rac.approve_name AS rfa_approve_name,
+ rr.created_by,
+ u.username AS created_by_username,
+ rr.created_at AS revision_created_at
+FROM rfas r
+ INNER JOIN rfa_types rt ON r.rfa_type_id = rt.id
+ INNER JOIN rfa_revisions rr ON r.id = rr.rfa_id
+ -- RFA uses shared primary key with correspondences (1:1)
+ INNER JOIN correspondences c ON r.id = c.id
+ -- [FIX 1] เพิ่มการ Join ตาราง disciplines
+ LEFT JOIN disciplines d ON c.discipline_id = d.id
+ INNER JOIN projects p ON c.project_id = p.id
+ INNER JOIN organizations org ON c.originator_id = org.id
+ INNER JOIN rfa_status_codes rsc ON rr.rfa_status_code_id = rsc.id
+ LEFT JOIN rfa_approve_codes rac ON rr.rfa_approve_code_id = rac.id
+ LEFT JOIN users u ON rr.created_by = u.user_id
+WHERE rr.is_current = TRUE
+ AND r.deleted_at IS NULL
+ AND c.deleted_at IS NULL;
+
+-- View แสดงความสัมพันธ์ทั้งหมดระหว่าง Contract, Project, และ Organization
+CREATE VIEW v_contract_parties_all AS
+SELECT c.id AS contract_id,
+ c.contract_code,
+ c.contract_name,
+ p.id AS project_id,
+ p.project_code,
+ p.project_name,
+ o.id AS organization_id,
+ o.organization_code,
+ o.organization_name,
+ co.role_in_contract
+FROM contracts c
+ INNER JOIN projects p ON c.project_id = p.id
+ INNER JOIN contract_organizations co ON c.id = co.contract_id
+ INNER JOIN organizations o ON co.organization_id = o.id
+WHERE c.is_active = TRUE;
+
+-- ============================================================
+-- View: v_user_tasks (Unified Workflow Engine Edition)
+-- ============================================================
+-- หน้าที่: รวมรายการงานที่ยังค้างอยู่ (Status = ACTIVE) จากทุกระบบ (RFA, Circulation, Correspondence)
+-- เพื่อนำไปแสดงในหน้า Dashboard "My Tasks"
+-- ============================================================
+CREATE OR REPLACE VIEW v_user_tasks AS
+SELECT -- 1. Workflow Instance Info
+ wi.id AS instance_id,
+ wd.workflow_code,
+ wi.current_state,
+ wi.status AS workflow_status,
+ wi.created_at AS assigned_at,
+ -- 2. Entity Info (Polymorphic Identity)
+ wi.entity_type,
+ wi.entity_id,
+ -- 3. Normalized Document Info (ดึงข้อมูลจริงจากตารางลูกตามประเภท)
+ -- ใช้ CASE WHEN เพื่อรวมคอลัมน์ที่ชื่อต่างกันให้เป็นชื่อกลาง (document_number, subject)
+ CASE
+ WHEN wi.entity_type = 'rfa_revision' THEN rfa_corr.correspondence_number
+ WHEN wi.entity_type = 'circulation' THEN circ.circulation_no
+ WHEN wi.entity_type = 'correspondence_revision' THEN corr_corr.correspondence_number
+ ELSE 'N/A'
+ END AS document_number,
+ CASE
+ WHEN wi.entity_type = 'rfa_revision' THEN rfa_rev.subject
+ WHEN wi.entity_type = 'circulation' THEN circ.circulation_subject
+ WHEN wi.entity_type = 'correspondence_revision' THEN corr_rev.subject
+ ELSE 'Unknown Document'
+ END AS subject,
+ -- 4. Context Info (สำหรับ Filter สิทธิ์การมองเห็นที่ Backend)
+ -- ดึงเป็น JSON String เพื่อให้ Backend ไป Parse หรือใช้ JSON_CONTAINS
+ JSON_UNQUOTE(JSON_EXTRACT(wi.context, '$.ownerId')) AS owner_id,
+ JSON_EXTRACT(wi.context, '$.assigneeIds') AS assignee_ids_json
+FROM workflow_instances wi
+ JOIN workflow_definitions wd ON wi.definition_id = wd.id -- 5. Joins for RFA (ซับซ้อนหน่อยเพราะ RFA ผูกกับ Correspondence อีกที)
+ LEFT JOIN rfa_revisions rfa_rev ON wi.entity_type = 'rfa_revision'
+ AND wi.entity_id = CAST(rfa_rev.id AS CHAR)
+ LEFT JOIN correspondences rfa_corr ON rfa_rev.id = rfa_corr.id -- 6. Joins for Circulation
+ LEFT JOIN circulations circ ON wi.entity_type = 'circulation'
+ AND wi.entity_id = CAST(circ.id AS CHAR) -- 7. Joins for Correspondence
+ LEFT JOIN correspondence_revisions corr_rev ON wi.entity_type = 'correspondence_revision'
+ AND wi.entity_id = CAST(corr_rev.id AS CHAR)
+ LEFT JOIN correspondences corr_corr ON corr_rev.correspondence_id = corr_corr.id -- 8. Filter เฉพาะงานที่ยัง Active อยู่
+WHERE wi.status = 'ACTIVE';
+
+-- View แสดง audit_logs พร้อมข้อมูล username และ email ของผู้กระทำ
+CREATE VIEW v_audit_log_details AS
+SELECT al.audit_id,
+ al.user_id,
+ u.username,
+ u.email,
+ u.first_name,
+ u.last_name,
+ al.action,
+ al.entity_type,
+ al.entity_id,
+ al.details_json,
+ al.ip_address,
+ al.user_agent,
+ al.created_at
+FROM audit_logs al
+ LEFT JOIN users u ON al.user_id = u.user_id;
+
+-- View รวมสิทธิ์ทั้งหมด (Global + Project) ของผู้ใช้ทุกคน
+CREATE VIEW v_user_all_permissions AS -- Global Permissions
+SELECT ua.user_id,
+ ua.role_id,
+ r.role_name,
+ rp.permission_id,
+ p.permission_name,
+ p.module,
+ p.scope_level,
+ ua.organization_id,
+ NULL AS project_id,
+ NULL AS contract_id,
+ 'GLOBAL' AS permission_scope
+FROM user_assignments ua
+ INNER JOIN roles r ON ua.role_id = r.role_id
+ INNER JOIN role_permissions rp ON ua.role_id = rp.role_id
+ INNER JOIN permissions p ON rp.permission_id = p.permission_id -- Global scope
+WHERE p.is_active = 1
+ AND ua.organization_id IS NULL
+ AND ua.project_id IS NULL
+ AND ua.contract_id IS NULL
+UNION ALL
+-- Organization-specific Permissions
+SELECT ua.user_id,
+ ua.role_id,
+ r.role_name,
+ rp.permission_id,
+ p.permission_name,
+ p.module,
+ p.scope_level,
+ ua.organization_id,
+ NULL AS project_id,
+ NULL AS contract_id,
+ 'ORGANIZATION' AS permission_scope
+FROM user_assignments ua
+ INNER JOIN roles r ON ua.role_id = r.role_id
+ INNER JOIN role_permissions rp ON ua.role_id = rp.role_id
+ INNER JOIN permissions p ON rp.permission_id = p.permission_id -- Organization scope
+WHERE p.is_active = 1
+ AND ua.organization_id IS NOT NULL
+ AND ua.project_id IS NULL
+ AND ua.contract_id IS NULL
+UNION ALL
+-- Project-specific Permissions
+SELECT ua.user_id,
+ ua.role_id,
+ r.role_name,
+ rp.permission_id,
+ p.permission_name,
+ p.module,
+ p.scope_level,
+ ua.organization_id,
+ ua.project_id,
+ NULL AS contract_id,
+ 'PROJECT' AS permission_scope
+FROM user_assignments ua
+ INNER JOIN roles r ON ua.role_id = r.role_id
+ INNER JOIN role_permissions rp ON ua.role_id = rp.role_id
+ INNER JOIN permissions p ON rp.permission_id = p.permission_id -- Project scope
+WHERE p.is_active = 1
+ AND ua.project_id IS NOT NULL
+ AND ua.contract_id IS NULL
+UNION ALL
+-- Contract-specific Permissions
+SELECT ua.user_id,
+ ua.role_id,
+ r.role_name,
+ rp.permission_id,
+ p.permission_name,
+ p.module,
+ p.scope_level,
+ ua.organization_id,
+ ua.project_id,
+ ua.contract_id,
+ 'CONTRACT' AS permission_scope
+FROM user_assignments ua
+ INNER JOIN roles r ON ua.role_id = r.role_id
+ INNER JOIN role_permissions rp ON ua.role_id = rp.role_id
+ INNER JOIN permissions p ON rp.permission_id = p.permission_id -- Contract scope
+WHERE p.is_active = 1
+ AND ua.contract_id IS NOT NULL;
+
+-- =====================================================
+-- Additional Useful Views
+-- =====================================================
+-- View แสดงเอกสารทั้งหมดที่มีไฟล์แนบ
+CREATE VIEW v_documents_with_attachments AS
+SELECT 'CORRESPONDENCE' AS document_type,
+ c.id AS document_id,
+ c.correspondence_number AS document_number,
+ c.project_id,
+ p.project_code,
+ p.project_name,
+ COUNT(ca.attachment_id) AS attachment_count,
+ MAX(a.created_at) AS latest_attachment_date
+FROM correspondences c
+ INNER JOIN projects p ON c.project_id = p.id
+ LEFT JOIN correspondence_attachments ca ON c.id = ca.correspondence_id
+ LEFT JOIN attachments a ON ca.attachment_id = a.id
+WHERE c.deleted_at IS NULL
+GROUP BY c.id,
+ c.correspondence_number,
+ c.project_id,
+ p.project_code,
+ p.project_name
+UNION ALL
+SELECT 'CIRCULATION' AS document_type,
+ circ.id AS document_id,
+ circ.circulation_no AS document_number,
+ corr.project_id,
+ p.project_code,
+ p.project_name,
+ COUNT(ca.attachment_id) AS attachment_count,
+ MAX(a.created_at) AS latest_attachment_date
+FROM circulations circ
+ INNER JOIN correspondences corr ON circ.correspondence_id = corr.id
+ INNER JOIN projects p ON corr.project_id = p.id
+ LEFT JOIN circulation_attachments ca ON circ.id = ca.circulation_id
+ LEFT JOIN attachments a ON ca.attachment_id = a.id
+GROUP BY circ.id,
+ circ.circulation_no,
+ corr.project_id,
+ p.project_code,
+ p.project_name
+UNION ALL
+SELECT 'SHOP_DRAWING' AS document_type,
+ sdr.id AS document_id,
+ sd.drawing_number AS document_number,
+ sd.project_id,
+ p.project_code,
+ p.project_name,
+ COUNT(sdra.attachment_id) AS attachment_count,
+ MAX(a.created_at) AS latest_attachment_date
+FROM shop_drawing_revisions sdr
+ INNER JOIN shop_drawings sd ON sdr.shop_drawing_id = sd.id
+ INNER JOIN projects p ON sd.project_id = p.id
+ LEFT JOIN shop_drawing_revision_attachments sdra ON sdr.id = sdra.shop_drawing_revision_id
+ LEFT JOIN attachments a ON sdra.attachment_id = a.id
+WHERE sd.deleted_at IS NULL
+GROUP BY sdr.id,
+ sd.drawing_number,
+ sd.project_id,
+ p.project_code,
+ p.project_name
+UNION ALL
+SELECT 'CONTRACT_DRAWING' AS document_type,
+ cd.id AS document_id,
+ cd.condwg_no AS document_number,
+ cd.project_id,
+ p.project_code,
+ p.project_name,
+ COUNT(cda.attachment_id) AS attachment_count,
+ MAX(a.created_at) AS latest_attachment_date
+FROM contract_drawings cd
+ INNER JOIN projects p ON cd.project_id = p.id
+ LEFT JOIN contract_drawing_attachments cda ON cd.id = cda.contract_drawing_id
+ LEFT JOIN attachments a ON cda.attachment_id = a.id
+WHERE cd.deleted_at IS NULL
+GROUP BY cd.id,
+ cd.condwg_no,
+ cd.project_id,
+ p.project_code,
+ p.project_name;
+
+-- View แสดงสถิติเอกสารตามประเภทและสถานะ
+CREATE VIEW v_document_statistics AS
+SELECT p.id AS project_id,
+ p.project_code,
+ p.project_name,
+ ct.id AS correspondence_type_id,
+ ct.type_code,
+ ct.type_name,
+ cs.id AS status_id,
+ cs.status_code,
+ cs.status_name,
+ COUNT(DISTINCT c.id) AS document_count,
+ COUNT(DISTINCT cr.id) AS revision_count
+FROM projects p
+ CROSS JOIN correspondence_types ct
+ CROSS JOIN correspondence_status cs
+ LEFT JOIN correspondences c ON p.id = c.project_id
+ AND ct.id = c.correspondence_type_id
+ LEFT JOIN correspondence_revisions cr ON c.id = cr.correspondence_id
+ AND cs.id = cr.correspondence_status_id
+ AND cr.is_current = TRUE
+WHERE p.is_active = 1
+ AND ct.is_active = 1
+ AND cs.is_active = 1
+GROUP BY p.id,
+ p.project_code,
+ p.project_name,
+ ct.id,
+ ct.type_code,
+ ct.type_name,
+ cs.id,
+ cs.status_code,
+ cs.status_name;
+
+-- =====================================================
+-- Indexes for View Performance Optimization
+-- =====================================================
+-- Indexes for v_current_correspondences performance
+CREATE INDEX idx_correspondences_type_project ON correspondences (correspondence_type_id, project_id);
+
+CREATE INDEX idx_corr_revisions_current_status ON correspondence_revisions (is_current, correspondence_status_id);
+
+CREATE INDEX idx_corr_revisions_correspondence_current ON correspondence_revisions (correspondence_id, is_current);
+
+-- Indexes for v_current_rfas performance
+CREATE INDEX idx_rfa_revisions_current_status ON rfa_revisions (is_current, rfa_status_code_id);
+
+CREATE INDEX idx_rfa_revisions_rfa_current ON rfa_revisions (rfa_id, is_current);
+
+-- Indexes for document statistics performance
+CREATE INDEX idx_correspondences_project_type ON correspondences (project_id, correspondence_type_id);
+
+CREATE INDEX idx_corr_revisions_status_current ON correspondence_revisions (correspondence_status_id, is_current);
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/specs/07-database/lcbp3-v1.6.0-seed-basic.sql b/specs/07-database/lcbp3-v1.6.0-seed-basic.sql
new file mode 100644
index 0000000..0540461
--- /dev/null
+++ b/specs/07-database/lcbp3-v1.6.0-seed-basic.sql
@@ -0,0 +1,3223 @@
+INSERT INTO organization_roles (id, role_name)
+VALUES (1, 'OWNER'),
+ (2, 'DESIGNER'),
+ (3, 'CONSULTANT'),
+ (4, 'CONTRACTOR'),
+ (5, 'THIRD PARTY'),
+ (6, 'GUEST');
+
+INSERT INTO organizations (
+ id,
+ organization_code,
+ organization_name,
+ role_id
+ )
+VALUES (1, 'กทท.', 'การท่าเรือแห่งประเทศไทย', 1),
+ (
+ 10,
+ 'สคฉ.3',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3',
+ 1
+ ),
+ (
+ 11,
+ 'สคฉ.3-01',
+ 'ตรวจรับพัสดุ ที่ปรึกษาควบคุมงาน',
+ 1
+ ),
+ (12, 'สคฉ.3-02', 'ตรวจรับพัสดุ งานทางทะเล', 1),
+ (
+ 13,
+ 'สคฉ.3-03',
+ 'ตรวจรับพัสดุ อาคารและระบบสาธารณูปโภค',
+ 1
+ ),
+ (
+ 14,
+ 'สคฉ.3-04',
+ 'ตรวจรับพัสดุ ตรวจสอบผลกระทบสิ่งแวดล้อม',
+ 1
+ ),
+ (
+ 15,
+ 'สคฉ.3-05',
+ 'ตรวจรับพัสดุ เยียวยาการประมง',
+ 1
+ ),
+ (
+ 16,
+ 'สคฉ.3-06',
+ 'ตรวจรับพัสดุ งานก่อสร้าง ส่วนที่ 3',
+ 1
+ ),
+ (
+ 17,
+ 'สคฉ.3-07',
+ 'ตรวจรับพัสดุ งานก่อสร้าง ส่วนที่ 4',
+ 1
+ ),
+ (
+ 18,
+ 'สคฉ.3-xx',
+ 'ตรวจรับพัสดุ ที่ปรึกษาออกแบบ ส่วนที่ 4',
+ 1
+ ),
+ (21, 'TEAM', 'Designer Consulting Ltd.', 2),
+ (22, 'คคง.', 'Construction Supervision Ltd.', 3),
+ (41, 'ผรม.1', 'Contractor งานทางทะเล', 4),
+ (42, 'ผรม.2', 'Contractor งานก่อสร้าง', 4),
+ (
+ 43,
+ 'ผรม.3',
+ 'Contractor งานก่อสร้าง ส่วนที่ 3',
+ 4
+ ),
+ (
+ 44,
+ 'ผรม.4',
+ 'Contractor งานก่อสร้าง ส่วนที่ 4',
+ 4
+ ),
+ (31, 'EN', 'Third Party Environment', 5),
+ (32, 'CAR', 'Third Party Fishery Care', 5);
+
+-- Seed project
+INSERT INTO projects (project_code, project_name)
+VALUES (
+ 'LCBP3',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)'
+ ),
+ (
+ 'LCBP3-C1',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1) งานก่อสร้างงานทางทะเล'
+ ),
+ (
+ 'LCBP3-C2',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 2) งานก่อสร้างอาคาร ท่าเทียบเรือ ระบบถนน และระบบสาธารณูปโภค'
+ ),
+ (
+ 'LCBP3-C3',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 3) งานก่อสร้าง'
+ ),
+ (
+ 'LCBP3-C4',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 4) งานก่อสร้าง'
+ ),
+ (
+ 'LCBP3-EN',
+ 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 4) งานก่อสร้าง'
+ );
+
+-- Seed contract
+-- ใช้ Subquery เพื่อดึง project_id มาเชื่อมโยง ทำให้ไม่ต้องมานั่งจัดการ ID ด้วยตัวเอง
+INSERT INTO contracts (
+ contract_code,
+ contract_name,
+ project_id,
+ is_active
+ )
+VALUES (
+ 'LCBP3-DS',
+ 'งานจ้างที่ปรีกษาออกแบบ โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-PS',
+ 'งานจ้างที่ปรีกษาควบคุมงาน โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-C1',
+ 'งานก่อสร้าง โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1) งานก่อสร้างงานทางทะเล',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C1'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-C2',
+ 'งานก่อสร้าง โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 2) งานก่อสร้างอาคาร ท่าเทียบเรือ ระบบถนน และระบบสาธารณูปโภค',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C2'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-C3',
+ 'งานก่อสร้าง โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 3) งานก่อสร้าง',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C3'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-C4',
+ 'งานก่อสร้าง โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 4) งานก่อสร้าง',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C4'
+ ),
+ TRUE
+ ),
+ (
+ 'LCBP3-EN',
+ 'งานก่อสร้าง โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 4) งานก่อสร้าง',
+ (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-EN'
+ ),
+ TRUE
+ );
+
+-- Seed user
+-- Initial SUPER_ADMIN user
+INSERT INTO users (
+ user_id,
+ username,
+ password_hash,
+ first_name,
+ last_name,
+ email,
+ line_id,
+ primary_organization_id
+ )
+VALUES (
+ 1,
+ 'superadmin',
+ '$2b$10$E6d5k.f46jr.POGWKHhiQ.X1ZsFrMpZox//sCxeOiLUULGuAHO0NW',
+ 'Super',
+ 'Admin',
+ 'superadmin @example.com',
+ NULL,
+ NULL
+ ),
+ (
+ 2,
+ 'admin',
+ '$2b$10$E6d5k.f46jr.POGWKHhiQ.X1ZsFrMpZox//sCxeOiLUULGuAHO0NW',
+ 'Admin',
+ 'คคง.',
+ 'admin@example.com',
+ NULL,
+ 1
+ ),
+ (
+ 3,
+ 'editor01',
+ '$2b$10$E6d5k.f46jr.POGWKHhiQ.X1ZsFrMpZox//sCxeOiLUULGuAHO0NW',
+ 'DC',
+ 'C1',
+ 'editor01 @example.com',
+ NULL,
+ 41
+ ),
+ (
+ 4,
+ 'viewer01',
+ '$2b$10$E6d5k.f46jr.POGWKHhiQ.X1ZsFrMpZox//sCxeOiLUULGuAHO0NW',
+ 'Viewer',
+ 'สคฉ.03',
+ 'viewer01 @example.com',
+ NULL,
+ 10
+ );
+
+-- ==========================================================
+-- Seed Roles (บทบาทพื้นฐาน 5 บทบาท ตาม Req 4.3)
+-- ==========================================================
+-- 1. Superadmin (Global)
+INSERT INTO roles (role_id, role_name, scope, description)
+VALUES (
+ 1,
+ 'Superadmin',
+ 'Global',
+ 'ผู้ดูแลระบบสูงสุด: สามารถทำทุกอย่างในระบบ, จัดการองค์กร, และจัดการข้อมูลหลักระดับ Global'
+ ),
+ -- 2. Org Admin (Organization)
+ (
+ 2,
+ 'Org Admin',
+ 'Organization',
+ 'ผู้ดูแลองค์กร: จัดการผู้ใช้ในองค์กร, จัดการบทบาท / สิทธิ์ภายในองค์กร, และดูรายงานขององค์กร'
+ ),
+ -- 3. Document Control (Organization)
+ (
+ 3,
+ 'Document Control',
+ 'Organization',
+ 'ควบคุมเอกสารขององค์กร: เพิ่ม / แก้ไข / ลบเอกสาร, และกำหนดสิทธิ์เอกสารภายในองค์กร'
+ ),
+ -- 4. Editor (Organization)
+ (
+ 4,
+ 'Editor',
+ 'Organization',
+ 'ผู้แก้ไขเอกสารขององค์กร: เพิ่ม / แก้ไขเอกสารที่ได้รับมอบหมาย'
+ ),
+ -- 5. Viewer (Organization)
+ (
+ 5,
+ 'Viewer',
+ 'Organization',
+ 'ผู้ดูเอกสารขององค์กร: ดูเอกสารที่มีสิทธิ์เข้าถึงเท่านั้น'
+ ),
+ -- 6. Project Manager (Project)
+ (
+ 6,
+ 'Project Manager',
+ 'Project',
+ 'ผู้จัดการโครงการ: จัดการสมาชิกในโครงการ, สร้าง / จัดการสัญญาในโครงการ, และดูรายงานโครงการ'
+ ),
+ -- 7. Contract Admin (Contract)
+ (
+ 7,
+ 'Contract Admin',
+ 'Contract',
+ 'ผู้ดูแลสัญญา: จัดการสมาชิกในสัญญา, สร้าง / จัดการข้อมูลหลักเฉพาะสัญญา, และอนุมัติเอกสารในสัญญา'
+ );
+
+-- =====================================================
+-- 2. Seed Permissions (สิทธิ์การใช้งานทั้งหมด)
+-- สิทธิ์ระดับระบบและการจัดการหลัก (System & Master Data)
+-- =====================================================
+-- ==========================================================
+-- 1. System & Global Permissions (ID 1-10)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 1,
+ 'system.manage_all',
+ 'ทำทุกอย่างในระบบ (Superadmin Power)',
+ 'system',
+ 1
+ ),
+ (
+ 2,
+ 'system.impersonate',
+ 'แอบอ้างผู้ใช้อื่น (For Support/Debug)',
+ 'system',
+ 1
+ ),
+ (
+ 3,
+ 'system.maintenance_mode',
+ 'เปิด/ปิด Maintenance Mode',
+ 'system',
+ 1
+ ),
+ (
+ 4,
+ 'system.view_logs',
+ 'ดู System Logs',
+ 'system',
+ 1
+ ),
+ (
+ 5,
+ 'system.manage_cache',
+ 'จัดการ Cache (Clear/Flush)',
+ 'system',
+ 1
+ );
+
+-- ==========================================================
+-- 2. Organization Management (ID 11-20)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 11,
+ 'organization.create',
+ 'สร้างองค์กรใหม่',
+ 'organization',
+ 1
+ ),
+ (
+ 12,
+ 'organization.view',
+ 'ดูรายการองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 13,
+ 'organization.edit',
+ 'แก้ไขข้อมูลองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 14,
+ 'organization.delete',
+ 'ลบองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 15,
+ 'organization.manage_members',
+ 'จัดการสมาชิกในองค์กร',
+ 'organization',
+ 1
+ );
+
+-- ==========================================================
+-- 3. User & Role Management (ID 21-40) - PRIORITIZED
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 21,
+ 'user.create',
+ 'สร้างผู้ใช้งานใหม่',
+ 'user',
+ 1
+ ),
+ (22, 'user.view', 'ดูข้อมูลผู้ใช้งาน', 'user', 1),
+ (
+ 23,
+ 'user.edit',
+ 'แก้ไขข้อมูลผู้ใช้งาน',
+ 'user',
+ 1
+ ),
+ (
+ 24,
+ 'user.delete',
+ 'ลบ/ปิดการใช้งานผู้ใช้',
+ 'user',
+ 1
+ ),
+ (
+ 25,
+ 'user.manage_assignments',
+ 'มอบหมาย Role/Project ให้ผู้ใช้',
+ 'user',
+ 1
+ ),
+ (
+ 26,
+ 'role.create',
+ 'สร้างบทบาท (Role) ใหม่',
+ 'role',
+ 1
+ ),
+ (27, 'role.view', 'ดูบทบาท', 'role', 1),
+ (28, 'role.edit', 'แก้ไขบทบาท', 'role', 1),
+ (29, 'role.delete', 'ลบบทบาท', 'role', 1),
+ (
+ 30,
+ 'role.assign_permissions',
+ 'มอบสิทธิ์ให้กับบทบาท',
+ 'role',
+ 1
+ );
+
+-- ==========================================================
+-- 4. Master Data Management (ID 41-50)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 41,
+ 'master_data.view',
+ 'ดูข้อมูลหลัก (Read-Only Dropdowns)',
+ 'master',
+ 1
+ ),
+ (
+ 42,
+ 'master_data.manage',
+ 'จัดการข้อมูลหลักทั่วไป',
+ 'master',
+ 1
+ ),
+ (
+ 43,
+ 'master_data.correspondence_type.manage',
+ 'จัดการประเภทเอกสาร',
+ 'master',
+ 1
+ ),
+ (
+ 44,
+ 'master_data.document_status.manage',
+ 'จัดการสถานะเอกสาร',
+ 'master',
+ 1
+ ),
+ (
+ 45,
+ 'master_data.drawing_category.manage',
+ 'จัดการหมวดหมู่แบบ',
+ 'master',
+ 1
+ ),
+ (
+ 46,
+ 'master_data.tag.manage',
+ 'จัดการ Tags',
+ 'master',
+ 1
+ ),
+ (
+ 47,
+ 'master_data.discipline.manage',
+ 'จัดการสาขางาน (Disciplines)',
+ 'master',
+ 1
+ ),
+ (
+ 48,
+ 'master_data.number_format.manage',
+ 'จัดการ Document Number Format',
+ 'master',
+ 1
+ );
+
+-- ==========================================================
+-- 5. Document Management - Generic (ID 51-70)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 51,
+ 'document.view',
+ 'ดูเอกสาร (ทุกประเภท)',
+ 'document',
+ 1
+ ),
+ (
+ 52,
+ 'document.create',
+ 'สร้างเอกสาร (Draft)',
+ 'document',
+ 1
+ ),
+ (
+ 53,
+ 'document.edit',
+ 'แก้ไขเอกสาร',
+ 'document',
+ 1
+ ),
+ (54, 'document.delete', 'ลบเอกสาร', 'document', 1),
+ (
+ 55,
+ 'document.submit',
+ 'ส่งเอกสาร (Submitted)',
+ 'document',
+ 1
+ ),
+ (
+ 56,
+ 'document.admin_edit',
+ 'แก้ไข/ถอน/ยกเลิกเอกสารที่ส่งแล้ว (Admin Power)',
+ 'document',
+ 1
+ ),
+ (
+ 57,
+ 'document.attach_files',
+ 'จัดการไฟล์แนบ (Upload/Delete)',
+ 'document',
+ 1
+ ),
+ (
+ 58,
+ 'document.manage_references',
+ 'จัดการการอ้างอิงเอกสาร',
+ 'document',
+ 1
+ );
+
+-- ==========================================================
+-- 6. Correspondence Module (ID 71-80)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 71,
+ 'correspondence.create',
+ 'สร้างเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 72,
+ 'correspondence.view',
+ 'ดูเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 73,
+ 'correspondence.edit',
+ 'แก้ไขเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 74,
+ 'correspondence.delete',
+ 'ลบเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 75,
+ 'correspondence.submit',
+ 'ส่งเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ );
+
+-- ==========================================================
+-- 7. RFA Module (ID 81-90)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (81, 'rfa.create', 'สร้างเอกสาร RFA', 'rfa', 1),
+ (82, 'rfa.view', 'ดูเอกสาร RFA', 'rfa', 1),
+ (83, 'rfa.edit', 'แก้ไขเอกสาร RFA', 'rfa', 1),
+ (84, 'rfa.delete', 'ลบเอกสาร RFA', 'rfa', 1),
+ (
+ 85,
+ 'rfa.submit',
+ 'ส่ง RFA เข้า Workflow',
+ 'rfa',
+ 1
+ ),
+ (
+ 86,
+ 'rfa.manage_items',
+ 'จัดการ RFA Items (Link Drawings)',
+ 'rfa',
+ 1
+ );
+
+-- ==========================================================
+-- 8. Drawing Module (ID 91-100)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 91,
+ 'drawing.view',
+ 'ดูข้อมูลแบบ (Shop/Contract)',
+ 'drawing',
+ 1
+ ),
+ (
+ 92,
+ 'drawing.create',
+ 'สร้าง/แก้ไขแบบ',
+ 'drawing',
+ 1
+ ),
+ (93, 'drawing.delete', 'ลบแบบ', 'drawing', 1),
+ (
+ 94,
+ 'drawing.manage_revisions',
+ 'จัดการ Revisions แบบ',
+ 'drawing',
+ 1
+ ),
+ (
+ 95,
+ 'drawing.link_contract',
+ 'เชื่อมโยง Shop Drawing กับ Contract Drawing',
+ 'drawing',
+ 1
+ );
+
+-- ==========================================================
+-- 9. Circulation Module (ID 101-110)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 101,
+ 'circulation.create',
+ 'สร้างใบเวียน',
+ 'circulation',
+ 1
+ ),
+ (
+ 102,
+ 'circulation.view',
+ 'ดูใบเวียน',
+ 'circulation',
+ 1
+ ),
+ (
+ 103,
+ 'circulation.respond',
+ 'ตอบกลับใบเวียน (Main/Action)',
+ 'circulation',
+ 1
+ ),
+ (
+ 104,
+ 'circulation.acknowledge',
+ 'รับทราบใบเวียน (Information)',
+ 'circulation',
+ 1
+ ),
+ (
+ 105,
+ 'circulation.close',
+ 'ปิดใบเวียน',
+ 'circulation',
+ 1
+ );
+
+-- ==========================================================
+-- 10. Transmittal Module (ID 111-120)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 111,
+ 'transmittal.create',
+ 'สร้าง Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 112,
+ 'transmittal.view',
+ 'ดู Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 113,
+ 'transmittal.edit',
+ 'แก้ไข Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 114,
+ 'transmittal.delete',
+ 'ลบ Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 115,
+ 'transmittal.print',
+ 'พิมพ์ Transmittal Letter',
+ 'transmittal',
+ 1
+ );
+
+-- ==========================================================
+-- 11. Workflow Engine (ID 121-130)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 121,
+ 'workflow.view_definitions',
+ 'ดู Workflow Definitions',
+ 'workflow',
+ 1
+ ),
+ (
+ 122,
+ 'workflow.manage_definitions',
+ 'จัดการ Workflow Definitions',
+ 'workflow',
+ 1
+ ),
+ (
+ 123,
+ 'workflow.action_review',
+ 'ดำเนินการในขั้นตอนปัจจุบัน (Approve/Reject)',
+ 'workflow',
+ 1
+ ),
+ (
+ 124,
+ 'workflow.force_proceed',
+ 'บังคับไปยังขั้นตอนถัดไป (Document Control Power)',
+ 'workflow',
+ 1
+ ),
+ (
+ 125,
+ 'workflow.revert',
+ 'ย้อนกลับไปยังขั้นตอนก่อนหน้า (Document Control Power)',
+ 'workflow',
+ 1
+ );
+
+-- ==========================================================
+-- 12. Document Numbering (ID 131-140)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 131,
+ 'numbering.view_formats',
+ 'ดู Number Formats',
+ 'numbering',
+ 1
+ ),
+ (
+ 132,
+ 'numbering.manage_formats',
+ 'จัดการ Number Formats',
+ 'numbering',
+ 1
+ ),
+ (
+ 133,
+ 'numbering.view_counters',
+ 'ดู Counters',
+ 'numbering',
+ 1
+ ),
+ (
+ 134,
+ 'numbering.reset_counter',
+ 'Reset Counter (Dangerous Operation)',
+ 'numbering',
+ 1
+ );
+
+-- ==========================================================
+-- 13. Search & Reporting (ID 141-150)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (141, 'search.basic', 'ค้นหาพื้นฐาน', 'search', 1),
+ (
+ 142,
+ 'search.advanced',
+ 'ใช้งานการค้นหาขั้นสูง',
+ 'search',
+ 1
+ ),
+ (
+ 143,
+ 'search.export',
+ 'Export ผลการค้นหา',
+ 'search',
+ 1
+ ),
+ (144, 'report.view', 'ดูรายงาน', 'report', 1),
+ (
+ 145,
+ 'report.generate',
+ 'สร้างรายงานสรุป',
+ 'report',
+ 1
+ ),
+ (
+ 146,
+ 'report.schedule',
+ 'กำหนดรายงานอัตโนมัติ',
+ 'report',
+ 1
+ );
+
+-- ==========================================================
+-- 14. Notification & Dashboard (ID 151-160)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 151,
+ 'notification.view',
+ 'ดูการแจ้งเตือนของตัวเอง',
+ 'notification',
+ 1
+ ),
+ (
+ 152,
+ 'notification.manage_all',
+ 'จัดการการแจ้งเตือนทั้งหมด (Admin)',
+ 'notification',
+ 1
+ ),
+ (
+ 153,
+ 'dashboard.view_own',
+ 'ดู Dashboard ของตัวเอง',
+ 'dashboard',
+ 1
+ ),
+ (
+ 154,
+ 'dashboard.view_all',
+ 'ดู Dashboard ทุกคน (Admin)',
+ 'dashboard',
+ 1
+ ),
+ (
+ 155,
+ 'dashboard.view_analytics',
+ 'ดู Analytics & Statistics',
+ 'dashboard',
+ 1
+ );
+
+-- ==========================================================
+-- 15. JSON Schema Management (ID 161-170)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 161,
+ 'json_schema.view',
+ 'ดู JSON Schemas',
+ 'json_schema',
+ 1
+ ),
+ (
+ 162,
+ 'json_schema.manage',
+ 'จัดการ JSON Schemas',
+ 'json_schema',
+ 1
+ ),
+ (
+ 163,
+ 'json_schema.migrate_data',
+ 'Migrate Data ระหว่าง Schema Versions',
+ 'json_schema',
+ 1
+ );
+
+-- ==========================================================
+-- 16. Monitoring & Admin Tools (ID 171-180)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 171,
+ 'monitoring.view_health',
+ 'ดู Health Check Status',
+ 'monitoring',
+ 1
+ ),
+ (
+ 172,
+ 'monitoring.view_metrics',
+ 'ดู System Metrics',
+ 'monitoring',
+ 1
+ ),
+ (
+ 173,
+ 'monitoring.manage_maintenance',
+ 'จัดการ Maintenance Mode',
+ 'monitoring',
+ 1
+ ),
+ (
+ 174,
+ 'audit.view_own',
+ 'ดู Audit Logs ของตัวเอง',
+ 'audit',
+ 1
+ ),
+ (
+ 175,
+ 'audit.view_all',
+ 'ดู Audit Logs ทั้งหมด (Admin)',
+ 'audit',
+ 1
+ );
+
+-- ==========================================================
+-- 17. Project & Contract Management (ID 201-220) - DEPRIORITIZED
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 201,
+ 'project.create',
+ 'สร้างโครงการใหม่',
+ 'project',
+ 1
+ ),
+ (
+ 202,
+ 'project.view',
+ 'ดูรายการโครงการ',
+ 'project',
+ 1
+ ),
+ (
+ 203,
+ 'project.edit',
+ 'แก้ไขข้อมูลโครงการ',
+ 'project',
+ 1
+ ),
+ (204, 'project.delete', 'ลบโครงการ', 'project', 1),
+ (
+ 205,
+ 'project.manage_members',
+ 'จัดการสมาชิกในโครงการ',
+ 'project',
+ 1
+ ),
+ (
+ 211,
+ 'contract.create',
+ 'สร้างสัญญา',
+ 'contract',
+ 1
+ ),
+ (
+ 212,
+ 'contract.view',
+ 'ดูข้อมูลสัญญา',
+ 'contract',
+ 1
+ ),
+ (
+ 213,
+ 'contract.edit',
+ 'แก้ไขสัญญา',
+ 'contract',
+ 1
+ ),
+ (214, 'contract.delete', 'ลบสัญญา', 'contract', 1),
+ (
+ 215,
+ 'contract.manage_members',
+ 'จัดการสมาชิกในสัญญา',
+ 'contract',
+ 1
+ );
+
+-- ==========================================================
+-- Seed Role-Permissions Mapping (จับคู่สิทธิ์เริ่มต้น)
+-- ==========================================================
+-- Seed data for the 'role_permissions 'table
+-- This table links roles to their specific permissions.
+-- NOTE: This assumes the role_id and permission_id FROM the previous seed data files.
+-- Superadmin (role_id = 1), Org Admin (role_id = 2), Document Control (role_id = 3), etc.
+-- ==========================================================
+-- SECTION 2: ROLE-PERMISSION MAPPINGS
+-- ==========================================================
+-- ==========================================================
+-- Role 1: Superadmin - Gets ALL Permissions
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 1,
+ permission_id
+FROM permissions
+WHERE is_active = 1;
+
+-- ==========================================================
+-- Role 2: Org Admin (Organization Scope)
+-- Permissions: 22 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- User Management
+ (2, 21),
+ -- user.create
+ (2, 22),
+ -- user.view
+ (2, 23),
+ -- user.edit
+ (2, 24),
+ -- user.delete
+ (2, 25),
+ -- user.manage_assignments
+ -- Organization
+ (2, 12),
+ -- organization.view
+ -- Master Data
+ (2, 46),
+ -- master_data.tag.manage
+ -- Documents
+ (2, 51),
+ -- document.view
+ -- Project/Contract
+ (2, 202),
+ -- project.view
+ (2, 212),
+ -- contract.view
+ -- Search & Reports
+ (2, 141),
+ -- search.basic
+ (2, 142),
+ -- search.advanced
+ (2, 144),
+ -- report.view
+ (2, 145),
+ -- report.generate
+ -- Dashboard & Notification
+ (2, 153),
+ -- dashboard.view_own
+ (2, 151),
+ -- notification.view
+ -- Audit
+ (2, 174);
+
+-- audit.view_own
+-- ==========================================================
+-- Role 3: Document Control (Organization Scope)
+-- Permissions: 50+ total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- All Document Operations
+ (3, 51),
+ (3, 52),
+ (3, 53),
+ (3, 54),
+ (3, 55),
+ (3, 56),
+ (3, 57),
+ (3, 58),
+ -- All Correspondence
+ (3, 71),
+ (3, 72),
+ (3, 73),
+ (3, 74),
+ (3, 75),
+ -- All RFA
+ (3, 81),
+ (3, 82),
+ (3, 83),
+ (3, 84),
+ (3, 85),
+ (3, 86),
+ -- All Drawing
+ (3, 91),
+ (3, 92),
+ (3, 93),
+ (3, 94),
+ (3, 95),
+ -- All Circulation
+ (3, 101),
+ (3, 102),
+ (3, 103),
+ (3, 104),
+ (3, 105),
+ -- All Transmittal
+ (3, 111),
+ (3, 112),
+ (3, 113),
+ (3, 114),
+ (3, 115),
+ -- Workflow Actions
+ (3, 123),
+ (3, 124),
+ (3, 125),
+ -- Master Data
+ (3, 41),
+ (3, 42),
+ (3, 43),
+ (3, 44),
+ (3, 45),
+ (3, 46),
+ (3, 47),
+ (3, 48),
+ -- Search & Report
+ (3, 141),
+ (3, 142),
+ (3, 143),
+ (3, 144),
+ (3, 145),
+ -- Dashboard
+ (3, 153),
+ (3, 154),
+ -- Notification
+ (3, 151);
+
+-- ==========================================================
+-- Role 4: Editor (Organization Scope)
+-- Permissions: 30 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- Document
+ (4, 51),
+ (4, 52),
+ (4, 53),
+ (4, 55),
+ (4, 57),
+ -- Correspondence
+ (4, 71),
+ (4, 72),
+ (4, 73),
+ (4, 75),
+ -- RFA
+ (4, 81),
+ (4, 82),
+ (4, 83),
+ (4, 85),
+ (4, 86),
+ -- Drawing
+ (4, 91),
+ (4, 92),
+ (4, 94),
+ -- Circulation
+ (4, 101),
+ (4, 102),
+ (4, 103),
+ (4, 104),
+ -- Transmittal
+ (4, 111),
+ (4, 112),
+ (4, 113),
+ -- Search
+ (4, 141),
+ (4, 142),
+ -- Dashboard & Notification
+ (4, 153),
+ (4, 151),
+ -- Workflow Actions (NEW for E2E test compatibility)
+ (4, 123);
+
+-- ==========================================================
+-- Role 5: Viewer (Organization Scope)
+-- Permissions: 15 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- View Only
+ (5, 51),
+ -- document.view
+ (5, 72),
+ -- correspondence.view
+ (5, 82),
+ -- rfa.view
+ (5, 91),
+ -- drawing.view
+ (5, 102),
+ -- circulation.view
+ (5, 104),
+ -- circulation.acknowledge
+ (5, 112),
+ -- transmittal.view
+ (5, 41),
+ -- master_data.view
+ (5, 141),
+ -- search.basic
+ (5, 153),
+ -- dashboard.view_own
+ (5, 151);
+
+-- notification.view
+-- ==========================================================
+-- Role 6: Project Manager (Project Scope)
+-- Permissions: All Editor + Project Management + Reports
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 6,
+ permission_id
+FROM role_permissions
+WHERE role_id = 4 -- Copy all Editor permissions
+UNION
+VALUES -- Project Management
+ (6, 201),
+ (6, 202),
+ (6, 203),
+ (6, 204),
+ (6, 205),
+ -- Reports & Analytics
+ (6, 144),
+ (6, 145),
+ (6, 155);
+
+-- ==========================================================
+-- Role 7: Contract Admin (Contract Scope)
+-- Permissions: All Editor + Contract Management + Workflow
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 7,
+ permission_id
+FROM role_permissions
+WHERE role_id = 4 -- Copy all Editor permissions
+UNION
+VALUES -- Contract Management
+ (7, 211),
+ (7, 212),
+ (7, 213),
+ (7, 214),
+ (7, 215),
+ -- Workflow
+ (7, 123),
+ -- All Drawings
+ (7, 91),
+ (7, 92),
+ (7, 93),
+ (7, 94),
+ (7, 95);
+
+-- Seed data for the 'user_assignments' table
+INSERT INTO user_assignments (
+ id,
+ user_id,
+ role_id,
+ organization_id,
+ project_id,
+ contract_id,
+ assigned_by_user_id
+ )
+VALUES (1, 1, 1, NULL, NULL, NULL, NULL),
+ -- superadmin: Global scope (organization_id = NULL)
+ (2, 2, 2, 1, NULL, NULL, NULL),
+ -- admin: Organization scope (org_id=1 = กทท.)
+ (3, 3, 4, 41, NULL, NULL, 1),
+ -- editor01: Editor role (role_id=4) at organization 41 (คคง.), assigned by superadmin
+ (4, 4, 5, 10, NULL, NULL, 1);
+
+-- viewer01: Viewer role (role_id=5) at organization 10 (สคฉ.03), assigned by superadmin
+-- =====================================================
+-- == 4. การเชื่อมโยงโครงการกับองค์กร (project_organizations) ==
+-- =====================================================
+-- โครงการหลัก (LCBP3) จะมีองค์กรหลักๆ เข้ามาเกี่ยวข้องทั้งหมด
+INSERT INTO project_organizations (project_id, organization_id)
+SELECT (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3'
+ ),
+ id
+FROM organizations
+WHERE organization_code IN (
+ 'กทท.',
+ 'สคฉ.3',
+ 'TEAM',
+ 'คคง.',
+ 'ผรม.1',
+ 'ผรม.2',
+ 'ผรม.3',
+ 'ผรม.4',
+ 'EN',
+ 'CAR'
+ );
+
+-- โครงการย่อย (LCBP3C1) จะมีเฉพาะองค์กรที่เกี่ยวข้อง
+INSERT INTO project_organizations (project_id, organization_id)
+SELECT (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C1'
+ ),
+ id
+FROM organizations
+WHERE organization_code IN (
+ 'กทท.',
+ 'สคฉ.3',
+ 'สคฉ.3 -02',
+ 'คคง.',
+ 'ผรม.1 '
+ );
+
+-- ทำเช่นเดียวกันสำหรับโครงการอื่นๆ (ตัวอย่าง)
+INSERT INTO project_organizations (project_id, organization_id)
+SELECT (
+ SELECT id
+ FROM projects
+ WHERE project_code = 'LCBP3-C2'
+ ),
+ id
+FROM organizations
+WHERE organization_code IN (
+ 'กทท.',
+ 'สคฉ.3',
+ 'สคฉ.3 -03',
+ 'คคง.',
+ 'ผรม.2'
+ );
+
+-- =====================================================
+-- == 5. การเชื่อมโยงสัญญากับองค์กร (contract_organizations) ==
+-- =====================================================
+-- สัญญาที่ปรึกษาออกแบบ (DSLCBP3)
+INSERT INTO contract_organizations (contract_id, organization_id, role_in_contract)
+VALUES (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-DS'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'กทท.'
+ ),
+ 'Owner'
+ ),
+ (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-DS'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'TEAM'
+ ),
+ 'Designer'
+ );
+
+-- สัญญาที่ปรึกษาควบคุมงาน (PSLCBP3)
+INSERT INTO contract_organizations (contract_id, organization_id, role_in_contract)
+VALUES (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-PS'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'กทท.'
+ ),
+ 'Owner'
+ ),
+ (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-PS'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'คคง.'
+ ),
+ 'Consultant'
+ );
+
+-- สัญญางานก่อสร้าง ส่วนที่ 1 (LCBP3-C1)
+INSERT INTO contract_organizations (contract_id, organization_id, role_in_contract)
+VALUES (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-C1'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'กทท.'
+ ),
+ 'Owner'
+ ),
+ (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-C1'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'ผรม.1'
+ ),
+ 'Contractor'
+ );
+
+-- สัญญางานก่อสร้าง ส่วนที่ 2 (LCBP3-C2)
+INSERT INTO contract_organizations (contract_id, organization_id, role_in_contract)
+VALUES (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-C2'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'กทท.'
+ ),
+ 'Owner'
+ ),
+ (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-C2'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'ผรม.2'
+ ),
+ 'Contractor'
+ );
+
+-- สัญญาตรวจสอบสิ่งแวดล้อม (LCBP3-EN)
+INSERT INTO contract_organizations (contract_id, organization_id, role_in_contract)
+VALUES (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-EN'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'กทท.'
+ ),
+ 'Owner'
+ ),
+ (
+ (
+ SELECT id
+ FROM contracts
+ WHERE contract_code = 'LCBP3-EN'
+ ),
+ (
+ SELECT id
+ FROM organizations
+ WHERE organization_code = 'EN'
+ ),
+ 'Consultant'
+ );
+
+-- Seed correspondence_status
+INSERT INTO correspondence_status (
+ status_code,
+ status_name,
+ sort_order,
+ is_active
+ )
+VALUES ('DRAFT', 'Draft', 10, 1),
+ ('SUBOWN', 'Submitted to Owner', 21, 1),
+ ('SUBDSN', 'Submitted to Designer', 22, 1),
+ ('SUBCSC', 'Submitted to CSC', 23, 1),
+ ('SUBCON', 'Submitted to Contractor', 24, 1),
+ ('SUBOTH', 'Submitted to Others', 25, 1),
+ ('REPOWN', 'Reply by Owner', 31, 1),
+ ('REPDSN', 'Reply by Designer', 32, 1),
+ ('REPCSC', 'Reply by CSC', 33, 1),
+ ('REPCON', 'Reply by Contractor', 34, 1),
+ ('REPOTH', 'Reply by Others', 35, 1),
+ ('RSBOWN', 'Resubmited by Owner', 41, 1),
+ ('RSBDSN', 'Resubmited by Designer', 42, 1),
+ ('RSBCSC', 'Resubmited by CSC', 43, 1),
+ ('RSBCON', 'Resubmited by Contractor', 44, 1),
+ ('CLBOWN', 'Closed by Owner', 51, 1),
+ ('CLBDSN', 'Closed by Designer', 52, 1),
+ ('CLBCSC', 'Closed by CSC', 53, 1),
+ ('CLBCON', 'Closed by Contractor', 54, 1),
+ ('CCBOWN', 'Canceled by Owner', 91, 1),
+ ('CCBDSN', 'Canceled by Designer', 92, 1),
+ ('CCBCSC', 'Canceled by CSC', 93, 1),
+ ('CCBCON', 'Canceled by Contractor', 94, 1);
+
+-- Seed correspondence_types
+INSERT INTO correspondence_types (type_code, type_name, sort_order, is_active)
+VALUES ('RFA', 'Request for Approval', 1, 1),
+ ('RFI', 'Request for Information', 2, 1),
+ ('TRANSMITTAL', 'Transmittal', 3, 1),
+ ('EMAIL', 'Email', 4, 1),
+ ('INSTRUCTION', 'Instruction', 5, 1),
+ ('LETTER', 'Letter', 6, 1),
+ ('MEMO', 'Memorandum', 7, 1),
+ ('MOM', 'Minutes of Meeting', 8, 1),
+ ('NOTICE', 'Notice', 9, 1),
+ ('OTHER', 'Other', 10, 1);
+
+-- Seed rfa_types
+INSERT INTO rfa_types (
+ contract_id,
+ type_code,
+ type_name_en,
+ type_name_th
+ )
+SELECT id,
+ 'ADW',
+ 'As Built Drawing',
+ 'แบบร่างหลังการก่อสร้าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BC',
+ 'Box Culvert',
+ 'ท่อระบายน้ำรูปกล่อง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BM',
+ 'Benchmark',
+ 'หมุดหลักฐาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'CER',
+ 'Certificates',
+ 'ใบรับรอง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'CN',
+ 'Canal Drainage',
+ 'ระบบระบายน้ำในคลอง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'CON',
+ 'Contract',
+ 'สัญญา'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DDS',
+ 'Design Data Submission',
+ 'นำส่งข้อมูลการออกแบบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DDW',
+ 'Draft Drawing',
+ 'แบบร่าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DRW',
+ 'Drawings (All Types)',
+ 'แบบก่อสร้าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DSN',
+ 'Design/Calculation/Manual (All Stages)',
+ 'ออกแบบ / คำนวณ / คู่มือ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'GEN',
+ 'General',
+ 'ทั่วไป'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ICR',
+ 'Incident Report',
+ 'รายงานการเกิดอุบัติเหตุและการบาดเจ็บ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'INS',
+ 'Insurances/Bond/Guarantee',
+ 'การประกัน / พันธบัตร / การค้ำประกัน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'INR',
+ 'Inspection/Audit/Surveillance Report',
+ 'รายงานการตรวจสอบ / การตรวจสอบ / รายงานการเฝ้าระวัง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ITP',
+ 'Inspection and Test Plan',
+ 'แผนการตรวจสอบและทดสอบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'JSA',
+ 'Jobs Analysis',
+ 'รายงานการวิเคราะห์ความปลอดภัย'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MAN',
+ 'Manual',
+ 'คู่มือ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MAT',
+ 'Materials/Equipment/Plant',
+ 'วัสดุ / อุปกรณ์ / โรงงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MOM',
+ 'Minutes of Meeting',
+ 'รายงานการประชุม'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MPR',
+ 'Monthly Progress Report',
+ 'รายงานความคืบหน้าประจำเดือน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MST',
+ 'Method Statement for Construction/Installation',
+ 'ขั้นตอนการก่อสร้าง / ติดตั้ง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'NDS',
+ 'Non-Design Data Submission',
+ 'นำส่งข้อมูลที่ไม่เกี่ยวข้องกับการออกแบบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PMA',
+ 'Payment/Invoice/Retention/Estimate',
+ 'การชำระเงิน / ใบแจ้งหนี้ / ประกันผลงาน / ประมาณการ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PRD',
+ 'Procedure',
+ 'ระเบียบปฏิบัติ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PRG',
+ 'Progress of Construction',
+ 'ความคืบหน้าของการก่อสร้าง / ภาพถ่าย / วิดีโอ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'QMS',
+ 'Quality Document (Plan/Work Instruction)',
+ 'เอกสารด้านคุณภาพ (แผนงาน / ข้อแนะนำในการทำงาน)'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'RPT',
+ 'Report',
+ 'รายงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SAR',
+ 'Semi Annual Report',
+ 'รายงานประจำหกเดือน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SCH',
+ 'Schedule and Program',
+ 'แผนงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SDW',
+ 'Shop Drawing',
+ 'แบบขยายรายละเอียด'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SI',
+ 'Soil Investigation',
+ 'การตรวจสอบดิน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SPE',
+ 'Specification',
+ 'ข้อกำหนด'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'TNR',
+ 'Training Report',
+ 'รายงานการฝึกปฏิบัติ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'UC',
+ 'Underground Construction',
+ 'โครงสร้างใต้ดิน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'VEN',
+ 'Vendor',
+ 'ผู้ขาย'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'VRO',
+ 'Variation Request/Instruction/Order',
+ 'คำขอเปลี่ยนแปลง / ข้อเสนอแนะ / ข้อเรียกร้อง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'WTY',
+ 'Warranty',
+ 'การประกัน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'GEN',
+ 'General',
+ 'ทั่วไป'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'CON',
+ 'Contract',
+ 'สัญญา'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'INS',
+ 'Insurances/Bond/Guarantee',
+ 'การประกัน / พันธบัตร / การค้ำประกัน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SCH',
+ 'Schedule and Program',
+ 'แผนงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'PMA',
+ 'Payment/Invoice/Retention/Estimate',
+ 'การชำระเงิน / ใบแจ้งหนี้ / ประกันผลงาน / ประมาณการ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'VRO',
+ 'Variation Request/Instruction/Order',
+ 'คำขอเปลี่ยนแปลง / ข้อเสนอแนะ / ข้อเรียกร้อง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'VEN',
+ 'Vendor',
+ 'ผู้ขาย'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'WTY',
+ 'Warranty',
+ 'การประกัน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DRW',
+ 'Drawings (All Types)',
+ 'แบบก่อสร้าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DDW',
+ 'Draft Drawing',
+ 'แบบร่าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SDW',
+ 'Shop Drawing',
+ 'แบบขยายรายละเอียด'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ADW',
+ 'As Built Drawing',
+ 'แบบร่างหลังการก่อสร้าง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DDS',
+ 'Design Data Submission',
+ 'นำส่งข้อมูลการออกแบบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DSN',
+ 'Design/Calculation/Manual (All Stages)',
+ 'ออกแบบ / คำนวณ / คู่มือ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'NDS',
+ 'Non-Design Data Submission',
+ 'นำส่งข้อมูลที่ไม่เกี่ยวข้องกับการออกแบบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'PRD',
+ 'Procedure',
+ 'ระเบียบปฏิบัติ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MST',
+ 'Method Statement for Construction/Installation',
+ 'ขั้นตอนการก่อสร้าง / ติดตั้ง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'QMS',
+ 'Quality Document (Plan/Work Instruction)',
+ 'เอกสารด้านคุณภาพ (แผนงาน / ข้อแนะนำในการทำงาน)'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'INR',
+ 'Inspection/Audit/Surveillance Report',
+ 'รายงานการตรวจสอบ / การตรวจสอบ / รายงานการเฝ้าระวัง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ITP',
+ 'Inspection and Test Plan',
+ 'แผนการตรวจสอบและทดสอบ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MAT',
+ 'Materials/Equipment/Plant',
+ 'วัสดุ / อุปกรณ์ / โรงงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SPE',
+ 'Specification',
+ 'ข้อกำหนด'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MAN',
+ 'Manual',
+ 'คู่มือ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'CER',
+ 'Certificates',
+ 'ใบรับรอง'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SAR',
+ 'Semi Annual Report',
+ 'รายงานประจำหกเดือน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'JSA',
+ 'Jobs Analysis',
+ 'รายงานการวิเคราะห์ความปลอดภัย'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MOM',
+ 'Minutes of Meeting',
+ 'รายงานการประชุม'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MPR',
+ 'Monthly Progress Report',
+ 'รายงานความคืบหน้าประจำเดือน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ICR',
+ 'Incident Report',
+ 'รายงานการเกิดอุบัติเหตุและการบาดเจ็บ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'PRG',
+ 'Progress of Construction',
+ 'ความคืบหน้าของการก่อสร้าง / ภาพถ่าย / วิดีโอ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'RPT',
+ 'Report',
+ 'รายงาน'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'TNR',
+ 'Training Report',
+ 'รายงานการฝึกปฏิบัติ'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2';
+
+-- Seed rfa_status_codes
+INSERT INTO rfa_status_codes (
+ status_code,
+ status_name,
+ description,
+ sort_order
+ )
+VALUES ('DFT', 'Draft', 'ฉบับร่าง', 1),
+ ('FAP', 'For Approve', 'เพื่อขออนุมัติ', 11),
+ ('FRE', 'For Review', 'เพื่อตรวจสอบ', 12),
+ ('FCO', 'For Construction', 'เพื่อก่อสร้าง', 20),
+ ('ASB', 'AS - Built', 'แบบก่อสร้างจริง', 30),
+ ('OBS', 'Obsolete', 'ไม่ใช้งาน', 80),
+ ('CC', 'Canceled', 'ยกเลิก', 99);
+
+INSERT INTO rfa_approve_codes (
+ approve_code,
+ approve_name,
+ sort_order,
+ is_active
+ )
+VALUES ('1A', 'Approved by Authority', 10, 1),
+ ('1C', 'Approved by CSC', 11, 1),
+ ('1N', 'Approved As Note', 12, 1),
+ ('1R', 'Approved with Remarks', 13, 1),
+ ('3C', 'Consultant Comments', 31, 1),
+ ('3R', 'Revise and Resubmit', 32, 1),
+ ('4X', 'Reject', 40, 1),
+ ('5N', 'No Further Action', 50, 1);
+
+-- Seed circulation_status_codes
+INSERT INTO circulation_status_codes (code, description, sort_order)
+VALUES ('OPEN', 'Open', 1),
+ ('IN_REVIEW', 'In Review', 2),
+ ('COMPLETED', 'ปCompleted', 3),
+ ('CANCELLED', 'Cancelled / Withdrawn', 9);
+
+-- ตาราง "แม่" ของ RFA (มีความสัมพันธ์ 1:N กับ rfa_revisions)
+-- ==========================================================
+-- SEED DATA 6B.md (Disciplines, RFA Types, Sub Types)
+-- ==========================================================
+-- 1. Seed ข้อมูล Disciplines (สาขางาน)
+-- LCBP3-C1
+INSERT INTO disciplines (
+ contract_id,
+ discipline_code,
+ code_name_th,
+ code_name_en
+ )
+SELECT id,
+ 'GEN',
+ 'งานบริหารโครงการ',
+ 'General Management'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'COD',
+ 'สัญญาและข้อโต้แย้ง',
+ 'Contracting'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'QSB',
+ 'สำรวจปริมาณและควบคุมงบประมาณ',
+ 'Quantity Survey and Budget Control'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PPG',
+ 'บริหารแผนและความก้าวหน้า',
+ 'Plan and Progress Management'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PRC',
+ 'งานจัดซื้อ',
+ 'Procurement'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SUB',
+ 'ผู้รับเหมาช่วง',
+ 'Subcontractor'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ODC',
+ 'สำนักงาน-ควบคุมเอกสาร',
+ 'Operation Docment Control'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'LAW',
+ 'กฎหมาย',
+ 'Law'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'TRF',
+ 'จราจร',
+ 'Traffic'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BIM',
+ 'BIM',
+ 'Building information modeling'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SRV',
+ 'งานสำรวจ',
+ 'Survey'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SFT',
+ 'ความปลอดภัย',
+ 'Safety'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BST',
+ 'งานโครงสร้างอาคาร',
+ 'Building Structure Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'TEM',
+ 'งานชั่วคราว',
+ 'Temporary Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'UTL',
+ 'งานระบบสาธารณูปโภค',
+ 'Utility'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'EPW',
+ 'งานระบบไฟฟ้า',
+ 'Electrical Power Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ECM',
+ 'งานระบบไฟฟ้าสื่อสาร',
+ 'Electrical Communication Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ENV',
+ 'สิ่งแวดล้อม',
+ 'Environment'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'AQV',
+ 'คุณภาพอากาศและความสั่นสะเทือน',
+ 'Air quality and vibration'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'WAB',
+ 'คุณภาพน้ำและชีววิทยาทางน้ำ',
+ 'Water quality and Aquatic biology'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'ONS',
+ 'วิศวกรรมชายฝั่ง',
+ 'Onshore Engineer Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'PPR',
+ 'มวลชนสัมพันธ์และการประชาสัมพันธ์',
+ 'Public Relations'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'OSW',
+ 'งานก่อสร้างงานทางทะเล',
+ 'Offshore Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DRE',
+ 'งานขุดและถมทะเล',
+ 'Dredging and Reclamation'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'REV',
+ 'งานคันหินล้อมพื้นที่ถมทะเล',
+ 'Revetment'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BRW',
+ 'งานเขื่อนกันคลื่น',
+ 'Breakwater'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SOI',
+ 'ปรับปรุงคุณภาพดิน',
+ 'Soil Improvement'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'BLC',
+ 'งานปรับปรุงคลองบางละมุง',
+ 'Bang Lamung Canal Bank Protection'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'FUP',
+ 'งานประตูระบายน้ำและท่อลอด',
+ 'Floodgate & Under Ground Piping Works'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'SWP',
+ 'งานอาคารควบคุมสถานีสูบน้ำทะเล',
+ 'Sea Water Pumping Station Control BuilDing'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'NAV',
+ 'งานติดตั้งเครื่องหมายช่วงการเดินเรือ',
+ 'Navigations Aids'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'GEO',
+ 'งานด้านธรณีเทคนิค',
+ 'Geotechnical'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'CRW',
+ 'งานด้านโยธา - Rock Works',
+ 'Civil-Rock work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'DVR',
+ 'ทีมนักประดาน้ำ',
+ 'Dive Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'MTS',
+ 'งานทดสอบวัสดุและธรณีเทคนิค',
+ 'Materials and Geotechnical Testing'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1'
+UNION ALL
+SELECT id,
+ 'OTH',
+ 'อื่นๆ',
+ 'Other'
+FROM contracts
+WHERE contract_code = 'LCBP3-C1';
+
+-- LCBP3-C2
+INSERT INTO disciplines (
+ contract_id,
+ discipline_code,
+ code_name_th,
+ code_name_en
+ )
+SELECT id,
+ 'GEN',
+ 'งานบริหารโครงการ',
+ 'Project Management'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'COD',
+ 'สัญญาและข้อโต้แย้ง',
+ 'Contracts and arguments'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'QSB',
+ 'สำรวจปริมาณและควบคุมงบประมาณ',
+ 'Survey the quantity and control the budget'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'PPM',
+ 'บริหารแผนและความก้าวหน้า',
+ 'Plan Management & Progress'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ODC',
+ 'สำนักงาน-ควบคุมเอกสาร',
+ 'Document Control Office'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'LAW',
+ 'กฎหมาย',
+ 'Law'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'TRF',
+ 'จราจร',
+ 'Traffic'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'BIM',
+ 'Building Information Modeling',
+ 'Building Information Modeling'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SRV',
+ 'งานสำรวจ',
+ 'Survey'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SFT',
+ 'ความปลอดภัย',
+ 'Safety'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'BST',
+ 'งานโครงสร้างอาคาร',
+ 'Building Structure'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'UTL',
+ 'งานะบบสาธารณูปโภค',
+ 'Public Utilities'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'EPW',
+ 'งานระบบไฟฟ้า',
+ 'Electrical Systems'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ECM',
+ 'งานระบบไฟฟ้าสื่อสาร',
+ 'Electrical Communication System'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ENV',
+ 'สิ่งแวดล้อม',
+ 'Environment'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'AQV',
+ 'คุณภาพอากาศและความสั่นสะเทือน',
+ 'Air Quality and Vibration'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'WAB',
+ 'คุณภาพน้ำและชีววิทยาทางน้ำ',
+ 'Water Quality and Aquatic Biology'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ONS',
+ 'วิศวกรรมชายฝั่ง',
+ 'Coastal Engineering'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'PPR',
+ 'มวลชนสัมพันธ์และประชาสัมพันธ์',
+ 'Mass Relations and Public Relations'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'OFW',
+ 'งานก่อสร้างทางทะเล',
+ 'Marine Construction'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'EXR',
+ 'งานขุดและถมทะเล',
+ 'Excavation and reclamation'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'GEO',
+ 'งานด้านธรณีเทคนิค',
+ 'Geotechnical work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'CRW',
+ 'งานด้านโยธา - Rock Works',
+ 'Civil Works - Rock Works'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DVW',
+ 'ทีมนักประดาน้ำ',
+ 'Team of Divers'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MTT',
+ 'งานทดสอบวัสดุ',
+ 'Materials Testing'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ARC',
+ 'งานสถาปัตยกรรม',
+ 'Architecture'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'STR',
+ 'งานโครงสร้าง',
+ 'Structural work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'SAN',
+ 'งานระบบสุขาภิบาล',
+ 'Sanitation System'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'DRA',
+ 'งานระบบระบายน้ำ',
+ 'Drainage system work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'TER',
+ 'งานท่าเทียบเรือ',
+ 'Terminal Work work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'BUD',
+ 'งานอาคาร',
+ 'Building'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'ROW',
+ 'งานถนนและสะพาน',
+ 'Road and Bridge Work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'MEC',
+ 'งานเคริองกล',
+ 'Mechanical work'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2'
+UNION ALL
+SELECT id,
+ 'OTH',
+ 'อื่น ๆ',
+ 'Others'
+FROM contracts
+WHERE contract_code = 'LCBP3-C2';
+
+-- 2. Seed ข้อมูล Correspondence Sub Types (Mapping RFA Types กับ Number)
+-- เนื่องจาก sub_type_code ตรงกับ RFA Type Code แต่ Req ต้องการ Mapping เป็น Number
+-- LCBP3-C1
+-- LCBP3-C1
+INSERT INTO correspondence_sub_types (
+ contract_id,
+ correspondence_type_id,
+ sub_type_code,
+ sub_type_name,
+ sub_type_number
+ )
+SELECT c.id,
+ ct.id,
+ 'MAT',
+ 'Material Approval',
+ '11'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C1'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'SHP',
+ 'Shop Drawing Submittal',
+ '12'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C1'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'DWG',
+ 'Document Approval',
+ '13'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C1'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'MET',
+ 'Engineering Document Submittal',
+ '14'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C1'
+ AND ct.type_code = 'RFA';
+
+-- LCBP3-C2
+INSERT INTO correspondence_sub_types (
+ contract_id,
+ correspondence_type_id,
+ sub_type_code,
+ sub_type_name,
+ sub_type_number
+ )
+SELECT c.id,
+ ct.id,
+ 'MAT',
+ 'Material Approval',
+ '21'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C2'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'SHP',
+ 'Shop Drawing Submittal',
+ '22'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C2'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'DWG',
+ 'Document Approval',
+ '23'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C2'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'MET',
+ 'Engineering Document Submittal',
+ '24'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C2'
+ AND ct.type_code = 'RFA';
+
+-- LCBP3-C3
+INSERT INTO correspondence_sub_types (
+ contract_id,
+ correspondence_type_id,
+ sub_type_code,
+ sub_type_name,
+ sub_type_number
+ )
+SELECT c.id,
+ ct.id,
+ 'MAT',
+ 'Material Approval',
+ '31'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C3'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'SHP',
+ 'Shop Drawing Submittal',
+ '32'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C3'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'DWG',
+ 'Document Approval',
+ '33'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C3'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'MET',
+ 'Engineering Document Submittal',
+ '34'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C3'
+ AND ct.type_code = 'RFA';
+
+-- LCBP3-C4
+INSERT INTO correspondence_sub_types (
+ contract_id,
+ correspondence_type_id,
+ sub_type_code,
+ sub_type_name,
+ sub_type_number
+ )
+SELECT c.id,
+ ct.id,
+ 'MAT',
+ 'Material Approval',
+ '41'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C4'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'SHP',
+ 'Shop Drawing Submittal',
+ '42'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C4'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'DWG',
+ 'Document Approval',
+ '43'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C4'
+ AND ct.type_code = 'RFA'
+UNION ALL
+SELECT c.id,
+ ct.id,
+ 'MET',
+ 'Engineering Document Submittal',
+ '44'
+FROM contracts c,
+ correspondence_types ct
+WHERE c.contract_code = 'LCBP3-C4'
+ AND ct.type_code = 'RFA';
+
+INSERT INTO `correspondences` (
+ `id`,
+ `correspondence_number`,
+ `correspondence_type_id`,
+ `discipline_id`,
+ `is_internal_communication`,
+ `project_id`,
+ `originator_id`,
+ `created_at`,
+ `created_by`,
+ `deleted_at`
+ )
+VALUES (
+ 1,
+ 'ผรม.1-คคง.-0242-2568',
+ 6,
+ 1,
+ 0,
+ 2,
+ 41,
+ '2025-12-06 05:25:58',
+ 1,
+ NULL
+ ),
+ (
+ 2,
+ 'LCBP3-C2-RFA-ROW-RPT-0059-A',
+ 1,
+ 95,
+ 0,
+ 3,
+ 42,
+ '2025-12-06 05:36:52',
+ 1,
+ NULL
+ );
+
+INSERT INTO `correspondence_revisions` (
+ `id`,
+ `correspondence_id`,
+ `revision_number`,
+ `revision_label`,
+ `is_current`,
+ `correspondence_status_id`,
+ `subject`,
+ `document_date`,
+ `issued_date`,
+ `received_date`,
+ `due_date`,
+ `description`,
+ `details`,
+ `schema_version`,
+ `created_at`,
+ `created_by`,
+ `updated_by`
+ )
+VALUES (
+ 1,
+ 1,
+ 0,
+ NULL,
+ 1,
+ 4,
+ 'นำส่งวีดิทัศน์ความก้าวหน้างานก่อสร้างงานทางทะเล (ฉบับสมบูรณ์) ประจำเดือนตุลาคม พ.ศ.2568 โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1) งานก่อสร้างงานทางทะเล',
+ '2025-11-28',
+ '2025-11-28 12:26:29',
+ '2025-12-01 12:26:29',
+ NULL,
+ NULL,
+ NULL,
+ 1,
+ '2025-12-06 05:30:17',
+ 1,
+ NULL
+ );
+
+INSERT INTO `rfas` (
+ `id`,
+ `rfa_type_id`,
+ `created_at`,
+ `created_by`,
+ `deleted_at`
+ )
+VALUES (2, 68, '2025-12-06 05:40:02', 1, NULL);
+
+INSERT INTO `rfa_revisions` (
+ `id`,
+ `rfa_id`,
+ `revision_number`,
+ `revision_label`,
+ `is_current`,
+ `rfa_status_code_id`,
+ `rfa_approve_code_id`,
+ `subject`,
+ `document_date`,
+ `issued_date`,
+ `received_date`,
+ `approved_date`,
+ `description`,
+ `details`,
+ `schema_version`,
+ `created_at`,
+ `created_by`,
+ `updated_by`
+ )
+VALUES (
+ 1,
+ 2,
+ 1,
+ 'A',
+ 0,
+ 2,
+ NULL,
+ 'ขออนุมัติผลการทดสอบเสาเข็มแบบ Dynamic Load Test สำหรับงานเสาเข็มตอกของอาคารสถานีไฟฟ้าย่อย 22 kV. No. 6',
+ '2025-12-03',
+ '2025-12-04',
+ '2025-12-04 12:40:19',
+ NULL,
+ NULL,
+ NULL,
+ 1,
+ '2025-12-06 05:41:25',
+ NULL,
+ NULL
+ );
+
+-- ==========================================================
+-- 20. Workflow Definitions (Unified Workflow Engine)
+-- ==========================================================
+INSERT INTO `workflow_definitions` (
+ `id`,
+ `workflow_code`,
+ `version`,
+ `description`,
+ `dsl`,
+ `compiled`,
+ `is_active`,
+ `created_at`,
+ `updated_at`
+ )
+VALUES (
+ -- CORRESPONDENCE_FLOW_V1
+ UUID(),
+ 'CORRESPONDENCE_FLOW_V1',
+ 1,
+ 'Standard Correspondence Workflow - Draft → Submit → Review → Approve/Reject',
+ JSON_OBJECT(
+ 'workflow',
+ 'CORRESPONDENCE_FLOW_V1',
+ 'version',
+ 1,
+ 'states',
+ JSON_ARRAY(
+ JSON_OBJECT(
+ 'name',
+ 'DRAFT',
+ 'initial',
+ TRUE,
+ 'on',
+ JSON_OBJECT(
+ 'SUBMIT',
+ JSON_OBJECT('to', 'IN_REVIEW')
+ )
+ ),
+ JSON_OBJECT(
+ 'name',
+ 'IN_REVIEW',
+ 'on',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('to', 'APPROVED'),
+ 'REJECT',
+ JSON_OBJECT('to', 'REJECTED'),
+ 'RETURN',
+ JSON_OBJECT('to', 'DRAFT')
+ )
+ ),
+ JSON_OBJECT('name', 'APPROVED', 'terminal', TRUE),
+ JSON_OBJECT('name', 'REJECTED', 'terminal', TRUE)
+ )
+ ),
+ JSON_OBJECT(
+ 'initialState',
+ 'DRAFT',
+ 'states',
+ JSON_OBJECT(
+ 'DRAFT',
+ JSON_OBJECT(
+ 'initial',
+ TRUE,
+ 'terminal',
+ false,
+ 'transitions',
+ JSON_OBJECT(
+ 'SUBMIT',
+ JSON_OBJECT('to', 'IN_REVIEW', 'events', JSON_ARRAY())
+ )
+ ),
+ 'IN_REVIEW',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ false,
+ 'transitions',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('to', 'APPROVED', 'events', JSON_ARRAY()),
+ 'REJECT',
+ JSON_OBJECT('to', 'REJECTED', 'events', JSON_ARRAY()),
+ 'RETURN',
+ JSON_OBJECT('to', 'DRAFT', 'events', JSON_ARRAY())
+ )
+ ),
+ 'APPROVED',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ TRUE,
+ 'transitions',
+ JSON_OBJECT()
+ ),
+ 'REJECTED',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ TRUE,
+ 'transitions',
+ JSON_OBJECT()
+ )
+ )
+ ),
+ TRUE,
+ NOW(),
+ NOW()
+ ),
+ (
+ -- RFA_APPROVAL
+ UUID(),
+ 'RFA_APPROVAL',
+ 1,
+ 'Request for Approval Workflow - Contractor Submit → Consultant Review → Owner Review',
+ JSON_OBJECT(
+ 'workflow',
+ 'RFA_APPROVAL',
+ 'version',
+ 1,
+ 'states',
+ JSON_ARRAY(
+ JSON_OBJECT(
+ 'name',
+ 'DRAFT',
+ 'initial',
+ TRUE,
+ 'on',
+ JSON_OBJECT(
+ 'SUBMIT',
+ JSON_OBJECT(
+ 'to',
+ 'CONSULTANT_REVIEW',
+ 'require',
+ JSON_OBJECT('role', 'CONTRACTOR')
+ )
+ )
+ ),
+ JSON_OBJECT(
+ 'name',
+ 'CONSULTANT_REVIEW',
+ 'on',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('to', 'OWNER_REVIEW'),
+ 'REJECT',
+ JSON_OBJECT('to', 'DRAFT')
+ )
+ ),
+ JSON_OBJECT(
+ 'name',
+ 'OWNER_REVIEW',
+ 'on',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('to', 'APPROVED'),
+ 'REJECT',
+ JSON_OBJECT('to', 'CONSULTANT_REVIEW')
+ )
+ ),
+ JSON_OBJECT('name', 'APPROVED', 'terminal', TRUE)
+ )
+ ),
+ JSON_OBJECT(
+ 'initialState',
+ 'DRAFT',
+ 'states',
+ JSON_OBJECT(
+ 'DRAFT',
+ JSON_OBJECT(
+ 'initial',
+ TRUE,
+ 'terminal',
+ false,
+ 'transitions',
+ JSON_OBJECT(
+ 'SUBMIT',
+ JSON_OBJECT(
+ 'target',
+ 'CONSULTANT_REVIEW',
+ 'events',
+ JSON_ARRAY()
+ )
+ )
+ ),
+ 'CONSULTANT_REVIEW',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ false,
+ 'transitions',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('target', 'OWNER_REVIEW', 'events', JSON_ARRAY()),
+ 'REJECT',
+ JSON_OBJECT('target', 'DRAFT', 'events', JSON_ARRAY())
+ )
+ ),
+ 'OWNER_REVIEW',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ false,
+ 'transitions',
+ JSON_OBJECT(
+ 'APPROVE',
+ JSON_OBJECT('target', 'APPROVED', 'events', JSON_ARRAY()),
+ 'REJECT',
+ JSON_OBJECT(
+ 'target',
+ 'CONSULTANT_REVIEW',
+ 'events',
+ JSON_ARRAY()
+ )
+ )
+ ),
+ 'APPROVED',
+ JSON_OBJECT(
+ 'initial',
+ false,
+ 'terminal',
+ TRUE,
+ 'transitions',
+ JSON_OBJECT()
+ )
+ )
+ ),
+ TRUE,
+ NOW(),
+ NOW()
+ );
+
diff --git a/specs/07-database/lcbp3-v1.6.0-seed-contractdrawing.sql b/specs/07-database/lcbp3-v1.6.0-seed-contractdrawing.sql
new file mode 100644
index 0000000..c73420d
--- /dev/null
+++ b/specs/07-database/lcbp3-v1.6.0-seed-contractdrawing.sql
@@ -0,0 +1,2569 @@
+-- ==========================================================
+-- DMS DMS v0.5.0
+-- Database v5.1 - Seed contract_dwg data
+-- Server: Container Station on QNAPQNAP TS-473A
+-- Database service: MariaDB 10.11
+-- database ui: phpmyadmin 5-apache
+-- backend sevice: node.js
+-- frontend sevice: next.js
+-- reverse proxy: nginx 1.27-alpine
+-- cron service: n8n
+-- scripts: alpine:3.20
+-- Notes:
+-- ==========================================================
+
+INSERT INTO contract_drawing_volumes (project_id, volume_code, volume_name, description)
+VALUES
+ (3, 'Volume-1/7', 'หมวดงานภูมิสถาปัตย์', 'งานภูมิสถาปัตย์, งานอาคาร 1/3'),
+ (3, 'Volume-2/7', 'หมวดงานอาคาร', 'งานอาคาร 2/3'),
+ (3, 'Volume-3/7', 'หมวดงานอาคาร', 'งานอาคาร 3/3'),
+ (3, 'Volume-4/7', 'หมวดงานท่าเทียบเรือ', 'งานท่าเรือชายฝั่ง และ งานท่าเรือบริการ'),
+ (3, 'Volume-5/7', 'หมวดงานถนน', 'งานระบบถนนและสะพาน'),
+ (3, 'Volume-6/7-1/2', 'หมวดงานสาธารณูปโภค', 'งานระบบประปาและดับเพลิง, งานระบบระบายน้ำ'),
+ (3, 'Volume-6/7-2/2', 'หมวดงานสาธารณูปโภค', 'งานระบบระบายน้ำ, งานระบบบำบัดน้ำเสีบ, งานระบบสาธารณูปโภคภายนอก'),
+ (3, 'Volume-7/7', 'หมวดงานสาธารณูปโภค', 'งาน SUBSTATION, งานระบบสื่อสาร, งานระบบกล้องโทรทัศน์วงจรปิด, งานระบบสายเคเบิ้ลใต้ดินแรงสูง');
+
+INSERT INTO contract_drawing_cats (id, project_id, cat_code, cat_name)
+VALUES (1, 3, 'EXT', 'งานภายนอก'),
+ (2, 3, 'RTP', 'บ่อหน่วงน้ำ'),
+ -- Retention Pond
+ (
+ 3,
+ 3,
+ 'RES',
+ 'อาคารร้านอาหารและจำหน่ายสินค้าปลอดภาษี'
+ ),
+ -- Restaurant & Duty Free
+ (4, 3, 'WSS', 'ระบบจ่ายน้ำประปา'),
+ -- Water Supply System
+ (5, 3, 'GEN', 'ทั่วไป'),
+ -- General
+ (6, 3, 'IG5', 'อาคารประตูตรวจสอบ 5'),
+ -- Inspection Gate 5
+ (7, 3, 'HWS', 'อาคารพักขยะอันตราย'),
+ -- Hazardous Waste Storage
+ (8, 3, 'GWS', 'อาคารพักขยะทั่วไป'),
+ -- General Waste Storage
+ (
+ 9,
+ 3,
+ 'RDF',
+ 'อาคารร้านอาหาร และจำหน่ายสินค้าปลอดภาษี'
+ ),
+ -- Restaurant & Duty Free (ซ้ำกับข้อ 3)
+ (
+ 10,
+ 3,
+ 'SPO',
+ 'สำนักงานท่าเรือบริการและห้องพักเจ้าหน้าที่'
+ ),
+ -- Service Port Office
+ (11, 3, 'DRM', 'โรงนอนพนักงาน'),
+ -- Dormitory
+ (12, 3, 'COT', 'อาคารสื่อสารและหอสังเกตุการณ์'),
+ -- Communication & Observation Tower
+ (13, 3, 'CPG', 'ด่านทางเข้าท่าเรือชายฝั่ง'),
+ -- Coastal Port Gate
+ (
+ 14,
+ 3,
+ 'CPB',
+ 'อาคารสำนักงานปฏิบัติการท่าเรือชายฝั่ง'
+ ),
+ -- Coastal Port Operation
+ (15, 3, 'CPM', 'โรงซ่อมบำรุงส่วนท่าเรือชายฝั่ง'),
+ -- Coastal Port Maintenance
+ (16, 3, 'S6K', 'อาคารสถานีไฟฟ้าย่อยขนาด 6.6 kV'),
+ -- Substation 6.6 kV
+ (17, 3, 'CPT', 'ท่าเรือชายฝั่ง'),
+ -- Coastal Port
+ (18, 3, 'SVP', 'ท่าเรือบริการ'),
+ -- Service Port
+ (19, 3, 'RDS', 'ถนน'),
+ -- Roads
+ (20, 3, 'BLC', 'ชุมชนบ้านแหลม'),
+ -- Ban Laem Community
+ (21, 3, 'ICA', 'ทางแยกต่างระดับ A'),
+ -- Interchange A
+ (22, 3, 'GT2', 'ทางเข้าประตู 2'),
+ -- Gate 2
+ (23, 3, 'GT4', 'ทางเข้าประตู 4'),
+ -- Gate 4
+ (
+ 24,
+ 3,
+ 'RN2',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-2 และสะพานยกระดับ 12'
+ ),
+ (
+ 25,
+ 3,
+ 'R2L',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-2 LT. และสะพานยกระดับ 12.1'
+ ),
+ (
+ 26,
+ 3,
+ 'B12',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / สะพานยกระดับ 12.2'
+ ),
+ (
+ 27,
+ 3,
+ 'BR4',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / สะพานยกระดับ 4'
+ ),
+ (
+ 28,
+ 3,
+ 'RN1',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-1'
+ ),
+ (
+ 29,
+ 3,
+ 'RN3',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-3'
+ ),
+ (
+ 30,
+ 3,
+ 'R3L',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-3 LT.-1'
+ ),
+ (
+ 31,
+ 3,
+ 'R32',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-3 LT.-2'
+ ),
+ (
+ 32,
+ 3,
+ 'R3R',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-3 RT.'
+ ),
+ (
+ 33,
+ 3,
+ 'BR5',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / สะพานยกระดับ 5'
+ ),
+ (
+ 34,
+ 3,
+ 'RN4',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-4'
+ ),
+ (
+ 35,
+ 3,
+ 'RN5',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-5 และสะพานยกระดับ 6'
+ ),
+ (
+ 36,
+ 3,
+ 'R6L',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-6 LT.'
+ ),
+ (
+ 37,
+ 3,
+ 'R6R',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-6 RT.'
+ ),
+ (
+ 38,
+ 3,
+ 'RN7',
+ 'ทางเข้าประตู 5 ท่าเทียบเรือ E และ F / ถนนสาย RN-7'
+ ),
+ (39, 3, 'BRG', 'สะพาน'),
+ -- Bridge
+ (40, 3, 'STD', 'มาตรฐาน'),
+ -- Standard
+ (41, 3, 'WFP', 'ระบบประปาและดับเพลิง'),
+ -- Water & Fire Protection
+ (42, 3, 'CWT', 'ถังน้ำใส 4,200 ลบ.ม.'),
+ -- Clear Water Tank
+ (43, 3, 'ELT', 'หอถังสูง 300 ลบ.ม.'),
+ -- Elevated Tank
+ (44, 3, 'WPS', 'อาคารสูบจ่ายน้ำประปา'),
+ -- Water Pump Station
+ (45, 3, 'DNS', 'ระบบระบายน้ำ'),
+ -- Drainage System
+ (
+ 46,
+ 3,
+ 'RPE',
+ 'บ่อหน่วงน้ำ / บ่อหน่วงน้ำดินชุดปูหินเรียง'
+ ),
+ -- Retention Pond (Earth)
+ (
+ 47,
+ 3,
+ 'RPC',
+ 'บ่อหน่วงน้ำ / บ่อหน่วงน้ำ ค.ส.ล. ขนาด 4.00x4.00x3.00 ม.'
+ ),
+ -- Retention Pond (Concrete)
+ (
+ 48,
+ 3,
+ 'RP2',
+ 'บ่อหน่วงน้ำ / บ่อหน่วงน้ำ ค.ส.ล. ขนาด 5.00×5.00x2.00 ม.'
+ ),
+ -- Retention Pond (Concrete 2)
+ (
+ 49,
+ 3,
+ 'REL',
+ 'บ่อหน่วงน้ำ / ระบบไฟฟ้า บ่อหน่วงน้ำ ค.ส.ล.'
+ ),
+ -- Retention Pond (Electrical)
+ (50, 3, 'DPS', 'อาคารสถานีสูบระบายน้ำ'),
+ -- Drainage Pump Station
+ (51, 3, 'CBD', 'อาคารควบคุมสถานีสูบระบายน้ำ'),
+ -- Control Building Drainage
+ (52, 3, 'S15', 'อาคารสถานีไฟฟ้าย่อย ขนาด 115 kV.'),
+ -- Substation 115kV
+ (
+ 53,
+ 3,
+ 'S26',
+ 'อาคารสถานีไฟฟ้าย่อย ขนาด 22 kV. No.6'
+ ),
+ -- Substation 22kV #6
+ (
+ 54,
+ 3,
+ 'S27',
+ 'อาคารสถานีไฟฟ้าย่อย ขนาด 22 kV. No.7'
+ ),
+ -- Substation 22kV #7
+ (55, 3, 'SPC', 'อาคารควบคุมสถานีสูบน้ำทะเล'),
+ -- Seawater Pump Control
+ (
+ 56,
+ 3,
+ 'SPB',
+ 'อาคารสํานักงานท่าเรือบริการและห้องพักเจ้าหน้าที่'
+ ),
+ -- Service Port Office (ซ้ำข้อ 10)
+ (
+ 57,
+ 3,
+ 'CPO',
+ 'สํานักงานปฏิบัติการท่าเรือชายฝั่ง'
+ ),
+ -- Coastal Port Operation (ซ้ำข้อ 14)
+ (
+ 58,
+ 3,
+ 'WWS',
+ 'โรงซ่อมบำรุงสวนท่าเรือชายฝั่ง (ส่วนท้องน้ำ)'
+ ),
+ -- Workshop Water Side
+ (
+ 59,
+ 3,
+ 'WMS',
+ 'โรงซ่อมบำรุงส่วนท่าเรือชายฝั่ง (ส่วนซ่อมบำรุง)'
+ ),
+ -- Workshop Maintenance Side
+ (60, 3, 'EXU', 'ระบบสาธารณูปโภคภายนอก'),
+ -- External Utilities
+ (61, 3, 'COM', 'ระบบสื่อสาร'),
+ -- Communication
+ (62, 3, 'HVC', 'สายเคเบิ้ลใต้ดินแรงสูง');
+
+-- High Voltage Cable
+
+INSERT INTO contract_drawing_sub_cats (project_id, sub_cat_code, sub_cat_name)
+VALUES
+ (3, 'LSC', 'งานภูมิสถาปัตยกรรม'),
+ (3, 'ARC', 'งานสถาปัตยกรรม'),
+ (3, 'INT', 'งานสถาปัตยกรรมภายใน'),
+ (3, 'STR', 'งานโครงสร้าง'),
+ (3, 'SAN', 'งานระบบสุขาภิบาล'),
+ (3, 'HVAC', 'งานระบบปรับอากาศ'),
+ (3, 'COM', 'งานระบบไฟฟ้าและสื่อสาร'),
+ (3, 'QST', 'งานโครงสร้างหน้าท่า'),
+ (3, 'YST', 'ลานกองตู้'),
+ (3, 'DRN', 'งานระบบระบายน้ำ'),
+ (3, 'EEW', 'งานระบบไฟฟ้า'),
+ (3, 'ROW', 'งานถนน'),
+ (3, 'SEC', 'รูปตัดโครงการ'),
+ (3, 'ALG', 'แนวทางและระดับ'),
+ (3, 'GDS', 'การออกแบบเรขาคณิต'),
+ (3, 'JNG', 'ขยายทางแยกระดับพื้น'),
+ (3, 'TRF', 'แสดงตำแหน่งการติดตั้งป้ายจราจร'),
+ (3, 'OBU', 'งานรื้อย้ายระบบสาธารณูปโภค'),
+ (3, 'GBS', 'การออกเรขาคณิต (ช่องทางเข้าออกสำหรับรถขนาดใหญ่)'),
+ (3, 'DOH', 'มาตรฐานงานทางกรมทางหลวง พ.ศ. 2558'),
+ (3, 'DOR', 'มาตรฐานงานทางกรมทางหลวงชนบท พ.ศ. 2558'),
+ (3, 'LDW', 'รายการประกอบ'),
+ (3, 'PLN', 'แปลนและรูปตัดตามยาวสะพานยกระดับ คอนกรีตอัดแรงรูปตัวไอ'),
+ (3, 'ELB', 'โครงสร้างสะพานยกระดับ คอนกรีตอัดแรงรูปตัวไอ'),
+ (3, 'ESB', 'โครงสร้างสะพานช่วงสั้น และ การปรับปรุงคลอง'),
+ (3, 'RST', 'งานโครงสร้างงานทาง'),
+ (3, 'DRR', 'งานระบบระบายน้ำพื้นที่ปรับปรุงและเชื่อมต่อโครงข่ายจราจรเดิม'),
+ (3, 'ELT', 'งานระบบไฟฟ้าส่องสว่าง'),
+ (3, 'ELR', 'งานระบบไฟฟ้าแสงสว่างถนน'),
+ (3, 'TWS', 'รายละเอียด TOLL ISLAND และ WIEGHT STATION'),
+ (3, 'WSD', 'รายละเอียด WIEGHTING SYSTEM AND IT SYSTEM'),
+ (3, 'CTY', 'ลานขนถ่ายสินค้าข้างทางรถไฟท่า F'),
+ (3, 'CW', 'งานระบบประปาและดับเพลิง'),
+ (3, 'IND', 'รายละเอียดการติดตั้ง'),
+ (3, 'MEC', 'งานเครื่องกล'),
+ (3, 'EE', 'มาตรฐานการติดตั้งท่อประปา'),
+ (3, 'WWT', 'งานระบบบำบัดน้ำเสีย'),
+ (3, 'FNC', 'งานภูมิสถาปัตยกรรม (แนวรั้วโครงการ)'),
+ (3, 'STD', 'รายละเอียดและมาตราฐานการติดตั้ง'),
+ (3, 'CTV', 'งานระบบกล้องโทรทัศน์วงจรปิด'),
+ (3, 'UGC', 'แนวสายเคเบิ้ลใต้ดินแรงสูง');
+
+INSERT INTO contract_drawing_subcat_cat_maps (project_id, sub_cat_id, cat_id)
+VALUES
+ (3, '1', '1'),
+ (3, '1', '2'),
+ (3, '1', '3'),
+ (3, '1', '4'),
+ (3, '2', '5'),
+ (3, '3', '5'),
+ (3, '2', '6'),
+ (3, '3', '6'),
+ (3, '4', '6'),
+ (3, '5', '6'),
+ (3, '6', '6'),
+ (3, '7', '6'),
+ (3, '2', '7'),
+ (3, '3', '7'),
+ (3, '4', '7'),
+ (3, '5', '7'),
+ (3, '6', '7'),
+ (3, '7', '7'),
+ (3, '2', '8'),
+ (3, '3', '8'),
+ (3, '4', '8'),
+ (3, '5', '8'),
+ (3, '6', '8'),
+ (3, '7', '8'),
+ (3, '2', '9'),
+ (3, '3', '9'),
+ (3, '4', '9'),
+ (3, '5', '9'),
+ (3, '6', '9'),
+ (3, '7', '9'),
+ (3, '2', '10'),
+ (3, '3', '10'),
+ (3, '4', '10'),
+ (3, '5', '10'),
+ (3, '6', '10'),
+ (3, '7', '10'),
+ (3, '2', '11'),
+ (3, '3', '11'),
+ (3, '4', '11'),
+ (3, '5', '11'),
+ (3, '6', '11'),
+ (3, '7', '11'),
+ (3, '2', '12'),
+ (3, '3', '12'),
+ (3, '4', '12'),
+ (3, '5', '12'),
+ (3, '6', '12'),
+ (3, '7', '12'),
+ (3, '2', '13'),
+ (3, '3', '13'),
+ (3, '4', '13'),
+ (3, '5', '13'),
+ (3, '6', '13'),
+ (3, '7', '13'),
+ (3, '2', '14'),
+ (3, '3', '14'),
+ (3, '4', '14'),
+ (3, '5', '14'),
+ (3, '6', '14'),
+ (3, '7', '14'),
+ (3, '2', '15'),
+ (3, '3', '15'),
+ (3, '4', '15'),
+ (3, '5', '15'),
+ (3, '6', '15'),
+ (3, '7', '15'),
+ (3, '2', '16'),
+ (3, '4', '16'),
+ (3, '5', '16'),
+ (3, '6', '16'),
+ (3, '7', '16'),
+ (3, '8', '17'),
+ (3, '9', '17'),
+ (3, '8', '18'),
+ (3, '10', '17'),
+ (3, '11', '17'),
+ (3, '12', '19'),
+ (3, '13', '19'),
+ (3, '14', '19'),
+ (3, '15', '20'),
+ (3, '15', '21'),
+ (3, '15', '22'),
+ (3, '15', '23'),
+ (3, '15', '24'),
+ (3, '15', '25'),
+ (3, '15', '26'),
+ (3, '15', '27'),
+ (3, '15', '28'),
+ (3, '15', '29'),
+ (3, '15', '30'),
+ (3, '15', '31'),
+ (3, '15', '32'),
+ (3, '15', '33'),
+ (3, '15', '34'),
+ (3, '15', '35'),
+ (3, '15', '36'),
+ (3, '15', '37'),
+ (3, '15', '38'),
+ (3, '16', '19'),
+ (3, '17', '19'),
+ (3, '18', '19'),
+ (3, '19', '19'),
+ (3, '20', '19'),
+ (3, '21', '19'),
+ (3, '22', '39'),
+ (3, '23', '39'),
+ (3, '24', '39'),
+ (3, '25', '39'),
+ (3, '26', '40'),
+ (3, '27', '19'),
+ (3, '28', '19'),
+ (3, '29', '19'),
+ (3, '30', '19'),
+ (3, '31', '19'),
+ (3, '32', '19'),
+ (3, '33', '41'),
+ (3, '33', '42'),
+ (3, '33', '43'),
+ (3, '2', '44'),
+ (3, '34', '44'),
+ (3, '4', '44'),
+ (3, '5', '44'),
+ (3, '35', '44'),
+ (3, '11', '44'),
+ (3, '36', '41'),
+ (3, '10', '5'),
+ (3, '10', '45'),
+ (3, '10', '46'),
+ (3, '10', '47'),
+ (3, '10', '48'),
+ (3, '11', '48'),
+ (3, '11', '49'),
+ (3, '2', '50'),
+ (3, '4', '50'),
+ (3, '11', '50'),
+ (3, '4', '51'),
+ (3, '2', '51'),
+ (3, '11', '51'),
+ (3, '6', '51'),
+ (3, '5', '51'),
+ (3, '37', '5'),
+ (3, '37', '6'),
+ (3, '37', '52'),
+ (3, '37', '53'),
+ (3, '37', '54'),
+ (3, '37', '8'),
+ (3, '37', '9'),
+ (3, '37', '44'),
+ (3, '37', '51'),
+ (3, '37', '55'),
+ (3, '37', '56'),
+ (3, '37', '11'),
+ (3, '37', '57'),
+ (3, '37', '58'),
+ (3, '37', '59'),
+ (3, '37', '40'),
+ (3, '38', '60'),
+ (3, '4', '60'),
+ (3, '5', '60'),
+ (3, '39', '60'),
+ (3, '2', '52'),
+ (3, '3', '52'),
+ (3, '4', '52'),
+ (3, '5', '52'),
+ (3, '6', '52'),
+ (3, '7', '52'),
+ (3, '2', '53'),
+ (3, '3', '53'),
+ (3, '4', '53'),
+ (3, '5', '53'),
+ (3, '6', '53'),
+ (3, '7', '53'),
+ (3, '2', '54'),
+ (3, '3', '54'),
+ (3, '4', '54'),
+ (3, '5', '54'),
+ (3, '6', '54'),
+ (3, '7', '54'),
+ (3, '40', '61'),
+ (3, '41', '62');
+
+INSERT INTO contract_drawings (project_id, condwg_no, title, sub_cat_id, volume_id, sub_no)
+VALUES
+ (3, 'LP3-GN-LA-001', 'สารบัญ ,รายละเอียดสัญลักษณ์ประกอบและคำย่อ', 1, 1, 1),
+ (3, 'LP3-GN-LA-002', 'รายการประกอบวัสดุพืชพรรณ', 1, 1, 2),
+ (3, 'LP3-GN-LA-003', 'ข้อกำหนดการทำเนินดินผสมปลูก', 1, 1, 3),
+ (3, 'LP3-GN-LA-004', 'ข้อกำหนดการปลูกต้นไม้ 1', 1, 1, 4),
+ (3, 'LP3-GN-LA-005', 'ข้อกำหนดการปลูกต้นไม้ 2', 1, 1, 5),
+ (3, 'LP3-GN-LA-006', 'ตารางสรุปต้นไม้', 1, 1, 6),
+ (3, 'LP3-L1-LA-100', 'ผังบริเวณรวมงานภูมิสถาปัตยกรรม', 1, 1, 7),
+ (3, 'LP3-L1-LA-101', 'ผังบริเวณงานภูมิสถาปัตยกรรม ส่วนที่ 1', 1, 1, 8),
+ (3, 'LP3-L1-LA-102', 'ผังระยะ', 1, 1, 9),
+ (3, 'LP3-L1-LA-103', 'ผังปรับระดับเนินดิน ', 1, 1, 10),
+ (3, 'LP3-L1-LA-104', 'ผังระดับและวัสดุ', 1, 1, 11),
+ (3, 'LP3-L1-LA-105', 'ผังทิศทางการระบายน้ำ', 1, 1, 12),
+ (3, 'LP3-L1-LA-106', 'ผังไม้ยืนต้น', 1, 1, 13),
+ (3, 'LP3-L1-LA-107', 'ผังไม้พุ่มและไม้คลุมดิน', 1, 1, 14),
+ (3, 'LP3-L1-LA-108', 'ผังตำแหน่งไฟฟ้าส่องสว่าง', 1, 1, 15),
+ (3, 'LP3-L1-LA-109', 'ผังตำแหน่งก๊อกสนาม', 1, 1, 16),
+ (3, 'LP3-L1-LA-301', 'รูปตัด A และ รูปตัด B ', 1, 1, 17),
+ (3, 'LP3-L1-LA-302', 'รูปตัด A และ รูปตัด B ', 1, 1, 18),
+ (3, 'LP3-L1-LA-303', 'รูปตัด A และ รูปตัด B ', 1, 1, 19),
+ (3, 'LP3-L1-LA-501', 'ขยายมาตรฐาน พื้นทางเดิน , ทางลาด', 1, 1, 20),
+ (3, 'LP3-L1-LA-502', 'ขยายมาตรฐาน กระบะต้นไม้', 1, 1, 21),
+ (3, 'LP3-L2-LA-101', 'ผังบริเวณงานภูมิสถาปัตยกรรม ส่วนที่ 2', 1, 1, 22),
+ (3, 'LP3-L2-LA-102', 'ผังระยะ', 1, 1, 23),
+ (3, 'LP3-L2-LA-103', 'ผังปรับระดับเนินดิน ', 1, 1, 24),
+ (3, 'LP3-L2-LA-104', 'ผังระดับและวัสดุ', 1, 1, 25),
+ (3, 'LP3-L2-LA-105', 'ผังทิศทางการระบายน้ำ', 1, 1, 26),
+ (3, 'LP3-L2-LA-106', 'ผังไม้ยืนต้น', 1, 1, 27),
+ (3, 'LP3-L2-LA-107', 'ผังไม้พุ่มและไม้คลุมดิน', 1, 1, 28),
+ (3, 'LP3-L2-LA-108', 'ผังตำแหน่งไฟฟ้าส่องสว่าง', 1, 1, 29),
+ (3, 'LP3-L2-LA-109', 'ผังตำแหน่งก๊อกสนาม', 1, 1, 30),
+ (3, 'LP3-L2-LA-301', 'รูปตัด A, B และ C', 1, 1, 31),
+ (3, 'LP3-L2-LA-302', 'รูปตัด D, E และ F', 1, 1, 32),
+ (3, 'LP3-L2-LA-303', 'รูปตัด G, H และ I', 1, 1, 33),
+ (3, 'LP3-L2-LA-401', 'ขยายลานพักผ่อน', 1, 1, 34),
+ (3, 'LP3-L2-LA-501', 'ขยายมาตรฐาน พื้นทางเดิน , ทางลาด', 1, 1, 35),
+ (3, 'LP3-L3-LA-101', 'ผังบริเวณงานภูมิสถาปัตยกรรม ส่วนที่ 3', 1, 1, 36),
+ (3, 'LP3-L3-LA-102', 'ผังระยะ,ระดับและวัสดุ', 1, 1, 37),
+ (3, 'LP3-L3-LA-103', 'ผังไม้ยืนต้น,ไม้พุ่มและไม้คลุมดิน', 1, 1, 38),
+ (3, 'LP3-L3-LA-501', 'ขยายมาตรฐาน พื้นทางเดิน , ทางลาด', 1, 1, 39),
+ (3, 'LP3-LA-GN-001', 'สารบัญ ,รายละเอียดสัญลักษณ์ประกอบและคำย่อ', 1, 1, 1),
+ (3, 'LP3-L1-WS-101', 'ผังท่อจ่ายน้่ำประปา และตำแหน่งก๊อกสนาม', 1, 1, 2),
+ (3, 'LP3-L2-WS-101', 'ผังท่อจ่ายน้่ำประปา และตำแหน่งก๊อกสนาม', 1, 1, 3),
+ (3, 'LP3-L2-TP-101', 'รายละเอียดการติดตั้ง งานจ่ายน้ำประปา งานภูมิสถาปัตย์ แผ่นที่ 1/2', 1, 1, 4),
+ (3, 'LP3-LA-TP-102', 'รายละเอียดการติดตั้ง งานจ่ายน้ำประปา งานภูมิสถาปัตย์ แผ่นที่ 2/2', 1, 1, 5),
+ (3, 'LP3-GN-AR-001', 'สารบัญ', 2, 1, 1),
+ (3, 'LP3-GN-AR-002', 'สัญลักษณ์ประกอบ , ตารางวัสดุประกอบ', 2, 1, 2),
+ (3, 'LP3-GN-AR-003', 'ผังแม่บทท่าเรือขั้นที่ 3', 2, 1, 3),
+ (3, 'LP3-GN-AR-601', 'รายการอุปกรณ์ประตู-หน้าต่าง 1/3', 2, 1, 4),
+ (3, 'LP3-GN-AR-602', 'รายการอุปกรณ์ประตู-หน้าต่าง 2/3', 2, 1, 5),
+ (3, 'LP3-GN-AR-603', 'รายการอุปกรณ์ประตู-หน้าต่าง 3/3', 2, 1, 6),
+ (3, 'LP3-GN-AR-604', 'ขยายการติดตั้ง ประตู-หน้าต่าง 1/3', 2, 1, 7),
+ (3, 'LP3-GN-AR-605', 'ขยายการติดตั้ง ประตู-หน้าต่าง 2/3', 2, 1, 8),
+ (3, 'LP3-GN-AR-606', 'ขยายการติดตั้ง ประตู-หน้าต่าง 3/3', 2, 1, 9),
+ (3, 'LP3-GN-ID-501', 'ตารางข้อกำหนดการใช้ครุภัณฑ์', 3, 1, 10),
+ (3, 'LP3-GN-ID-502', 'ตารางครุภัณฑ์ 1/3', 3, 1, 11),
+ (3, 'LP3-GN-ID-503', 'ตารางครุภัณฑ์ 2/3', 3, 1, 12),
+ (3, 'LP3-GN-ID-504', 'ตารางครุภัณฑ์ 3/3', 3, 1, 13),
+ (3, 'LP3-GN-ID-601', 'ขยายห้องเตรียมอาหาร B1,B2,B3,B4,B5,B6 ', 3, 1, 14),
+ (3, 'LP3-GN-ID-602', 'ขยายเค้าเตอร์ประชาสัมพันธ์ CO1', 3, 1, 15),
+ (3, 'LP3-GN-ID-701', 'ตารางรายการและสัญลักษณ์ประกอบงานป้าย', 3, 1, 16),
+ (3, 'LP3-GN-ID-702', 'ขยายป้าย 1/3', 3, 1, 17),
+ (3, 'LP3-GN-ID-703', 'ขยายป้าย 2/3', 3, 1, 18),
+ (3, 'LP3-GN-ID-704', 'ขยายป้าย 3/3', 3, 1, 19),
+ (3, 'LP3-GN-ID-705', 'ตารางแสดงรายชื่อห้อง', 3, 1, 20),
+ (3, 'LP3-G5-AR-012', 'สารบัญ', 2, 1, 1),
+ (3, 'LP3-G5-AR-003', 'สัญลักษณ์ประกอบ , ตารางวัสดุประกอบ', 2, 1, 2),
+ (3, 'LP3-G5-AR-004', 'ผังแม่บทท่าเรือขั้นที่ 3', 2, 1, 3),
+ (3, 'LP3-G5-AR-111', 'ผังบริเวณอาคาร', 2, 1, 4),
+ (3, 'LP3-G5-AR-211', 'แปลนพื้นชั้นที่ 1 , แปลนหลังคา (ส่วนสำนักงาน)', 2, 1, 5),
+ (3, 'LP3-G5-AR-311', 'รูปด้าน 1 , 2 , 3 , 4 (ส่วนสำนักงาน)', 2, 1, 6),
+ (3, 'LP3-G5-AR-121', 'รูปตัด A ,B (ส่วนสำนักงาน)', 2, 1, 7),
+ (3, 'LP3-G5-AR-122', 'แปลนพื้นชั้นที่ 1 (ส่วนด่านตรวจสอบ ขาเข้า)', 2, 1, 8),
+ (3, 'LP3-G5-AR-221', 'แปลนหลังคา (ส่วนด่านตรวจสอบ ขาเข้า)', 2, 1, 9),
+ (3, 'LP3-G5-AR-222', 'รูปด้าน 1 , 2 (ส่วนด่านตรวจสอบ ขาเข้า)', 2, 1, 10),
+ (3, 'LP3-G5-AR-321', 'รูปด้าน 3 , 4 (ส่วนด่านตรวจสอบ ขาเข้า)', 2, 1, 11),
+ (3, 'LP3-G5-AR-322', 'รูปตัด A ,B (ส่วนด่านตรวจสอบ ขาเข้า)', 2, 1, 12),
+ (3, 'LP3-G5-AR-131', 'แปลนพื้นชั้นที่ 1 (ส่วนด่านตรวจสอบ ขาออก)', 2, 1, 13),
+ (3, 'LP3-G5-AR-132', 'แปลนหลังคา (ส่วนด่านตรวจสอบ ขาออก)', 2, 1, 14),
+ (3, 'LP3-G5-AR-231', 'รูปด้าน 1 , 2 (ส่วนด่านตรวจสอบ ขาออก)', 2, 1, 15),
+ (3, 'LP3-G5-AR-232', 'รูปด้าน 3 , 4 (ส่วนด่านตรวจสอบ ขาออก)', 2, 1, 16),
+ (3, 'LP3-G5-AR-331', 'รูปตัด A ,B (ส่วนด่านตรวจสอบ ขาออก)', 2, 1, 17),
+ (3, 'LP3-G5-AR-501', 'ขยายห้องน้ำ TL-01,TL-02 ,TL-03,TL-04', 2, 1, 18),
+ (3, 'LP3-G5-AR-502', 'รายการเครื่องสุขภัณฑ์', 2, 1, 19),
+ (3, 'LP3-G5-AR-601', 'ขยายประตู', 2, 1, 20),
+ (3, 'LP3-G5-AR-602', 'ขยายหน้าต่าง,ตารางรายการวัสดุประตู', 2, 1, 21),
+ (3, 'LP3-G5-AR-701', 'ขยายตู้ควบคุมการ เข้า-ออก BC-01', 2, 1, 22),
+ (3, 'LP3-G5-AR-702', 'ขยายประตูเหล็กบานเลื่อน SD3 ', 2, 1, 23),
+ (3, 'LP3-G5-AR-703', 'แปลนพื้นทางเดินมีหลังคาหลุม', 2, 1, 24),
+ (3, 'LP3-G5-AR-704', 'ขยายพื้นทางเดินมีหลังคาหลุม', 2, 1, 25),
+ (3, 'LP3-G5-AR-801', 'แปลนฝ้า-เพดาน', 2, 1, 26),
+ (3, 'LP3-G5-ID-001', 'สารบัญ', 3, 1, 27),
+ (3, 'LP3-G5-ID-111', 'แปลนแสดงตำแหน่งป้าย ชั้น 1 (111)', 3, 1, 28),
+ (3, 'LP3-G5-ID-121', 'แปลนแสดงตำแหน่งป้าย สวนด่านตรวจสอบ ขาเข้า (121)', 3, 1, 29),
+ (3, 'LP3-G5-ID-131', 'แบลนแสดงตำแหน่งป้าย ส่วนด่านตรวจสอบ ขาออก (131)', 3, 1, 30),
+ (3, 'LP3-G5-ID-112', 'แปลนแสดงตำแหน่งป้าย ชั้น 1 (111)', 3, 1, 31),
+ (3, 'LP3-G5-ID-122', 'แปลนแสดงตำแหน่งป้าย สวนด่านตรวจสอบ ขาเข้า (121)', 3, 1, 32),
+ (3, 'LP3-G5-ID-132', 'แบลนแสดงตำแหน่งป้าย ส่วนด่านตรวจสอบ ขาออก (131)', 3, 1, 33),
+ (3, 'LP3-G5-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 1, 34),
+ (3, 'LP3-G5-ST-002', 'ข้อกำหนดทั่วไป', 4, 1, 35),
+ (3, 'LP3-G5-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 1, 36),
+ (3, 'LP3-G5-ST-011', 'ส่วนสำนักงาน ผังแสดงน้ำหนักบรรทุกจร ชั้น 1', 4, 1, 37),
+ (3, 'LP3-G5-ST-101', 'ส่วนสำนักงาน ผังฐานราก และ ตอม่อ, ผังโครงสร้างชั้น 1', 4, 1, 38),
+ (3, 'LP3-G5-ST-102', 'ส่วนสำนักงาน ผังโครงสร้างชั้นอะเส, ชั้นหลังคา', 4, 1, 39),
+ (3, 'LP3-G5-ST-111', 'ส่วนด่านตรวจสอบ ขาเข้า ผังฐานราก และ ตอมอ', 4, 1, 40),
+ (3, 'LP3-G5-ST-112', 'ส่วนด่านตรวจสอบ ขาเข้า ผังโครงสร้างชั้น 1', 4, 1, 41),
+ (3, 'LP3-G5-ST-113', 'ส่วนด่านตรวจสอบ ขาเข้า ผังโครงสร้างชั้นหลังคา', 4, 1, 42),
+ (3, 'LP3-G5-ST-121', ' ส่วนดานตรวจสอบ ขาออก ผังฐานราก และ ตอม่อ', 4, 1, 43),
+ (3, 'LP3-G5-ST-122', 'ส่วนด่านตรวจสอบ ขาออก ผังโครงสร้างชั้น 1', 4, 1, 44),
+ (3, 'LP3-G5-ST-123', 'สวนด่านตรวจสอบ ขาออก ผังโครงสร้างชั้นหลังคา', 4, 1, 45),
+ (3, 'LP3-G5-ST-131', 'รูปตัด A', 4, 1, 46),
+ (3, 'LP3-G5-ST-141', 'ขยายตู้ตรวจสอบ, แผงกันชน คสล. TYPE-1,2,3', 4, 1, 47),
+ (3, 'LP3-G5-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 1, 48),
+ (3, 'LP3-G5-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 1, 49),
+ (3, 'LP3-G5-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 1, 50),
+ (3, 'LP3-G5-ST-301', 'ผังพื้นทางเดินเชื่อมด่านตรวจสอบ ขาเข้า-ขาออก', 4, 1, 51),
+ (3, 'LP3-G5-ST-302', 'ขยายทางเดินเชื่อมด่านตรวจสอบ ขาเข้า-ขาออก', 4, 1, 52),
+ (3, 'LP3-G5-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 1, 53),
+ (3, 'LP3-G5-SN-002', 'ตารางแสดงรายการประกอบ', 5, 1, 54),
+ (3, 'LP3-G5-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 1, 55),
+ (3, 'LP3-G5-SN-201', 'ผังบริเวณระบบสุขาภิบาล', 5, 1, 56),
+ (3, 'LP3-G5-SN-202', 'แปลนระบบระบายน้ำ – ส่วนสำนักงาน', 5, 1, 57),
+ (3, 'LP3-G5-SN-203', 'แปลนระบบสุขาภิบาล - ส่วนสำนักงาน', 5, 1, 58),
+ (3, 'LP3-G5-SN-204', 'แปลนระบบสุขาภิบาล - แปลนพื้นชั้นที่ 1 ส่วนด่านตรวจสอบ ขาเข้', 5, 1, 59),
+ (3, 'LP3-G5-SN-205', 'แปลนระบบสุขาภิบาล - แปลนหลังคา ส่วนด่านตรวจสอบ ขาเข้า', 5, 1, 60),
+ (3, 'LP3-G5-SN-206', 'แปลนระบบสุขาภิบาล - แปลนพื้นชั้นที่ 1 ส่วนด่านตรวจสอบ ขาออ', 5, 1, 61),
+ (3, 'LP3-G5-SN-207', 'แปลนระบบสุขาภิบาล - แปลนหลังคา ส่วนด่านตรวจสอบ ขาออก', 5, 1, 62),
+ (3, 'LP3-G5-SN-301', 'ขยายห้องน้ำ 1', 5, 1, 63),
+ (3, 'LP3-G5-SN-302', 'ขยายห้องน้ำ 2', 5, 1, 64),
+ (3, 'LP3-G5-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 1, 65),
+ (3, 'LP3-G5-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 1, 66),
+ (3, 'LP3-G5-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 1, 67),
+ (3, 'LP3-G5-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 1, 68),
+ (3, 'LP3-G5-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 1, 69),
+ (3, 'LP3-G5-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 1, 70),
+ (3, 'LP3-G5-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1 (ส่วนสำนักงาน)', 6, 1, 71),
+ (3, 'LP3-G5-HV-202', 'แปลนระบบปรับอากาศ ชั้น 1 (ส่วนด่านตรวจสอบ ขาเข้า)', 6, 1, 72),
+ (3, 'LP3-G5-HV-203', 'แปลนระบบระบายอากาศ ชั้น 1 (ส่วนดานตรวจสอบ ขาเข้า)', 6, 1, 73),
+ (3, 'LP3-G5-HV-204', 'แปลนระบบปรับอากาศ ชั้น 1 (ส่วนด่านตรวจสอบ ขาออก)', 6, 1, 74),
+ (3, 'LP3-G5-HV-205', 'แปลนระบบระบายอากาศ ชั้น 1 (ส่วนด่านตรวจสอบ ขาออก)', 6, 1, 75),
+ (3, 'LP3-G5-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 1, 76),
+ (3, 'LP3-G5-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 1, 77),
+ (3, 'LP3-G5-EE-001', 'สารบัญ', 7, 1, 78),
+ (3, 'LP3-G5-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 1, 79),
+ (3, 'LP3-G5-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 1, 80),
+ (3, 'LP3-G5-EE-004', 'สัญลักษณ์ตารางโคม', 7, 1, 81),
+ (3, 'LP3-G5-EE-101', 'SINGLE LINE DIAGRAM แผ่นที่ 1/2', 7, 1, 82),
+ (3, 'LP3-G5-EE-102', 'SINGLE LINE DIAGRAM แผ่นที่ 2/2', 7, 1, 83),
+ (3, 'LP3-G5-EE-103', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางใหลดไฟฟ้า แผ่นที่ 1/3', 7, 1, 84),
+ (3, 'LP3-G5-EE-104', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางใหลดไฟฟ้า แผ่นที่ 2/3', 7, 1, 85),
+ (3, 'LP3-G5-EE-105', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางโหลดไฟฟ้า แผ่นที่ 3/3', 7, 1, 86),
+ (3, 'LP3-G5-EE-106', 'แปลนอุปกรณ์โคมไฟถนนบริเวณอาคาร 65 แผ่นที่ 1/2', 7, 1, 87),
+ (3, 'LP3-G5-EE-107', 'แปลนอุปกรณ์โคมไฟถนนบริเวณอาคาร 65 แผ่นที่ 2/2', 7, 1, 88),
+ (3, 'LP3-G5-EE-201', 'แปลน์โคมไฟ (สวนสำนักงาน)', 7, 1, 89),
+ (3, 'LP3-G5-EE-202', 'แปลน์โคมไฟ (สวนดานตรวจสอบขาเข้า)', 7, 1, 90),
+ (3, 'LP3-G5-EE-203', 'แปลน์โคมไฟ (สวนด่านตรวจสอบขาออก)', 7, 1, 91),
+ (3, 'LP3-G5-EE-204', 'แปลน์โคมไฟทางเดิน', 7, 1, 92),
+ (3, 'LP3-G5-EE-301', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์ (ส่วนสำนักงาน)', 7, 1, 93),
+ (3, 'LP3-G5-EE-302', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์ (ส่วนด่านตรวจสอบขาเข้า)', 7, 1, 94),
+ (3, 'LP3-G5-EE-303', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์ (สวนด่านตรวจสอบขาออก)', 7, 1, 95),
+ (3, 'LP3-G5-EE-401', 'แปลนระบบป้องกันฟ้าผาและกราวด์ (ส่วนสำนักงาน)', 7, 1, 96),
+ (3, 'LP3-G5-EE-402', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์ (ส่วนด่านตรวจสอบขาเข้า)', 7, 1, 97),
+ (3, 'LP3-G5-EE-403', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์ (ส่วนด่านตรวจสอบขาออก)', 7, 1, 98),
+ (3, 'LP3-G5-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้และเสียงประกาศสาธารณะ (ส่วนสำนักงาน)', 7, 1, 99),
+ (3, 'LP3-G5-EE-502', 'แปลนอุปกรณ์เสียงประกาศสาธารณะ (ส่วนด่านตรวจสอบขาเข้า)', 7, 1, 100),
+ (3, 'LP3-G5-EE-503', 'แปลนอุปกรณ์เสียงประกาศสาธารณะ (ส่วนด่านตรวจสอบขาออก)', 7, 1, 101),
+ (3, 'LP3-G5-EE-601', 'แปลนกล้องโทรทัศน์วงจรปิด (ส่วนสำนักงาน)', 7, 1, 102),
+ (3, 'LP3-G5-EE-602', 'แปลนกล้องโทรทัศน์วงจรปิด (ส่วนด่านตรวจสอบขาเข้า)', 7, 1, 103),
+ (3, 'LP3-G5-EE-603', 'แปลนกล้องโทรทัศน์วงจรปิด (ส่วนด่านตรวจสอบขาออก)', 7, 1, 104),
+ (3, 'LP3-G5-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1/9', 7, 1, 105),
+ (3, 'LP3-G5-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2/9', 7, 1, 106),
+ (3, 'LP3-G5-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3/9', 7, 1, 107),
+ (3, 'LP3-G5-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4/9', 7, 1, 108),
+ (3, 'LP3-G5-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5/9', 7, 1, 109),
+ (3, 'LP3-G5-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6/9', 7, 1, 110),
+ (3, 'LP3-G5-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7/9', 7, 1, 111),
+ (3, 'LP3-G5-EE-708', 'รายละเอียดการติดตั้งแผ่นที่ 8/9', 7, 1, 112),
+ (3, 'LP3-G5-EE-709', 'รายละเอียดการติดตั้งแผ่นที่ 9/9', 7, 1, 113),
+ (3, 'LP3-HW-AR-001', 'สารบัญ', 2, 1, 1),
+ (3, 'LP3-HW-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 1, 2),
+ (3, 'LP3-HW-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 1, 3),
+ (3, 'LP3-HW-AR-004', 'ผังบริเวณอาคาร', 2, 1, 4),
+ (3, 'LP3-HW-AR-101', 'แปลนพื้นชั้นลาง, แปลนหลังคา, แปลนฝ้าเพดาน, ขยาย DE-1', 2, 1, 5),
+ (3, 'LP3-HW-AR-201', 'รูปด้าน 1. รูปด้าน 2. รูปด้าน 3. รูปด้าน 4', 2, 1, 6),
+ (3, 'LP3-HW-AR-301', 'รูปตัด A, รูปตัด B, ขยายทางลาด', 2, 1, 7),
+ (3, 'LP3-HW-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 1, 8),
+ (3, 'LP3-HW-AR-701', 'ขยายประตูรั้วโครงการ ขยายขอบคันหิน', 2, 1, 9),
+ (3, 'LP3-HW-ID-001', 'สารบัญ', 3, 1, 10),
+ (3, 'LP3-HW-ID-101', 'แปลนแสดงตำแหน่งป้าย', 3, 1, 11),
+ (3, 'LP3-HW-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 1, 12),
+ (3, 'LP3-HW-ST-002', 'ข้อกำหนดทั่วไป', 4, 1, 13),
+ (3, 'LP3-HW-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 1, 14),
+ (3, 'LP3-HW-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 1, 15),
+ (3, 'LP3-HW-ST-101', 'ผังโครงสร้างอาคาร', 4, 1, 16),
+ (3, 'LP3-HW-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 1, 17),
+ (3, 'LP3-HW-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 1, 18),
+ (3, 'LP3-HW-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 1, 19),
+ (3, 'LP3-HW-SN-002', 'ตารางแสดงรายการประกอบ', 5, 1, 20),
+ (3, 'LP3-HW-SN-201', 'ไดอะแกรมและแปลนระบบสุขาภิบาล ชั้นที่ 1 และชั้นหลังคา', 5, 1, 21),
+ (3, 'LP3-HW-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป', 5, 1, 22),
+ (3, 'LP3-HW-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 1, 23),
+ (3, 'LP3-HW-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 1, 24),
+ (3, 'LP3-HW-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 1, 25),
+ (3, 'LP3-HW-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1', 6, 1, 26),
+ (3, 'LP3-HW-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 1, 27),
+ (3, 'LP3-HW-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 1, 28),
+ (3, 'LP3-HW-EE-001', 'สารบัญ', 7, 1, 29),
+ (3, 'LP3-HW-EE-002', 'สัญลักษณ์ระบบไฟฟ้า', 7, 1, 30),
+ (3, 'LP3-HW-EE-003', 'สัญลักษณ์ระบบสื่อสาร', 7, 1, 31),
+ (3, 'LP3-HW-EE-004', 'สัญลักษณ์ตารางโคม', 7, 1, 32),
+ (3, 'LP3-HW-EE-101', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางโหลดไฟฟ้า', 7, 1, 33),
+ (3, 'LP3-HW-EE-201', 'แปลน์โคมไฟ และ แปลนเต้ารับไฟฟ้า', 7, 1, 34),
+ (3, 'LP3-HW-EE-301', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์ และ แปลนแจ้งเหตุเพลิงไหม้', 7, 1, 35),
+ (3, 'LP3-HW-EE-401', 'แปลนกล้องโทรทัศน์วงจรปิด', 7, 1, 36),
+ (3, 'LP3-HW-EE-501', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 1, 37),
+ (3, 'LP3-HW-EE-502', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 1, 38),
+ (3, 'LP3-HW-EE-503', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 1, 39),
+ (3, 'LP3-HW-EE-504', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 1, 40),
+ (3, 'LP3-HW-EE-505', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 1, 41),
+ (3, 'LP3-HW-EE-506', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 1, 42),
+ (3, 'LP3-SW-AR-001', 'สารบัญ', 2, 1, 1),
+ (3, 'LP3-SW-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 1, 2),
+ (3, 'LP3-SW-AR-003', 'ผังแม่บทท่าเรือขั้นที่ 3', 2, 1, 3),
+ (3, 'LP3-SW-AR-004', 'ผังบริเวณอาคาร', 2, 1, 4),
+ (3, 'LP3-SW-AR-101', 'แปลนพื้นชั้นลาง, แปลนหลังคา, แปลนฝ้าเพดาน,ขยาย DE-1,DE-2', 2, 1, 5),
+ (3, 'LP3-SW-AR-201', 'รูปด้าน 1, รูปด้าน 2, รูปด้าน 3, รูปด้าน 4, รูปตัด A, รูปตัด 8', 2, 1, 6),
+ (3, 'LP3-SW-AR-501', 'รายการเครื่องสุขภัณฑ์', 2, 1, 7),
+ (3, 'LP3-SW-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 1, 8),
+ (3, 'LP3-SW-ID-001', 'สารบัญ', 3, 1, 9),
+ (3, 'LP3-SW-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 1, 10),
+ (3, 'LP3-SW-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 1, 11),
+ (3, 'LP3-SW-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 1, 12),
+ (3, 'LP3-SW-ST-002', 'ข้อกำหนดทั่วไป', 4, 1, 13),
+ (3, 'LP3-SW-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 1, 14),
+ (3, 'LP3-SW-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 1, 15),
+ (3, 'LP3-SW-ST-101', 'ผังโครงสร้างอาคาร', 4, 1, 16),
+ (3, 'LP3-SW-ST-111', 'รูปตัด A', 4, 1, 17),
+ (3, 'LP3-SW-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 1, 18),
+ (3, 'LP3-SW-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผนที่ 2', 4, 1, 19),
+ (3, 'LP3-SW-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 1, 20),
+ (3, 'LP3-SW-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 1, 21),
+ (3, 'LP3-SW-SN-002', 'ตารางแสดงรายการประกอบ', 5, 1, 22),
+ (3, 'LP3-SW-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 1, 23),
+ (3, 'LP3-SW-SN-201', 'แปลนระบบสุขาภิบาลชิ้นที่ 1 และชั้นหลังดา', 5, 1, 24),
+ (3, 'LP3-SW-SN-301', 'ขยายห้องน้ำ', 5, 1, 25),
+ (3, 'LP3-SW-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 1, 26),
+ (3, 'LP3-SW-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 1, 27),
+ (3, 'LP3-SW-SN-403', 'อยายมาตรฐานการติดตั้งทั่วไป 3', 5, 1, 28),
+ (3, 'LP3-SW-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 1, 29),
+ (3, 'LP3-SW-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 1, 30),
+ (3, 'LP3-SW-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 1, 31),
+ (3, 'LP3-SW-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1', 6, 1, 32),
+ (3, 'LP3-SW-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 1, 33),
+ (3, 'LP3-SW-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 1, 34),
+ (3, 'LP3-SW-EE-001', 'สารบัญ', 7, 1, 35),
+ (3, 'LP3-SW-EE-002', 'สัญลักษณ์ระบบไฟฟ้า', 7, 1, 36),
+ (3, 'LP3-SW-EE-003', 'สัญลักษณ์ระบบสื่อสาร', 7, 1, 37),
+ (3, 'LP3-SW-EE-004', 'สัญลักษณ์ตารางโคม', 7, 1, 38),
+ (3, 'LP3-SW-EE-101', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางเหลดไฟฟ้า', 7, 1, 39),
+ (3, 'LP3-SW-EE-201', 'แปลนโคมไฟ', 7, 1, 40),
+ (3, 'LP3-SW-EE-301', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์', 7, 1, 41),
+ (3, 'LP3-SW-EE-401', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์', 7, 1, 42),
+ (3, 'LP3-SW-EE-501', 'แปลนแจ้งเหตุเพลิงไหม้', 7, 1, 43),
+ (3, 'LP3-SW-EE-601', 'แปลนกล้องโทรทัศน์วงจรปิด', 7, 1, 44),
+ (3, 'LP3-SW-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 1, 45),
+ (3, 'LP3-SW-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 1, 46),
+ (3, 'LP3-SW-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 1, 47),
+ (3, 'LP3-SW-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 1, 48),
+ (3, 'LP3-SW-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 1, 49),
+ (3, 'LP3-SW-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 1, 50),
+ (3, 'LP3-MD-AR-001', 'สารบัญ', 2, 2, 1),
+ (3, 'LP3-MD-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 2, 2),
+ (3, 'LP3-MD-AR-003', 'ผังแม่บททาเรือชั้นที่ 3', 2, 2, 3),
+ (3, 'LP3-MD-AR-004', 'ผังบริเวณอาคาร', 2, 2, 4),
+ (3, 'LP3-MD-AR-111', 'แปลนพื้นชั้นที่ 1 (ส่วนร้านค้า)', 2, 2, 5),
+ (3, 'LP3-MD-AR-112', 'แปลนหลังคา (ส่วนร้านค้า)', 2, 2, 6),
+ (3, 'LP3-MD-AR-211', 'รูปด้าน 1. รูปด้าน 2 (ส่วนร้านค้า)', 2, 2, 7),
+ (3, 'LP3-MD-AR-212', 'รูปด้าน 3. รูปด้าน 4 (ส่วนร้านค้า)', 2, 2, 8),
+ (3, 'LP3-MD-AR-311', 'รูปตัด A, รูปตัด B (ส่วนร้านค้า)', 2, 2, 9),
+ (3, 'LP3-MD-AR-121', 'แปลนพื้นชั้นที่ 1 (ส่วนร้านอาหาร)', 2, 2, 10),
+ (3, 'LP3-MD-AR-122', 'แปลนหลังคา (ส่วนร้านอาหาร)', 2, 2, 11),
+ (3, 'LP3-MD-AR-221', 'รูปด้าน 1. รูปด้าน 2 (ส่วนร้านอาหาร)', 2, 2, 12),
+ (3, 'LP3-MD-AR-222', 'รูปด้าน 3. รูปด้าน 4 (ส่วนร้านอาหาร)', 2, 2, 13),
+ (3, 'LP3-MD-AR-321', 'รูปตัด A, รูปตัด B (ส่วนร้านอาหาร)', 2, 2, 14),
+ (3, 'LP3-MD-AR-401', 'ขยายบันได 1 23.4', 2, 2, 15),
+ (3, 'LP3-MD-AR-402', 'ขยายทางลาด', 2, 2, 16),
+ (3, 'LP3-MD-AR-501', 'ขยายห้องน้ำ TL-01, TL-02, TL-03, TL-04', 2, 2, 17),
+ (3, 'LP3-MD-AR-502', 'รายการเครื่องสุขภัณฑ์', 2, 2, 18),
+ (3, 'LP3-MD-AR-601', 'ขยายประตู-หน้าต่าง', 2, 2, 19),
+ (3, 'LP3-MD-AR-602', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 2, 20),
+ (3, 'LP3-MD-AR-701', 'ขยายซุ้มทางเข้า แปลนพื้น', 2, 2, 21),
+ (3, 'LP3-MD-AR-702', 'อยายซุ้มทางเข้า แปลนหลังคา', 2, 2, 22),
+ (3, 'LP3-MD-AR-703', 'ขยายซุ้มทางเข้า รูปด้าน 1. รูปด้าน 2', 2, 2, 23),
+ (3, 'LP3-MD-AR-704', 'ขยายซุ้มทางเข้า รูปตัด A. รูปตัด B', 2, 2, 24),
+ (3, 'LP3-MD-AR-705', 'ขยาย DE-03, DE-04, DE-06', 2, 2, 25),
+ (3, 'LP3-MD-AR-706', 'แปลนพื้นทางเดินหลังคาคลุม', 2, 2, 26),
+ (3, 'LP3-MD-AR-707', 'ขยาย DE-05', 2, 2, 27),
+ (3, 'LP3-MD-AR-811', 'แปลนผ้า-เพดานชั้นที่ 1 (ส่วนร้านค้า)', 2, 2, 28),
+ (3, 'LP3-MD-AR-821', 'แปลนผ้า-เพดานชั้นที่ 1 (ส่วนร้านอาหาร)', 2, 2, 29),
+ (3, 'LP3-MD-ID-001', 'สารบัญ', 3, 2, 30),
+ (3, 'LP3-MD-ID-111', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1 (DUTY FREE BUILDING)', 3, 2, 31),
+ (3, 'LP3-MD-ID-121', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1 (MARINE CLUB)', 3, 2, 32),
+ (3, 'LP3-MD-ID-112', 'แปลนแสดงตำแหน่งป้าย ชั้น 1 (DUTY FREE BUILDING)', 3, 2, 33),
+ (3, 'LP3-MD-ID-122', 'แปลนแสดงตำแหน่งป้าย ชั้น 1 (MARINE CLUB)', 3, 2, 34),
+ (3, 'LP3-MD-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 2, 35),
+ (3, 'LP3-MD-ST-002', 'ข้อกำหนดทั่วไป', 4, 2, 36),
+ (3, 'LP3-MD-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 2, 37),
+ (3, 'LP3-MD-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร (MARINE CLUB)', 4, 2, 38),
+ (3, 'LP3-MD-ST-111', 'ผังฐานราก และ ตอมอ (MARINE CLUB)', 4, 2, 39),
+ (3, 'LP3-MD-ST-112', 'ผังโครงสร้างชั้น 1 (MARINE CLUB)', 4, 2, 40),
+ (3, 'LP3-MD-ST-113', 'ผังโครงสร้างชั้นอะเส (MARINE CLUB)', 4, 2, 41),
+ (3, 'LP3-MD-ST-114', 'ผังโครงสร้างหลังคา (MARINE CLUB)', 4, 2, 42),
+ (3, 'LP3-MD-ST-115', 'รูปตัด A, B (MARINE CLUB)', 4, 2, 43),
+ (3, 'LP3-MD-ST-021', 'ผังแสดงน้ำหนักบรรทุกจร (DUTY FREE BUILDING)', 4, 2, 44),
+ (3, 'LP3-MD-ST-121', 'ผังฐานราก และ ตอมอ (DUTY FREE BUILDING)', 4, 2, 45),
+ (3, 'LP3-MD-ST-122', 'ผังโครงสร้างชั้น 1 (DUTY FREE BUILDING)', 4, 2, 46),
+ (3, 'LP3-MD-ST-123', 'ผังโครงสร้างชั้นอะเส (DUTY FREE BUILDING)', 4, 2, 47),
+ (3, 'LP3-MD-ST-124', 'ผังโครงสร้างหลังคา (DUTY FREE BUILDING)', 4, 2, 48),
+ (3, 'LP3-MD-ST-125', 'รูปตัด A, B (DUTY FREE BUILDING)', 4, 2, 49),
+ (3, 'LP3-MD-ST-201', 'ขยายฐานราก และ เสา', 4, 2, 50),
+ (3, 'LP3-MD-ST-301', 'ขยายคาน', 4, 2, 51),
+ (3, 'LP3-MD-ST-401', 'ขยายพื้น และ บันได', 4, 2, 52),
+ (3, 'LP3-MD-ST-501', 'ขยายโครงหลังคาเหล็ก แผ่นที่ 1', 4, 2, 53),
+ (3, 'LP3-MD-ST-502', 'ขยายโครงหลังคาเหล็ก แผ่นที่ 2', 4, 2, 54),
+ (3, 'LP3-MD-ST-601', 'ผังพื้นทางเดินเชื่อมอาคาร', 4, 2, 55),
+ (3, 'LP3-MD-ST-602', 'ขยายโครงสร้างทางเดินเชื่อมอาคาร', 4, 2, 56),
+ (3, 'LP3-MD-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 2, 57),
+ (3, 'LP3-MD-SN-002', 'ตารางแสดงรายการประกอบ', 5, 2, 58),
+ (3, 'LP3-MD-SN-101', 'ไดอะแกรมระบบสุขาภิบาล (ส่วนร้านอาหาร)', 5, 2, 59),
+ (3, 'LP3-MD-SN-102', 'ไดอะแกรมระบบสุขาภิบาล (ส่วนร้านค้า)', 5, 2, 60),
+ (3, 'LP3-MD-SN-201', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 1 (ส่วนร้านอาหาร)', 5, 2, 61),
+ (3, 'LP3-MD-SN-202', 'แปลนระบบระบายน้ำเสีย ชั้นที่ 1 (ส่วนร้านอาหาร)', 5, 2, 62),
+ (3, 'LP3-MD-SN-203', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1 (ส่วนร้านอาหาร)', 5, 2, 63),
+ (3, 'LP3-MD-SN-204', 'แปลนระบบระบายน้ำฝน ชั้นหลังคา (ส่วนร้านอาหาร)', 5, 2, 64),
+ (3, 'LP3-MD-SN-205', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 1 (ส่วนร้านค้า)', 5, 2, 65),
+ (3, 'LP3-MD-SN-206', 'แปลนระบบระบายน้ำเสีย ชั้นที่ 1 (ส่วนร้านค้า)', 5, 2, 66),
+ (3, 'LP3-MD-SN-207', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1 (ส่วนร้านค้า)', 5, 2, 67),
+ (3, 'LP3-MD-SN-208', 'แบลนระบบระบายน้ำฝน ชั้นหลังคา (ส่วนร้านค้า)', 5, 2, 68),
+ (3, 'LP3-MD-SN-301', 'ขยายห้องน้ำ 1 (ส่วนร้านอาหาร)', 5, 2, 69),
+ (3, 'LP3-MD-SN-302', 'ขยายห้องน้ำ 2 (ส่วนร้านอาหาร)', 5, 2, 70),
+ (3, 'LP3-MD-SN-303', 'ขยายห้องน้ำ (สวนร้านค้า)', 5, 2, 71),
+ (3, 'LP3-MD-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 2, 72),
+ (3, 'LP3-MD-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 2, 73),
+ (3, 'LP3-MD-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 2, 74),
+ (3, 'LP3-MD-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 2, 75),
+ (3, 'LP3-MD-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 5, 2, 76),
+ (3, 'LP3-MD-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 5, 2, 77),
+ (3, 'LP3-MD-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1 (ส่วนร้านอาหาร)', 5, 2, 78),
+ (3, 'LP3-MD-HV-205', 'แปลนระบบระบายอากาศ ชั้น 1 (ส่วนร้านอาหาร)', 5, 2, 79),
+ (3, 'LP3-MD-HV-203', 'แปลนระบบปรับอากาศ ชั้น 1 (ส่วนร้านค้า)', 5, 2, 80),
+ (3, 'LP3-MD-HV-204', 'แปลนระบบระบายอากาศ ชั้น 1 (ส่วนร้านค้า)', 5, 2, 81),
+ (3, 'LP3-MD-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 5, 2, 82),
+ (3, 'LP3-MD-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 5, 2, 83),
+ (3, 'LP3-MD-EE-001', 'สารบัญ', 7, 2, 84),
+ (3, 'LP3-MD-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 2, 85),
+ (3, 'LP3-MD-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 2, 86),
+ (3, 'LP3-MD-EE-004', 'สัญลักษณ์ตารางโคม', 7, 2, 87),
+ (3, 'LP3-MD-EE-101', 'SINGLE LINE DIAGRAM แผ่นที่ 1/2', 7, 2, 88),
+ (3, 'LP3-MD-EE-102', 'SINGLE LINE DIAGRAM แผนที 2/2', 7, 2, 89),
+ (3, 'LP3-MD-EE-103', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางโหลดไฟฟ้า แผนที 1/2', 7, 2, 90),
+ (3, 'LP3-MD-EE-104', 'ไรเซอร์ไดอะแกรมระบบสือสารและตารางโหลดไฟฟ้า แผ่นที่ 2/2', 7, 2, 91),
+ (3, 'LP3-MD-EE-105', 'แปลนอุปกรณ์โคมไฟถนนบริเวณอาคาร MD', 7, 2, 92),
+ (3, 'LP3-MD-EE-201', 'แปลนโคมไฟ (ส่วนร้านอาหาร)', 7, 2, 93),
+ (3, 'LP3-MD-EE-202', 'แปลน์โคมไฟ (ส่วนร้านค้า)', 7, 2, 94),
+ (3, 'LP3-MD-EE-301', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์ (ส่วนร้านอาหาร)', 7, 2, 95),
+ (3, 'LP3-MD-EE-302', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์ (ส่วนร้านค้า)', 7, 2, 96),
+ (3, 'LP3-MD-EE-401', 'แปลนระบบป้องกันฟ้าผาและกราวด์ (ส่วนร้านอาหาร)', 7, 2, 97),
+ (3, 'LP3-MD-EE-402', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์ (ส่วนร้านค้า)', 7, 2, 98),
+ (3, 'LP3-MD-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ (ส่วนร้านอาหาร)', 7, 2, 99),
+ (3, 'LP3-MD-EE-502', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ (ส่วนร้านค้า)', 7, 2, 100),
+ (3, 'LP3-MD-EE-601', 'แปลนกล้องโทรทัศน์วงจรปิด (ส่วนร้านอาหาร)', 7, 2, 101),
+ (3, 'LP3-MD-EE-602', 'แปลนกล้องโทรทัศน์วงจรปิด (ส่วนร้านค้า)', 7, 2, 102),
+ (3, 'LP3-MD-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1/9', 7, 2, 103),
+ (3, 'LP3-MD-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2/9', 7, 2, 104),
+ (3, 'LP3-MD-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3/9', 7, 2, 105),
+ (3, 'LP3-MD-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4/9', 7, 2, 106),
+ (3, 'LP3-MD-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5/9', 7, 2, 107),
+ (3, 'LP3-MD-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6/9', 7, 2, 108),
+ (3, 'LP3-MD-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7/9', 7, 2, 109),
+ (3, 'LP3-MD-EE-708', 'รายละเอียดการติดตั้งแผ่นที่ 8/9', 7, 2, 110),
+ (3, 'LP3-MD-EE-709', 'รายละเอียดการติดตั้งแผ่นที่ 9/9', 7, 2, 111),
+ (3, 'LP3-SD-AR-001', 'สารบัญ', 2, 2, 1),
+ (3, 'LP3-SD-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 2, 2),
+ (3, 'LP3-SD-AR-003', 'ผังแม่บททาเรือชั้นที่ 3', 2, 2, 3),
+ (3, 'LP3-SD-AR-004', 'ผังบริเวณอาคาร', 2, 2, 4),
+ (3, 'LP3-SD-AR-101', 'แปลนพื้นชั้นล่าง, แปลนพื้นชั้นบน', 2, 2, 5),
+ (3, 'LP3-SD-AR-102', 'แปลนหลังคา', 2, 2, 6),
+ (3, 'LP3-SD-AR-201', 'รูปด้าน 1. รูปด้าน 2, รูปด้าน 3, รูปด้าน 4', 2, 2, 7),
+ (3, 'LP3-SD-AR-301', 'รูปตัด A, รูปตัด B. รูปตัด C', 2, 2, 8),
+ (3, 'LP3-SD-AR-401', 'ขยายบันได 1', 2, 2, 9),
+ (3, 'LP3-SD-AR-501', 'ขยายห้องน้ำ TL-01, TL-02', 2, 2, 10),
+ (3, 'LP3-SD-AR-502', 'ขยายห้องน้ำ TL-03', 2, 2, 11),
+ (3, 'LP3-SD-AR-503', 'รายการเครื่องสุขภัณฑ์', 2, 2, 12),
+ (3, 'LP3-SD-AR-601', 'ขยายประตู-หน้าต่าง 1/2', 2, 2, 13),
+ (3, 'LP3-SD-AR-602', 'ขยายประตู-หน้าต่าง 2/2', 2, 2, 14),
+ (3, 'LP3-SD-AR-603', 'ตารางรายการวัสดุประตู-หน้าต่าง', 2, 2, 15),
+ (3, 'LP3-SD-AR-701', 'รูปตัดขยาย DE-1, DE-2, DE-3', 2, 2, 16),
+ (3, 'LP3-SD-AR-702', 'รูปตัดขยาย DE-4, DE-5', 2, 2, 17),
+ (3, 'LP3-SD-AR-801', 'แปลนฝ้าเพดานชั้นล่าง, แปลนผ้าเพดานชั้นบน', 2, 2, 18),
+ (3, 'LP3-SD-AR-802', 'ขยายผ้าเพดานและโคมไฟ', 2, 2, 19),
+ (3, 'LP3-SD-ID-001', 'สารบัญ', 3, 2, 20),
+ (3, 'LP3-SD-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1.2', 3, 2, 21),
+ (3, 'LP3-SD-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1.2', 3, 2, 22),
+ (3, 'LP3-SD-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 2, 23),
+ (3, 'LP3-SD-ST-002', 'ข้อกำหนดทั่วไป', 4, 2, 24),
+ (3, 'LP3-SD-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 2, 25),
+ (3, 'LP3-SD-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 2, 26),
+ (3, 'LP3-SD-ST-101', 'ผังฐานราก และ ตอมอ ผังโครงสร้าง', 4, 2, 27),
+ (3, 'LP3-SD-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 2, 28),
+ (3, 'LP3-SD-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 2, 29),
+ (3, 'LP3-SD-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 2, 30),
+ (3, 'LP3-SD-ST-204', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 4', 4, 2, 31),
+ (3, 'LP3-SD-ST-205', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 5', 4, 2, 32),
+ (3, 'LP3-SD-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 2, 33),
+ (3, 'LP3-SD-SN-002', 'ตารางแสดงรายการประกอบ', 5, 2, 34),
+ (3, 'LP3-SD-SN-101', 'ไดอะแกรมระบบจ่ายน้ำประปา และระบบระบายน้ำเสีย', 5, 2, 35),
+ (3, 'LP3-SD-SN-102', 'ไดอะแกรมระบบระบายน้ำฝน', 5, 2, 36),
+ (3, 'LP3-SD-SN-201', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 1 และชั้นที่ 2', 5, 2, 37),
+ (3, 'LP3-SD-SN-202', 'แปลนระบบระบายน้ำเสียและน้ำฝน ชั้นที่ 1 และชั้นที่ 2', 5, 2, 38),
+ (3, 'LP3-SD-SN-203', 'แปลนระบบระบายน้ำฝน ชั้นหลังคา', 5, 2, 39),
+ (3, 'LP3-SD-SN-204', 'แปลนระบบเระบายน้ำ ชั้นที่ 1', 5, 2, 40),
+ (3, 'LP3-SD-SN-301', 'ขยายห้องน้ำ 1', 5, 2, 41),
+ (3, 'LP3-SD-SN-302', 'ขยายห้องน้ำ 2', 5, 2, 42),
+ (3, 'LP3-SD-SN-303', 'ขยายห้องน้ำ 3', 5, 2, 43),
+ (3, 'LP3-SD-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 2, 44),
+ (3, 'LP3-SD-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 2, 45),
+ (3, 'LP3-SD-SN-403', 'อยายมาตรฐานการติดตั้งทั่วไป 3', 5, 2, 46),
+ (3, 'LP3-SD-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 2, 47),
+ (3, 'LP3-SD-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 2, 48),
+ (3, 'LP3-SD-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 2, 49),
+ (3, 'LP3-SD-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1-2', 6, 2, 50),
+ (3, 'LP3-SD-HV-202', 'แปลนระบบระบายอากาศ ชั้น 1-2', 6, 2, 51),
+ (3, 'LP3-SD-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 2, 52),
+ (3, 'LP3-SD-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 2, 53),
+ (3, 'LP3-SD-EE-001', 'สารบัญ', 7, 2, 54),
+ (3, 'LP3-SD-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 2, 55),
+ (3, 'LP3-SD-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 2, 56),
+ (3, 'LP3-SD-EE-004', 'สัญลักษณ์โคมไฟ', 7, 2, 57),
+ (3, 'LP3-SD-EE-101', 'ไดอะแกรมเชิงเดี่ยว และ ตารางโหลด', 7, 2, 58),
+ (3, 'LP3-SD-EE-102', 'ไรเซอร์ไดอะแกรม', 7, 2, 59),
+ (3, 'LP3-SD-EE-201', 'แปลน์โคมไฟ', 7, 2, 60),
+ (3, 'LP3-SD-EE-301', 'แปลนเต้ารับไฟฟ้าและคอมพิวเตอร์', 7, 2, 61),
+ (3, 'LP3-SD-EE-401', 'รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและระบบกราวด', 7, 2, 62),
+ (3, 'LP3-SD-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้', 7, 2, 63),
+ (3, 'LP3-SD-EE-601', 'แปลนอุปกรณ์กล้องโทรทัศน์วงจรปิด', 7, 2, 64),
+ (3, 'LP3-SD-EE-701', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 7, 2, 65),
+ (3, 'LP3-SD-EE-702', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 7, 2, 66),
+ (3, 'LP3-SD-EE-703', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 7, 2, 67),
+ (3, 'LP3-SD-EE-704', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 7, 2, 68),
+ (3, 'LP3-SD-EE-705', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 7, 2, 69),
+ (3, 'LP3-SD-EE-706', 'รายละเอียดการติดตั้ง แผ่นที่ 6', 7, 2, 70),
+ (3, 'LP3-SD-EE-707', 'รายละเอียดการติดตั้ง แผ่นที่ 7', 7, 2, 71),
+ (3, 'LP3-SD-EE-708', 'รายละเอียดการติดตั้ง แผ่นที่ 8', 7, 2, 72),
+ (3, 'LP3-SD-EE-709', 'รายละเอียดการติดตั้ง แผ่นที่ 9', 7, 2, 73),
+ (3, 'LP3-SD-EE-710', 'รายละเอียดการติดตั้ง แผ่นที่ 10', 7, 2, 74),
+ (3, 'LP3-BA-AR-001', 'สารบัญ', 2, 2, 1),
+ (3, 'LP3-BA-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 2, 2),
+ (3, 'LP3-BA-AR-003', 'ผังแมบททาเรือชั้นที่ 3', 2, 2, 3),
+ (3, 'LP3-BA-AR-004', 'ผังบริเวณอาคาร', 2, 2, 4),
+ (3, 'LP3-BA-AR-101', 'แปลนพื้นชั้นที่ 1 แปลนหลังคา แปลนผ้า-เพดาน', 2, 2, 5),
+ (3, 'LP3-BA-AR-201', 'รูปด้าน 1. 2. 3. 4 รูปตัด AB', 2, 2, 6),
+ (3, 'LP3-BA-AR-501', 'ขยายห้องน้ำชาย-หญิง TL-01', 2, 2, 7),
+ (3, 'LP3-BA-AR-502', 'ตารางสุขภัณฑ์', 2, 2, 8),
+ (3, 'LP3-BA-AR-601', 'ขยายประตู-หน้าต่าง', 2, 2, 9),
+ (3, 'LP3-BA-AR-602', 'ตารางรายการวัสดุประตู-หน้าต่าง', 2, 2, 10),
+ (3, 'LP3-BA-ID-001', 'สารบัญ', 3, 2, 11),
+ (3, 'LP3-BA-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 2, 12),
+ (3, 'LP3-BA-ID-102', 'แปลนแสดงตำแหน่งบ้าย ชั้น 1', 3, 2, 13),
+ (3, 'LP3-BA-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 2, 14),
+ (3, 'LP3-BA-ST-002', 'ข้อกำหนดทั่วไป', 4, 2, 15),
+ (3, 'LP3-BA-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 2, 16),
+ (3, 'LP3-BA-ST-011', 'ผังแสดงน้ำหนักบรรทุก', 4, 2, 17),
+ (3, 'LP3-BA-ST-101', 'ผังโครงสร้างฐานราก ตอม่อ, ชั้น 1, หลังคา', 4, 2, 18),
+ (3, 'LP3-BA-ST-111', 'รูปตัด A', 4, 2, 19),
+ (3, 'LP3-BA-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่', 4, 2, 20),
+ (3, 'LP3-BA-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 2, 21),
+ (3, 'LP3-BA-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 2, 22),
+ (3, 'LP3-BA-ST-204', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 4', 4, 2, 23),
+ (3, 'LP3-BA-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 2, 24),
+ (3, 'LP3-BA-SN-002', 'ตารางแสดงรายการประกอบ', 5, 2, 25),
+ (3, 'LP3-BA-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 2, 26),
+ (3, 'LP3-BA-SN-201', 'แปลนระบบสุขาภิบาล', 5, 2, 27),
+ (3, 'LP3-BA-SN-301', 'ขยายห้องน้ำ', 5, 2, 28),
+ (3, 'LP3-BA-SN-401', 'สบายมาตรฐานการติดตั้งทั่วไป 1', 5, 2, 29),
+ (3, 'LP3-BA-SN-402', 'สบายมาตรฐานการติดตั้งทั่วไป 2', 5, 2, 30),
+ (3, 'LP3-BA-SN-403', 'สบายมาตรฐานการติดตั้งทั่วไป 3', 5, 2, 31),
+ (3, 'LP3-BA-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 2, 32),
+ (3, 'LP3-BA-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 2, 33),
+ (3, 'LP3-BA-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 2, 34),
+ (3, 'LP3-BA-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1', 6, 2, 35),
+ (3, 'LP3-BA-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 2, 36),
+ (3, 'LP3-BA-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 2, 37),
+ (3, 'LP3-BA-EE-001', 'สารบัญ', 7, 2, 38),
+ (3, 'LP3-BA-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 2, 39),
+ (3, 'LP3-BA-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 2, 40),
+ (3, 'LP3-BA-EE-004', 'สัญลักษณ์โคมไฟ', 7, 2, 41),
+ (3, 'LP3-BA-EE-101', 'ตารางเหลดไฟฟ้า และ ไรเซอร์ไดอะแกรม', 7, 2, 42),
+ (3, 'LP3-BA-EE-201', 'แปลน์โคมไฟ/เฝ้ารับไฟฟ้า/โทรศัพท์/คอมพิวเตอร์/กล้องโทรทัศน์วงจรปิด', 7, 2, 43),
+ (3, 'LP3-BA-EE-401', 'แปลนแจ้งเหตุเพลิงไหม้/รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและระบบกราวด', 7, 2, 44),
+ (3, 'LP3-BA-EE-701', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 7, 2, 45),
+ (3, 'LP3-BA-EE-702', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 7, 2, 46),
+ (3, 'LP3-BA-EE-703', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 7, 2, 47),
+ (3, 'LP3-BA-EE-704', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 7, 2, 48),
+ (3, 'LP3-BA-EE-705', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 7, 2, 49),
+ (3, 'LP3-CO-AR-001', 'สารบัญ', 2, 2, 1),
+ (3, 'LP3-CO-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 2, 2),
+ (3, 'LP3-CO-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 2, 3),
+ (3, 'LP3-CO-AR-004', 'ผังบริเวณอาคาร', 2, 2, 4),
+ (3, 'LP3-CO-AR-101', 'แปลนพื้นชั้นที่ 1, แปลนพื้นชั้นที 2, แปลนพื้นชั้นที 3, แปลนพื้นชั้นที 4', 2, 2, 5),
+ (3, 'LP3-CO-AR-102', 'แปลนหลังคา', 2, 2, 6),
+ (3, 'LP3-CO-AR-201', 'รูปด้าน 1, รูปด้าน 2', 2, 2, 7),
+ (3, 'LP3-CO-AR-202', 'รูปด้าน 3, รูปด้าน 4', 2, 2, 8),
+ (3, 'LP3-CO-AR-301', 'รูปตัด A, B', 2, 2, 9),
+ (3, 'LP3-CO-AR-401', 'อยายบันได ST-1, ขยาย DE-1', 2, 2, 10),
+ (3, 'LP3-CO-AR-501', 'ขยายห้องน้ำ TL-1, รายการเครื่องสุขภัณฑ์', 2, 2, 11),
+ (3, 'LP3-CO-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 2, 12),
+ (3, 'LP3-CO-AR-602', 'แปลนผ้า-เพดาน', 2, 2, 13),
+ (3, 'LP3-CO-ID-001', 'สารบัญ', 3, 2, 14),
+ (3, 'LP3-CO-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้นล่าง,2,3,4,5', 3, 2, 15),
+ (3, 'LP3-CO-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้นล่าง,2,3,4,5', 3, 2, 16),
+ (3, 'LP3-CO-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 2, 17),
+ (3, 'LP3-CO-ST-002', 'ข้อกำหนดทั่วไป', 4, 2, 18),
+ (3, 'LP3-CO-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 2, 19),
+ (3, 'LP3-CO-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 2, 20),
+ (3, 'LP3-CO-ST-101', 'ผังฐานราก และ ตอม่อ ผังโครงสร้าง', 4, 2, 21),
+ (3, 'LP3-CO-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 2, 22),
+ (3, 'LP3-CO-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 2, 23),
+ (3, 'LP3-CO-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 2, 24),
+ (3, 'LP3-CO-ST-204', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 4', 4, 2, 25),
+ (3, 'LP3-CO-SN-001', 'สารบัญ สัญลัยษณ์ และอักษรย่อ', 5, 2, 26),
+ (3, 'LP3-CO-SN-002', 'ตารางแสดงรายการประกอบ', 5, 2, 27),
+ (3, 'LP3-CO-SN-101', 'ไดอะแกรมระบบจ่ายน้ำประปา และระบบระบายน้ำเสีย', 5, 2, 28),
+ (3, 'LP3-CO-SN-102', 'ไดอะแกรมระบบระบายน้ำฝน', 5, 2, 29),
+ (3, 'LP3-CO-SN-201', 'แปลนระบบสุขาภิบาล', 5, 2, 30),
+ (3, 'LP3-CO-SN-301', 'ขยายห้องน้ำ', 5, 2, 31),
+ (3, 'LP3-CO-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 2, 32),
+ (3, 'LP3-CO-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 2, 33),
+ (3, 'LP3-CO-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 2, 34),
+ (3, 'LP3-CO-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 2, 35),
+ (3, 'LP3-CO-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 2, 36),
+ (3, 'LP3-CO-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1-5', 6, 2, 37),
+ (3, 'LP3-CO-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 2, 38),
+ (3, 'LP3-CO-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 2, 39),
+ (3, 'LP3-CO-EE-001', 'สารบัญ', 7, 2, 40),
+ (3, 'LP3-CO-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 2, 41),
+ (3, 'LP3-CO-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 2, 42),
+ (3, 'LP3-CO-EE-004', 'สัญลักษณ์ตารางโคม', 7, 2, 43),
+ (3, 'LP3-CO-EE-101', 'SINGLE LINE DIAGRAM/ตารางโหลดไฟฟ้า', 7, 2, 44),
+ (3, 'LP3-CO-EE-102', 'ไรเซอร์ไดอะแกรมระบบสื่อสาร', 7, 2, 45),
+ (3, 'LP3-CO-EE-201', 'แปลนโคมไฟชั้นล่าง – ชั้นที่ 5', 7, 2, 46),
+ (3, 'LP3-CO-EE-301', 'แปลนเต้ารับไฟฟ้า/โทรศัพท์/คอมพิวเตอร์ชั้นล่าง – ชั้นที่ 5', 7, 2, 47),
+ (3, 'LP3-CO-EE-401', 'รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและกราวด์และชายละเอียดการติดตั้งระบบโทรทัศน์ว', 7, 2, 48),
+ (3, 'LP3-CO-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ชั้นล่าง – ชั้นที่ 5', 7, 2, 49),
+ (3, 'LP3-CO-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 2, 50),
+ (3, 'LP3-CO-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 2, 51),
+ (3, 'LP3-CO-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 2, 52),
+ (3, 'LP3-CO-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 2, 53),
+ (3, 'LP3-CO-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 2, 54),
+ (3, 'LP3-CO-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 2, 55),
+ (3, 'LP3-CO-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7', 7, 2, 56),
+ (3, 'LP3-TM-AR-001', 'สารบัญ', 2, 3, 1),
+ (3, 'LP3-TM-AR-002', 'สัญลักษณ์ประกอบ ตารางวัสดุประกอบ', 2, 3, 2),
+ (3, 'LP3-TM-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 3, 3),
+ (3, 'LP3-TM-AR-004', 'ผังบริเวณอาคาร', 2, 3, 4),
+ (3, 'LP3-TM-AR-101', 'แปลนพื้นชั้นล่าง', 2, 3, 5),
+ (3, 'LP3-TM-AR-102', 'แปลนหลังคา', 2, 3, 6),
+ (3, 'LP3-TM-AR-201', 'รูปด้าน 1.2', 2, 3, 7),
+ (3, 'LP3-TM-AR-202', 'รูปด้าน 3.4', 2, 3, 8),
+ (3, 'LP3-TM-AR-301', 'รูปตัด AB', 2, 3, 9),
+ (3, 'LP3-TM-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 3, 10),
+ (3, 'LP3-TM-AR-701', 'ขยายตู้ตรวจสอบ', 2, 3, 11),
+ (3, 'LP3-TM-ID-001', 'สารบัญ', 3, 3, 12),
+ (3, 'LP3-TM-ID-101', 'แปลนแสดงงานครุภัณฑ์', 3, 3, 13),
+ (3, 'LP3-TM-ID-102', 'แปลนแสดงตำแหน่งป้าย', 3, 3, 14),
+ (3, 'LP3-TM-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 3, 15),
+ (3, 'LP3-TM-ST-002', 'ข้อกำหนดทั่วไป', 4, 3, 16),
+ (3, 'LP3-TM-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 3, 17),
+ (3, 'LP3-TM-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 3, 18),
+ (3, 'LP3-TM-ST-101', 'ฝังฐานราก และ ตอมอ', 4, 3, 19),
+ (3, 'LP3-TM-ST-102', 'ผังโครงสร้างชั้น 1', 4, 3, 20),
+ (3, 'LP3-TM-ST-103', 'ผังโครงสร้างโครงหลังคา', 4, 3, 21),
+ (3, 'LP3-TM-ST-111', 'รูปตัด A-A, B-B', 4, 3, 22),
+ (3, 'LP3-TM-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 3, 23),
+ (3, 'LP3-TM-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 3, 24),
+ (3, 'LP3-TM-SN-002', 'ตารางแสดงรายการประกอบ', 5, 3, 25),
+ (3, 'LP3-TM-SN-101', 'ไดอะแกรมระบบระบายน้ำผน', 5, 3, 26),
+ (3, 'LP3-TM-SN-201', 'แปลนระบบระบายน้ำฝน ชิ้นที่ 1', 5, 3, 27),
+ (3, 'LP3-TM-SN-202', 'แปลนระบบระบายน้ำฝน ชั้นหลังคา', 5, 3, 28),
+ (3, 'LP3-TM-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป', 5, 3, 29),
+ (3, 'LP3-TM-HV-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 6, 3, 30),
+ (3, 'LP3-TM-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 3, 31),
+ (3, 'LP3-TM-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 3, 32),
+ (3, 'LP3-TM-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1', 6, 3, 33),
+ (3, 'LP3-TM-HV-202', 'แปลนระบบระบายอากาศ ชั้น 1', 6, 3, 34),
+ (3, 'LP3-TM-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 3, 35),
+ (3, 'LP3-TM-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 3, 36),
+ (3, 'LP3-TM-EE-001', 'สารบัญ', 7, 3, 37),
+ (3, 'LP3-TM-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 3, 38),
+ (3, 'LP3-TM-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 3, 39),
+ (3, 'LP3-TM-EE-004', 'สัญลักษณ์ตารางโคม', 7, 3, 40),
+ (3, 'LP3-TM-EE-101', 'ไรเซอร์ไดอะแกรมระบบสื่อสารและตารางใหลดไฟฟ้า', 7, 3, 41),
+ (3, 'LP3-TM-EE-201', 'แปลน์โคมไฟ', 7, 3, 42),
+ (3, 'LP3-TM-EE-301', 'แปลนเต้ารับไฟฟ้า โทรศัพท์และคอมพิวเตอร์', 7, 3, 43),
+ (3, 'LP3-TM-EE-401', 'แปลนระบบป้องกันฟ้าผ่าและกราวด', 7, 3, 44),
+ (3, 'LP3-TM-EE-501', 'แปลนกล้องโทรทัศน์วงจรปิด', 7, 3, 45),
+ (3, 'LP3-TM-EE-601', 'แปลนเสียงประกาศ', 7, 3, 46),
+ (3, 'LP3-TM-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 3, 47),
+ (3, 'LP3-TM-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 3, 48),
+ (3, 'LP3-TM-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 3, 49),
+ (3, 'LP3-TM-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 3, 50),
+ (3, 'LP3-TM-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 3, 51),
+ (3, 'LP3-TM-EE-706', 'รายละเอียดการติดตั้งแผนที่ 6', 7, 3, 52),
+ (3, 'LP3-TO-AR-001', 'สารบัญ', 2, 3, 1),
+ (3, 'LP3-TO-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 3, 2),
+ (3, 'LP3-TO-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 3, 3),
+ (3, 'LP3-TO-AR-004', 'ผังบริเวณอาคาร', 2, 3, 4),
+ (3, 'LP3-TO-AR-101', 'แปลนพื้นชั้นที่ 1. แปลนถังน้ำใต้ดิน', 2, 3, 5),
+ (3, 'LP3-TO-AR-102', 'แปลนพื้นชั้นที่ 2', 2, 3, 6),
+ (3, 'LP3-TO-AR-103', 'แปลนพื้นชั้นที่ 3', 2, 3, 7),
+ (3, 'LP3-TO-AR-104', 'แปลนพื้นชั้นที่ 4', 2, 3, 8),
+ (3, 'LP3-TO-AR-105', 'แปลนพื้นชั้นที่ 5', 2, 3, 9),
+ (3, 'LP3-TO-AR-106', 'แปลนหลังคา', 2, 3, 10),
+ (3, 'LP3-TO-AR-201', 'รูปด้าน 1', 2, 3, 11),
+ (3, 'LP3-TO-AR-202', 'รูปด้าน 2', 2, 3, 12),
+ (3, 'LP3-TO-AR-203', 'รูปด้าน 3', 2, 3, 13),
+ (3, 'LP3-TO-AR-204', 'รูปด้าน 4', 2, 3, 14),
+ (3, 'LP3-TO-AR-301', 'รูปตัด A', 2, 3, 15),
+ (3, 'LP3-TO-AR-302', 'รูปตัด B', 2, 3, 16),
+ (3, 'LP3-TO-AR-303', 'รูปตัด C', 2, 3, 17),
+ (3, 'LP3-TO-AR-401', 'ขยายบันได ST-1, RM-1', 2, 3, 18),
+ (3, 'LP3-TO-AR-402', 'ขยายรูปตัดบันได ST-1', 2, 3, 19),
+ (3, 'LP3-TO-AR-403', 'อยายบันได ST-2', 2, 3, 20),
+ (3, 'LP3-TO-AR-404', 'ขยายบันได ST-3,ST-4', 2, 3, 21),
+ (3, 'LP3-TO-AR-405', 'ยายบันได ST-5, ขยายบันไดเหล็ก', 2, 3, 22),
+ (3, 'LP3-TO-AR-406', 'อยายบันไดลงถังน้ำใต้ดิน', 2, 3, 23),
+ (3, 'LP3-TO-AR-501', 'ขยายห้องน้ำ 1.2.3 และห้อง JANITOR 1', 2, 3, 24),
+ (3, 'LP3-TO-AR-502', 'ขยายห้องน้ำ 4.5,6,7 และท้อง JANITOR 2,3', 2, 3, 25),
+ (3, 'LP3-TO-AR-503', 'ตารางสุขภัณฑ์', 2, 3, 26),
+ (3, 'LP3-TO-AR-601', 'ขยายประตู-หน้าต่าง 1/3', 2, 3, 27),
+ (3, 'LP3-TO-AR-602', 'ขยายประตู-หนาตาง 2/3', 2, 3, 28),
+ (3, 'LP3-TO-AR-603', 'ขยายประตู-หน้าตาง 3/3', 2, 3, 29),
+ (3, 'LP3-TO-AR-604', 'ตารางรายการวัสดุประตู-หน้าตาง', 2, 3, 30),
+ (3, 'LP3-TO-AR-701', 'ขยายกันสาดด้านข้าง', 2, 3, 31),
+ (3, 'LP3-TO-AR-702', 'ขยายประตูรั้ว์โครงการ ขยายขอบคันหิน', 2, 3, 32),
+ (3, 'LP3-TO-AR-801', 'แปลนผ้า-เพดานชั้นที่ 1', 2, 3, 33),
+ (3, 'LP3-TO-AR-802', 'แปลนผ้า-เพดานชั้นที่ 2', 2, 3, 34),
+ (3, 'LP3-TO-AR-803', 'แปลนผ้า-เพดานชิ้นที่', 2, 3, 35),
+ (3, 'LP3-TO-AR-804', 'แปลนผ้า-เพดานชั้นที่ 4', 2, 3, 36),
+ (3, 'LP3-TO-AR-805', 'แปลนผ้า-เพดานชิ้นที่ 5', 2, 3, 37),
+ (3, 'LP3-TO-ID-001', 'สารบัญ', 3, 3, 38),
+ (3, 'LP3-TO-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 3, 39),
+ (3, 'LP3-TO-ID-102', 'แปลนแสดงงานครุภัณฑ์ ชั้น 2', 3, 3, 40),
+ (3, 'LP3-TO-ID-103', 'แปลนแสดงงานครุภัณฑ์ ชั้น 3', 3, 3, 41),
+ (3, 'LP3-TO-ID-104', 'แปลนแสดงงานครุภัณฑ์ ชั้น 4', 3, 3, 42),
+ (3, 'LP3-TO-ID-105', 'แปลนแสดงงานครุภัณฑ์ ชั้น 5', 3, 3, 43),
+ (3, 'LP3-TO-ID-106', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 3, 44),
+ (3, 'LP3-TO-ID-107', 'แปลนแสดงตำแหน่งป้าย ชั้น 2', 3, 3, 45),
+ (3, 'LP3-TO-ID-108', 'แปลนแสดงตำแหน่งป้าย ชั้น 3', 3, 3, 46),
+ (3, 'LP3-TO-ID-109', 'แปลนแสดงตำแหน่งป้าย ชั้น 4', 3, 3, 47),
+ (3, 'LP3-TO-ID-110', 'แปลนแสดงตำแหน่งป้าย ชั้น 5', 3, 3, 48),
+ (3, 'LP3-TO-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 3, 49),
+ (3, 'LP3-TO-ST-002', 'ข้อกำหนดทั่วไป', 4, 3, 50),
+ (3, 'LP3-TO-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร ชั้น 1', 4, 3, 51),
+ (3, 'LP3-TO-ST-012', 'ผังแสดงน้ำหนักบรรทุกจร ชั้น 2', 4, 3, 52),
+ (3, 'LP3-TO-ST-013', 'ผังแสดงน้ำหนักบรรทุกจร ชั้น 3', 4, 3, 53),
+ (3, 'LP3-TO-ST-014', 'ผังแสดงน้ำหนักบรรทุกจร ชั้น 4', 4, 3, 54),
+ (3, 'LP3-TO-ST-015', 'ผังแสดงน้ำหนักบรรทุกจร ชั้น 5', 4, 3, 55),
+ (3, 'LP3-TO-ST-016', 'ผังแสดงน้ำหนักบรรทุกจร ชั้นอะเส', 4, 3, 56),
+ (3, 'LP3-TO-ST-101', 'ผังฐานราก และ ตอมอ', 4, 3, 57),
+ (3, 'LP3-TO-ST-102', 'ผังโครงสร้างชั้น 1', 4, 3, 58),
+ (3, 'LP3-TO-ST-103', 'ผังโครงสร้างชั้น 2', 4, 3, 59),
+ (3, 'LP3-TO-ST-104', 'ผังโครงสร้างชั้น 3', 4, 3, 60),
+ (3, 'LP3-TO-ST-105', 'ผังโครงสร้างชั้น 4', 4, 3, 61),
+ (3, 'LP3-TO-ST-106', 'ผังโครงสร้างชั้น 5', 4, 3, 62),
+ (3, 'LP3-TO-ST-107', 'ผังโครงสร้างชั้นอะเส', 4, 3, 63),
+ (3, 'LP3-TO-ST-108', 'ผังโครงสร้างชั้นหลังคา', 4, 3, 64),
+ (3, 'LP3-TO-ST-121', 'ผังแสดงเหล็กเสริม FLAT SLAB ชั้น 2', 4, 3, 65),
+ (3, 'LP3-TO-ST-122', 'ผังแสดงเหล็กเสริม FLAT SLAB ชั้น 3', 4, 3, 66),
+ (3, 'LP3-TO-ST-123', 'ผังแสดงเหล็กเสริม FLAT SLAB ชั้น 4', 4, 3, 67),
+ (3, 'LP3-TO-ST-124', 'ผังแสดงเหล็กเสริม FLAT SLAB ชั้น 5', 4, 3, 68),
+ (3, 'LP3-TO-ST-201', 'ขยายฐานราก แผ่นที่ 1', 4, 3, 69),
+ (3, 'LP3-TO-ST-202', 'สยายฐานราก แผนที่ 2', 4, 3, 70),
+ (3, 'LP3-TO-ST-203', 'ขยายฐานราก แผนที่ 3', 4, 3, 71),
+ (3, 'LP3-TO-ST-204', 'ขยายฐานราก แผนที่ 4', 4, 3, 72),
+ (3, 'LP3-TO-ST-205', 'ขยายฐานราก แผ่นที่ 5', 4, 3, 73),
+ (3, 'LP3-TO-ST-211', 'ขยายเสา', 4, 3, 74),
+ (3, 'LP3-TO-ST-221', 'ขยายคาน แผนที 1', 4, 3, 75),
+ (3, 'LP3-TO-ST-222', 'ขยายคาน แผนที 2', 4, 3, 76),
+ (3, 'LP3-TO-ST-223', 'ขยายคาน แผนที่ 3', 4, 3, 77),
+ (3, 'LP3-TO-ST-224', 'ขยายคาน แผนที่ 4', 4, 3, 78),
+ (3, 'LP3-TO-ST-225', 'ขยายคาน แผ่นที่ 5', 4, 3, 79),
+ (3, 'LP3-TO-ST-226', 'ขยายคาน แผนที่ 6', 4, 3, 80),
+ (3, 'LP3-TO-ST-231', 'อยายพื้น', 4, 3, 81),
+ (3, 'LP3-TO-ST-241', 'ขยายบันได, ทางลาด', 4, 3, 82),
+ (3, 'LP3-TO-ST-251', 'ขยายกำแพง CWI แผ่นที่ 1', 4, 3, 83),
+ (3, 'LP3-TO-ST-252', 'ขยายกำแพง CWI แผนที่ 2', 4, 3, 84),
+ (3, 'LP3-TO-ST-253', 'ขยายกำแพง CW2 แผนที่ 1', 4, 3, 85),
+ (3, 'LP3-TO-ST-254', 'ขยายกำแพง CW2 แผนที่ 2', 4, 3, 86),
+ (3, 'LP3-TO-ST-261', 'ขยาย WATER TANK', 4, 3, 87),
+ (3, 'LP3-TO-ST-301', 'ขยาย CANOPY', 4, 3, 88),
+ (3, 'LP3-TO-ST-311', 'CONNECTION DETAIL', 4, 3, 89),
+ (3, 'LP3-TO-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 3, 90),
+ (3, 'LP3-TO-SN-002', 'ตารางแสดงรายการประกอบ', 5, 3, 91),
+ (3, 'LP3-TO-SN-101', 'ไดอะแกรมระบบจ่ายน้ำประปาและดับเพลิง', 5, 3, 92),
+ (3, 'LP3-TO-SN-102', 'ไดอะแกรมระบบระบายน้ำเสีย', 5, 3, 93),
+ (3, 'LP3-TO-SN-103', 'ไดอะแกรมระบบระบายน้ำฝน', 5, 3, 94),
+ (3, 'LP3-TO-SN-201', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 1', 5, 3, 95),
+ (3, 'LP3-TO-SN-202', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 2', 5, 3, 96),
+ (3, 'LP3-TO-SN-203', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 3', 5, 3, 97),
+ (3, 'LP3-TO-SN-204', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 4', 5, 3, 98),
+ (3, 'LP3-TO-SN-205', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 5', 5, 3, 99),
+ (3, 'LP3-TO-SN-206', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นที่ 1', 5, 3, 100),
+ (3, 'LP3-TO-SN-207', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นที่ 2', 5, 3, 101),
+ (3, 'LP3-TO-SN-208', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นที่ 3', 5, 3, 102),
+ (3, 'LP3-TO-SN-209', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นที่ 4', 5, 3, 103),
+ (3, 'LP3-TO-SN-210', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นที่ 5', 5, 3, 104),
+ (3, 'LP3-TO-SN-211', 'แปลนระบบระบายน้ำเสีย และน้ำฝน ชั้นหลังคา', 5, 3, 105),
+ (3, 'LP3-TO-SN-212', 'ผังบริเวณระบบระบายน้ำ', 5, 3, 106),
+ (3, 'LP3-TO-SN-301', 'ขยายห้องน้ำ 1', 5, 3, 107),
+ (3, 'LP3-TO-SN-302', 'ขยายห้องน้ำ 2', 5, 3, 108),
+ (3, 'LP3-TO-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 3, 109),
+ (3, 'LP3-TO-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 3, 110),
+ (3, 'LP3-TO-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 3, 111),
+ (3, 'LP3-TO-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 3, 112),
+ (3, 'LP3-TO-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 3, 113),
+ (3, 'LP3-TO-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 3, 114),
+ (3, 'LP3-TO-HV-103', 'ไดอะแกรมท่อน้ำยา 1/3', 6, 3, 115),
+ (3, 'LP3-TO-HV-104', 'ไดอะแกรมท่อน้ำยา 2/3', 6, 3, 116),
+ (3, 'LP3-TO-HV-105', 'ไดอะแกรมท่อน้ำยา 3/3', 6, 3, 117),
+ (3, 'LP3-TO-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1', 6, 3, 118),
+ (3, 'LP3-TO-HV-202', 'แปลนระบบปรับอากาศ ชั้น 2', 6, 3, 119),
+ (3, 'LP3-TO-HV-203', 'แปลนระบบปรับอากาศ ชั้น 3', 6, 3, 120),
+ (3, 'LP3-TO-HV-204', 'แปลนระบบปรับอากาศ ชั้น 4', 6, 3, 121),
+ (3, 'LP3-TO-HV-205', 'แปลนระบบปรับอากาศ ชั้น 5', 6, 3, 122),
+ (3, 'LP3-TO-HV-206', 'แปลนระบบระบายอากาศ ชั้น 1', 6, 3, 123),
+ (3, 'LP3-TO-HV-207', 'แปลนระบบระบายอากาศ ชั้น 2', 6, 3, 124),
+ (3, 'LP3-TO-HV-208', 'แปลนระบบระบายอากาศ ชั้น 3', 6, 3, 125),
+ (3, 'LP3-TO-HV-209', 'แปลนระบบระบายอากาศ ชั้น 4', 6, 3, 126),
+ (3, 'LP3-TO-HV-210', 'แปลนระบบระบายอากาศ ชิ้น 5', 6, 3, 127),
+ (3, 'LP3-TO-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 3, 128),
+ (3, 'LP3-TO-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 3, 129),
+ (3, 'LP3-TO-EE-001', 'สารบัญ', 7, 3, 130),
+ (3, 'LP3-TO-EE-002', 'สัญลักษณ์ระบบไฟฟ้า', 7, 3, 131),
+ (3, 'LP3-TO-EE-003', 'สัญลักษณ์ระบบสื่อสาร', 7, 3, 132),
+ (3, 'LP3-TO-EE-004', 'สัญลักษณ์โคมไฟ', 7, 3, 133),
+ (3, 'LP3-TO-EE-101', 'LV SINGLE LINE', 7, 3, 134),
+ (3, 'LP3-TO-EE-102', 'ไรเซอร์ไดอะแกรมอุปกรณ์แจ้งเหตุเพลิงไหม้', 7, 3, 135),
+ (3, 'LP3-TO-EE-103', 'ไรเชอร์ไดอะแกรมระบบโทรศัพท์และระบบคอมพิวเตอร์', 7, 3, 136),
+ (3, 'LP3-TO-EE-104', 'ไรเซอร์ไดอะแกรมระบบกล้องโทรทัศน์วงจรปิดและระบบควบคุมการเข้าออกอาคาร', 7, 3, 137),
+ (3, 'LP3-TO-EE-105', 'ไรเซอร์ไดอะแกรมระบบเสียงประกาศสาธารณะ', 7, 3, 138),
+ (3, 'LP3-TO-EE-106', 'ตารางโหลดไฟฟ้า แผ่นที่ 1', 7, 3, 139),
+ (3, 'LP3-TO-EE-107', 'ตารางโหลดไฟฟ้า แผ่นที่ 2', 7, 3, 140),
+ (3, 'LP3-TO-EE-201', 'แปลน์โคมไฟ ชั้นที่ 1', 7, 3, 141),
+ (3, 'LP3-TO-EE-202', 'แปลน์โคมไฟ ชั้นที่ 2', 7, 3, 142),
+ (3, 'LP3-TO-EE-203', 'แปลนโคมไฟ ชั้นที่ 3', 7, 3, 143),
+ (3, 'LP3-TO-EE-204', 'แปลนโคมไฟ ชั้นที่ 4', 7, 3, 144),
+ (3, 'LP3-TO-EE-205', 'แปลน์โคมไฟ ชิ้นที่ 5', 7, 3, 145),
+ (3, 'LP3-TO-EE-301', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์ ชั้นที่ 1', 7, 3, 146),
+ (3, 'LP3-TO-EE-302', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์ ชั้นที่ 2', 7, 3, 147),
+ (3, 'LP3-TO-EE-303', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์ ชั้นที่ 3', 7, 3, 148),
+ (3, 'LP3-TO-EE-304', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์ ชั้นที่ 4', 7, 3, 149),
+ (3, 'LP3-TO-EE-305', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์ ชั้นที่ 5', 7, 3, 150),
+ (3, 'LP3-TO-EE-401', 'รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและระบบกราวด์', 7, 3, 151),
+ (3, 'LP3-TO-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 1', 7, 3, 152),
+ (3, 'LP3-TO-EE-502', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 2', 7, 3, 153),
+ (3, 'LP3-TO-EE-503', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 3', 7, 3, 154),
+ (3, 'LP3-TO-EE-504', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 4', 7, 3, 155),
+ (3, 'LP3-TO-EE-505', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 5', 7, 3, 156),
+ (3, 'LP3-TO-EE-601', 'รายละเอียดการติดตั้งระบบกล้องโทรทัศน์วงจรปิดและระบบเสียงประกาศสาธารณะ ชิ้นที่ 1', 7, 3, 157),
+ (3, 'LP3-TO-EE-602', 'รายละเอียดการติดตั้งระบบกล้องโทรทัศน์วงจรปิดและระบบเสียงประกาศสาธารณะ ชิ้นที่ 2', 7, 3, 158),
+ (3, 'LP3-TO-EE-603', 'รายละเอียดการติดตั้งระบบกล้องโทรทัศน์วงจรปิดและระบบเสียงประกาศลาธารณะ ฮันที่ 3', 7, 3, 159),
+ (3, 'LP3-TO-EE-604', 'รายละเอียดการติดตั้งระบบกล้องโทรทัศน์วงจรปิดและระบบเสียงประกาศสาธารณะ ชิ้นที่ 4', 7, 3, 160),
+ (3, 'LP3-TO-EE-605', 'รายละเอียดการติดตั้งระบบกล้องโทรทัศน์วงจรปิดและระบบเสียงประกาศสาธารณะ ฮันที่ 5', 7, 3, 161),
+ (3, 'LP3-TO-EE-701', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 1', 7, 3, 162),
+ (3, 'LP3-TO-EE-702', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 2', 7, 3, 163),
+ (3, 'LP3-TO-EE-703', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 3', 7, 3, 164),
+ (3, 'LP3-TO-EE-704', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 4', 7, 3, 165),
+ (3, 'LP3-TO-EE-705', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 5', 7, 3, 166),
+ (3, 'LP3-TO-EE-706', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 6', 7, 3, 167),
+ (3, 'LP3-TO-EE-707', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 7', 7, 3, 168),
+ (3, 'LP3-TO-EE-708', 'รายละเอียดการติดตั้งทั่วไปแผ่นที่ 8', 7, 3, 169),
+ (3, 'LP3-TO-EE-709', 'รายละเอียดการติดตั้งทั่วไปแผนที่ 9', 7, 3, 170),
+ (3, 'LP3-WO-AR-001', 'สารบัญ', 2, 3, 1),
+ (3, 'LP3-WO-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 3, 2),
+ (3, 'LP3-WO-AR-003', 'ผังแม่บททาเรือชั้นที่ 3', 2, 3, 3),
+ (3, 'LP3-WO-AR-004', 'ผังบริเวณอาคาร', 2, 3, 4),
+ (3, 'LP3-WO-AR-101', 'แปลนพื้นชั้นล่าง ลยายรางระบายน้ำ DE-1, ขยายกันชน DE-2', 2, 3, 5),
+ (3, 'LP3-WO-AR-102', 'แปลนหลังคา', 2, 3, 6),
+ (3, 'LP3-WO-AR-201', 'รูปด้าน 1, รูปด้าน 2, ลยายกันชน DE-2', 2, 3, 7),
+ (3, 'LP3-WO-AR-202', 'รูปด้าน 3, รูปด้าน 4', 2, 3, 8),
+ (3, 'LP3-WO-AR-301', 'รูปตัด A, รูปตัด B, สยายรางระบายน้ำ DE-3, DE-4', 2, 3, 9),
+ (3, 'LP3-WO-AR-401', 'ขยาย บันได ST-01', 2, 3, 10),
+ (3, 'LP3-WO-AR-501', 'ขยายห้องน้ำ L-01', 2, 3, 11),
+ (3, 'LP3-WO-AR-502', 'รายการมาตราฐานงานสุขภัณฑ์', 2, 3, 12),
+ (3, 'LP3-WO-AR-604', 'ขยายประตู-หน้าต่าง 1/2', 2, 3, 13),
+ (3, 'LP3-WO-AR-602', 'ลยายประตู-หน้าต่าง 2/2', 2, 3, 14),
+ (3, 'LP3-WO-AR-603', 'ตารางรายการวัสดุประตู-หน้าต่าง', 2, 3, 15),
+ (3, 'LP3-WO-ID-001', 'สารบัญ', 3, 3, 16),
+ (3, 'LP3-WO-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 3, 17),
+ (3, 'LP3-WO-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 3, 18),
+ (3, 'LP3-WO-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 3, 19),
+ (3, 'LP3-WO-ST-002', 'ข้อกำหนดทั่วไป', 4, 3, 20),
+ (3, 'LP3-WO-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 3, 21),
+ (3, 'LP3-WO-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 3, 22),
+ (3, 'LP3-WO-ST-101', 'ผังฐานราก และ ตอม่อ', 4, 3, 23),
+ (3, 'LP3-WO-ST-102', 'ผังโครงสร้างชั้น 1', 4, 3, 24),
+ (3, 'LP3-WO-ST-103', 'ผังโครงสร้าง ระดับ +4.20', 4, 3, 25),
+ (3, 'LP3-WO-ST-104', 'ผังโครงสร้างหลังคา', 4, 3, 26),
+ (3, 'LP3-WO-ST-105', 'ผังโครงสร้างโครงหลังคา', 4, 3, 27),
+ (3, 'LP3-WO-ST-111', 'รูปตัด 1, รูปตัด 2', 4, 3, 28),
+ (3, 'LP3-WO-ST-112', 'รูปตัด 3, รูปตัด 4', 4, 3, 29),
+ (3, 'LP3-WO-ST-121', 'รูปด้าน 1, รูปด้าน 3', 4, 3, 30),
+ (3, 'LP3-WO-ST-122', 'วูบด้าน 2, รูปด้าน 4', 4, 3, 31),
+ (3, 'LP3-WO-ST-201', 'สยายรายละเอียดงานโครงสร้าง แผ่นที่', 4, 3, 32),
+ (3, 'LP3-WO-ST-202', 'สยายรายละเอียคราบโครงสร้าง แผ่นที่ 2', 4, 3, 33),
+ (3, 'LP3-WO-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 3, 34),
+ (3, 'LP3-WO-ST-204', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 4', 4, 3, 35),
+ (3, 'LP3-WO-ST-205', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 5', 4, 3, 36),
+ (3, 'LP3-WO-ST-206', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 6', 4, 3, 37),
+ (3, 'LP3-WO-ST-207', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 7', 4, 3, 38),
+ (3, 'LP3-WO-ST-208', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 8', 4, 3, 39),
+ (3, 'LP3-WO-ST-209', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 9', 4, 3, 40),
+ (3, 'LP3-WO-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 3, 41),
+ (3, 'LP3-WO-SN-002', 'ตารางแสดงรายการประกอบ', 5, 3, 42),
+ (3, 'LP3-WO-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 3, 43),
+ (3, 'LP3-WO-SN-201', 'แปลนระบบจายน้ำประปา ชั้นที 1', 5, 3, 44),
+ (3, 'LP3-WO-SN-202', 'แปลนระบบระบายน้ำเสีย ชั้นที่ 1', 5, 3, 45),
+ (3, 'LP3-WO-SN-203', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1', 5, 3, 46),
+ (3, 'LP3-WO-SN-204', 'แปลนระบบระบายน้ำฝน ชั้นหลังคา', 5, 3, 47),
+ (3, 'LP3-WO-SN-301', 'ขยายห้องน้ำ', 5, 3, 48),
+ (3, 'LP3-WO-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 3, 49),
+ (3, 'LP3-WO-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 3, 50),
+ (3, 'LP3-WO-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 3, 51),
+ (3, 'LP3-WO-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 3, 52),
+ (3, 'LP3-WO-HV-101', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 3, 53),
+ (3, 'LP3-WO-HV-102', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 3, 54),
+ (3, 'LP3-WO-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1', 6, 3, 55),
+ (3, 'LP3-WO-HV-202', 'แปลนระบบระบายอากาศ ชั้น 1', 6, 3, 56),
+ (3, 'LP3-WO-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 3, 57),
+ (3, 'LP3-WO-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 3, 58),
+ (3, 'LP3-WO-EE-001', 'สารบัญ', 7, 3, 59),
+ (3, 'LP3-WO-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 3, 60),
+ (3, 'LP3-WO-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 3, 61),
+ (3, 'LP3-WO-EE-004', 'สัญลักษณ์ตารางโคม', 7, 3, 62),
+ (3, 'LP3-WO-EE-101', 'ตารางเหลดไฟฟ้าและไรเซอร์ไดอะแกรมระบบสื่อสาร', 7, 3, 63),
+ (3, 'LP3-WO-EE-201', 'แบลน์โคมไฟ ชั้นที่ 1', 7, 3, 64),
+ (3, 'LP3-WO-EE-301', 'แปลนเต้ารับไฟฟ้า โทรศัพท์/คอมพิวเตอร์ ชั้น 1', 7, 3, 65),
+ (3, 'LP3-WO-EE-401', 'รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและกราวด', 7, 3, 66),
+ (3, 'LP3-WO-EE-501', 'แบลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ขึ้น 1', 7, 3, 67),
+ (3, 'LP3-WO-EE-601', 'รายละเอียดการติดตั้งระบบโทรทัศน์วงจรปิด ชิ้นที่ 1', 7, 3, 68),
+ (3, 'LP3-WO-EE-701', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 7, 3, 69),
+ (3, 'LP3-WO-EE-702', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 7, 3, 70),
+ (3, 'LP3-WO-EE-703', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 7, 3, 71),
+ (3, 'LP3-WO-EE-704', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 7, 3, 72),
+ (3, 'LP3-WO-EE-705', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 7, 3, 73),
+ (3, 'LP3-TS-AR-001', 'สารบัญ', 2, 3, 1),
+ (3, 'LP3-TS-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 3, 2),
+ (3, 'LP3-TS-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 3, 3),
+ (3, 'LP3-TS-AR-004', 'ผังบริเวณอาคาร', 2, 3, 4),
+ (3, 'LP3-TS-AR-101', 'แปลนพื้นชั้นที 1, แปลนพื้นชั้นระดับ +0.15, แปลนหลังคา, แปลนผ้าเพดาน', 2, 3, 5),
+ (3, 'LP3-TS-AR-201', 'รูปด้าน 1, 2, 3, 4 รูปตัด A, 8,', 2, 3, 6),
+ (3, 'LP3-TS-AR-401', 'อยายบันได ST-01,ธยายรั้วกั้นหม้อแปลงไฟฟ้า', 2, 3, 7),
+ (3, 'LP3-TS-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าตาง', 2, 3, 8),
+ (3, 'LP3-TS-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 3, 9),
+ (3, 'LP3-TS-ST-002', 'ข้อกำหนดทั่วไป', 4, 3, 10),
+ (3, 'LP3-TS-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 3, 11),
+ (3, 'LP3-TS-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 3, 12),
+ (3, 'LP3-TS-ST-101', 'ผังโครงสร้างอาคาร', 4, 3, 13),
+ (3, 'LP3-TS-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 3, 14),
+ (3, 'LP3-TS-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 3, 15),
+ (3, 'LP3-TS-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 3, 16),
+ (3, 'LP3-TS-ST-204', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 4', 4, 3, 17),
+ (3, 'LP3-TS-ST-205', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 5', 4, 3, 18),
+ (3, 'LP3-TS-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 3, 19),
+ (3, 'LP3-TS-SN-002', 'ตารางแสดงรายการประกอบ', 5, 3, 20),
+ (3, 'LP3-TS-SN-101', 'ไดอะแกรมระบบระบายน้ำฝน', 5, 3, 21),
+ (3, 'LP3-TS-SN-201', 'แปลนระบบสุขาภิบาล ชั้นที่ 1 และชั้นหลังคา', 5, 3, 22),
+ (3, 'LP3-TS-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป', 5, 3, 23),
+ (3, 'LP3-TS-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 3, 24),
+ (3, 'LP3-TS-HV-101', 'รายการวัสดุและอุปกรณ์', 6, 3, 25),
+ (3, 'LP3-TS-HV-201', 'แบลนระบบระบายอากาศ ชิ้น 1', 6, 3, 26),
+ (3, 'LP3-TS-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 3, 27),
+ (3, 'LP3-TS-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 3, 28),
+ (3, 'LP3-TS-EE-001', 'สารบัญ', 7, 3, 29),
+ (3, 'LP3-TS-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 3, 30),
+ (3, 'LP3-TS-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 3, 31),
+ (3, 'LP3-TS-EE-004', 'สัญลักษณ์โคมไฟ', 7, 3, 32),
+ (3, 'LP3-TS-EE-101', 'SINGLE LINE DIAGRAM', 7, 3, 33),
+ (3, 'LP3-TS-EE-102', 'LOW VOLTAGE MAIN SINGLE LINE DIAGRAM', 7, 3, 34),
+ (3, 'LP3-TS-EE-103', 'ไรเซอร์ไดอะแกรม และตารางโหลดไฟฟ้า', 7, 3, 35),
+ (3, 'LP3-TS-EE-201', 'แปลนโคมไฟ/เต้ารับไฟฟ้า/กล้องโทรทัศน์วงจรปิด', 7, 3, 36),
+ (3, 'LP3-TS-EE-401', 'รายละเอียดการติดตั้งระบบป้องกันฟ้าผ่าและระบบกราวด', 7, 3, 37),
+ (3, 'LP3-TS-EE-501', 'แปลนแจ้งเหตุเพลิงไหม้', 7, 3, 38),
+ (3, 'LP3-TS-EE-701', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 7, 3, 39),
+ (3, 'LP3-TS-EE-702', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 7, 3, 40),
+ (3, 'LP3-TS-EE-703', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 7, 3, 41),
+ (3, 'LP3-TS-EE-704', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 7, 3, 42),
+ (3, 'LP3-TS-EE-705', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 7, 3, 43),
+ (3, 'LP3-TS-EE-706', 'รายละเอียดการติดตั้ง แผ่นที่ 6', 7, 3, 44),
+ (3, 'LP3-TS-EE-707', 'รายละเอียดการติดตั้ง แผ่นที่ 7', 7, 3, 45),
+ (3, 'LP3-TS-EE-708', 'รายละเอียดการติดตั้ง แผ่นที่ 8', 7, 3, 46),
+ (3, 'LP3-TS-EE-709', 'รายละเอียดการติดตั้ง แผ่นที่ 9', 7, 3, 47),
+ (3, 'LP3-TS-EE-710', 'รายละเอียดการติดตั้ง แผ่นที่ 10', 7, 3, 48),
+ (3, 'LP3-GN-GN-001', 'สารบัญหมวดงานท่าเทียบเรือ', 8, 4, 1),
+ (3, 'LP3-CT-ST-001', 'ผังโครงสร้างหน้าท่า', 8, 4, 2),
+ (3, 'LP3-CT-ST-002', 'ขยายผังโครงสร้างหน้าท่า แผ่นที่ 1', 8, 4, 3),
+ (3, 'LP3-CT-ST-003', 'ขยายผังโครงสร้างหน้าท่า แผนที่ 2', 8, 4, 4),
+ (3, 'LP3-CT-ST-004', 'รูปตัดหน้าท่า A', 8, 4, 5),
+ (3, 'LP3-CT-ST-005', 'รูปตัดหน้าท่า B', 8, 4, 6),
+ (3, 'LP3-CT-ST-006', 'แปลนเสาเข็ม', 8, 4, 7),
+ (3, 'LP3-CT-ST-007', 'แปลนคาน', 8, 4, 8),
+ (3, 'LP3-CT-ST-008', 'ขยายระบายน้ำ', 8, 4, 9),
+ (3, 'LP3-CT-ST-009', 'รายละเอียดเสริมเหล็กหัวเสาเข็ม', 8, 4, 10),
+ (3, 'LP3-CT-ST-010', 'รายละเอียดเสริมเหล็กคาน', 8, 4, 11),
+ (3, 'LP3-CT-ST-011', 'รายละเอียดเสริมเหล็กพื้น', 8, 4, 12),
+ (3, 'LP3-CT-ST-012', 'ขยายรอยต่อโครงสร้างหน้าท่า', 8, 4, 13),
+ (3, 'LP3-CT-ST-013', 'รายละเอียดเสริมเหล็กชิ้นส่วนคอนกรีต', 8, 4, 14),
+ (3, 'LP3-CT-ST-014', 'รายละเอียดยางกันกระแทกและหลักผูกเรือ', 8, 4, 15),
+ (3, 'LP3-CT-ST-015', 'รายละเอียดชอบคันดิน', 8, 4, 16),
+ (3, 'LP3-CT-ST-016', 'รายละเอียดรางเครน', 8, 4, 17),
+ (3, 'LP3-CT-ST-017', 'รูปตัด REVETMENT TYPE C', 8, 4, 18),
+ (3, 'LP3-CT-CY-001', 'ผังแสดงพื้นผิวลาน', 9, 4, 19),
+ (3, 'LP3-CT-CY-002', 'รายละเอียดพื้นผิวลาน', 9, 4, 20),
+ (3, 'LP3-CT-CY-003', 'TRANSTAINER AND STACKING LAYOUT', 9, 4, 21),
+ (3, 'LP3-CT-CY-004', 'รูปตัด A-A', 9, 4, 22),
+ (3, 'LP3-CT-CY-005', 'รูปตัด 8-8', 9, 4, 23),
+ (3, 'LP3-CT-CY-006', 'รูปตัด C-C', 9, 4, 24),
+ (3, 'LP3-CT-CY-007', 'TRANSTAINER AND TURNING POINT PLAN', 9, 4, 25),
+ (3, 'LP3-CT-CY-008', 'STACKING DETAILS', 9, 4, 26),
+ (3, 'LP3-SB-ST-001', 'ผิงท่าเรือบริการ', 8, 4, 27),
+ (3, 'LP3-SB-ST-002', 'รูปตัด A', 8, 4, 28),
+ (3, 'LP3-SB-ST-003', 'รูปตัด 8', 8, 4, 29),
+ (3, 'LP3-SB-ST-004', 'แปลนเสาเข็ม', 8, 4, 30),
+ (3, 'LP3-SB-ST-005', 'แปลขคาน', 8, 4, 31),
+ (3, 'LP3-SB-ST-006', 'รายละเอียดเสริมเหล็กหัวเสาเข็ม', 8, 4, 32),
+ (3, 'LP3-SB-ST-007', 'รายละเอียดเสริมเหล็กคาน', 8, 4, 33),
+ (3, 'LP3-SB-ST-008', 'รายละเอียดเสริมเหล็กพื้น', 8, 4, 34),
+ (3, 'LP3-SB-ST-009', 'รายละเอียดรอยต่อหน้าท่าเรือบริการ', 8, 4, 35),
+ (3, 'LP3-SB-ST-010', 'รายละเอียดเสริมเหล็กชิ้นส่วนคอนกรีต', 8, 4, 36),
+ (3, 'LP3-SB-ST-011', 'รายละเอียดยางกันกระแทกและบันได', 8, 4, 37),
+ (3, 'LP3-SB-ST-012', 'รายละเอียดขอบคันหิน และหลักผูกเรือ', 8, 4, 38),
+ (3, 'LP3-SB-ST-013', 'กำแพงกันดิน แผ่นที่ 1', 8, 4, 39),
+ (3, 'LP3-SB-ST-014', 'กำแพงกันดิน แผ่นที่ 2', 8, 4, 40),
+ (3, 'LP3-SB-ST-015', 'กำแพงกันดิน แผ่นที่ 3', 8, 4, 41),
+ (3, 'LP3-SB-ST-016', 'กำแพงกันดิน แผ่นที่ 4', 8, 4, 42),
+ (3, 'LP3-SB-ST-017', 'รายละเอียดถนน แผนที่ 1', 8, 4, 43),
+ (3, 'LP3-SB-ST-018', 'รายละเอียดถนน แผนที่ 2', 8, 4, 44),
+ (3, 'LP3-SB-ST-019', 'รูปตัด REVETMENT TYPE E', 8, 4, 45),
+ (3, 'LP3-DW-CP-001', 'ผังระบบระบายน้ำ (แผ่นที่1/2)', 10, 4, 46),
+ (3, 'LP3-DW-CP-002', 'ผังระบบระบายน้ำ (แผ่นที่2/2)', 10, 4, 47),
+ (3, 'LP3-DW-CP-003', 'ขนาดและรายละเอียดการเสริมเหล็กสำหรับท่อกลม', 10, 4, 48),
+ (3, 'LP3-DW-CP-004', 'การขุดวางท่อระบายน้ำ การรองพื้นท่อ และการต่อท่อสำหรับท่อกลม', 10, 4, 49),
+ (3, 'LP3-DW-CP-005', 'มาตรฐานท่อระบายน้ำ สำหรับท่อกลม', 10, 4, 50),
+ (3, 'LP3-DW-CP-006', 'ท่อ คสล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจรวัสดุถมน้อยกว่า 0.60', 10, 4, 51),
+ (3, 'LP3-DW-CP-007', 'ท่อ คสล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจรวัสดุถมระหว่าง 0.60 ถึง 3.0', 10, 4, 52),
+ (3, 'LP3-DW-CP-008', 'ท่อ คสล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ทางเท้าวัสดุถมระหว่าง 0.60 ถึง 3.00', 10, 4, 53),
+ (3, 'LP3-DW-CP-009', 'การขุดวางท่อระบายน้ำ การของพื้นท่อและการต่อท่อ สำหรับท่อเหลี่ยม', 10, 4, 54),
+ (3, 'LP3-DW-CP-010', 'มาตรฐานบ่อพักระบายน้ำสำหรับเชื่อมต่อท่อเหลี่ยม', 10, 4, 55),
+ (3, 'LP3-TS-EE-001a', 'SINGLE LINE DIAGRAM', 11, 4, 56),
+ (3, 'LP3-TS-EE-002a', 'SINGLE LINE DIAGRAM FOR UNIT SUBSTATION', 11, 4, 57),
+ (3, 'LP3-TS-EE-003a', 'แนวสายใต้ดินหน้าท่าเรือชายฝั่ง', 11, 4, 58),
+ (3, 'LP3-TS-EE-004a', 'รายละเอียดการติดตั้งแผ่นที่ 1', 11, 4, 59),
+ (3, 'LP3-TS-EE-005a', 'รายละเอียดการติดตั้งแผ่นที่ 2', 11, 4, 60),
+ (3, 'LP3-TS-EE-006a', 'รายละเอียดการติดตั้งแผ่นที่ 3', 11, 4, 61),
+ (3, 'LP3-TS-EE-007a', 'รายละเอียดการติดตั้งแผ่นที่ 4', 11, 4, 62),
+ (3, 'LP3-GN-LD-A1-A5', 'สารบัญ', 12, 5, 0),
+ (3, 'LP3-GN-LO-001', 'แผนที่แสดงที่ตั้งโครงการ', 12, 5, 1),
+ (3, 'LP3-GN-AB-001', 'อักษรย่อและสัญญลักษณ์', 12, 5, 2),
+ (3, 'LP3-GN-LA-001a', 'แสดงแผนผังทั่วไป (บริเวณชุมชนบ้านแหลม)', 12, 5, 3),
+ (3, 'LP3-GN-LA-002a', 'แสดงแผนผังทั่วไป (บริเวณทางแยกต่างระดับโซน A)', 12, 5, 4),
+ (3, 'LP3-GN-LA-003a', 'แสดงแผนผังทั่วไป (บริเวณทางเข้าประตู 2)', 12, 5, 5),
+ (3, 'LP3-GN-LA-004a', 'แสดงแผนผังทั่วไป (บริเวณทางเข้าประตู 4)', 12, 5, 6),
+ (3, 'LP3-GN-LA-005a', 'แสดงแผนผังทั่วไป (บริเวณทางเข้าประตู 5 ท่าเทียบเรือ E และ F) (1/3)', 12, 5, 7),
+ (3, 'LP3-GN-LA-006a', 'แสดงแผนฝังทั่วไป (บริเวณทางเข้าประตู 5 ท่าเทียบเรือ E และ F) (2/3)', 12, 5, 8),
+ (3, 'LP3-GN-LA-007a', 'แสดงแผนผังทั่วไป (บริเวณทางเข้าประตู 5 ท่าเทียบเรือ E และ F) (3/3)', 12, 5, 9),
+ (3, 'LP3-HW-TS-001', 'รูปตัดทั่วไปถนนบริเวณชุมชนบ้านแหลม (1/3)', 13, 5, 10),
+ (3, 'LP3-HW-TS-002', 'รูปตัดทั่วไปถนนบริเวณชุมชนบ้านแหลม (2/3)', 13, 5, 11),
+ (3, 'LP3-HW-TS-003', 'รูปตัดทั่วไปถนนปริเวณชุมชนบ้านแหลม (3/3)', 13, 5, 12),
+ (3, 'LP3-HW-TS-004', 'รูปตัดทั่วไปถนนบริเวณทางแยกต่างระดับ A (1/3)', 13, 5, 13),
+ (3, 'LP3-HW-TS-005', 'รูปตัดทั่วไปถนนบริเวณทางแยกต่างระดับ A (2/3)', 13, 5, 14),
+ (3, 'LP3-HW-TS-006', 'รูปตัดทั่วไปถนนบริเวณทางแยกต่างระดับ A (3/3)', 13, 5, 15),
+ (3, 'LP3-HW-TS-007', 'รูปตัดทั่วไปถนนบริเวณทางเข้าประตู 2 (1/3)', 13, 5, 16),
+ (3, 'LP3-HW-TS-008', 'รูปตัดทั่วไปถนนบริเวณทางเข้าประตู 2 (2/3)', 13, 5, 17),
+ (3, 'LP3-HW-TS-009', 'รูปตัดทั่วไปถนนทางบริเวณเข้าประตู 2 (3/3)', 13, 5, 18),
+ (3, 'LP3-HW-TS-010', 'รูปตัดทั่วไปถนนบริเวณทางเข้าประตู 4', 13, 5, 19),
+ (3, 'LP3-HW-TS-011', 'รูปตัดทั่วไปถนนสาย RN-2 กม. 0+650.000', 13, 5, 20),
+ (3, 'LP3-HW-TS-012', 'รูปตัดทั่วไปถนนสาย RN-2 กม. 0+800.000', 13, 5, 21),
+ (3, 'LP3-HW-TS-013', 'รูปตัดทั่วไปถนนสาย RN-2 กม. 0+900.000', 13, 5, 22),
+ (3, 'LP3-HW-TS-014', 'รูปตัดทั่วไปถนนสาย RN-2 กม. 2+000.000', 13, 5, 23),
+ (3, 'LP3-HW-TS-015', 'รูปตัดทั่วไปถนนสาย RN-2 LT. กม. 0+200.000', 13, 5, 24),
+ (3, 'LP3-HW-TS-016', 'รูปตัดทั่วไปถนนสาย RN-2 LT. กม. 0+475.000', 13, 5, 25),
+ (3, 'LP3-HW-TS-017', 'รูปตัดทั่วไปถนนสาย RN-2 LT. กม. 0+500.000', 13, 5, 26),
+ (3, 'LP3-HW-TS-018', 'รูปตัดทั่วไปถนนสาย RN-3 กม. 0+350.000', 13, 5, 27),
+ (3, 'LP3-HW-TS-019', 'รูปตัดทั่วไปถนนสาย RN-3 กม. 0+725.000', 13, 5, 28),
+ (3, 'LP3-HW-TS-020', 'รูปตัดทั่วไปถนนสาย RN-3 กม. 1+300.000', 13, 5, 29),
+ (3, 'LP3-HW-TS-021', 'รูปตัดทั่วไปถนนสาย RN-4 กม. 0+200.000 และ กม. 0+400.000', 13, 5, 30),
+ (3, 'LP3-HW-TS-022', 'รูปตัดทั่วไปถนนสาย RN-5 กม. 0+350.000 และ กม. 0+800.000', 13, 5, 31),
+ (3, 'LP3-HW-TS-023', 'รูปตัดทั่วไปถนนสาย RN-5 กม. 1+075.000 และ กม. 1+400,000', 13, 5, 32),
+ (3, 'LP3-HW-TS-024', 'รูปตัดทั่วไปถนนสาย RN-5 กม. 1+800.000 และ กม. 1+900.000', 13, 5, 33),
+ (3, 'LP3-HW-TS-025', 'รูปตัดทั่วไปถนนสาย RN-5 กม.2+100.000', 13, 5, 34),
+ (3, 'LP3-HW-TS-026', 'รูปตัดทั่วไปถนนสาย RN-6 กม.2+300.000', 13, 5, 35),
+ (3, 'LP3-HW-TS-027', 'รูปตัดทั่วไปถนนสาย RN-6 กม.3+500.000', 13, 5, 36),
+ (3, 'LP3-HW-TS-028', 'รูปตัดทั่วไปถนนสาย RN-1 กม. 0+550.000 และ กม.0+900.000', 13, 5, 37),
+ (3, 'LP3-HW-TS-029', 'รูปตัดทั่วไปถนนสาย RN-1 กม. 1+000,000 และ กม.1+050.000', 13, 5, 38),
+ (3, 'LP3-HW-TS-030', 'รูปตัดทั่วไปถนนสาย RN-7 กม. 0+050.000 และ กม.0+150.000', 13, 5, 39),
+ (3, 'LP3-HW-SO-001', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (1/7)', 14, 5, 40),
+ (3, 'LP3-HW-SO-002', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (2/7)', 14, 5, 41),
+ (3, 'LP3-HW-SO-003', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (3/7)', 14, 5, 42),
+ (3, 'LP3-HW-SO-004', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (4/7)', 14, 5, 43),
+ (3, 'LP3-HW-SO-005', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (5/7)', 14, 5, 44),
+ (3, 'LP3-HW-SO-006', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (6/7)', 14, 5, 45),
+ (3, 'LP3-HW-SO-007', 'ตารางแสดงข้อมูลแนวเส้นทาง (SETTING OUT DATA) (7/7)', 14, 5, 46),
+ (3, 'LP3-PP-BL-001', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 7 กม. 0+000.000 ถึง 0+700.000', 15, 5, 47),
+ (3, 'LP3-PP-BL-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 7 กม.0+700.000 ถึง 1+379,200', 15, 5, 48),
+ (3, 'LP3-PP-BL-003', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 8 กม. 0+000.000 ถึง 0+700.000', 15, 5, 49),
+ (3, 'LP3-PP-BL-004', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 8 กม. 0+700,000 ถึง 1+400.000', 15, 5, 50),
+ (3, 'LP3-PP-BL-005', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 8 กม. 1+400,000 ถึง 1+607.630', 15, 5, 51),
+ (3, 'LP3-PP-IA-001', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานต่างระดับขาที่ 1 กม. 0+000,000 ถึง 0+400.000', 15, 5, 52),
+ (3, 'LP3-PP-IA-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานต่างระดับขาที่ 1 กม. 0+400.000 ถึง 0+873.690', 15, 5, 53),
+ (3, 'LP3-PP-IA-003', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานต่างระดับขาที่ 3 กม. 0+000,000 ถึง 0+600.000', 15, 5, 54),
+ (3, 'LP3-PP-IA-004', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานต่างระดับขาที่ 3 กม. 0+600.000 ถึง 0+772.212', 15, 5, 55),
+ (3, 'LP3-PP-IA-005', 'แปลนและรูปตัดตามยาวถนนสาย RN-8 และถนน U-TURN AT GRADE กม.0+000.000 ถึง 0+275,950', 15, 5, 56),
+ (3, 'LP3-PP-G2-001', 'แปลนและรูปตัดตามยาวถนนบริการ กม. 0+000,000 ถึง 0+596.452', 15, 5, 57),
+ (3, 'LP3-PP-G2-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานกลับรถ 1 กม. 0+000.000 ถึง 0-691.487', 15, 5, 58),
+ (3, 'LP3-PP-G2-003', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานกลับรถ 3 กม. 0+000.000 ถึง 0+700.000', 15, 5, 59),
+ (3, 'LP3-PP-G2-004', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานกลับรถ 3 กม. 0+700,000 ถึง 0+751.290', 15, 5, 60),
+ (3, 'LP3-PP-G2-005', 'แปลนและรุปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 9 กม. 0+000.000 ถึง 0+700.000', 15, 5, 61),
+ (3, 'LP3-PP-G2-006', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 9 กม. 0+700.000 ถึง 0+804.604', 15, 5, 62),
+ (3, 'LP3-PP-G2-007', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 11 กม. 0+000.000 ถึง 0+605.226', 15, 5, 63),
+ (3, 'LP3-PP-G4-001', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 3 กม.0+000.000 ถึง 0+700.000', 15, 5, 64),
+ (3, 'LP3-PP-G4-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 3 กม.0+700.000 ถึง 0+769.533', 15, 5, 65),
+ (3, 'LP3-PP-G4-003', 'แปลนและรูปตัดตามยาวถนน U-TURN กม.0+000.000 ถึง 0+617.450', 15, 5, 66),
+ (3, 'LP3-PP-RN2-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 กม. 0+000,000 ถึง 0+500.000', 15, 5, 67),
+ (3, 'LP3-PP-RN2-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 กม. 0+500.000 ถึง 1+200.000', 15, 5, 68),
+ (3, 'LP3-PP-RN2-003', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 กม. 1+200.000 ถึง 1+900.000', 15, 5, 69),
+ (3, 'LP3-PP-RN2-004', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 กม. 1+900.000 ถึง 2+600.000', 15, 5, 70),
+ (3, 'LP3-PP-RN2-005', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 กม. 2+600.000 ถึง 2+806.000', 15, 5, 71),
+ (3, 'LP3-PP-RN2-006', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 LT. กม. 0+000.000 ถึง 0-650.000', 15, 5, 72),
+ (3, 'LP3-PP-RN2-007', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 LT. กม. 0+000.000 ถึง 0+500.000', 15, 5, 73),
+ (3, 'LP3-PP-RN2-008', 'แปลนและรูปตัดตามยาวถนนสาย RN-2 LT. กม. 0+500,000 ถึง 0-716.060', 15, 5, 74),
+ (3, 'LP3-PP-OP4-001', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 4 กม. 0+000,000 ถึง 0+700.000', 15, 5, 75),
+ (3, 'LP3-PP-OP4-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 4 กม. 0+700.000 ถึง 1+144.496', 15, 5, 76),
+ (3, 'LP3-PP-RN1-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-1 กม. 0+000,000 ถึง 0+700.000', 15, 5, 77),
+ (3, 'LP3-PP-RN1-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-1 กม. 0+700,000 ถึง 1+768.762', 15, 5, 78),
+ (3, 'LP3-PP-RN3-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 0+000,000 ถึง 0+400.000', 15, 5, 79),
+ (3, 'LP3-PP-RN3-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 0+400.000 ถึง 1+100.000', 15, 5, 80),
+ (3, 'LP3-PP-RN3-003', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 1+100.000 ถึง 1+800.000', 15, 5, 81),
+ (3, 'LP3-PP-RN3-004', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 1+800,000 ถึง 2+205.676', 15, 5, 82),
+ (3, 'LP3-PP-RN3-005', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 LT.-1 กม. 0+000,000 ถึง 0+500.000', 15, 5, 83),
+ (3, 'LP3-PP-RN3-006', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 LT.-1 กม. 0+500.000 ถึง 1+200.000', 15, 5, 84),
+ (3, 'LP3-PP-RN3-007', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 LT.-1 กม. 1+200.000 ถึง 1+527.887', 15, 5, 85),
+ (3, 'LP3-PP-RN3-008', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 LT-2 กม. 0+000,000 ถึง 0+670.530', 15, 5, 86),
+ (3, 'LP3-PP-RN3-009', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 0+000,000 ถึง 0+700,000', 15, 5, 87),
+ (3, 'LP3-PP-RN3-010', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 0+700,000 ถึง 1+400.000', 15, 5, 88),
+ (3, 'LP3-PP-RN3-011', 'แปลนและรูปตัดตามยาวถนนสาย RN-3 กม. 1+400.000 ถึง 2+053.930', 15, 5, 89),
+ (3, 'LP3-PP-OP5-001', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 5 กม. 0+000.000 ถึง 0+500.000', 15, 5, 90),
+ (3, 'LP3-PP-OP5-002', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 5 กม. 0+500.000 ถึง 1+200.000', 15, 5, 91),
+ (3, 'LP3-PP-OP5-003', 'แปลนและรูปตัดตามยาวถนนเชื่อมต่อสะพานยกระดับ 5 กม. 1+200.000 ถึง 1+491.883', 15, 5, 92),
+ (3, 'LP3-PP-RN4-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 0+000.000 ถึง 0+500.000', 15, 5, 93),
+ (3, 'LP3-PP-RN4-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 0+500.000 ถึง 1+200.000', 15, 5, 94),
+ (3, 'LP3-PP-RN4-003', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 1+200.000 ถึง 1+900.000', 15, 5, 95),
+ (3, 'LP3-PP-RN4-004', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 1+900.000 ถึง 2+600.000', 15, 5, 96),
+ (3, 'LP3-PP-RN4-005', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 2+600.000 ถึง 3+300.000', 15, 5, 97),
+ (3, 'LP3-PP-RN4-006', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 3+300.000 ถึง 4+000.000', 15, 5, 98),
+ (3, 'LP3-PP-RN4-007', 'แปลนและรูปตัดตามยาวถนนสาย RN-4 กม. 4+000.000 ถึง 4+406.126', 15, 5, 99),
+ (3, 'LP3-PP-RN5-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-5 กม. 0+000.000 ถึง 0+600.000', 15, 5, 100),
+ (3, 'LP3-PP-RN5-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-5 กม. 0+600.000 ถึง 1+300.000', 15, 5, 101),
+ (3, 'LP3-PP-RN5-003', 'แปลนและรูปตัดตามยาวถนนสาย RN-5 กม. 1+300.000 ถึง 2+000.000', 15, 5, 102),
+ (3, 'LP3-PP-RN5-004', 'แปลนและรูปตัดตามยาวถนนสาย RN-5 กม. 2+000.000 ถึง 2+175.458', 15, 5, 103),
+ (3, 'LP3-PP-RN6-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 0+000,000 ถึง 0+700.000', 15, 5, 104),
+ (3, 'LP3-PP-RN6-002', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 0+700.000 ถึง 1+400.000', 15, 5, 105),
+ (3, 'LP3-PP-RN6-003', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 1+400.000 ถึง 2+100.000', 15, 5, 106),
+ (3, 'LP3-PP-RN6-004', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 2+100.000 ถึง 2+800.000', 15, 5, 107),
+ (3, 'LP3-PP-RN6-005', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 2+800.000 ถึง 3+500.000', 15, 5, 108),
+ (3, 'LP3-PP-RN6-006', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 LT กม. 3+500.000 ถึง 3+840.254', 15, 5, 109),
+ (3, 'LP3-PP-RN6-007', 'แปลนและรูปตัดตามยาวถนน U-TURN เชื่อมต่อถนนสาย RN-6 LT กม. 0+000,000 ถึง 0+529.095', 15, 5, 110),
+ (3, 'LP3-PP-RN6-008', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 0+000,000 ถึง 0+700.000', 15, 5, 111),
+ (3, 'LP3-PP-RN6-009', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 0+700.000 ถึง 1+400.000', 15, 5, 112),
+ (3, 'LP3-PP-RN6-010', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 1+400.000 ถึง 2+100.000', 15, 5, 113),
+ (3, 'LP3-PP-RN6-011', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 2+100.000 ถึง 2+800.000', 15, 5, 114),
+ (3, 'LP3-PP-RN6-012', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 2+800.000 000 ถึง 3+500,000', 15, 5, 115),
+ (3, 'LP3-PP-RN6-013', 'แปลนและรูปตัดตามยาวถนนสาย RN-6 RT. กม. 3+500.000 ถึง 3+826.956', 15, 5, 116),
+ (3, 'LP3-PP-RN7-001', 'แปลนและรูปตัดตามยาวถนนสาย RN-7 RT. กม. 0+000.000 ถึง 0+274.518', 15, 5, 117),
+ (3, 'LP3-GN-INT-001', 'แสดงรายละเอียดเรขาคณิตวงเวียนท่าเทียบเรือ D', 16, 5, 118),
+ (3, 'LP3-GN-INT-002', 'แสดงรายละเอียดเรขาคณิตวงเวียนท่าเทียบเรือ E', 16, 5, 119),
+ (3, 'LP3-GN-INT-003', 'แสดงรายละเอียดเรขาคณิตทางแยกระดับพื้นประตู 5 และ ถนนเชื่อมต่อ', 16, 5, 120),
+ (3, 'LP3-GN-INT-004', 'แสดงรายละเอียดเรขาคณิตวงเวียนและจุดกลับรถท่าเทียบเรือ F', 16, 5, 121),
+ (3, 'LP3-GN-TF-001', 'แสดงตำแหน่งการติดตั้งป้ายจราจร (1/4)', 17, 5, 122),
+ (3, 'LP3-GN-TF-002', 'แสดงตำแหน่งการติดตั้งป้ายจราจร (2/4)', 17, 5, 123),
+ (3, 'LP3-GN-TF-003', 'แสดงตำแหน่งการติดตั้งป้ายจราจร (3/4)', 17, 5, 124),
+ (3, 'LP3-GN-TF-004', 'แสดงตำแหน่งการติดตั้งป้ายจราจร (4/4)', 17, 5, 125),
+ (3, 'LP3-GN-TF-005', 'แสดงสัญญาณไฟทางแยก ประตู 3', 17, 5, 126),
+ (3, 'LP3-GN-TF-006', 'แสดงสัญญาณไฟทางแยก ประตู 5-1', 17, 5, 127),
+ (3, 'LP3-GN-TF-007', 'แสดงสัญญาณไฟทางแยก ประตู 5-2', 17, 5, 128),
+ (3, 'LP3-GN-UT-001', 'งานรื้อย้ายระบบสาธารณูปโภคชุมชนบ้านแหลม', 18, 5, 129),
+ (3, 'LP3-GN-UT-002', 'งานรื้อย้ายระบบสาธารณูปโภคทางแยกต่างระดับ A (1/2)', 18, 5, 130),
+ (3, 'LP3-GN-UT-003', 'งานรื้อย้ายระบบสาธารณูปโภคทางแยกต่างระดับ A (2/2)', 18, 5, 131),
+ (3, 'LP3-GN-UT-004', 'งานรื้อย้ายระบบสาธารณูปโภคทางเข้าประตู 2 (1/2)', 18, 5, 132),
+ (3, 'LP3-GN-UT-005', 'งานรื้อย้ายระบบสาธารณูปโภคทางเข้าประตู 2 (2/2)', 18, 5, 133),
+ (3, 'LP3-GN-UT-006', 'งานรื้อย้ายระบบสาธารณูปโภคทางเข้าประตู 4', 18, 5, 134),
+ (3, 'LP3-PP-OZ-001', 'แผนผังทั่วไปถนนของทางเข้าออกสำหรับรถขนาดใหญ่', 19, 5, 135),
+ (3, 'GD-101', 'SUPERELEVATION ATTAINING AND WIDENING 2-LANE HIGHWAY ON CIRCULAR CURVE', 20, 5, 331),
+ (3, 'GD-103', 'SUPERELEVATION ATTAINING AND WIDENING COMPOUND AND REVERSE CURVE', 20, 5, 332),
+ (3, 'GD-105', 'SUPERELEVATION ATTAINING AND WIDENING MULTILANE LANE HIGHWAY RAISED MEDIAN ON CIRCULAR CURVE', 20, 5, 333),
+ (3, 'GD-201', 'TRAVELLED WAY WIDENING DETAILS FOR WB-19 AND SU-12 DESIGN VEHICLE', 20, 5, 334),
+ (3, 'GD-601', 'JOINT REINFORCED CONCRETE PAVEMENT (JRCP) PLAN SECTION AND REINFORCEMENT DETAILS', 20, 5, 335),
+ (3, 'GD-602', 'JOINT REINFORCED CONCRETE PAVEMENT (JRCP) DETAILS OF JOINT', 20, 5, 336),
+ (3, 'GD-603', 'JOINT REINFORCED CONCRETE PAVEMENT (JRCP) DETAILS OF JOINT AT MANHOLE', 20, 5, 337),
+ (3, 'GD-607', 'PAVEMENT TRANSITION DETAILS', 20, 5, 338),
+ (3, 'GD-701', 'PAVEMENT TRANSITION DETAILS TYPICAL SURFACE OVERLAY AND REPAIRING', 20, 5, 339),
+ (3, 'GD-703', 'CLEARING AND GRUBBING', 20, 5, 340),
+ (3, 'GD-704', 'CONNECTION ROAD DETAILS', 20, 5, 341),
+ (3, 'GD-709', 'CONCRETE CURB & CURB AND GUTTER', 20, 5, 342),
+ (3, 'RS-101', 'MINOR ROAD SIGN & SIGN POST DETAILS', 20, 5, 343),
+ (3, 'RS-201', 'TRAFFIC MARKING MARKING DETAILS-1', 20, 5, 344),
+ (3, 'RS-202', 'TRAFFIC MARKING MARKING DETAILS-II', 20, 5, 345),
+ (3, 'RS-203', 'TRAFFIC MARKING ROAD STUD', 20, 5, 346),
+ (3, 'RS-301', 'TRAFFIC CONTROL DEVICE FOR HIGHWAY UNDER CONSTRUCTION TRAFFIC SIGN AND DEVICES-I', 20, 5, 347),
+ (3, 'RS-302', 'TRAFFIC CONTROL DEVICE FOR HIGHWAY UNDER CONSTRUCTION TRAFFIC SIGN AND DEVICES-II', 20, 5, 348),
+ (3, 'RS-303', 'TRAFFIC CONTROL DEVICE FOR HIGHWAY UNDER CONSTRUCTION INSTALLATION GUIDELINE-1', 20, 5, 349),
+ (3, 'RS-304', 'TRAFFIC CONTROL DEVICE FOR HIGHWAY UNDER CONSTRUCTION INSTALLATION GUIDELINE-II', 20, 5, 350),
+ (3, 'RS-305', 'TRAFFIC CONTROL DEVICE FOR HIGHWAY UNDER CONSTRUCTION INSTALLATION GUIDELINE-III', 20, 5, 351),
+ (3, 'RS-401', 'OVERHEAD AND OVERHANG SIGN INSTALLATION', 20, 5, 352),
+ (3, 'RS-402', 'INSTALLATION OF OVERHEAD SIGN & TRAFFIC SIGN ON BRIDGE BARRIER', 20, 5, 353),
+ (3, 'RS-403', 'OVERHEAD TRAFFIC SIGN SIGN BOARD DETAILS', 20, 5, 354),
+ (3, 'RS-404', 'OVERHEAD TRAFFIC SIGN STEEL FRAME FOR MOUNTING WIDTH < 18.00 Μ.', 20, 5, 355),
+ (3, 'RS-405', 'OVERHEAD TRAFFIC SIGN STEEL FRAME FOR MOUNTING WIDTH < 20.00 M.', 20, 5, 356),
+ (3, 'RS-406', 'OVERHEAD TRAFFIC SIGN STEEL FRAME FOR MOUNTING 20.00 WIDTH < 28.00 м.', 20, 5, 357),
+ (3, 'RS-407', 'OVERHEAD TRAFFIC SIGN ILLUMINATED SIGN', 20, 5, 358),
+ (3, 'RS-501', 'OVERHEAD TRAFFIC SIGN STEEL POLE TYPE I FOR SIGN PLATES NOT MORE THAN 52,800 SO.CM.', 20, 5, 359),
+ (3, 'RS-502', 'OVERHEAD TRAFFIC SIGN STEEL POLE TYPE II FOR SIGN PLATES NOT MORE THAN 108,000 SQ.CM.', 20, 5, 360),
+ (3, 'RS-503', 'OVERHEAD TRAFFIC SIGN STEEL POLE TYPE III FOR SIGN PLATES NOT MORE THAN 2X52,800 SQ.CM.', 20, 5, 361),
+ (3, 'RS-504', 'OVERHANG TRAFFIC SIGN FOOTING DETAILS', 20, 5, 362),
+ (3, 'RS-603', 'GUARDRAIL SINGLE W-BEAM GUARDRAIL', 20, 5, 363),
+ (3, 'RS-604', 'GUARDRAIL DOUBLE W-BEAM GUARDRAIL', 20, 5, 364),
+ (3, 'RS-605', 'GUARDRAIL INSTALLATION AND W-BEAM GUARDRAIL APPROACH TYPE-1', 20, 5, 365),
+ (3, 'RS-606', 'GUARDRAIL INSTALLATION AND W-BEAM GUARDRAIL APPROACH TYPE-11', 20, 5, 366),
+ (3, 'RS-608', 'CONCRETE BARRIER TYPE', 20, 5, 367),
+ (3, 'RS-609', 'CONCRETE BARRIER TYPE II', 20, 5, 368),
+ (3, 'RS-611', 'CONCRETE BARRIER PRE-CAST CONCRETE BARRIER TYPE IA', 20, 5, 369),
+ (3, 'RS-615', 'CONCRETE BARRIER AT BRIDGE APPROACH', 20, 5, 370),
+ (3, 'DS-401', 'DROP INLET IN MEDIAN TYPE A FOR RAISED MEDIAN', 20, 5, 371),
+ (3, 'DS-603', 'DROP INLET IN MEDIAN TYPE A FOR R.C. U-DITCH TYPE D & E', 20, 5, 372),
+ (3, 'TF-103', 'ROAD TRAFFIC SIGNALS TRAFFIC SIGNAL CONTROLLER AND POLE DETAILS', 20, 5, 373),
+ (3, 'TF-104', 'ROAD TRAFFIC SIGNALS TRAFFIC SIGNAL MAST POLE DETAILS', 20, 5, 374),
+ (3, 'ถน-402/56', 'มาตรฐานถนนดินซิเมนต์ (1/3)', 21, 5, 375),
+ (3, 'ถน-403/56', 'มาตรฐานถนนดินซิเมนต์ (2/3)', 21, 5, 376),
+ (3, 'ถน-404/56', 'มาตรฐานถนนดินซีเมนต์ (3/3)', 21, 5, 377),
+ (3, 'LP3-ST-GN-001', 'รายการประกอบโครงสร้าง 1/4', 22, 5, 136),
+ (3, 'LP3-ST-GN-002', 'รายการประกอบโครงสร้าง 2/4', 22, 5, 137),
+ (3, 'LP3-ST-GN-003', 'รายการประกอบโครงสร้าง 3/4', 22, 5, 138),
+ (3, 'LP3-ST-GN-004', 'รายการประกอบโครงสร้าง 4/4', 22, 5, 139),
+ (3, 'LP3-LA-UT-001', 'แปลนและรูปตัดตามยาวสะพานต่างระดับขาที่ 1-1', 23, 5, 140),
+ (3, 'LP3-LA-UT-002', 'แปลนและรูปตัดตามยาวสะพานต่างระดับขาที่ 1-2', 23, 5, 141),
+ (3, 'LP3-LA-UT-003', 'แปลนการจัดวางลวดอัดแรงสะพานต่างระดับขาที่ 1', 23, 5, 142),
+ (3, 'LP3-LA-UT-004', 'แปลนและรูปตัดตามยาวสะพานต่างระดับขาที่ 3-1', 23, 5, 143),
+ (3, 'LP3-LA-UT-005', 'แปลนและรูปตัดตามยาวสะพานต่างระดับขาที่ 3-2', 23, 5, 144),
+ (3, 'LP3-LA-UT-006', 'แปลนและรูปตัดตามยาวสะพานต่างระดับขาที่ 3-3', 23, 5, 145),
+ (3, 'LP3-LA-UT-007', 'แปลนการจัดวางลวดอัดแรงสะพาน ต่างระดับขาที่ 3', 23, 5, 146),
+ (3, 'LP3-LA-UT-008', 'แปลนและรูปตัดตามยาวสะพานกลับรถ 1', 23, 5, 147),
+ (3, 'LP3-LA-UT-009', 'แปลนการจัดวางลวดอัดแรงสะพานกลับรถ 1', 23, 5, 148),
+ (3, 'LP3-LA-UT-010', 'แปลนและรูปตัดตามยาวสะพานกลับรถ 3', 23, 5, 149),
+ (3, 'LP3-LA-UT-011', 'แปลนการจัดวางลวดอัดแรงสะพานกลับรถ 3', 23, 5, 150),
+ (3, 'LP3-LA-UT-012', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 3-1', 23, 5, 151),
+ (3, 'LP3-LA-UT-013', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 3-2', 23, 5, 152),
+ (3, 'LP3-LA-UT-014', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 3', 23, 5, 153),
+ (3, 'LP3-LA-UT-015', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 4-1', 23, 5, 154),
+ (3, 'LP3-LA-UT-016', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 4-2', 23, 5, 155),
+ (3, 'LP3-LA-UT-017', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 4', 23, 5, 156),
+ (3, 'LP3-LA-UT-018', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 5', 23, 5, 157),
+ (3, 'LP3-LA-UT-019', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 5', 23, 5, 158),
+ (3, 'LP3-LA-UT-020', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 6 RT-1', 23, 5, 159),
+ (3, 'LP3-LA-UT-021', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 6 RT-2', 23, 5, 160),
+ (3, 'LP3-LA-UT-022', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 6 RT', 23, 5, 161),
+ (3, 'LP3-LA-UT-023', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 6 LT - 1', 23, 5, 162),
+ (3, 'LP3-LA-UT-024', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 6 LT - 2', 23, 5, 163),
+ (3, 'LP3-LA-UT-025', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 6 LT', 23, 5, 164),
+ (3, 'LP3-LA-UT-026', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 7', 23, 5, 165),
+ (3, 'LP3-LA-UT-027', 'แปลนการจัดวางควดอัดแรงสะพานยกระดับ 7', 23, 5, 166),
+ (3, 'LP3-LA-UT-028', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 8-1', 23, 5, 167),
+ (3, 'LP3-LA-UT-029', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 8-2', 23, 5, 168),
+ (3, 'LP3-LA-UT-030', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 9-1', 23, 5, 169),
+ (3, 'LP3-LA-UT-031', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 9-2', 23, 5, 170),
+ (3, 'LP3-LA-UT-032', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 9', 23, 5, 171),
+ (3, 'LP3-LA-UT-033', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 11-1', 23, 5, 172),
+ (3, 'LP3-LA-UT-034', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 11-2', 23, 5, 173),
+ (3, 'LP3-LA-UT-035', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 11', 23, 5, 174),
+ (3, 'LP3-LA-UT-036', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 12', 23, 5, 175),
+ (3, 'LP3-LA-UT-037', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 12', 23, 5, 176),
+ (3, 'LP3-LA-UT-038', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 12.1-1', 23, 5, 177),
+ (3, 'LP3-LA-UT-039', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 12.1-2', 23, 5, 178),
+ (3, 'LP3-LA-UT-040', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 12.1', 23, 5, 179),
+ (3, 'LP3-LA-UT-041', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 12.2-1', 23, 5, 180),
+ (3, 'LP3-LA-UT-042', 'แปลนและรูปตัดตามยาวสะพานยกระดับ 12.2-2', 23, 5, 181),
+ (3, 'LP3-LA-UT-043', 'แปลนการจัดวางลวดอัดแรงสะพานยกระดับ 12.2', 23, 5, 182),
+ (3, 'LP3-ST-UT-101', 'คอนกรีตอัดแรงรุปตัวไอ TYPE G1 AND G2 DIMENSION AND DETAILS', 24, 5, 183),
+ (3, 'LP3-ST-UT-102', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G1 STRANDS ARRANGEMENT', 24, 5, 184),
+ (3, 'LP3-ST-UT-103', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G2 STRANDS ARRANGEMENT', 24, 5, 185),
+ (3, 'LP3-ST-UT-104', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G1 AND G2 REINFORCEMENT DETAILS', 24, 5, 186),
+ (3, 'LP3-ST-UT-105', 'คอนกรีตอัดแรงรูปตัวไอ พื้นสะพานและคานขวางตัวริม (TYPE G1 AND G2)', 24, 5, 187),
+ (3, 'LP3-ST-UT-106', 'คอนกรีตอัดแรงรูปตัวไอ พื้นสะพานและการเสริมเหล็ก (TYPE G1 AND G2)', 24, 5, 188),
+ (3, 'LP3-ST-UT-107', 'คอนกรีตอัดแรงรูปตัวไอ รอยต่อสะพาน และ ต่อเชื่อมพื้นสะพาน (TYPE G1 AND G2)', 24, 5, 189),
+ (3, 'LP3-ST-UT-108', 'คอนกรีตอัดแรงรูปตัวไอ รอยต่อสะพาน และ ต่อเชื่อมพื้นสะพานและการเสริมเหล็ก (TYPE G1 AND G2)', 24, 5, 190),
+ (3, 'LP3-ST-UT-109', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G3 DIMENSION AND DETAILS', 24, 5, 191),
+ (3, 'LP3-ST-UT-110', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G3 STRANDS ARRANGEMENT', 24, 5, 192),
+ (3, 'LP3-ST-UT-111', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G3 REINFORCEMENT DETAILS', 24, 5, 193),
+ (3, 'LP3-ST-UT-112', 'คอนกรีตอัดแรงรูปตัวไอ พื้นสะพานและคานขวางตัวริม (TYPE G3)', 24, 5, 194),
+ (3, 'LP3-ST-UT-113', 'คอนกรีตอัดแรงรูปตัวไอ พื้นสะพานและการเสริมเหล็ก (TYPE G3)', 24, 5, 195),
+ (3, 'LP3-ST-UT-114', 'คอนกรีตอัดแรงรูปตัวไอ รอยต่อสะพาน และ ต่อเชื่อมพื้นสะพาน (TYPE G3)', 24, 5, 196),
+ (3, 'LP3-ST-UT-115', 'คอนกรีตอัดแรงรูปตัวไอ รอยต่อสะพาน และ ต่อเชื่อมพื้นสะพาน และการเสริมเหล็ก (TYPE G3)', 24, 5, 197),
+ (3, 'LP3-ST-UT-116', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G4 DIMENSION AND DETAILS', 24, 5, 198),
+ (3, 'LP3-ST-UT-117', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G4 STRANDS ARRANGEMENT', 24, 5, 199),
+ (3, 'LP3-ST-UT-118', 'คอนกรีตอัดแรงรูปตัวไอ TYPE G4 REINFORCEMENT DETAILS', 24, 5, 200),
+ (3, 'LP3-ST-UT-119', 'PIER TYPE A COLUMN AND PILE CAP DETAILS', 24, 5, 201),
+ (3, 'LP3-ST-UT-120', 'PIER TYPE B COLUMN AND PILE CAP DETAILS', 24, 5, 202),
+ (3, 'LP3-ST-UT-121', 'PIER TYPE A COLUMN REINFORCEMENT', 24, 5, 203),
+ (3, 'LP3-ST-UT-122', 'PIER TYPE B COLUMN REINFORCEMENT', 24, 5, 204),
+ (3, 'LP3-ST-UT-123', 'PIER TYPE A คานขวางหัวเสา REINFORCEMENT', 24, 5, 205),
+ (3, 'LP3-ST-UT-124', 'PIER TYPE B ผังลวดขัดแรงคานหัวเสา', 24, 5, 206),
+ (3, 'LP3-ST-UT-125', 'PIER TYPE B คานขวางหัวเสา REINFORCEMENT', 24, 5, 207),
+ (3, 'LP3-ST-UT-126', 'รายละเอียด PILE CAP REINFORCEMENT TYPE A', 24, 5, 208),
+ (3, 'LP3-ST-UT-127', 'รายละเอียด PILE CAP REINFORCEMENT TYPE B', 24, 5, 209),
+ (3, 'LP3-ST-UT-128', 'PIER TYPE C COLUMN AND PILE CAP DETAILS', 24, 5, 210),
+ (3, 'LP3-ST-UT-129', 'PIER TYPE C COLUMN REINFORCEMENT', 24, 5, 211),
+ (3, 'LP3-ST-UT-130', 'PIER TYPE C คานขวางหัวเสา REINFORCEMENT', 24, 5, 212),
+ (3, 'LP3-ST-UT-131', 'รายละเอียด PILE CAP REINFORCEMENT TYPE C', 24, 5, 213),
+ (3, 'LP3-ST-UT-132', 'แปลนคานคอนกรีตอัดแรงหล่อในที (TYPE D)', 24, 5, 214),
+ (3, 'LP3-ST-UT-133', 'PIER TYPE ID (SPAN 15.997 M.) PRESTESSING STEEL', 24, 5, 215),
+ (3, 'LP3-ST-UT-134', 'PIER TYPE D (SPAN 17.617 M.) PRESTESSING STEEL', 24, 5, 216),
+ (3, 'LP3-ST-UT-135', 'PIER TYPE D (SPAN 18.413 M) PRESTESSING STEEL', 24, 5, 217),
+ (3, 'LP3-ST-UT-136', 'PIER TYPE D (SPAN 20.023 M.) PRESTESSING STEEL', 24, 5, 218),
+ (3, 'LP3-ST-UT-137', 'PIER TYPE D PRESTESSING STEEL', 24, 5, 219),
+ (3, 'LP3-ST-UT-138', 'รายละเอียดการเสริมเหล็ก คานคอนกรีตอัดแรงหล่อในที่ (ตามยาว)', 24, 5, 220),
+ (3, 'LP3-ST-UT-139', 'รายละเอียดการเสริมเหล็ก พื้นคอนกรีตอัดแรงหล่อในที่', 24, 5, 221),
+ (3, 'LP3-ST-UT-140', 'รายละเอียดการเสริมเหล็ก ด้านปลายยืนรองรับคานตัว I', 24, 5, 222),
+ (3, 'LP3-ST-UT-141', 'PIER TYPE D COLUMN REINFORCEMENT', 24, 5, 223),
+ (3, 'LP3-ST-UT-142', 'PIER TYPE E COLUMN REINFORCEMENT', 24, 5, 224),
+ (3, 'LP3-ST-UT-143', 'PIER TYPE F COLUMN AND PILE CAP DETAILS', 24, 5, 225),
+ (3, 'LP3-ST-UT-144', 'PIER TYPE F COLUMN REINFORCEMENT', 24, 5, 226),
+ (3, 'LP3-ST-UT-145', 'PIER TYPE F คานขวางหัวเสา REINFORCEMENT', 24, 5, 227),
+ (3, 'LP3-ST-UT-146', 'PIER TYPE G COLUMN AND PILE CAP DETAILS - 1', 24, 5, 228),
+ (3, 'LP3-ST-UT-147', 'PIER TYPE G COLUMN AND PILE CAP DETAILS - 2', 24, 5, 229),
+ (3, 'LP3-ST-UT-148', 'PIER TYPE G COLUMN AND PILE CAP DETAILS - 3', 24, 5, 230),
+ (3, 'LP3-ST-UT-149', 'PIER TYPE G COLUMN AND PILE CAP DETAILS - 4', 24, 5, 231),
+ (3, 'LP3-ST-UT-150', 'PIER TYPE H (SHEET 1 OF 2)', 24, 5, 232),
+ (3, 'LP3-ST-UT-151', 'PIER TYPE H (SHEET 2 OF 2)', 24, 5, 233),
+ (3, 'LP3-ST-UT-152', 'ABUTMENT TYPE A DEMENSION AND DETAILS', 24, 5, 234),
+ (3, 'LP3-ST-UT-153', 'ABUTMENT TYPE A REINFORCEMENT DETAILS', 24, 5, 235),
+ (3, 'LP3-ST-UT-154', 'ABUTMENT TYPE B DEMENSION AND DETAILS', 24, 5, 236),
+ (3, 'LP3-ST-UT-155', 'ABUTMENT TYPE B REINFORCEMENT DETAILS', 24, 5, 237),
+ (3, 'LP3-ST-UT-156', 'ABUTMENT TYPE C DEMENSION AND DETAILS', 24, 5, 238),
+ (3, 'LP3-ST-UT-157', 'ABUTMENT TYPE C REINFORCEMENT DETAILS', 24, 5, 239),
+ (3, 'LP3-ST-UT-158', 'แผงกั้น TYPE 1', 24, 5, 240),
+ (3, 'LP3-ST-UT-159', 'รายละเอียดพื้นคอนกรีตเชิงลาดสะพาน', 24, 5, 241),
+ (3, 'LP3-ST-UT-160', 'แผ่นยางรองคอสะพาน', 24, 5, 242),
+ (3, 'LP3-ST-UT-161', 'เสาเข็มเจาะ หลอในที่ขนาด 0.80 M.', 24, 5, 243),
+ (3, 'LP3-ST-UT-162', 'เสาเข็มเจาะ หล่อในที่ขนาด 1.20 M.', 24, 5, 244),
+ (3, 'LP3-ST-UT-163', 'แปลนระดับกำแพงกันดิน', 24, 5, 245),
+ (3, 'LP3-ST-UT-164', 'รายละเอียดเหล็กเสริมกำแพงกันดิน', 24, 5, 246),
+ (3, 'LP3-ST-UT-165', 'ทั่วไประบบระบายน้า สำหรับสะพานคอนกรีตอัดแรงรูปตัวไอ', 24, 5, 247),
+ (3, 'LP3-ST-UT-166', 'ทั่วไป GULLY AND GRATING', 24, 5, 248),
+ (3, 'LP3-ST-UT-167', 'รายละเอียด SUPPORT', 24, 5, 249),
+ (3, 'LP3-ST-UT-168', 'รายละเอียด CATCH BASIN', 24, 5, 250),
+ (3, 'LP3-ST-UT-169', 'รายละเอียด ฐานราก สำหรับเสาไฟฟ้าบนสะพาน', 24, 5, 251),
+ (3, 'LP3-ST-MB-101', 'เขื่อนป้องกันตลิ่ง แผ่นที่ 1', 25, 5, 252),
+ (3, 'LP3-ST-MB-102', 'เขื่อนป้องกันตลิ่ง แผ่นที่ 2', 25, 5, 253),
+ (3, 'LP3-ST-MB-103', 'สะพานช่วงสั้น STA. 1+301.827', 25, 5, 254),
+ (3, 'SB-101', 'มาตรฐานงานโครงสร้างกรมทางหลวง พศ 2558', 26, 5, 378),
+ (3, 'SB-102', 'R.C. SLAB BRIDGE O SKEW, PLAN AND SECTION DETAILS', 26, 5, 379),
+ (3, 'SB-103', 'R.C. SLAB BRIDGE 125 SKEW PLAN AND SECTION DETAILS', 26, 5, 380),
+ (3, 'SB-104', 'R.C. SLAB BRIDGE 2645 SKEW PLAN AND SECTION DETAILS', 26, 5, 381),
+ (3, 'SB-105', 'R.C. SLAB BRIDGE TAPERED PLAN AND SECTION DETAILS', 26, 5, 382),
+ (3, 'BR-101', 'R.C. SLAB BRIDGE TAPERED PLAN AND SECTION DETAILS, EDGE BEAM REINFORCEMENT TRAFFIC AND PEDESTRIAN BARRIERS REINFORCEMENT DETAILS', 26, 5, 383),
+ (3, 'BR-102', 'TRAFFIC AND PEDESTRIAN BARRIERS PRECAST FIN AND RAILING DETAILS', 26, 5, 384),
+ (3, 'PL-201', 'PC. PILES 0.40x0.40 M. PILE CAPACITY AND REINFORCEMENT DETAILS', 26, 5, 385),
+ (3, 'PL-302', 'SPUN PILE 0.60 M. PILE CAPACITY AND REINFORCEMENT DETAILS', 26, 5, 386),
+ (3, 'AP-101', 'APPROACH SLAB 025 SKEW REINFORCEMENT AND POROUS BACKFILL DETAILS', 26, 5, 387),
+ (3, 'AP-102', 'APPROACH SLAB 26 15 SKEW REINFORCEMENT AND POROUS BACKFILL DETAILS', 26, 5, 388),
+ (3, 'LP3-ED-DN-001', 'แปลนระบบระบายน้าถนน RN-7', 27, 5, 255),
+ (3, 'LP3-ED-DN-002', 'แปลนระบบระบายน้ำของทางเข้าออกสำหรับรถขนาดใหญ่', 27, 5, 256),
+ (3, 'LP3-ED-DN-003', 'ขนาดและรายละเอียดการเสริมเหล็กสำหรับท่อกลม', 27, 5, 257),
+ (3, 'LP3-ED-DN-004', 'การขุดวางท่อ การรองพื้นท่อ และการต่อท่อสำหรับท่อกลม', 27, 5, 258),
+ (3, 'LP3-ED-DN-005', 'มาตรฐานบ่อพักท่อระบายน้าสำหรับท่อกลม', 27, 5, 259),
+ (3, 'LP3-GN-EE-001', 'งานออกระบบไฟฟ้าส่องสว่างชุมชนบ้านแหลม', 28, 5, 260),
+ (3, 'LP3-GN-EE-002', 'งานออกระบบไฟฟ้าส่องสว่างทางแยกต่างระดับ A (1/2)', 28, 5, 261),
+ (3, 'LP3-GN-EE-003', 'งานออกระบบไฟฟ้าส่องสว่างทางแยกต่างระดับ A (2/2)', 28, 5, 262),
+ (3, 'LP3-GN-EE-004', 'งานออกระบบไฟฟ้าส่องสว่างทางเข้าประตู 2 (1/2)', 28, 5, 263),
+ (3, 'LP3-GN-EE-005', 'งานออกระบบไฟฟ้าส่องสว่างทางเข้าประตู 2 (2/2)', 28, 5, 264),
+ (3, 'LP3-GN-EE-006', 'งานออกระบบไฟฟ้าส่องสว่างทางเข้าประตู 4', 28, 5, 265),
+ (3, 'LP3-GN-EE-007', 'SINGLE DIAGRAM SP1-SP2 ชุมชนบ้านแหลม', 28, 5, 266),
+ (3, 'LP3-GN-EE-008', 'SINGLE DIAGRAM SP3-SP4 ชุมชนบ้านแหลม', 28, 5, 267),
+ (3, 'LP3-GN-EE-009', 'SINGLE DIAGRAM SP1-SP2 ทางแยกต่างระดับ', 28, 5, 268),
+ (3, 'LP3-GN-EE-010', 'SINGLE DIAGRAM SP1-SP2 ทางเข้าประตู 2 (1/2)', 28, 5, 269),
+ (3, 'LP3-GN-EE-011', 'SINGLE DIAGRAM SP3 ทางเข้าประตู 2 (2/2)', 28, 5, 270),
+ (3, 'LP3-GN-EE-012', 'SINGLE DIAGRAM SP5 ทางเข้าประตู 4', 28, 5, 271),
+ (3, 'LP3-UT-EE-701', 'แปลนรวม (KEY PLAN)', 29, 5, 272),
+ (3, 'LP3-UT-EE-702', 'สัญลักษณ์ระบบไฟฟ้า', 29, 5, 273),
+ (3, 'LP3-UT-EE-703', 'สัญลักษณ์ระบบสื่อสาร', 29, 5, 274),
+ (3, 'LP3-UT-EE-704', 'สัญลักษณ์โคมไฟ', 29, 5, 275),
+ (3, 'LP3-UT-EE-705', 'ไรเซอร์ไดอะแกรม', 29, 5, 276),
+ (3, 'LP3-UT-EE-706', 'SINGLE LINE DIAGRAM แผนที่ 1', 29, 5, 277),
+ (3, 'LP3-UT-EE-707', 'SINGLE LINE DIAGRAM แผนที่ 2', 29, 5, 278),
+ (3, 'LP3-UT-EE-708', 'SINGLE LINE DIAGRAM แผนที่ 3', 29, 5, 279),
+ (3, 'LP3-UT-EE-709', 'SINGLE LINE DIAGRAM แผนที่ 4', 29, 5, 280),
+ (3, 'LP3-UT-EE-710', 'SINGLE LINE DIAGRAM แผ่นที่ 5', 29, 5, 281),
+ (3, 'LP3-UT-EE-711', 'SINGLE LINE DIAGRAM แผนที่ 6', 29, 5, 282),
+ (3, 'LP3-UT-EE-712', 'SINGLE LINE DIAGRAM แผนที่ 7', 29, 5, 283),
+ (3, 'LP3-UT-EE-713', 'SINGLE LINE DIAGRAM แผ่นที่ 8', 29, 5, 284),
+ (3, 'LP3-UT-EE-714', 'SINGLE LINE DIAGRAM แผ่นที่ 9', 29, 5, 285),
+ (3, 'LP3-UT-EE-715', 'SINGLE LINE DIAGRAM แผนที่ 10', 29, 5, 286),
+ (3, 'LP3-UT-EE-716', 'แปลน โคมไฟ แผ่นที่ 1', 29, 5, 287),
+ (3, 'LP3-UT-EE-717', 'แปลนโคมไฟ แผ่นที่ 2', 29, 5, 288),
+ (3, 'LP3-UT-EE-718', 'แปลนโคมไฟ แผ่นที่ 3', 29, 5, 289),
+ (3, 'LP3-UT-EE-719', 'แปลนโคมไฟ แผ่นที่ 4', 29, 5, 290),
+ (3, 'LP3-UT-EE-720', 'แปลนโคมไฟ แผ่นที่ 5', 29, 5, 291),
+ (3, 'LP3-UT-EE-721', 'แปลนโคมไฟ แผ่นที่ 6', 29, 5, 292),
+ (3, 'LP3-UT-EE-722', 'แปลน โคมไฟ แผ่นที่ 7', 29, 5, 293),
+ (3, 'LP3-UT-EE-723', 'แปลนโคมไฟ แผ่นที่ 8', 29, 5, 294),
+ (3, 'LP3-UT-EE-724', 'แปลนโคมไฟ แผ่นที่ 9', 29, 5, 295),
+ (3, 'LP3-UT-EE-725', 'แปลนโคมไฟ แผ่นที่ 10', 29, 5, 296),
+ (3, 'LP3-UT-EE-726', 'แปลนโคมไฟ แผ่นที่ 11', 29, 5, 297),
+ (3, 'LP3-UT-EE-727', 'แปลนโคมไฟ แผ่นที่ 12', 29, 5, 298),
+ (3, 'LP3-UT-EE-728', 'แปลนโคมไฟ แผ่นที่ 13', 29, 5, 299),
+ (3, 'LP3-UT-EE-729', 'แปลนโคมไฟ แผ่นที่ 14', 29, 5, 300),
+ (3, 'LP3-UT-EE-730', 'แปลนโคมไฟ แผ่นที่ 15', 29, 5, 301),
+ (3, 'LP3-UT-EE-731', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 29, 5, 302),
+ (3, 'LP3-UT-EE-732', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 29, 5, 303),
+ (3, 'LP3-UT-EE-733', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 29, 5, 304),
+ (3, 'LP3-UT-EE-734', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 29, 5, 305),
+ (3, 'LP3-UT-EE-735', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 29, 5, 306),
+ (3, 'LP3-UT-EE-736', 'รายละเอียดการติดตั้ง แผ่นที่ 6', 29, 5, 307),
+ (3, 'LP3-UT-EE-737', 'รายละเอียดการติดตั้ง แผ่นที่ 7', 29, 5, 308),
+ (3, 'LP3-UT-EE-738', 'รายละเอียดการติดตั้ง แผ่นที่ 8', 29, 5, 309),
+ (3, 'LP3-TO-AB-001', 'TYPICAL DETAILS OF BOOTH ISLAND 1/2', 30, 5, 310),
+ (3, 'LP3-TO-AB-002', 'TYPICAL DETAILS OF BOOTH ISLAND 2/2', 30, 5, 311),
+ (3, 'LP3-TO-AB-003', 'TYPICAL DETAIL OF WEIGHTING SYSTEM', 30, 5, 312),
+ (3, 'LP3-WM-IT-001', 'PROJECT WEIGHING SYSTEM AND IT SYSTEM LOCATION', 31, 5, 313),
+ (3, 'LP3-WM-IT-002', 'TYPICAL DIAGRAM OF IT SYSTEM 1/2', 31, 5, 314),
+ (3, 'LP3-WM-IT-003', 'TYPICAL DIAGRAM OF IT SYSTEM 2/2', 31, 5, 315),
+ (3, 'LP3-WM-IT-004', 'TYPICAL DIAGRAM OF WEIGHING SYSTEM 1/3', 31, 5, 316),
+ (3, 'LP3-WM-IT-005', 'TYPICAL DIAGRAM OF WEIGHING SYSTEM 2/3', 31, 5, 317),
+ (3, 'LP3-WM-IT-006', 'TYPICAL DIAGRAM OF WEIGHING SYSTEM 3/3', 31, 5, 318),
+ (3, 'LP3-WM-IT-007', 'UPS POWER SINGLE LINE DIAGAM AND UPS POWER LOAD SCHEDULE', 31, 5, 319),
+ (3, 'LP3-WM-IT-008', 'WEIGHING PERIPHERAL DETAIL 1/2', 31, 5, 320),
+ (3, 'LP3-WM-IT-009', 'WEIGHING PERIPHERAL DETAIL 2/2', 31, 5, 321),
+ (3, 'LP3-WM-IT-010', 'VEHICLE DETECTOR AND STEEL POLE DETAIL', 31, 5, 322),
+ (3, 'LP3-WM-IT-011', 'REMOTE DISPLAY FOR WEIGHT DATA DISPLAY WITH LPR AND STEEL POLE DETAIL', 31, 5, 323),
+ (3, 'LP3-WM-IT-012', 'CCTV AND STEEL POLE DETAIL', 31, 5, 324),
+ (3, 'LP3-WM-IT-013', 'LED TRAFFIC LIGHT AND STEEL POLE DETAIL', 31, 5, 325),
+ (3, 'LP3-LA-PK-001', 'ลานจอดรถบรรทุก', 31, 5, 326),
+ (3, 'LP3-LA-PK-002', 'ผังแสดงลานขนถ่ายสินค้าข้างทางรถไฟท่า F', 32, 5, 327),
+ (3, 'LP3-LA-PK-003', 'ลานขนถ่ายสินค้าข้างทางรถไฟท่า F แผ่นที่ 1 STA.0+000 STA.0+600', 32, 5, 328),
+ (3, 'LP3-LA-PK-004', 'ลานขนถ่ายสินค้าข้างทางรถไฟท่า F แผ่นที่ 2 STA.0+600 - STA.1+200', 32, 5, 329),
+ (3, 'LP3-LA-PK-005', 'ลานขนถ่ายสินค้าข้างทางรถไฟทา F แผ่นที่ 3 STA 1+200 STA.1+659.343', 32, 5, 330),
+ (3, 'LP3-WS-GN-001', 'สารบัญ', 33, 6, 1),
+ (3, 'LP3-WS-GN-002', 'สัญลักษณ์และคำย่อ', 33, 6, 2),
+ (3, 'LP3-WS-GN-003', 'แผนภูมิระบบประปา', 33, 6, 3),
+ (3, 'LP3-WS-GN-004', 'ผังบริเวณระบบประปา', 33, 6, 4),
+ (3, 'LP3-WS-WD-001', 'ผังระบบท่อประปา (แผ่นที่ 1/4)', 33, 6, 5),
+ (3, 'LP3-WS-WD-002', 'ผังระบบท่อประปา (แผ่นที่ 2/4)', 33, 6, 6),
+ (3, 'LP3-WS-WD-003', 'ผังระบบท่อประปา (แผ่นที่ 3/4)', 33, 6, 7),
+ (3, 'LP3-WS-WD-004', 'ผังระบบท่อประปา (แผ่นที่ 4/4)', 33, 6, 8),
+ (3, 'LP3-WS-WD-005', 'ผังระบบท่อประปาบริเวณ ท่าเรือบริการ', 33, 6, 9),
+ (3, 'LP3-WS-WD-006', 'ผังระบบท่อประปาบริเวณ ท่าเรือชายฝั่ง', 33, 6, 10),
+ (3, 'LP3-WS-CW-001', 'แปลนฝาถัง', 33, 6, 11),
+ (3, 'LP3-WS-CW-002', 'แปลนกันถึง', 33, 6, 12),
+ (3, 'LP3-WS-CW-003', 'รูปด้าน รูปตัด', 33, 6, 13),
+ (3, 'LP3-WS-CW-004', 'แปลนพื้น คาน ที่ฝาถัง', 33, 6, 14),
+ (3, 'LP3-WS-CW-005', 'แปลนพื้น ผนัง เสา ค.ส.ล. ที่กันถัง', 33, 6, 15),
+ (3, 'LP3-WS-CW-006', 'แปลนเสาเข็ม', 33, 6, 16),
+ (3, 'LP3-WS-CW-007', 'รายละเอียดทั่วไป', 33, 6, 17),
+ (3, 'LP3-WS-CW-008', 'รายละเอียดการเสริมเหล็ก (แผ่นที่ 1/2)', 33, 6, 18),
+ (3, 'LP3-WS-CW-009', 'รายละเอียดการเสริมเหล็ก (แผ่นที่ 2/2)', 33, 6, 19),
+ (3, 'LP3-WS-ET-001', 'รายการประกอบแปลน', 33, 6, 20),
+ (3, 'LP3-WS-ET-002', 'รูปด้าน', 33, 6, 21),
+ (3, 'LP3-WS-ET-003', 'แปลนพื้น ชั้นที่ 1-6', 33, 6, 22),
+ (3, 'LP3-WS-ET-004', 'แปลนถังเก็บน้ำ พื้นเหนือถังเก็บน้ำและหลังคา', 33, 6, 23),
+ (3, 'LP3-WS-ET-005', 'รูปตัด', 33, 6, 24),
+ (3, 'LP3-WS-ET-006', 'ขยาย', 33, 6, 25),
+ (3, 'LP3-WS-ET-007', 'รายละเอียดทั่วไป (แผ่นที่ 1/2)', 33, 6, 26),
+ (3, 'LP3-WS-ET-008', 'รายละเอียดทั่วไป (แผ่นที่ 2/2)', 33, 6, 27),
+ (3, 'LP3-WS-ET-009', 'รายละเอียดการเสริมเหล็ก (แผ่นที่ 1/2)', 33, 6, 28),
+ (3, 'LP3-WS-ET-010', 'รายละเอียดการเสริมเหล็ก (แผนที่ 2/2)', 33, 6, 29),
+ (3, 'LP3-WS-ET-011', 'รายละเอียดการเสริมเหล็กถังเก็บน้ำ (แผ่นที่ 1/2)', 33, 6, 30),
+ (3, 'LP3-WS-ET-012', 'รายละเอียดการเสริมเหล็กถังเก็บน้ำ (แผ่นที่ 2/2)', 33, 6, 31),
+ (3, 'LP3-WS-ET-013', 'รายละเอียดฐานราก และ เสาเข็ม', 33, 6, 32),
+ (3, 'LP3-WS-ET-014', 'ระบบไฟฟ้า - แปลนพื้นชั้นที่ 1 - 6', 33, 6, 33),
+ (3, 'LP3-WS-ET-015', 'ระบบไฟฟ้า - รูปตัด', 33, 6, 34),
+ (3, 'LP3-WS-ET-016', 'รายละเอียดสายล่อฟ้า', 33, 6, 35),
+ (3, 'LP3-WS-WS-001', 'สัญลักษณ์ประกอบ', 2, 6, 36),
+ (3, 'LP3-WS-WS-002', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 6, 37),
+ (3, 'LP3-WS-WS-003', 'ผังบริเวณอาคาร', 2, 6, 38),
+ (3, 'LP3-WS-WS-101', 'แปลนพื้นชั้นที่ 1, แปลนพื้นชั้น 2, แปลนหลังคา', 2, 6, 39),
+ (3, 'LP3-WS-WS-102', 'รูปด้าน 1, 2, 3, 4', 2, 6, 40),
+ (3, 'LP3-WS-WS-103', 'รูปตัด A, B', 2, 6, 41),
+ (3, 'LP3-WS-WS-104', 'ขยายบันได 1', 2, 6, 42),
+ (3, 'LP3-WS-WS-105', 'ขยายห้องน้ำ 1 ห้องน้ำ 2', 2, 6, 43),
+ (3, 'LP3-WS-WS-106', 'อยายประตู - หน้าต่าง, ตารางรายการวัสดุประตู - หน้าต่าง', 2, 6, 44),
+ (3, 'LP3-WS-WS-107', 'ขยายประตูรั้วโครงการ, ขยายขอบคันหิน', 2, 6, 45),
+ (3, 'LP3-WS-WS-108', 'แปลนผ้า - เพดานชิ้นที่ 1. แปลนผ้า - เพดานชั้นที่ 2', 2, 6, 46),
+ (3, 'LP3-WS-WS-109', 'แปลนแสดงครุภัณฑ์ ชั้นที่ 1. 2', 2, 6, 47),
+ (3, 'LP3-WS-WS-110', 'แปลนแสดงตำแหน่งป้าย ชั้นที่ 1. 2', 2, 6, 48),
+ (3, 'LP3-WS-WS-201', 'การติดตั้งเครื่องสูบน้ำ', 34, 6, 49),
+ (3, 'LP3-WS-WS-202', 'รายละเอียดแท่นเครื่องสูบน้ำและการยึดท่อ', 34, 6, 50),
+ (3, 'LP3-WS-WS-203', 'รายละเอียดการติดตั้งเครน', 34, 6, 51),
+ (3, 'LP3-WS-WS-204', 'รายละเอียดระบบควบคุมเครื่องสูบน้ำ', 34, 6, 52),
+ (3, 'LP3-WS-WS-205', 'ตัวอย่างกราฟฟิกบนจอ TOUCH SCREEN ที่ตู้ควบคุม PLC1', 34, 6, 53),
+ (3, 'LP3-WS-WS-206', 'ขยายห้องจ่ายคลอรีน', 34, 6, 54),
+ (3, 'LP3-WS-WS-301', 'สัญลักษณ์ประกอบ', 4, 6, 55),
+ (3, 'LP3-WS-WS-302', 'ข้อกำหนดทั่วไป', 4, 6, 56),
+ (3, 'LP3-WS-WS-303', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 6, 57),
+ (3, 'LP3-WS-WS-304', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 6, 58),
+ (3, 'LP3-WS-WS-305', 'โครงสร้าง ฐานราก ชั้น 1, 2', 4, 6, 59),
+ (3, 'LP3-WS-WS-306', 'โครงสร้างหลังคา รูปตัด A. B', 4, 6, 60),
+ (3, 'LP3-WS-WS-307', 'ขยายโครงสร้างห้องจ่ายคลอรีน', 4, 6, 61),
+ (3, 'LP3-WS-WS-308', 'ขยายรายละเอียดโครงสร้าง แผ่นที่ 1', 4, 6, 62),
+ (3, 'LP3-WS-WS-309', 'ขยายรายละเอียดโครงสร้าง แผ่นที่ 2', 4, 6, 63),
+ (3, 'LP3-WS-WS-310', 'ขยายรายละเอียดโครงสร้าง แผ่นที่ 3', 4, 6, 64),
+ (3, 'LP3-WS-WS-401', 'สัญลักษณ์และคำย่อ', 5, 6, 65),
+ (3, 'LP3-WS-WS-402', 'ตารางแสดงรายการประกอบ', 5, 6, 66),
+ (3, 'LP3-WS-WS-403', 'ไดอะแกรมระบบจ่ายน้ำประปา และระบบระบายน้ำเสีย', 5, 6, 67),
+ (3, 'LP3-WS-WS-404', 'ไดอะแกรมระบบระบายน้ำฝน', 5, 6, 68),
+ (3, 'LP3-WS-WS-405', 'แปลนระบบจ่ายน้ำประปา ชั้นที่ 1 และชั้นที่ 2', 5, 6, 69),
+ (3, 'LP3-WS-WS-406', 'แปลนระบบระบายน้ำเสีย ชั้นที่ 1 และชั้นที่ 2', 5, 6, 70),
+ (3, 'LP3-WS-WS-407', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1 ชั้นที่ 2 และชั้นหลังคา', 5, 6, 71),
+ (3, 'LP3-WS-WS-408', 'ขยายห้องน้ำ 1', 5, 6, 72),
+ (3, 'LP3-WS-WS-409', 'ขยายห้องน้ำ 2', 5, 6, 73),
+ (3, 'LP3-WS-WS-410', 'ขยายมาตรฐานการติดตั้งทั่วไป (แผ่นที่ 1/3)', 5, 6, 74),
+ (3, 'LP3-WS-WS-411', 'ขยายมาตรฐานการติดตั้งทั่วไป (แผ่นที่ 2/3)', 5, 6, 75),
+ (3, 'LP3-WS-WS-412', 'ขยายมาตรฐานการติดตั้งทั่วไป (แผ่นที่ 3/3)', 5, 6, 76),
+ (3, 'LP3-WS-WS-501', 'สัญลักษณ์และค่ายอ', 35, 6, 77),
+ (3, 'LP3-WS-WS-502', 'รายการวัสดุอุปกรณ์ (แผ่นที่ 1/2)', 35, 6, 78),
+ (3, 'LP3-WS-WS-503', 'รายการวัสดุอุปกรณ์ (แผ่นที่ 2/2)', 35, 6, 79),
+ (3, 'LP3-WS-WS-504', 'แปลนระบบปรับอากาศ ชั้น 1 และชั้น 2', 35, 6, 80),
+ (3, 'LP3-WS-WS-505', 'แปลนระบบระบายอากาศ ชั้น 1 และชั้น 2', 35, 6, 81),
+ (3, 'LP3-WS-WS-506', 'แปลนขยายการติดตั้งทั่วไป (แผ่นที่ 1/2)', 35, 6, 82),
+ (3, 'LP3-WS-WS-507', 'แปลนขยายการติดตั้งทั่วไป (แผ่นที่ 2/2)', 35, 6, 83),
+ (3, 'LP3-WS-WS-601', 'สัญลักษณ์งานระบบไฟฟ้า', 11, 6, 84),
+ (3, 'LP3-WS-WS-602', 'สัญลักษณ์งานระบบสื่อสาร', 11, 6, 85),
+ (3, 'LP3-WS-WS-603', 'สัญลักษณ์ตารางโคม', 11, 6, 86),
+ (3, 'LP3-WS-WS-604', 'ตารางโหลดไฟฟ้า และ ไรเซอร์ ไดอะแกรม', 11, 6, 87),
+ (3, 'LP3-WS-WS-605', 'แปลนบ่อพักระบบไฟฟ้า', 11, 6, 88),
+ (3, 'LP3-WS-WS-606', 'แปลนโคมไฟถนนบริเวณอาคาร', 11, 6, 89),
+ (3, 'LP3-WS-WS-607', 'แปลน์โคมไฟ', 11, 6, 90),
+ (3, 'LP3-WS-WS-608', 'แปลนอุปกรณ์เต้ารับไฟฟ้า โทรศัพท์และเต้ารับแลน', 11, 6, 91),
+ (3, 'LP3-WS-WS-609', 'แปลนระบบป้องกันฟ้าผ่าและกราวด', 11, 6, 92),
+ (3, 'LP3-WS-WS-610', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้และเสียงประกาศสาธารณะ', 11, 6, 93),
+ (3, 'LP3-WS-WS-611', 'แปลนอุปกรณ์กล้องโทรทัศน์วงจรปิด', 11, 6, 94),
+ (3, 'LP3-WS-WS-612', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 1', 11, 6, 95),
+ (3, 'LP3-WS-WS-613', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 2', 11, 6, 96),
+ (3, 'LP3-WS-WS-614', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 3', 11, 6, 97),
+ (3, 'LP3-WS-WS-615', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 4', 11, 6, 98),
+ (3, 'LP3-WS-WS-616', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 5', 11, 6, 99),
+ (3, 'LP3-WS-WS-617', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 6', 11, 6, 100),
+ (3, 'LP3-WS-WS-618', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 7', 11, 6, 101),
+ (3, 'LP3-WS-WS-619', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 8', 11, 6, 102),
+ (3, 'LP3-WS-WS-620', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 9', 11, 6, 103),
+ (3, 'LP3-WS-TP-001', 'รายละเอียดการติดตั้งหัวดับเพลิง', 36, 6, 104),
+ (3, 'LP3-WS-TP-002', 'รายละเอียดการติดตั้งมาตรวัดน้ำ', 36, 6, 105),
+ (3, 'LP3-WS-TP-003', 'การติดตั้ง AIR VALVE และ BLOW OFF', 36, 6, 106),
+ (3, 'LP3-WS-TP-004', 'มาตรฐานแท่นยึดอุปกรณ์ท่อ ท่อโค้งตามแนวราบ', 36, 6, 107),
+ (3, 'LP3-WS-TP-005', 'มาตรฐานแท่นยึดอุปกรณ์ท่อ ท่อโค้งตามแนวตั้ง', 36, 6, 108),
+ (3, 'LP3-WS-TP-006', 'มาตรฐานการวางท่อลอดถนนและค้ำยันรับท่อ', 36, 6, 109),
+ (3, 'LP3-WS-TP-007', 'มาตรฐานการวางท่อลอดถนนกรณีมีท่อระบายน้ำขวาง', 36, 6, 110),
+ (3, 'LP3-WS-TP-008', 'มาตรฐานการวางท่อในร่องดิน', 36, 6, 111),
+ (3, 'LP3-WS-TP-009', 'มาตรฐานรัดแยกเหล็กหล่อสำหรับท่อ PVC และท่อ HDPE', 36, 6, 112),
+ (3, 'LP3-WS-TP-010', 'มาตรฐานการบรรจบท่อชนิดต่างๆ', 36, 6, 113),
+ (3, 'LP3-WS-TP-011', 'รูปอุปกรณ์ท่อเหล็กหล่อ', 36, 6, 114),
+ (3, 'LP3-WS-TP-012', 'มาตรฐานข้อต่อยใบลท์', 36, 6, 115),
+ (3, 'LP3-WS-TP-013', 'รายละเอียดการต่อเชื่อมท่อเมนประปา', 36, 6, 116),
+ (3, 'LP3-WS-TP-014', 'มาตรฐานการแขวนท่อประปา', 36, 6, 117),
+ (3, 'LP3-WS-TP-015', 'การติดตั้งประตูน้ำชนิดใต้ดิน', 36, 6, 118),
+ (3, 'LP3-DW-GN-001', 'สารบัญ แผนที่ 1/2', 10, 6, 1),
+ (3, 'LP3-DW-GN-002', 'สารบัญ แผนที่ 2/2', 10, 6, 2),
+ (3, 'LP3-DW-GN-003', 'หมายเหตุทั่วไปงานโยธา', 10, 6, 3),
+ (3, 'LP3-DW-GN-004', 'สัญลักษณ์และอักษรยองานโยธา', 10, 6, 4),
+ (3, 'LP3-DW-DS-001', 'ผังระบบระบายน้ำหลักของโครงการ', 10, 6, 5),
+ (3, 'LP3-DW-DS-002', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-3 กม. 0+000 - กม. 0+500', 10, 6, 6),
+ (3, 'LP3-DW-DS-003', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-3 กม. 0+500 - กม. 1+000', 10, 6, 7),
+ (3, 'LP3-DW-DS-004', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-3 กม. 1+000 - กม.1+500', 10, 6, 8),
+ (3, 'LP3-DW-DS-005', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-3 กม. 1+500 - กม.2+000', 10, 6, 9),
+ (3, 'LP3-DW-DS-006', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-3 กม. 2+000 - กม. 2+158.328', 10, 6, 10),
+ (3, 'LP3-DW-DS-007', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 0+000 - กม. 0+500', 10, 6, 11),
+ (3, 'LP3-DW-DS-008', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 0+500 - กม. 1+000', 10, 6, 12),
+ (3, 'LP3-DW-DS-009', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 1+000 - กม. 1+500', 10, 6, 13),
+ (3, 'LP3-DW-DS-010', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 1+500 - กม. 2+000', 10, 6, 14),
+ (3, 'LP3-DW-DS-011', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 2+000 - กม. 2+500', 10, 6, 15),
+ (3, 'LP3-DW-DS-012', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 2+500 - กม.3+000', 10, 6, 16),
+ (3, 'LP3-DW-DS-013', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 3+000 - กม. 3+500', 10, 6, 17),
+ (3, 'LP3-DW-DS-014', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 3+500 - กม. 4+000', 10, 6, 18),
+ (3, 'LP3-DW-DS-015', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-4 กม. 4+000 - กม. 4+406.126', 10, 6, 19),
+ (3, 'LP3-DW-DS-016', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-5 กม. 0+000 - กม. 0+500', 10, 6, 20),
+ (3, 'LP3-DW-DS-017', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-5 กม. 0+500 - กม. 1+000', 10, 6, 21),
+ (3, 'LP3-DW-DS-018', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-5 กม. 1+000 - กม. 1+500', 10, 6, 22),
+ (3, 'LP3-DW-DS-019', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-5 กม. 1+500 - กม. 2+000', 10, 6, 23),
+ (3, 'LP3-DW-DS-020', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-5 กม. 2+000 - กม. 2+175.480', 10, 6, 24),
+ (3, 'LP3-DW-DS-021', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 0+000 - กม. 0+500', 10, 6, 25),
+ (3, 'LP3-DW-DS-022', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 0+500 - กม. 1+000', 10, 6, 26),
+ (3, 'LP3-DW-DS-023', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 1+000 - กม. 1+500', 10, 6, 27),
+ (3, 'LP3-DW-DS-024', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 1+500 - กม. 2+000', 10, 6, 28),
+ (3, 'LP3-DW-DS-025', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 2+000 - กม. 2+500', 10, 6, 29),
+ (3, 'LP3-DW-DS-026', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 2+500 - กม. 3+000', 10, 6, 30),
+ (3, 'LP3-DW-DS-027', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 3+000 - กม. 3+500', 10, 6, 31),
+ (3, 'LP3-DW-DS-028', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6LT กม. 3+500 - กม. 3+840.21', 10, 6, 32),
+ (3, 'LP3-DW-DS-029', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 0+000 - กม. 0+500', 10, 6, 33),
+ (3, 'LP3-DW-DS-030', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 0+500 - กม. 1+000', 10, 6, 34),
+ (3, 'LP3-DW-DS-031', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 1+000 - กม. 1+500', 10, 6, 35),
+ (3, 'LP3-DW-DS-032', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 1+500 - กม. 2+000', 10, 6, 36),
+ (3, 'LP3-DW-DS-033', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 2+000 - กม. 2+500', 10, 6, 37),
+ (3, 'LP3-DW-DS-034', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 2+500 - กม. 3+000', 10, 6, 38),
+ (3, 'LP3-DW-DS-035', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 3+000 - กม. 3+500', 10, 6, 39),
+ (3, 'LP3-DW-DS-036', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ ถนน RN-6RT กม. 3+500 - กม. 3+826.956', 10, 6, 40),
+ (3, 'LP3-DW-DS-037', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 2+652.785 - กม. 3+000 ', 10, 6, 41),
+ (3, 'LP3-DW-DS-038', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 3+000 - กม. 3+500 ', 10, 6, 42),
+ (3, 'LP3-DW-DS-039', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 3+500 - กม. 4+000', 10, 6, 43),
+ (3, 'LP3-DW-DS-040', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 4+000 - กม. 4+500', 10, 6, 44),
+ (3, 'LP3-DW-DS-041', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 4+500 - กม. 5+000', 10, 6, 45),
+ (3, 'LP3-DW-DS-042', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 5+000 - กม. 5+500', 10, 6, 46),
+ (3, 'LP3-DW-DS-043', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 5+500 - กม. 6+000', 10, 6, 47),
+ (3, 'LP3-DW-DS-044', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 6+000 - กม. 6+500', 10, 6, 48),
+ (3, 'LP3-DW-DS-045', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 6+500 - กม. 7+000', 10, 6, 49),
+ (3, 'LP3-DW-DS-046', 'แปลนและรูปตัดตามยาวระบบระบายน้ำ พื้นที่ว่าง กม. 7+000 - กม. 47+103.661', 10, 6, 50),
+ (3, 'LP3-DW-DS-047', 'ขนาดและรายละเอียดการเสริมเหล็กสำหรับทอกลม', 10, 6, 51),
+ (3, 'LP3-DW-DS-048', 'การชุดวางท่อระบายน้ำ การรองพื้นท่อ และการต่อท่อสำหรับท่อกลม', 10, 6, 52),
+ (3, 'LP3-DW-DS-049', 'มาตรฐานบอพักทอระบายน้ำสำหรับทอกลม', 10, 6, 53),
+ (3, 'LP3-DW-DS-050', 'ทอ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจร วัสดุถมน้อยกว่า 0.60 ม.', 10, 6, 54),
+ (3, 'LP3-DW-DS-051', 'ทอ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจร วัสดุถมระหว่าง 0.60 ม. ถึง 3.00 ม.', 10, 6, 55),
+ (3, 'LP3-DW-DS-052', 'ทอ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำได้ทางเท้า วัสดุถมระหว่าง 0.60 ม. ถึง 3.00 ม.', 10, 6, 56),
+ (3, 'LP3-DW-DS-053', 'ทอ ค.ส.ล. รูปสี่เหลียม ชนิดเสริมพิเศษ', 10, 6, 57),
+ (3, 'LP3-DW-DS-054', 'การขุดวางทอระบายน้ำ การรองพื้นท่อ และการต่อท่อสำหรับท่อเหลี่ยม', 10, 6, 58),
+ (3, 'LP3-DW-DS-055', 'มาตรฐานบ่อพักทอระบายน้ำสำหรับท่อเหลี่ยม', 10, 7, 59),
+ (3, 'LP3-DW-DS-056', 'รายละเอียดรางระบายน้ำ ค.ส.ล. พร้อมฝาตะแกรงเหล็ก', 10, 7, 60),
+ (3, 'LP3-DW-RP-001', 'แปลนและรูปตัดบอหน่วงน้ำ', 10, 7, 61),
+ (3, 'LP3-DW-RP-002', 'ขยายรูปตัดบอหน่วงน้ำ', 10, 7, 62),
+ (3, 'LP3-DW-RP-003', 'แปลนบ่อหน่วงน้ำและรูปตัด 1-1. รูปตัด 2-2', 10, 7, 63),
+ (3, 'LP3-DW-RP-004', 'รายละเอียดการเสริมเหล็ก', 10, 7, 64),
+ (3, 'LP3-DW-RP-005', 'การติดตั้งเครื่องสูบน้ำ และขยายตะแกรงดักขยะ', 10, 7, 65),
+ (3, 'LP3-DW-RP-006', 'แปลนบ่อหน่วงน้ำและรูปตัด 1-1, รูปตัด 2-2', 10, 7, 66),
+ (3, 'LP3-DW-RP-007', 'รายละเอียดการเสริมเหล็ก', 10, 7, 67),
+ (3, 'LP3-DW-RP-008', 'การติดตั้งเครื่องสูบน้ำ และขยายตะแกรงดักขยะ', 10, 7, 68),
+ (3, 'LP3-DW-RP-009', 'SINGLE LINE DIAGRAM 1/3', 11, 7, 69),
+ (3, 'LP3-DW-RP-010', 'SINGLE LINE DIAGRAM 2/3', 11, 7, 70),
+ (3, 'LP3-DW-RP-011', 'SINGLE LINE DIAGRAM 3/3', 11, 7, 71),
+ (3, 'LP3-DW-RP-012', 'รายละเอียดการติดตั้งทั่วไป', 11, 7, 72),
+ (3, 'LP3-DW-PS-001', 'ผังบริเวณสถานีสูบระบายน้ำ', 2, 7, 73),
+ (3, 'LP3-DW-PS-002', 'แปลนสถานีสูบระบายน้ำ (ระดับ +4.20 ม.รทก.)', 2, 7, 74),
+ (3, 'LP3-DW-PS-003', 'แปลนสถานีสูบระบายน้ำ (ระดับ +3.60 ม.รทก.)', 2, 7, 75),
+ (3, 'LP3-DW-PS-004', 'รูปตัด ก-ก. รูปติด 8-8', 2, 7, 76),
+ (3, 'LP3-DW-PS-005', 'รูปติด ค-ค. รูปตัด ง-ง', 2, 7, 77),
+ (3, 'LP3-DW-PS-006', 'แปลนเสาเข็ม', 4, 7, 78),
+ (3, 'LP3-DW-PS-007', 'แปลนคาน (ระดับ +4.20 ม.รทก.)', 4, 7, 79),
+ (3, 'LP3-DW-PS-008', 'รายละเอียดการเสริมเหล็ก รูปตัด ก-ก. รูปตัด ข-ช', 4, 7, 80),
+ (3, 'LP3-DW-PS-009', 'รายละเอียดการเสริมเหล็ก รูปตัด ค-ค, รูปตัด ง-ง', 4, 7, 81),
+ (3, 'LP3-DW-PS-010', 'รายละเอียดการเสริมเหล็กเสา, คาน และเหล็กเสริมพิเศษ', 4, 7, 82),
+ (3, 'LP3-DW-PS-011', 'รายละเอียดตะแกรงดักขยะ', 4, 7, 83),
+ (3, 'LP3-DW-PS-012', 'ราวกันตก, บันไดลิง และฝาตะแกรงเหล็ก', 4, 7, 84),
+ (3, 'LP3-DW-PS-013', 'GANTRY CRANE ขนาด 5 ตัน', 4, 7, 85),
+ (3, 'LP3-DW-PS-014', 'แปลนอาคารรับน้ำ และรูปตัด 1-1. รูปตัด 2-2', 4, 7, 86),
+ (3, 'LP3-DW-PS-015', 'รายละเอียดการเสริมเหล็กอาคารรับน้ำ', 4, 7, 87),
+ (3, 'LP3-DW-PS-016', 'แปลนอาคารระบายน้ำ และรูปตัด 1-1, รูปตัด 2-2', 4, 7, 88),
+ (3, 'LP3-DW-PS-017', 'รายละเอียดการเสริมเหล็กอาคารระบายน้ำ', 4, 7, 89),
+ (3, 'LP3-DW-PS-018', 'รายละเอียดระบบควบคุมเครื่องสูบน้ำ ST2', 11, 7, 90),
+ (3, 'LP3-DW-PS-019', 'ตัวอยางกราฟิกบนจอ TOUCH SCREEN ที่ตู้ควบคุม PLC2', 11, 7, 91),
+ (3, 'LP3-DW-CW-001', 'ข้อกำหนดทั่วไปงานโครงสร้าง', 4, 7, 92),
+ (3, 'LP3-DW-CW-002', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 7, 93),
+ (3, 'LP3-DW-CW-003', 'ผังโครงสร้างอาคาร', 4, 7, 94),
+ (3, 'LP3-DW-CW-004', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1/3', 4, 7, 95),
+ (3, 'LP3-DW-CW-005', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2/3', 4, 7, 96),
+ (3, 'LP3-DW-CW-006', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3/3', 4, 7, 97),
+ (3, 'LP3-DW-CW-007', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 7, 98),
+ (3, 'LP3-DW-CW-008', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 7, 99),
+ (3, 'LP3-DW-CW-009', 'ผังแม่บทท่าเรือขึ้นที่ 3', 2, 7, 100),
+ (3, 'LP3-DW-CW-010', 'ผังบริเวณอาคาร', 2, 7, 101),
+ (3, 'LP3-DW-CW-011', 'แปลนพื้นชั้นที่ 1. แปลนหลังคา, แปลนผ้า-เพดาน', 2, 7, 102),
+ (3, 'LP3-DW-CW-012', 'รูปด้าน 1, 2, 3, 4, รุปตัด A, B', 2, 7, 103),
+ (3, 'LP3-DW-CW-013', 'ขยายห้องน้ำ 1', 2, 7, 104),
+ (3, 'LP3-DW-CW-014', 'ขยายประตู-หน้าต่าง', 2, 7, 105),
+ (3, 'LP3-DW-CW-015', 'แปลนผ้า-เพดานชั้นที่ 1', 2, 7, 106),
+ (3, 'LP3-DW-CW-016', 'แปลนแสดงครุภัณฑ์ ชั้น 1', 2, 7, 107),
+ (3, 'LP3-DW-CW-017', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 2, 7, 108),
+ (3, 'LP3-DW-CW-018', 'สัญลักษณ์ระบบไฟฟ้า', 2, 7, 109),
+ (3, 'LP3-DW-CW-019', 'สัญลักษณ์ระบบสื่อสาร', 11, 7, 110),
+ (3, 'LP3-DW-CW-020', 'สัญลักษณ์ตารางโคม', 11, 7, 111),
+ (3, 'LP3-DW-CW-021', 'SINGLE LINE DIAGRAM 1/2', 11, 7, 112),
+ (3, 'LP3-DW-CW-022', 'SINGLE LINE DIAGRAM 2/2', 11, 7, 113),
+ (3, 'LP3-DW-CW-023', 'RISER DIAGRAM และตารางโทลด', 11, 7, 114),
+ (3, 'LP3-DW-CW-024', 'แปลนโคมไฟ', 11, 7, 115),
+ (3, 'LP3-DW-CW-025', 'แปลนเต้ารับไฟฟ้า, โทรศัพท์และคอมพิวเตอร์', 11, 7, 116),
+ (3, 'LP3-DW-CW-026', 'แปลนระบบป้องกันฟ้าผ่าและกราวด์', 11, 7, 117),
+ (3, 'LP3-DW-CW-027', 'แปลนแจ้งเหตุเพลิงไหม้', 11, 7, 118),
+ (3, 'LP3-DW-CW-028', 'แปลน์โทรทัศน์วงจรปิด', 11, 7, 119),
+ (3, 'LP3-DW-CW-029', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 1', 11, 7, 120),
+ (3, 'LP3-DW-CW-030', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 2', 11, 7, 121),
+ (3, 'LP3-DW-CW-031', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 3', 11, 7, 122),
+ (3, 'LP3-DW-CW-032', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 4', 11, 7, 123),
+ (3, 'LP3-DW-CW-033', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 5', 11, 7, 124),
+ (3, 'LP3-DW-CW-034', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 6', 11, 7, 125),
+ (3, 'LP3-DW-CW-035', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 7', 11, 7, 126),
+ (3, 'LP3-DW-CW-036', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 8', 11, 7, 127),
+ (3, 'LP3-DW-CW-037', 'รายละเอียดการติดตั้งทั่วไป แผ่นที่ 9', 11, 7, 128),
+ (3, 'LP3-DW-CW-038', 'สัญลักษณ์และอักษรยอ', 11, 7, 129),
+ (3, 'LP3-DW-CW-039', 'รายการวัสดุและอุปกรณ์ 1/2', 6, 7, 130),
+ (3, 'LP3-DW-CW-040', 'รายการวัสดุและอุปกรณ์ 2/2', 6, 7, 131),
+ (3, 'LP3-DW-CW-041', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้นที่ 1', 6, 7, 132),
+ (3, 'LP3-DW-CW-042', 'ขยายการติดตั้งทั่วไป 1/2', 6, 7, 133),
+ (3, 'LP3-DW-CW-043', 'ขยายการติดตั้งทั่วไป 2/2', 6, 7, 134),
+ (3, 'LP3-DW-CW-044', 'สัญลักษณ์และอักษรย่อ', 6, 7, 135),
+ (3, 'LP3-DW-CW-045', 'ตารางแสดงรายการประกอบ', 5, 7, 136),
+ (3, 'LP3-DW-CW-046', 'ไดอะแกรมระบบสุขาภิบาล', 5, 7, 137),
+ (3, 'LP3-DW-CW-047', 'แปลนระบบสุขาภิบาล ชั้นที่ 1', 5, 7, 138),
+ (3, 'LP3-DW-CW-048', 'แปลนระบบระบายน้ำ ชั้นที่ 1 และชั้นหลังคา', 5, 7, 139),
+ (3, 'LP3-DW-CW-049', 'ขยายห้องน้ำ', 5, 7, 140),
+ (3, 'LP3-DW-CW-050', 'ขยายมาตรฐานการติดตั้งทั่วไป 1/3', 5, 7, 141),
+ (3, 'LP3-DW-CW-051', 'ขยายมาตรฐานการติดตั้งทั่วไป 2/3', 5, 7, 142),
+ (3, 'LP3-DW-CW-052', 'ขยายมาตรฐานการติดตั้งทั่วไป 3/3', 5, 7, 143),
+ (3, 'LP3-WW-GN-001', 'สารบัญ', 37, 7, 1),
+ (3, 'LP3-WW-GN-002', 'รายการสัญลักษณ์ อักษรย่อและรายการอุปกรณ์', 37, 7, 2),
+ (3, 'LP3-WW-GN-003', 'ไดอะแกรมระบบบำบัดน้ำเสีย', 37, 7, 3),
+ (3, 'LP3-WW-GN-004', 'ผังบริเวณระบบบำบัดน้ำเสีย', 37, 7, 4),
+ (3, 'LP3-WW-G5-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย (แผ่นที่ 1/2)', 37, 7, 5),
+ (3, 'LP3-WW-G5-002', 'ขยายตำแหน่งถังบำบัดน้ำเสีย (แผ่นที่ 2/2)', 37, 7, 6),
+ (3, 'LP3-WW-G5-003', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย (แผ่นที่ 1/2)', 37, 7, 7),
+ (3, 'LP3-WW-G5-004', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย (แผ่นที่ 2/2)', 37, 7, 8),
+ (3, 'LP3-WW-HV-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 9),
+ (3, 'LP3-WW-HV-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 10),
+ (3, 'LP3-WW-S6-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 11),
+ (3, 'LP3-WW-S6-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 12),
+ (3, 'LP3-WW-S7-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 13),
+ (3, 'LP3-WW-S7-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 14),
+ (3, 'LP3-WW-SW-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 15),
+ (3, 'LP3-WW-SW-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 16),
+ (3, 'LP3-WW-MD-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย (แผ่นที่ 1/2)', 37, 7, 17),
+ (3, 'LP3-WW-MD-002', 'ขยายตำแหน่งถังบำบัดน้ำเสีย (แผ่นที่ 2/2)', 37, 7, 18),
+ (3, 'LP3-WW-MD-003', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย (แผ่นที่ 1/3)', 37, 7, 19),
+ (3, 'LP3-WW-MD-004', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย (แผ่นที่ 2/3)', 37, 7, 20),
+ (3, 'LP3-WW-MD-005', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย (แผ่นที่ 3/3)', 37, 7, 21),
+ (3, 'LP3-WW-WS-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 22),
+ (3, 'LP3-WW-WS-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 23),
+ (3, 'LP3-WW-CW-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 24),
+ (3, 'LP3-WW-CW-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 25),
+ (3, 'LP3-WW-CH-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 26),
+ (3, 'LP3-WW-CH-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 27),
+ (3, 'LP3-WW-SD-001', 'อยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 28),
+ (3, 'LP3-WW-SD-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 29),
+ (3, 'LP3-WW-BA-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 30),
+ (3, 'LP3-WW-BA-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเลีย', 37, 7, 31),
+ (3, 'LP3-WW-TO-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 32),
+ (3, 'LP3-WW-TO-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 33),
+ (3, 'LP3-WW-WT-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 34),
+ (3, 'LP3-WW-WT-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 35),
+ (3, 'LP3-WW-WO-001', 'ขยายตำแหน่งถังบำบัดน้ำเสีย', 37, 7, 36),
+ (3, 'LP3-WW-WO-002', 'รายละเอียดการติดตั้งถังบำบัดน้ำเสีย', 37, 7, 37),
+ (3, 'LP3-WW-WO-003', 'รายละเอียดถังแยกน้ำมัน ขนาด 2 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 38),
+ (3, 'LP3-WW-WO-004', 'รายละเอียดถังแยกน้ำมัน ขนาด 2 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 39),
+ (3, 'LP3-WW-WO-005', 'รายละเอียดบ่อสูบน้ำเสีย (แผ่นที่ 1/3)', 37, 7, 40),
+ (3, 'LP3-WW-WO-006', 'รายละเอียดบ่อสูบน้ำเสีย (แผ่นที่ 2/3)', 37, 7, 41),
+ (3, 'LP3-WW-WO-007', 'รายละเอียดบ่อสูบน้ำเสีย (แผ่นที่ 3/3)', 37, 7, 42),
+ (3, 'LP3-WW-WO-008', 'รายละเอียดถังปฏิกิริยา (BATCH REACTOR) (แผ่นที่ 1/4)', 37, 7, 43),
+ (3, 'LP3-WW-WO-009', 'รายละเอียดถังปฏิกิริยา (BATCH REACTOR) (แผนที่ 2/4)', 37, 7, 44),
+ (3, 'LP3-WW-WO-010', 'รายละเอียดถังปฏิกิริยา (BATCH REACTOR) (แผ่นที่ 3/4)', 37, 7, 45),
+ (3, 'LP3-WW-WO-011', 'รายละเอียดถังปฏิกิริยา (BATCH REACTOR) (แผ่นที่ 4/4)', 37, 7, 46),
+ (3, 'LP3-WW-WO-012', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 2 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 47),
+ (3, 'LP3-WW-WO-013', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 2 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 48),
+ (3, 'LP3-WW-WO-014', 'รายละเอียดถังเก็บตะกอน (แผ่นที่ 1/2)', 37, 7, 49),
+ (3, 'LP3-WW-WO-015', 'รายละเอียดถังเก็บตะกอน (แผ่นที่ 2/2)', 37, 7, 50),
+ (3, 'LP3-WW-WO-016', 'รายละเอียดรั้วสำหรับระบบบำบัดน้ำเสีย', 37, 7, 51),
+ (3, 'LP3-WW-WO-017', 'รายละเอียดการติดตั้งโคมไฟภายนอกอาคาร (แผ่นที่ 1/2)', 37, 7, 52),
+ (3, 'LP3-WW-WO-018', 'รายละเอียดการติดตั้งโคมไฟภายนอกอาคาร (แผ่นที่ 2/2)', 37, 7, 53),
+ (3, 'LP3-WW-TP-001', 'รายละเอียดถังดักไขมัน ขนาด 2 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 54),
+ (3, 'LP3-WW-TP-002', 'รายละเอียดถังดักไขมัน ขนาด 2 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 55),
+ (3, 'LP3-WW-TP-003', 'รายละเอียดถังดักไขมัน ขนาด 4 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 56),
+ (3, 'LP3-WW-TP-004', 'รายละเอียดถังดักไขมัน ขนาด 4 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 57),
+ (3, 'LP3-WW-TP-005', 'รายละเอียดถังเกรอะ ขนาด 1 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 58),
+ (3, 'LP3-WW-TP-006', 'รายละเอียดถังเกรอะ ขนาด 1 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 59),
+ (3, 'LP3-WW-TP-007', 'รายละเอียดถังเกรอะ ขนาด 2.5 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 60),
+ (3, 'LP3-WW-TP-008', 'รายละเอียดถังเกรอะ ขนาด 2.5 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 61),
+ (3, 'LP3-WW-TP-009', 'รายละเอียดถังเกรอะ ขนาด 5 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 62),
+ (3, 'LP3-WW-TP-010', 'รายละเอียดถังเกรอะ ขนาด 5 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 63),
+ (3, 'LP3-WW-TP-011', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 1 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 64),
+ (3, 'LP3-WW-TP-012', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 1 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 65),
+ (3, 'LP3-WW-TP-013', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 2 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 66),
+ (3, 'LP3-WW-TP-014', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 2 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 67),
+ (3, 'LP3-WW-TP-015', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 5 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 68),
+ (3, 'LP3-WW-TP-016', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 5 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 69),
+ (3, 'LP3-WW-TP-017', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 10 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 70),
+ (3, 'LP3-WW-TP-018', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 10 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 71),
+ (3, 'LP3-WW-TP-019', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 12 ลบ.ม./วัน (แผ่นที่ 1/2)', 37, 7, 72),
+ (3, 'LP3-WW-TP-020', 'รายละเอียดถังบำบัดน้ำเสียสำเร็จรูป - ขนาด 12 ลบ.ม./วัน (แผ่นที่ 2/2)', 37, 7, 73),
+ (3, 'LP3-WW-TP-021', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 1 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 74),
+ (3, 'LP3-WW-TP-022', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 1 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 75),
+ (3, 'LP3-WW-TP-023', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 2 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 76),
+ (3, 'LP3-WW-TP-024', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 2 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 77),
+ (3, 'LP3-WW-TP-025', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 5 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 78),
+ (3, 'LP3-WW-TP-026', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 5 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 79),
+ (3, 'LP3-WW-TP-027', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 10 ลบ.ม. (แผ่นที่ 1/2)', 37, 7, 80),
+ (3, 'LP3-WW-TP-028', 'รายละเอียดถังเก็บน้ำทิ้ง ขนาด 10 ลบ.ม. (แผ่นที่ 2/2)', 37, 7, 81),
+ (3, 'LP3-WW-TP-029', 'รายละเอียดบ่อตรวจสอบน้ำทิ้ง', 37, 7, 82),
+ (3, 'LP3-UT-LA-001', 'สารบัญรายละเอียดสัญลักษณ์ประกอบและค่ายอ', 38, 7, 1),
+ (3, 'LP3-UT-LA-101', 'ผังตำแหน่งแนวรั้วใครงการ', 38, 7, 2),
+ (3, 'LP3-UT-LA-301', 'ขยายรั้วโครงการ TYPE 1', 38, 7, 3),
+ (3, 'LP3-UT-LA-302', 'ขยายริ้วโครงการ TYPE 2', 38, 7, 4),
+ (3, 'LP3-UT-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 7, 5),
+ (3, 'LP3-UT-ST-002', 'ข้อกำหนดทั่วไป', 4, 7, 6),
+ (3, 'LP3-UT-ST-101', 'ผังแม่บทท่าเรือชั้นที่ 3', 4, 7, 7),
+ (3, 'LP3-UT-ST-102', 'ผังแสดงตำแหน่งอาคาร', 4, 7, 8),
+ (3, 'LP3-UT-ST-103', 'ผังแสดงตำแหน่งริ้ว', 4, 7, 9),
+ (3, 'LP3-UT-ST-201', 'ผังบริเวณ อาคารประตูตรวจสอบ 5', 4, 7, 10),
+ (3, 'LP3-UT-ST-202', 'ผังบริเวณ อาคารสูบจ่ายน้ำประปา', 4, 7, 11),
+ (3, 'LP3-UT-ST-203', 'ผังบริเวณ อาคารสถานีไฟฟ้าย่อย 115 kV.', 4, 7, 12),
+ (3, 'LP3-UT-ST-204', 'ผังบริเวณ อาคารสถานีไฟฟ้าย่อย 22 kV. No.6', 4, 7, 13),
+ (3, 'LP3-UT-ST-205', 'ผังบริเวณ อาคารสถานีไฟฟ้าย่อย 22 kV. No. 7', 4, 7, 14),
+ (3, 'LP3-UT-ST-206', 'ผังบริเวณ อาคารพักขยะอันตราย, อาคารพักขยะทั่วไป', 4, 7, 15),
+ (3, 'LP3-UT-ST-207', 'ผังบริเวณ อาคารร้านอาหารและจำหน่ายสินค้าปลอดภาษี', 4, 7, 16),
+ (3, 'LP3-UT-ST-208', 'ผังบริเวณ อาคารควบคุมสถานีสูบระบายน้ำ', 4, 7, 17),
+ (3, 'LP3-UT-ST-209', 'ผังบริเวณ สำนักงานท่าเรือบริการและห้องพักเจ้าหน้าที่, อาคารสื่อสารและหอสังเกตการณ์, โรงนอนพนักงาน', 4, 7, 18),
+ (3, 'LP3-UT-ST-210', 'ผังบริเวณ อาคารสำนักงานปฏิบัติการท่าเรือชายฝั่ง, ด่านทางเข้าท่าเรือชายฝั่ง, โรงซ่อมบำรุงส่วนท่าเรือชายฝั่ง, โรงไฟฟ้าย่อยขนาด 6.6 KV', 4, 7, 19),
+ (3, 'LP3-UT-ST-301', 'ขยายทางเดิน, ทางลาดคนพิการ', 4, 7, 20),
+ (3, 'LP3-UT-ST-311', 'ขยายถนน TYPE 1', 4, 7, 21),
+ (3, 'LP3-UT-ST-321', 'อยายถนน TYPE 2 แผ่นที่ 1', 4, 7, 22),
+ (3, 'LP3-UT-ST-322', 'อยายถนน TYPE 2 แผ่นที่ 2', 4, 7, 23),
+ (3, 'LP3-UT-ST-323', 'อยายถนน TYPE 2 แผ่นที่ 3', 4, 7, 24),
+ (3, 'LP3-UT-ST-401', 'อยายรั้วโปร่ง', 4, 7, 25),
+ (3, 'LP3-UT-ST-411', 'ขยายริ้วทับ', 4, 7, 26),
+ (3, 'LP3-UT-GN-001', 'สารบัญ รายละเอียดสัญลักษณ์ประกอบและคำย่อ', 5, 7, 27),
+ (3, 'LP3-UT-iN-001', 'อาคารสถานีไฟฟ้าย่อย ขนาด 115 kV. ผังระบบประปาและระบบระบายน้ำ', 5, 7, 28),
+ (3, 'LP3-UT-iN-002', 'อาคารสถานีไฟฟ้าย่อยขนาด 22 kV. No.6 - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 29),
+ (3, 'LP3-UT-iN-003', 'อาคารสถานีไฟฟ้าย่อยขนาด 22 kV. No.7 - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 30),
+ (3, 'LP3-UT-iN-004', 'อาคารพักขยะอันตราย และขยะทั่วไป - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 31),
+ (3, 'LP3-UT-iN-005', 'อาคารร้านอาหาร และจำหน่ายสินค้าปลอดภาษี - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 32),
+ (3, 'LP3-UT-iN-006', 'อาคารสถานีสูบจ่ายน้ำประปา - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 33),
+ (3, 'LP3-UT-iN-007', 'อาคารสถานีสูบระบายน้ำ - ฟังระบบประปาและระบบระบายน้ำ', 5, 7, 34),
+ (3, 'LP3-UT-iN-008', 'กลุ่มอาคารในท่าเรือบริการ - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 35),
+ (3, 'LP3-UT-iN-009', 'กลุ่มอาคารในท่าเรือชายฝั่ง - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 36),
+ (3, 'LP3-UT-iN-010', 'อาคารประตูตรวจสอบ 5 - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 37),
+ (3, 'LP3-UT-iN-011', 'อาคารควบคุมสถานีสูบน้ำทะเล - ผังระบบประปาและระบบระบายน้ำ', 5, 7, 38),
+ (3, 'LP3-CW-TP-101', 'รายละเอียดการต่อท่อประปาของโครงการ และท่อจ่ายน้ำประปาสำหรับอาคาร', 39, 7, 39),
+ (3, 'LP3-CW-TP-102', 'รายละเอียดการติดตั้งหัวดับเพลิง', 39, 7, 40),
+ (3, 'LP3-CW-TP-103', 'มาตราฐานการวางท่อในร่องดิน', 39, 7, 41),
+ (3, 'LP3-DN-TP-101', 'ขนาดและรายละเอียดการเสริมเหล็กสำหรับท่อกลม', 39, 7, 42),
+ (3, 'LP3-DN-TP-102', 'มาตรฐานบ่อพักท่อระบายน้ำสำหรับท่อกลม', 39, 7, 43),
+ (3, 'LP3-DN-TP-103', 'การขุดวางท่อระบายน้ำ การรองพื้นท่อ และการต่อท่อสำหรับท่อกลม', 39, 7, 44),
+ (3, 'LP3-DN-TP-104', 'ท่อ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจร วัสดุถมน้อยกว่า 0.60 ม', 39, 7, 45),
+ (3, 'LP3-DN-TP-105', 'ท่อ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ผิวจราจร วัสดุถมระหว่าง 0.60 ม ถึง 3.00 ม', 39, 7, 46),
+ (3, 'LP3-DN-TP-106', 'ท่อ ค.ส.ล. รูปสี่เหลี่ยม สำหรับงานระบายน้ำใต้ทางเท้า วัสดุถมระหว่าง 0.60 ม. ถึง 3.00 ม', 39, 7, 47),
+ (3, 'LP3-DN-TP-107', 'มาตรฐานบ่อพักท่อระบายน้ำสำหรับท่อเหลี่ยมเชื่อมต่อท่อเหลี่ยม', 39, 7, 48),
+ (3, 'LP3-DN-TP-108', 'การชุดวางท่อระบายน้ำ การรองพื้นท่อ และการต่อพ่อสำหรับท่อเหลี่ยม', 39, 7, 49),
+ (3, 'LP3-DN-TP-112', 'รายละเอียดรางระบายน้ำ ค.ส.ล. พร้อมฝาตะแกรงเหล็ก', 39, 7, 50),
+ (3, 'LP3-HV-AR-001', 'สารบัญ', 2, 8, 1),
+ (3, 'LP3-HV-AR-002', 'สัญลักษณ์ประกอบ, ตารางวัสดุประกอบ', 2, 8, 2),
+ (3, 'LP3-HV-AR-003', 'ผังแม่บททาเรือชั้นที่ 3', 2, 8, 3),
+ (3, 'LP3-HV-AR-004', 'ผังบริเวณอาคาร', 2, 8, 4),
+ (3, 'LP3-HV-AR-101', 'แปลนพื้นชั้นที่ 1', 2, 8, 5),
+ (3, 'LP3-HV-AR-102', 'แปลนพื้นชั้นที่ 2', 2, 8, 6),
+ (3, 'LP3-HV-AR-103', 'แปลนพื้นชั้นที่ 3', 2, 8, 7),
+ (3, 'LP3-HV-AR-104', 'แปลนหลังคา', 2, 8, 8),
+ (3, 'LP3-HV-AR-201', 'รูปด้าน 1.2', 2, 8, 9),
+ (3, 'LP3-HV-AR-202', 'รูปด้าน 3,4', 2, 8, 10),
+ (3, 'LP3-HV-AR-301', 'รูปตัด AB', 2, 8, 11),
+ (3, 'LP3-HV-AR-302', 'รูปตัด C', 2, 8, 12),
+ (3, 'LP3-HV-AR-401', 'ขยายบันได 1', 2, 8, 13),
+ (3, 'LP3-HV-AR-402', 'ขยายบันไดลิง LADDER', 2, 8, 14),
+ (3, 'LP3-HV-AR-403', 'ขยายทางลาด', 2, 8, 15),
+ (3, 'LP3-HV-AR-501', 'ขยายห้องน้ำ TL-01', 2, 8, 16),
+ (3, 'LP3-HV-AR-601', 'ขยายประตู หนาตาง 1/3', 2, 8, 17),
+ (3, 'LP3-HV-AR-602', 'ขยายประตู หนาดาง 2/3', 2, 8, 18),
+ (3, 'LP3-HV-AR-603', 'ขยายประตู หนาดาง 3/3', 2, 8, 19),
+ (3, 'LP3-HV-AR-604', 'ตารางรายการวัสดุประตู', 2, 8, 20),
+ (3, 'LP3-HV-AR-605', 'รายการอุปกรณ์ประตู-หน้าต่าง 1/3', 2, 8, 21),
+ (3, 'LP3-HV-AR-606', 'รายการอุปกรณ์ประตู-หน้าต่าง 2/3', 2, 8, 22),
+ (3, 'LP3-HV-AR-607', 'รายการอุปกรณ์ประตู-หน้าต่าง 3/3', 2, 8, 23),
+ (3, 'LP3-HV-AR-608', 'แสดงรายละเอียดประตู-หน้าต่าง 1/3', 2, 8, 24),
+ (3, 'LP3-HV-AR-609', 'แสดงรายละเอียดประตู-หน้าต่าง 2/3', 2, 8, 25),
+ (3, 'LP3-HV-AR-610', 'แสดงรายละเอียดประตู-หน้าต่าง 3/3', 2, 8, 26),
+ (3, 'LP3-HV-AR-701', 'รูปตัดผนัง', 2, 8, 27),
+ (3, 'LP3-HV-AR-702', 'อยายประตูรั้วใครงการ ขยายขอบคันหิน', 2, 8, 28),
+ (3, 'LP3-HV-AR-801', 'แปลนผ้า-เพดานชิ้นที่ 1', 2, 8, 29),
+ (3, 'LP3-HV-AR-802', 'แปลนฝา-เพดานชิ้นที่ 2', 2, 8, 30),
+ (3, 'LP3-HV-AR-803', 'แปลนผ้า-เพดานชิ้นที่ 3', 2, 8, 31),
+ (3, 'LP3-HV-ID-001', 'สารบัญ', 3, 8, 32),
+ (3, 'LP3-HV-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 2', 3, 8, 33),
+ (3, 'LP3-HV-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 8, 34),
+ (3, 'LP3-HV-ID-103', 'แปลนแสดงตำแหน่งป้าย ชั้น 2', 3, 8, 35),
+ (3, 'LP3-HV-ID-104', 'แปลนแสดงตำแหน่งป้าย ชั้น 3', 3, 8, 36),
+ (3, 'LP3-HV-ID-501', 'ตารางข้อกำหนดการใช้ครุภัณฑ์', 3, 8, 37),
+ (3, 'LP3-HV-ID-502', 'ตารางครุภัณฑ์', 3, 8, 38),
+ (3, 'LP3-HV-ID-503', 'ตารางครุภัณฑ์', 3, 8, 39),
+ (3, 'LP3-HV-ID-504', 'ตารางครุภัณฑ์', 3, 8, 40),
+ (3, 'LP3-HV-ID-601', 'ขยายห้องเตรียมอาหาร 81 ชั้น 2', 3, 8, 41),
+ (3, 'LP3-HV-ID-701', 'ตารางรายการและสัญลักษณ์ประกอบงานป้าย', 3, 8, 42),
+ (3, 'LP3-HV-ID-702', 'ขยายป้าย', 3, 8, 43),
+ (3, 'LP3-HV-ID-703', 'อยายป้าย', 3, 8, 44),
+ (3, 'LP3-HV-ID-704', 'ขยายป้าย', 3, 8, 45),
+ (3, 'LP3-HV-ID-705', 'ตารางแสดงรายชื่อห้อง', 3, 8, 46),
+ (3, 'LP3-HV-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 8, 47),
+ (3, 'LP3-HV-ST-002', 'ข้อกำหนดทั่วไป', 4, 8, 48),
+ (3, 'LP3-HV-ST-003', 'รายละเอียดการคิดตั้งพื้นสำเร็จรูป', 4, 8, 49),
+ (3, 'LP3-HV-ST-011', 'ผังแสดงน้ำหนักบรรทุก ชั้นที่ 1', 4, 8, 50),
+ (3, 'LP3-HV-ST-012', 'ผังแสดงน้ำหนักบรรทุก ชั้นที่ 2', 4, 8, 51),
+ (3, 'LP3-HV-ST-013', 'ผังแสดงน้ำหนักบรรทุก ชั้นที่ 3', 4, 8, 52),
+ (3, 'LP3-HV-ST-014', 'ผังแสดงน้ำหนักบรรทุก ชิ้นหลังคา', 4, 8, 53),
+ (3, 'LP3-HV-ST-101', 'ผังฐานราก และ ตอม่อ', 4, 8, 54),
+ (3, 'LP3-HV-ST-102', 'ผังโครงสร้างชั้นที่ 1', 4, 8, 55),
+ (3, 'LP3-HV-ST-103', 'ผังโครงสร้างชั้นที่ 2', 4, 8, 56),
+ (3, 'LP3-HV-ST-104', 'ผังโครงสร้างชั้นที่ 3', 4, 8, 57),
+ (3, 'LP3-HV-ST-005', 'ผังโครงสร้างหลังคา', 4, 8, 58),
+ (3, 'LP3-HV-ST-111', 'รูปตัด GRID LINE 4', 4, 8, 59),
+ (3, 'LP3-HV-ST-201', 'ขยายฐานราก แผนที่ 1', 4, 8, 60),
+ (3, 'LP3-HV-ST-202', 'ขยายฐานราก แผ่นที่ 2', 4, 8, 61),
+ (3, 'LP3-HV-ST-301', 'ขยายเสา', 4, 8, 62),
+ (3, 'LP3-HV-ST-401', 'TYPICAL BEAM DETAILS', 4, 8, 63),
+ (3, 'LP3-HV-ST-402', 'ขยายคาน', 4, 8, 64),
+ (3, 'LP3-HV-ST-501', 'อยายพื้น', 4, 8, 65),
+ (3, 'LP3-HV-ST-601', 'ขยายบันได', 4, 8, 66),
+ (3, 'LP3-HV-ST-701', 'MISCELLANEOUS DETAILS', 4, 8, 67),
+ (3, 'LP3-HV-ST-801', 'ขยาย CATWALK', 4, 8, 68),
+ (3, 'LP3-HV-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 8, 69),
+ (3, 'LP3-HV-SN-002', 'ตารางแสดงรายการประกอบ', 5, 8, 70),
+ (3, 'LP3-HV-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 8, 71),
+ (3, 'LP3-HV-SN-201', 'แปลนระบบระบายน้ำ ชั้นที่ 1', 5, 8, 72),
+ (3, 'LP3-HV-SN-202', 'แปลนระบบสุขาภิบาล ชั้นที่ 1', 5, 8, 73),
+ (3, 'LP3-HV-SN-203', 'แปลนระบบสุขาภิบาล ชั้นที่ 2', 5, 8, 74),
+ (3, 'LP3-HV-SN-204', 'แปลนระบบสุขาภิบาล ชั้นที่ 3', 5, 8, 75),
+ (3, 'LP3-HV-SN-205', 'แปลนระบบสุขาภิบาล ชั้นหลังคา', 5, 8, 76),
+ (3, 'LP3-HV-SN-301', 'ขยายห้องน้ำ', 5, 8, 77),
+ (3, 'LP3-HV-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 8, 78),
+ (3, 'LP3-HV-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 8, 79),
+ (3, 'LP3-HV-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 8, 80),
+ (3, 'LP3-HV-SN-404', 'ขยายมาตรฐานการติดตั้งทั่วไป 4', 5, 8, 81),
+ (3, 'LP3-HV-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 8, 82),
+ (3, 'LP3-HV-HV-101', 'รายการวัสดุและอุปกรณ์ 1/3', 6, 8, 83),
+ (3, 'LP3-HV-HV-102', 'รายการวัสดุและอุปกรณ์ 2/3', 6, 8, 84),
+ (3, 'LP3-HV-HV-103', 'รายการวัสดุและอุปกรณ์ 3/3', 6, 8, 85),
+ (3, 'LP3-HV-HV-201', 'แปลนระบบปรับอากาศ ชั้น 1', 6, 8, 86),
+ (3, 'LP3-HV-HV-202', 'แปลนระบบปรับอากาศ ชั้น 2', 6, 8, 87),
+ (3, 'LP3-HV-HV-203', 'แปลนระบบปรับอากาศ ชั้น 3', 6, 8, 88),
+ (3, 'LP3-HV-HV-204', 'แปลนระบบระบายอากาศ ชั้น 1', 6, 8, 89),
+ (3, 'LP3-HV-HV-205', 'แปลนระบบระบายอากาศ ชั้น 2', 6, 8, 90),
+ (3, 'LP3-HV-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 8, 91),
+ (3, 'LP3-HV-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 8, 92),
+ (3, 'LP3-HV-EE-001', 'สารบัญ', 7, 8, 93),
+ (3, 'LP3-HV-EE-002', 'สัญลักษณ์ระบบไฟฟ้า', 7, 8, 94),
+ (3, 'LP3-HV-EE-003', 'สัญลักษณ์ระบบสื่อสาร', 7, 8, 95),
+ (3, 'LP3-HV-EE-004', 'สัญลักษณ์โคมไฟ', 7, 8, 96),
+ (3, 'LP3-HV-EE-101', '115 kV SINGLE LINE DIAGRAM', 7, 8, 97),
+ (3, 'LP3-HV-EE-102', '115 KV EQUIPMENT SPECIFICATIONS', 7, 8, 98),
+ (3, 'LP3-HV-EE-103', '115 KV RELAYING AND METERING DIAGRAM', 7, 8, 99),
+ (3, 'LP3-HV-EE-104', 'PROTECTIVE DEVICE FUNCTION FOR 115 kV', 7, 8, 100),
+ (3, 'LP3-HV-EE-105', '22 KV SINGLE LINE DIAGRAM', 7, 8, 101),
+ (3, 'LP3-HV-EE-106', '22 KV EQUTPMENT SPECIFICAION', 7, 8, 102),
+ (3, 'LP3-HV-EE-107', '22 kV RELAYING AND METERING DIAGRAM', 7, 8, 103),
+ (3, 'LP3-HV-EE-108', 'PROTECTIVE DEVICE PUNCTION FOR 22 kV', 7, 8, 104),
+ (3, 'LP3-HV-EE-109', 'OVERALL AC DISTRIBUTION BOARD AND DC CISTRIBUTJON BOARD SINGLE LINE DIAGRAM', 7, 8, 105),
+ (3, 'LP3-HV-EE-110', 'AC DISTRIBUTION BOARD NOT SINGLE LINE DIAGRAM', 7, 8, 106),
+ (3, 'LP3-HV-EE-111', 'AC DISTRIBUTION BOARD NO2 SINGLE LINE DIAGRAM', 7, 8, 107),
+ (3, 'LP3-HV-EE-112', 'DC DISTRIBUTION BOARD NOT SINGLE LINE DIAGRAM', 7, 8, 108),
+ (3, 'LP3-HV-EE-113', 'DC DISTRIBUTION BOARD NO2 SINGLE LINE DIAGRAM', 7, 8, 109),
+ (3, 'LP3-HV-EE-114', 'ตารางโหลดไฟฟ้า', 7, 8, 110),
+ (3, 'LP3-HV-EE-115', 'ไรเซอร์ไดอะแกรมระบบโทรศัพท์ ระบบคอมพิวเตอร์ และระบบโทรทัศน์วงจรปิด', 7, 8, 111),
+ (3, 'LP3-HV-EE-116', 'ไรเซอร์ไดอะแกรมระบบแจ้งเหตุเพลิงไหม้', 7, 8, 112),
+ (3, 'LP3-HV-EE-201', 'แปลน์โคมไฟ ชิ้นที่ 1', 7, 8, 113),
+ (3, 'LP3-HV-EE-202', 'แปลน์โคมไฟ ชั้นที่ 2', 7, 8, 114),
+ (3, 'LP3-HV-EE-203', 'แปลน์โคมไฟ ชั้นที่ 3', 7, 8, 115),
+ (3, 'LP3-HV-EE-301', 'แปลนเต้ารับไฟฟ้า เต้ารับโทรศัพท์ เต้ารับคอมพิวเตอร์และโทรทัศน์วงจรปิด ชั้นที่ 1', 7, 8, 116),
+ (3, 'LP3-HV-EE-302', 'แปลนเต้ารับไฟฟ้า เต้ารับโทรศัพท์ เต้ารับคอมพิวเตอร์และโทรทัศน์วงจรปิด ชั้นที่ 2', 7, 8, 117),
+ (3, 'LP3-HV-EE-303', 'แปลนเต้ารับไฟฟ้า เต้ารับโทรศัพท์ เต้ารับคอมพิวเตอร์และไทรทัศน์วงจรปิด ชั้นที่ 3', 7, 8, 118),
+ (3, 'LP3-HV-EE-401', 'แปลนระบบป้องกันฟ้าผ่า', 7, 8, 119),
+ (3, 'LP3-HV-EE-402', 'แปลนระบบกราวด์', 7, 8, 120),
+ (3, 'LP3-HV-EE-403', 'แปลนระบบกราวด์ชั้นที่ 1', 7, 8, 121),
+ (3, 'LP3-HV-EE-404', 'แปลนระบบกราวด์ชั้นที่ 2', 7, 8, 122),
+ (3, 'LP3-HV-EE-501', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 1', 7, 8, 123),
+ (3, 'LP3-HV-EE-502', 'แปลนอุปกรณ์แจ้งเหตุเพลิงไหม้ ชั้นที่ 2', 7, 8, 124),
+ (3, 'LP3-HV-EE-601', 'แปลนตำแหน่งอุปกรณ์ไฟฟ้า ชั้นที่ 1', 7, 8, 125),
+ (3, 'LP3-HV-EE-602', 'แปลนตำแหน่งอุปกรณ์ไฟฟ้า ชั้นที่ 2', 7, 8, 126),
+ (3, 'LP3-HV-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 8, 127),
+ (3, 'LP3-HV-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 8, 128),
+ (3, 'LP3-HV-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 8, 129),
+ (3, 'LP3-HV-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 8, 130),
+ (3, 'LP3-HV-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 8, 131),
+ (3, 'LP3-HV-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 8, 132),
+ (3, 'LP3-HV-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7', 7, 8, 133),
+ (3, 'LP3-HV-EE-708', 'รายละเอียดการติดตั้งแผ่นที่ 8', 7, 8, 134),
+ (3, 'LP3-HV-EE-801', 'รายละเอียด OIL SEPERATOR แผ่นที่ 1', 7, 8, 135),
+ (3, 'LP3-HV-EE-802', 'รายละเอียด OIL SEPERATOR แผนที่ 2', 7, 8, 136),
+ (3, 'LP3-HV-EE-803', 'รายละเอียด OIL SEPERATOR แผ่นที่ 3', 7, 8, 137),
+ (3, 'LP3-S6-AR-001', 'สารบัญ', 2, 8, 1),
+ (3, 'LP3-S6-AR-002', 'สัญลักษณ์ประกอบ', 2, 8, 2),
+ (3, 'LP3-S6-AR-003', 'ผังแม่บททาเรือชั้นที่ 3', 2, 8, 3),
+ (3, 'LP3-S6-AR-004', 'ผังบริเวณอาคาร', 2, 8, 4),
+ (3, 'LP3-S6-AR-101', 'แปลนพื้นระดับ +0.15, แปลนพื้นชั้นที่ 1 แปลนหลังคา', 2, 8, 5),
+ (3, 'LP3-S6-AR-201', 'รูปค้าน 1, 2, 3, 4, รูปตัด A,B', 2, 8, 6),
+ (3, 'LP3-S6-AR-401', 'อยายบันได 1, ขยายบันได 2', 2, 8, 7),
+ (3, 'LP3-S6-AR-501', 'ขยายห้องน้ำ TL-01', 2, 8, 8),
+ (3, 'LP3-S6-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 8, 9),
+ (3, 'LP3-S6-AR-701', 'ขยายประตูรั้วโครงการ,ขยายทางเดินบล็อกคอนกรีต', 2, 8, 10),
+ (3, 'LP3-S6-AR-801', 'แปลนผ้าเพดาน', 2, 8, 11),
+ (3, 'LP3-S6-ID-001', 'สารบัญ', 3, 8, 12),
+ (3, 'LP3-S6-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 8, 13),
+ (3, 'LP3-S6-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 8, 14),
+ (3, 'LP3-S6-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 8, 15),
+ (3, 'LP3-S6-ST-002', 'ข้อกำหนดทั่วไป', 4, 8, 16),
+ (3, 'LP3-S6-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 8, 17),
+ (3, 'LP3-S6-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 8, 18),
+ (3, 'LP3-S6-ST-101', 'ผังโครงสร้างอาคาร', 4, 8, 19),
+ (3, 'LP3-S6-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 8, 20),
+ (3, 'LP3-S6-ST-202', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 8, 21),
+ (3, 'LP3-S6-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 8, 22),
+ (3, 'LP3-S6-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 8, 23),
+ (3, 'LP3-S6-SN-002', 'ตารางแสดงรายการประกอบ', 5, 8, 24),
+ (3, 'LP3-S6-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 8, 25),
+ (3, 'LP3-S6-SN-201', 'แปลนระบบสุขาภิบาลชั้นที่ 1', 5, 8, 26),
+ (3, 'LP3-S6-SN-202', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1 และชั้นหลังคา', 5, 8, 27),
+ (3, 'LP3-S6-SN-301', 'ขยายห้องน้ำ', 5, 8, 28),
+ (3, 'LP3-S6-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 8, 29),
+ (3, 'LP3-S6-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 8, 30),
+ (3, 'LP3-S6-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 8, 31),
+ (3, 'LP3-S6-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 8, 32),
+ (3, 'LP3-S6-HV-101', 'รายการวัสดุและอุปกรณ์ 1/3', 5, 8, 33),
+ (3, 'LP3-S6-HV-102', 'รายการวัสดุและอุปกรณ์ 2/3', 5, 8, 34),
+ (3, 'LP3-S6-HV-103', 'รายการวัสดุและอุปกรณ์ 3/3', 5, 8, 35),
+ (3, 'LP3-S6-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1', 5, 8, 36),
+ (3, 'LP3-S6-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 5, 8, 37),
+ (3, 'LP3-S6-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 5, 8, 38),
+ (3, 'LP3-S6-EE-001', 'สารบัญ', 7, 8, 39),
+ (3, 'LP3-S6-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 8, 40),
+ (3, 'LP3-S6-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 8, 41),
+ (3, 'LP3-S6-EE-004', 'สัญลักษณ์ตารางโคม', 7, 8, 42),
+ (3, 'LP3-S6-EE-101', 'SINGLE LINE DIAGRAM', 7, 8, 43),
+ (3, 'LP3-S6-EE-102', 'ไรเซอร์ไดอะแกรม และตารางโหลด', 7, 8, 44),
+ (3, 'LP3-S6-EE-201', 'EQUIPMENT LAYOUT', 7, 8, 45),
+ (3, 'LP3-S6-EE-202', 'แปลนระบบไฟฟ้าแสงสว่าง', 7, 8, 46),
+ (3, 'LP3-S6-EE-301', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์', 7, 8, 47),
+ (3, 'LP3-S6-EE-401', 'แปลนระบบป้องกันฟ้าผ่าและกราวด', 7, 8, 48),
+ (3, 'LP3-S6-EE-402', 'แปลนระบบกราวด์ฐานรากใต้อาคาร SUBSTATION 22 KV.', 7, 8, 49),
+ (3, 'LP3-S6-EE-403', 'แปลนระบบกราวด์พื้นห้อง SUBSTATION 22 KV.', 7, 8, 50),
+ (3, 'LP3-S6-EE-501', 'แปลนระบบสัญญาณเตือนอัคคีภัย', 7, 8, 51),
+ (3, 'LP3-S6-EE-601', 'แปลนกล้องโทรทัศน์วงจรปิด', 7, 8, 52),
+ (3, 'LP3-S6-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 8, 53),
+ (3, 'LP3-S6-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 8, 54),
+ (3, 'LP3-S6-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 8, 55),
+ (3, 'LP3-S6-EE-704', 'รายละเอียดการติดตั้งแผนที่ 4', 7, 8, 56),
+ (3, 'LP3-S6-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 8, 57),
+ (3, 'LP3-S6-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 8, 58),
+ (3, 'LP3-S6-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7', 7, 8, 59),
+ (3, 'LP3-S6-EE-708', 'รายละเอียดการติดตั้งแผ่นที่ 8', 7, 8, 60),
+ (3, 'LP3-S6-EE-709', 'รายละเอียดการติดตั้งแผ่นที่ 9', 7, 8, 61),
+ (3, 'LP3-S7-AR-001', 'สารบัญ', 2, 8, 1),
+ (3, 'LP3-S7-AR-002', 'สัญลักษณ์ประกอบ', 2, 8, 2),
+ (3, 'LP3-S7-AR-003', 'ผังแม่บทท่าเรือชั้นที่ 3', 2, 8, 3),
+ (3, 'LP3-S7-AR-004', 'ผังบริเวณอาคาร', 2, 8, 4),
+ (3, 'LP3-S7-AR-101', 'แปลนพื้นชั้นที่ 1 แปลนหลังคา, แปลนพื้นระดับ +0.15', 2, 8, 5),
+ (3, 'LP3-S7-AR-201', 'รูปด้าน 1, 2, 3, 4, รูปตัด A,B', 2, 8, 6),
+ (3, 'LP3-S7-AR-401', 'ขยายบันได 1, ขยายบันได 2', 2, 8, 7),
+ (3, 'LP3-S7-AR-501', 'ขยายห้องน้ำ TL-01', 2, 8, 8),
+ (3, 'LP3-S7-AR-601', 'ขยายประตู-หน้าต่าง ตารางรายการวัสดุประตู-หน้าต่าง', 2, 8, 9),
+ (3, 'LP3-S7-AR-701', 'ขยายประตูรั้วโครงการ,ขยายขอบคันหิน', 2, 8, 10),
+ (3, 'LP3-S7-AR-801', 'แปลนฝ้าเพดาน', 2, 8, 11),
+ (3, 'LP3-S7-ID-001', 'สารบัญ', 3, 8, 12),
+ (3, 'LP3-S7-ID-101', 'แปลนแสดงงานครุภัณฑ์ ชั้น 1', 3, 8, 13),
+ (3, 'LP3-S7-ID-102', 'แปลนแสดงตำแหน่งป้าย ชั้น 1', 3, 8, 14),
+ (3, 'LP3-S7-ST-001', 'สารบัญ, สัญลักษณ์ประกอบ', 4, 8, 15),
+ (3, 'LP3-S7-ST-002', 'ข้อกำหนดทั่วไป', 4, 8, 16),
+ (3, 'LP3-S7-ST-003', 'รายละเอียดการติดตั้งพื้นสำเร็จรูป', 4, 8, 17),
+ (3, 'LP3-S7-ST-011', 'ผังแสดงน้ำหนักบรรทุกจร', 4, 8, 18),
+ (3, 'LP3-S7-ST-101', 'ผังโครงสร้างอาคาร', 4, 8, 19),
+ (3, 'LP3-S7-ST-201', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 1', 4, 8, 20),
+ (3, 'LP3-S7-ST-202', 'ลยายรายละเอียดงานโครงสร้าง แผ่นที่ 2', 4, 8, 21),
+ (3, 'LP3-S7-ST-203', 'ขยายรายละเอียดงานโครงสร้าง แผ่นที่ 3', 4, 8, 22),
+ (3, 'LP3-S7-SN-001', 'สารบัญ สัญลักษณ์ และอักษรย่อ', 5, 8, 23),
+ (3, 'LP3-S7-SN-002', 'ตารางแสดงรายการประกอบ', 5, 8, 24),
+ (3, 'LP3-S7-SN-101', 'ไดอะแกรมระบบสุขาภิบาล', 5, 8, 25),
+ (3, 'LP3-S7-SN-201', 'แปลนระบบสุขาภิบาลชั้นที่ 1', 5, 8, 26),
+ (3, 'LP3-S7-SN-202', 'แปลนระบบระบายน้ำฝน ชั้นที่ 1 และชั้นหลังคา', 5, 8, 27),
+ (3, 'LP3-S7-SN-301', 'ขยายห้องน้ำ', 5, 8, 28),
+ (3, 'LP3-S7-SN-401', 'ขยายมาตรฐานการติดตั้งทั่วไป 1', 5, 8, 29),
+ (3, 'LP3-S7-SN-402', 'ขยายมาตรฐานการติดตั้งทั่วไป 2', 5, 8, 30),
+ (3, 'LP3-S7-SN-403', 'ขยายมาตรฐานการติดตั้งทั่วไป 3', 5, 8, 31),
+ (3, 'LP3-S7-HV-001', 'สารบัญ สัญลักษณ์และอักษรย่อ', 6, 8, 32),
+ (3, 'LP3-S7-HV-101', 'รายการวัสดุและอุปกรณ์ 1/3', 6, 8, 33),
+ (3, 'LP3-S7-HV-102', 'รายการวัสดุและอุปกรณ์ 2/3', 6, 8, 34),
+ (3, 'LP3-S7-HV-103', 'รายการวัสดุและอุปกรณ์ 3/3', 6, 8, 35),
+ (3, 'LP3-S7-HV-201', 'แปลนระบบปรับอากาศและระบายอากาศ ชั้น 1', 6, 8, 36),
+ (3, 'LP3-S7-HV-301', 'ขยายการติดตั้งทั่วไป 1/2', 6, 8, 37),
+ (3, 'LP3-S7-HV-302', 'ขยายการติดตั้งทั่วไป 2/2', 6, 8, 38),
+ (3, 'LP3-S7-EE-001', 'สารบัญ', 7, 8, 39),
+ (3, 'LP3-S7-EE-002', 'สัญลักษณ์งานระบบไฟฟ้า', 7, 8, 40),
+ (3, 'LP3-S7-EE-003', 'สัญลักษณ์งานระบบสื่อสาร', 7, 8, 41),
+ (3, 'LP3-S7-EE-004', 'สัญลักษณ์ตารางโคม', 7, 8, 42),
+ (3, 'LP3-S7-EE-101', 'SINGLE LINE DIAGRAM SHEET 1', 7, 8, 43),
+ (3, 'LP3-S7-EE-102', 'SINGLE LINE DIAGRAM SHEET 2', 7, 8, 44),
+ (3, 'LP3-S7-EE-103', 'ไรเซอร์ไดอะแกรม และตารางโหลด', 7, 8, 45),
+ (3, 'LP3-S7-EE-201', 'EQUIPMENT LAYOUT', 7, 8, 46),
+ (3, 'LP3-S7-EE-202', 'แปลนระบบไฟฟ้าแสงสว่าง', 7, 8, 47),
+ (3, 'LP3-S7-EE-301', 'แปลนเต้ารับไฟฟ้าโทรศัพท์และคอมพิวเตอร์', 7, 8, 48),
+ (3, 'LP3-S7-EE-401', 'แปลนระบบป้องกันฟ้าผ่าและกราวด', 7, 8, 49),
+ (3, 'LP3-S7-EE-402', 'แปลนระบบกราวด์ฐานรากใต้อาคาร SUBSTATION 22 KV.', 7, 8, 50),
+ (3, 'LP3-S7-EE-403', 'แปลนระบบกราวด์พื้นห้อง SUBSTATION 22 KV.', 7, 8, 51),
+ (3, 'LP3-S7-EE-501', 'แปลนระบบสัญญาณเตือนอัคคีภัย', 7, 8, 52),
+ (3, 'LP3-S7-EE-601', 'แปลนกล้องโทรทัศน์วงจรปิด', 7, 8, 53),
+ (3, 'LP3-S7-EE-701', 'รายละเอียดการติดตั้งแผ่นที่ 1', 7, 8, 54),
+ (3, 'LP3-S7-EE-702', 'รายละเอียดการติดตั้งแผ่นที่ 2', 7, 8, 55),
+ (3, 'LP3-S7-EE-703', 'รายละเอียดการติดตั้งแผ่นที่ 3', 7, 8, 56),
+ (3, 'LP3-S7-EE-704', 'รายละเอียดการติดตั้งแผ่นที่ 4', 7, 8, 57),
+ (3, 'LP3-S7-EE-705', 'รายละเอียดการติดตั้งแผ่นที่ 5', 7, 8, 58),
+ (3, 'LP3-S7-EE-706', 'รายละเอียดการติดตั้งแผ่นที่ 6', 7, 8, 59),
+ (3, 'LP3-S7-EE-707', 'รายละเอียดการติดตั้งแผ่นที่ 7', 7, 8, 60),
+ (3, 'LP3-S7-EE-708', 'รายละเอียดการติดตั้งแผ่นที่ 8', 7, 8, 61),
+ (3, 'LP3-S7-EE-709', 'รายละเอียดการติดตั้งแผ่นที่ 9', 7, 8, 62),
+ (3, 'LP3-UT-CT-001', 'สารบัญระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด', 40, 8, 1),
+ (3, 'LP3-UT-CT-002', 'KEY MAP PLAN ระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด', 40, 8, 2),
+ (3, 'LP3-UT-CT-003', 'สัญลักษณ์ระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด', 40, 8, 3),
+ (3, 'LP3-UT-CT-004', 'NETWORK SYSTEM DIAGRAM', 40, 8, 4),
+ (3, 'LP3-UT-CT-005', 'ไดอะแกรมระบบกล้องโทรทัศน์วงจรปิด CCTV SYSTEM DIAGRAM', 40, 8, 5),
+ (3, 'LP3-UT-CT-006', 'ไดอะแกรมระบบแจ้งเหตุเพลิงไหม้ FIRE ALARM SYSTEM DIAGRAM', 40, 8, 6),
+ (3, 'LP3-UT-CT-007', 'ยังระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด', 40, 8, 7),
+ (3, 'LP3-UT-CT-008', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (1/15)', 40, 8, 8),
+ (3, 'LP3-UT-CT-009', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (2/15)', 40, 8, 9),
+ (3, 'LP3-UT-CT-010', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที (3/15)', 40, 8, 10),
+ (3, 'LP3-UT-CT-011', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (4/15)', 40, 8, 11),
+ (3, 'LP3-UT-CT-012', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที (5/15)', 40, 8, 12),
+ (3, 'LP3-UT-CT-013', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (6/15)', 40, 8, 13),
+ (3, 'LP3-UT-CT-014', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (7/15)', 40, 8, 14),
+ (3, 'LP3-UT-CT-015', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (8/15)', 40, 8, 15),
+ (3, 'LP3-UT-CT-016', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (9/15)', 40, 8, 16),
+ (3, 'LP3-UT-CT-017', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (10/15)', 40, 8, 17),
+ (3, 'LP3-UT-CT-018', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (11/15)', 40, 8, 18),
+ (3, 'LP3-UT-CT-019', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (12/15)', 40, 8, 19),
+ (3, 'LP3-UT-CT-020', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (13/15)', 40, 8, 20),
+ (3, 'LP3-UT-CT-021', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (14/15)', 40, 8, 21),
+ (3, 'LP3-UT-CT-022', 'แปลนระบบสื่อสารและระบบกล้องโทรทัศน์วงจรปิด แผ่นที่ (15/15)', 40, 8, 22),
+ (3, 'LP3-UT-CT-023', 'TYPICAL SEMI DIRECT BURIAL CONSTRUCTION FOR COMMUNICATION DUCT BANK', 40, 8, 23),
+ (3, 'LP3-UT-CT-024', 'COMMUNICATION HAND HOLE CONSTRUCTION DETAIL', 40, 8, 24),
+ (3, 'LP3-UT-EE-001', 'สารบัญ', 41, 8, 1),
+ (3, 'LP3-UT-EE-002', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 1', 41, 8, 2),
+ (3, 'LP3-UT-EE-003', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 2', 41, 8, 3),
+ (3, 'LP3-UT-EE-004', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 3', 41, 8, 4),
+ (3, 'LP3-UT-EE-005', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 4', 41, 8, 5),
+ (3, 'LP3-UT-EE-006', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 5', 41, 8, 6),
+ (3, 'LP3-UT-EE-007', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 6', 41, 8, 7),
+ (3, 'LP3-UT-EE-008', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 7', 41, 8, 8),
+ (3, 'LP3-UT-EE-009', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 8', 41, 8, 9),
+ (3, 'LP3-UT-EE-010', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 9', 41, 8, 10),
+ (3, 'LP3-UT-EE-011', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 10', 41, 8, 11),
+ (3, 'LP3-UT-EE-012', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 11', 41, 8, 12),
+ (3, 'LP3-UT-EE-013', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 12', 41, 8, 13),
+ (3, 'LP3-UT-EE-014', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 13', 41, 8, 14),
+ (3, 'LP3-UT-EE-015', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 14', 41, 8, 15),
+ (3, 'LP3-UT-EE-016', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 15', 41, 8, 16),
+ (3, 'LP3-UT-EE-017', 'แนวสายเคเบิ้ลใต้ดินแรงสูง แผ่นที่ 16', 41, 8, 17),
+ (3, 'LP3-UT-EE-018', 'รายละเอียดการติดตั้ง แผ่นที่ 1', 41, 8, 18),
+ (3, 'LP3-UT-EE-019', 'รายละเอียดการติดตั้ง แผ่นที่ 2', 41, 8, 19),
+ (3, 'LP3-UT-EE-020', 'รายละเอียดการติดตั้ง แผ่นที่ 3', 41, 8, 20),
+ (3, 'LP3-UT-EE-021', 'รายละเอียดการติดตั้ง แผ่นที่ 4', 41, 8, 21),
+ (3, 'LP3-UT-EE-022', 'รายละเอียดการติดตั้ง แผ่นที่ 5', 41, 8, 22),
+ (3, 'LP3-UT-EE-023', 'รายละเอียดการติดตั้ง แผ่นที่ 6', 41, 8, 23),
+ (3, 'LP3-UT-EE-024', 'รายละเอียดการติดตั้ง แผ่นที่ 7', 41, 8, 24),
+ (3, 'LP3-UT-EE-025', 'รายละเอียดการติดตั้ง แผ่นที่ 8', 41, 8, 25);
+
+
+
+
diff --git a/specs/07-database/lcbp3-v1.6.0-seed-permissions.sql b/specs/07-database/lcbp3-v1.6.0-seed-permissions.sql
new file mode 100644
index 0000000..0def6ae
--- /dev/null
+++ b/specs/07-database/lcbp3-v1.6.0-seed-permissions.sql
@@ -0,0 +1,1067 @@
+-- ==========================================================
+-- DMS v1.6.0 - Permissions Seed Data (REORGANIZED)
+-- File: specs/07-database/permissions-seed-data.sql
+-- Total Permissions: 85 (Reorganized with systematic ID allocation)
+-- Created: 2025-12-13
+-- ==========================================================
+-- Clear existing data
+TRUNCATE TABLE role_permissions;
+
+DELETE FROM permissions;
+
+-- ==========================================================
+-- SECTION 1: PERMISSIONS INSERT STATEMENTS
+-- ==========================================================
+-- ==========================================================
+-- 1. System & Global Permissions (ID 1-10)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 1,
+ 'system.manage_all',
+ 'ทำทุกอย่างในระบบ (Superadmin Power)',
+ 'system',
+ 1
+ ),
+ (
+ 2,
+ 'system.impersonate',
+ 'แอบอ้างผู้ใช้อื่น (For Support/Debug)',
+ 'system',
+ 1
+ ),
+ (
+ 3,
+ 'system.maintenance_mode',
+ 'เปิด/ปิด Maintenance Mode',
+ 'system',
+ 1
+ ),
+ (
+ 4,
+ 'system.view_logs',
+ 'ดู System Logs',
+ 'system',
+ 1
+ ),
+ (
+ 5,
+ 'system.manage_cache',
+ 'จัดการ Cache (Clear/Flush)',
+ 'system',
+ 1
+ );
+
+-- ==========================================================
+-- 2. Organization Management (ID 11-20)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 11,
+ 'organization.create',
+ 'สร้างองค์กรใหม่',
+ 'organization',
+ 1
+ ),
+ (
+ 12,
+ 'organization.view',
+ 'ดูรายการองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 13,
+ 'organization.edit',
+ 'แก้ไขข้อมูลองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 14,
+ 'organization.delete',
+ 'ลบองค์กร',
+ 'organization',
+ 1
+ ),
+ (
+ 15,
+ 'organization.manage_members',
+ 'จัดการสมาชิกในองค์กร',
+ 'organization',
+ 1
+ );
+
+-- ==========================================================
+-- 3. User & Role Management (ID 21-40) - PRIORITIZED
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 21,
+ 'user.create',
+ 'สร้างผู้ใช้งานใหม่',
+ 'user',
+ 1
+ ),
+ (22, 'user.view', 'ดูข้อมูลผู้ใช้งาน', 'user', 1),
+ (
+ 23,
+ 'user.edit',
+ 'แก้ไขข้อมูลผู้ใช้งาน',
+ 'user',
+ 1
+ ),
+ (
+ 24,
+ 'user.delete',
+ 'ลบ/ปิดการใช้งานผู้ใช้',
+ 'user',
+ 1
+ ),
+ (
+ 25,
+ 'user.manage_assignments',
+ 'มอบหมาย Role/Project ให้ผู้ใช้',
+ 'user',
+ 1
+ ),
+ (
+ 26,
+ 'role.create',
+ 'สร้างบทบาท (Role) ใหม่',
+ 'role',
+ 1
+ ),
+ (27, 'role.view', 'ดูบทบาท', 'role', 1),
+ (28, 'role.edit', 'แก้ไขบทบาท', 'role', 1),
+ (29, 'role.delete', 'ลบบทบาท', 'role', 1),
+ (
+ 30,
+ 'role.assign_permissions',
+ 'มอบสิทธิ์ให้กับบทบาท',
+ 'role',
+ 1
+ );
+
+-- ==========================================================
+-- 4. Master Data Management (ID 41-50)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 41,
+ 'master_data.view',
+ 'ดูข้อมูลหลัก (Read-Only Dropdowns)',
+ 'master',
+ 1
+ ),
+ (
+ 42,
+ 'master_data.manage',
+ 'จัดการข้อมูลหลักทั่วไป',
+ 'master',
+ 1
+ ),
+ (
+ 43,
+ 'master_data.correspondence_type.manage',
+ 'จัดการประเภทเอกสาร',
+ 'master',
+ 1
+ ),
+ (
+ 44,
+ 'master_data.document_status.manage',
+ 'จัดการสถานะเอกสาร',
+ 'master',
+ 1
+ ),
+ (
+ 45,
+ 'master_data.drawing_category.manage',
+ 'จัดการหมวดหมู่แบบ',
+ 'master',
+ 1
+ ),
+ (
+ 46,
+ 'master_data.tag.manage',
+ 'จัดการ Tags',
+ 'master',
+ 1
+ ),
+ (
+ 47,
+ 'master_data.discipline.manage',
+ 'จัดการสาขางาน (Disciplines)',
+ 'master',
+ 1
+ ),
+ (
+ 48,
+ 'master_data.number_format.manage',
+ 'จัดการ Document Number Format',
+ 'master',
+ 1
+ );
+
+-- ==========================================================
+-- 5. Document Management - Generic (ID 51-70)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 51,
+ 'document.view',
+ 'ดูเอกสาร (ทุกประเภท)',
+ 'document',
+ 1
+ ),
+ (
+ 52,
+ 'document.create',
+ 'สร้างเอกสาร (Draft)',
+ 'document',
+ 1
+ ),
+ (
+ 53,
+ 'document.edit',
+ 'แก้ไขเอกสาร',
+ 'document',
+ 1
+ ),
+ (54, 'document.delete', 'ลบเอกสาร', 'document', 1),
+ (
+ 55,
+ 'document.submit',
+ 'ส่งเอกสาร (Submitted)',
+ 'document',
+ 1
+ ),
+ (
+ 56,
+ 'document.admin_edit',
+ 'แก้ไข/ถอน/ยกเลิกเอกสารที่ส่งแล้ว (Admin Power)',
+ 'document',
+ 1
+ ),
+ (
+ 57,
+ 'document.attach_files',
+ 'จัดการไฟล์แนบ (Upload/Delete)',
+ 'document',
+ 1
+ ),
+ (
+ 58,
+ 'document.manage_references',
+ 'จัดการการอ้างอิงเอกสาร',
+ 'document',
+ 1
+ );
+
+-- ==========================================================
+-- 6. Correspondence Module (ID 71-80)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 71,
+ 'correspondence.create',
+ 'สร้างเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 72,
+ 'correspondence.view',
+ 'ดูเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 73,
+ 'correspondence.edit',
+ 'แก้ไขเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 74,
+ 'correspondence.delete',
+ 'ลบเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ ),
+ (
+ 75,
+ 'correspondence.submit',
+ 'ส่งเอกสารโต้ตอบ',
+ 'correspondence',
+ 1
+ );
+
+-- ==========================================================
+-- 7. RFA Module (ID 81-90)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (81, 'rfa.create', 'สร้างเอกสาร RFA', 'rfa', 1),
+ (82, 'rfa.view', 'ดูเอกสาร RFA', 'rfa', 1),
+ (83, 'rfa.edit', 'แก้ไขเอกสาร RFA', 'rfa', 1),
+ (84, 'rfa.delete', 'ลบเอกสาร RFA', 'rfa', 1),
+ (
+ 85,
+ 'rfa.submit',
+ 'ส่ง RFA เข้า Workflow',
+ 'rfa',
+ 1
+ ),
+ (
+ 86,
+ 'rfa.manage_items',
+ 'จัดการ RFA Items (Link Drawings)',
+ 'rfa',
+ 1
+ );
+
+-- ==========================================================
+-- 8. Drawing Module (ID 91-100)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 91,
+ 'drawing.view',
+ 'ดูข้อมูลแบบ (Shop/Contract)',
+ 'drawing',
+ 1
+ ),
+ (
+ 92,
+ 'drawing.create',
+ 'สร้าง/แก้ไขแบบ',
+ 'drawing',
+ 1
+ ),
+ (93, 'drawing.delete', 'ลบแบบ', 'drawing', 1),
+ (
+ 94,
+ 'drawing.manage_revisions',
+ 'จัดการ Revisions แบบ',
+ 'drawing',
+ 1
+ ),
+ (
+ 95,
+ 'drawing.link_contract',
+ 'เชื่อมโยง Shop Drawing กับ Contract Drawing',
+ 'drawing',
+ 1
+ );
+
+-- ==========================================================
+-- 9. Circulation Module (ID 101-110)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 101,
+ 'circulation.create',
+ 'สร้างใบเวียน',
+ 'circulation',
+ 1
+ ),
+ (
+ 102,
+ 'circulation.view',
+ 'ดูใบเวียน',
+ 'circulation',
+ 1
+ ),
+ (
+ 103,
+ 'circulation.respond',
+ 'ตอบกลับใบเวียน (Main/Action)',
+ 'circulation',
+ 1
+ ),
+ (
+ 104,
+ 'circulation.acknowledge',
+ 'รับทราบใบเวียน (Information)',
+ 'circulation',
+ 1
+ ),
+ (
+ 105,
+ 'circulation.close',
+ 'ปิดใบเวียน',
+ 'circulation',
+ 1
+ );
+
+-- ==========================================================
+-- 10. Transmittal Module (ID 111-120)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 111,
+ 'transmittal.create',
+ 'สร้าง Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 112,
+ 'transmittal.view',
+ 'ดู Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 113,
+ 'transmittal.edit',
+ 'แก้ไข Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 114,
+ 'transmittal.delete',
+ 'ลบ Transmittal',
+ 'transmittal',
+ 1
+ ),
+ (
+ 115,
+ 'transmittal.print',
+ 'พิมพ์ Transmittal Letter',
+ 'transmittal',
+ 1
+ );
+
+-- ==========================================================
+-- 11. Workflow Engine (ID 121-130)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 121,
+ 'workflow.view_definitions',
+ 'ดู Workflow Definitions',
+ 'workflow',
+ 1
+ ),
+ (
+ 122,
+ 'workflow.manage_definitions',
+ 'จัดการ Workflow Definitions',
+ 'workflow',
+ 1
+ ),
+ (
+ 123,
+ 'workflow.action_review',
+ 'ดำเนินการในขั้นตอนปัจจุบัน (Approve/Reject)',
+ 'workflow',
+ 1
+ ),
+ (
+ 124,
+ 'workflow.force_proceed',
+ 'บังคับไปยังขั้นตอนถัดไป (Document Control Power)',
+ 'workflow',
+ 1
+ ),
+ (
+ 125,
+ 'workflow.revert',
+ 'ย้อนกลับไปยังขั้นตอนก่อนหน้า (Document Control Power)',
+ 'workflow',
+ 1
+ );
+
+-- ==========================================================
+-- 12. Document Numbering (ID 131-140)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 131,
+ 'numbering.view_formats',
+ 'ดู Number Formats',
+ 'numbering',
+ 1
+ ),
+ (
+ 132,
+ 'numbering.manage_formats',
+ 'จัดการ Number Formats',
+ 'numbering',
+ 1
+ ),
+ (
+ 133,
+ 'numbering.view_counters',
+ 'ดู Counters',
+ 'numbering',
+ 1
+ ),
+ (
+ 134,
+ 'numbering.reset_counter',
+ 'Reset Counter (Dangerous Operation)',
+ 'numbering',
+ 1
+ );
+
+-- ==========================================================
+-- 13. Search & Reporting (ID 141-150)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (141, 'search.basic', 'ค้นหาพื้นฐาน', 'search', 1),
+ (
+ 142,
+ 'search.advanced',
+ 'ใช้งานการค้นหาขั้นสูง',
+ 'search',
+ 1
+ ),
+ (
+ 143,
+ 'search.export',
+ 'Export ผลการค้นหา',
+ 'search',
+ 1
+ ),
+ (144, 'report.view', 'ดูรายงาน', 'report', 1),
+ (
+ 145,
+ 'report.generate',
+ 'สร้างรายงานสรุป',
+ 'report',
+ 1
+ ),
+ (
+ 146,
+ 'report.schedule',
+ 'กำหนดรายงานอัตโนมัติ',
+ 'report',
+ 1
+ );
+
+-- ==========================================================
+-- 14. Notification & Dashboard (ID 151-160)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 151,
+ 'notification.view',
+ 'ดูการแจ้งเตือนของตัวเอง',
+ 'notification',
+ 1
+ ),
+ (
+ 152,
+ 'notification.manage_all',
+ 'จัดการการแจ้งเตือนทั้งหมด (Admin)',
+ 'notification',
+ 1
+ ),
+ (
+ 153,
+ 'dashboard.view_own',
+ 'ดู Dashboard ของตัวเอง',
+ 'dashboard',
+ 1
+ ),
+ (
+ 154,
+ 'dashboard.view_all',
+ 'ดู Dashboard ทุกคน (Admin)',
+ 'dashboard',
+ 1
+ ),
+ (
+ 155,
+ 'dashboard.view_analytics',
+ 'ดู Analytics & Statistics',
+ 'dashboard',
+ 1
+ );
+
+-- ==========================================================
+-- 15. JSON Schema Management (ID 161-170)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 161,
+ 'json_schema.view',
+ 'ดู JSON Schemas',
+ 'json_schema',
+ 1
+ ),
+ (
+ 162,
+ 'json_schema.manage',
+ 'จัดการ JSON Schemas',
+ 'json_schema',
+ 1
+ ),
+ (
+ 163,
+ 'json_schema.migrate_data',
+ 'Migrate Data ระหว่าง Schema Versions',
+ 'json_schema',
+ 1
+ );
+
+-- ==========================================================
+-- 16. Monitoring & Admin Tools (ID 171-180)
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 171,
+ 'monitoring.view_health',
+ 'ดู Health Check Status',
+ 'monitoring',
+ 1
+ ),
+ (
+ 172,
+ 'monitoring.view_metrics',
+ 'ดู System Metrics',
+ 'monitoring',
+ 1
+ ),
+ (
+ 173,
+ 'monitoring.manage_maintenance',
+ 'จัดการ Maintenance Mode',
+ 'monitoring',
+ 1
+ ),
+ (
+ 174,
+ 'audit.view_own',
+ 'ดู Audit Logs ของตัวเอง',
+ 'audit',
+ 1
+ ),
+ (
+ 175,
+ 'audit.view_all',
+ 'ดู Audit Logs ทั้งหมด (Admin)',
+ 'audit',
+ 1
+ );
+
+-- ==========================================================
+-- 17. Project & Contract Management (ID 201-220) - DEPRIORITIZED
+-- ==========================================================
+INSERT INTO permissions (
+ permission_id,
+ permission_name,
+ description,
+ module,
+ is_active
+ )
+VALUES (
+ 201,
+ 'project.create',
+ 'สร้างโครงการใหม่',
+ 'project',
+ 1
+ ),
+ (
+ 202,
+ 'project.view',
+ 'ดูรายการโครงการ',
+ 'project',
+ 1
+ ),
+ (
+ 203,
+ 'project.edit',
+ 'แก้ไขข้อมูลโครงการ',
+ 'project',
+ 1
+ ),
+ (204, 'project.delete', 'ลบโครงการ', 'project', 1),
+ (
+ 205,
+ 'project.manage_members',
+ 'จัดการสมาชิกในโครงการ',
+ 'project',
+ 1
+ ),
+ (
+ 211,
+ 'contract.create',
+ 'สร้างสัญญา',
+ 'contract',
+ 1
+ ),
+ (
+ 212,
+ 'contract.view',
+ 'ดูข้อมูลสัญญา',
+ 'contract',
+ 1
+ ),
+ (
+ 213,
+ 'contract.edit',
+ 'แก้ไขสัญญา',
+ 'contract',
+ 1
+ ),
+ (214, 'contract.delete', 'ลบสัญญา', 'contract', 1),
+ (
+ 215,
+ 'contract.manage_members',
+ 'จัดการสมาชิกในสัญญา',
+ 'contract',
+ 1
+ );
+
+-- ==========================================================
+-- SECTION 2: ROLE-PERMISSION MAPPINGS
+-- ==========================================================
+-- ==========================================================
+-- Role 1: Superadmin - Gets ALL Permissions
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 1,
+ permission_id
+FROM permissions
+WHERE is_active = 1;
+
+-- ==========================================================
+-- Role 2: Org Admin (Organization Scope)
+-- Permissions: 22 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- User Management
+ (2, 21),
+ -- user.create
+ (2, 22),
+ -- user.view
+ (2, 23),
+ -- user.edit
+ (2, 24),
+ -- user.delete
+ (2, 25),
+ -- user.manage_assignments
+ -- Organization
+ (2, 12),
+ -- organization.view
+ -- Master Data
+ (2, 46),
+ -- master_data.tag.manage
+ -- Documents
+ (2, 51),
+ -- document.view
+ -- Project/Contract
+ (2, 202),
+ -- project.view
+ (2, 212),
+ -- contract.view
+ -- Search & Reports
+ (2, 141),
+ -- search.basic
+ (2, 142),
+ -- search.advanced
+ (2, 144),
+ -- report.view
+ (2, 145),
+ -- report.generate
+ -- Dashboard & Notification
+ (2, 153),
+ -- dashboard.view_own
+ (2, 151),
+ -- notification.view
+ -- Audit
+ (2, 174);
+
+-- audit.view_own
+-- ==========================================================
+-- Role 3: Document Control (Organization Scope)
+-- Permissions: 50+ total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- All Document Operations
+ (3, 51),
+ (3, 52),
+ (3, 53),
+ (3, 54),
+ (3, 55),
+ (3, 56),
+ (3, 57),
+ (3, 58),
+ -- All Correspondence
+ (3, 71),
+ (3, 72),
+ (3, 73),
+ (3, 74),
+ (3, 75),
+ -- All RFA
+ (3, 81),
+ (3, 82),
+ (3, 83),
+ (3, 84),
+ (3, 85),
+ (3, 86),
+ -- All Drawing
+ (3, 91),
+ (3, 92),
+ (3, 93),
+ (3, 94),
+ (3, 95),
+ -- All Circulation
+ (3, 101),
+ (3, 102),
+ (3, 103),
+ (3, 104),
+ (3, 105),
+ -- All Transmittal
+ (3, 111),
+ (3, 112),
+ (3, 113),
+ (3, 114),
+ (3, 115),
+ -- Workflow Actions
+ (3, 123),
+ (3, 124),
+ (3, 125),
+ -- Master Data
+ (3, 41),
+ (3, 42),
+ (3, 43),
+ (3, 44),
+ (3, 45),
+ (3, 46),
+ (3, 47),
+ (3, 48),
+ -- Search & Report
+ (3, 141),
+ (3, 142),
+ (3, 143),
+ (3, 144),
+ (3, 145),
+ -- Dashboard
+ (3, 153),
+ (3, 154),
+ -- Notification
+ (3, 151);
+
+-- ==========================================================
+-- Role 4: Editor (Organization Scope)
+-- Permissions: 30 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- Document
+ (4, 51),
+ (4, 52),
+ (4, 53),
+ (4, 55),
+ (4, 57),
+ -- Correspondence
+ (4, 71),
+ (4, 72),
+ (4, 73),
+ (4, 75),
+ -- RFA
+ (4, 81),
+ (4, 82),
+ (4, 83),
+ (4, 85),
+ (4, 86),
+ -- Drawing
+ (4, 91),
+ (4, 92),
+ (4, 94),
+ -- Circulation
+ (4, 101),
+ (4, 102),
+ (4, 103),
+ (4, 104),
+ -- Transmittal
+ (4, 111),
+ (4, 112),
+ (4, 113),
+ -- Search
+ (4, 141),
+ (4, 142),
+ -- Dashboard & Notification
+ (4, 153),
+ (4, 151);
+
+-- ==========================================================
+-- Role 5: Viewer (Organization Scope)
+-- Permissions: 15 total
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+VALUES -- View Only
+ (5, 51),
+ -- document.view
+ (5, 72),
+ -- correspondence.view
+ (5, 82),
+ -- rfa.view
+ (5, 91),
+ -- drawing.view
+ (5, 102),
+ -- circulation.view
+ (5, 104),
+ -- circulation.acknowledge
+ (5, 112),
+ -- transmittal.view
+ (5, 41),
+ -- master_data.view
+ (5, 141),
+ -- search.basic
+ (5, 153),
+ -- dashboard.view_own
+ (5, 151);
+
+-- notification.view
+-- ==========================================================
+-- Role 6: Project Manager (Project Scope)
+-- Permissions: All Editor + Project Management + Reports
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 6,
+ permission_id
+FROM role_permissions
+WHERE role_id = 4 -- Copy all Editor permissions
+UNION
+VALUES -- Project Management
+ (6, 201),
+ (6, 202),
+ (6, 203),
+ (6, 204),
+ (6, 205),
+ -- Reports & Analytics
+ (6, 144),
+ (6, 145),
+ (6, 155);
+
+-- ==========================================================
+-- Role 7: Contract Admin (Contract Scope)
+-- Permissions: All Editor + Contract Management + Workflow
+-- ==========================================================
+INSERT INTO role_permissions (role_id, permission_id)
+SELECT 7,
+ permission_id
+FROM role_permissions
+WHERE role_id = 4 -- Copy all Editor permissions
+UNION
+VALUES -- Contract Management
+ (7, 211),
+ (7, 212),
+ (7, 213),
+ (7, 214),
+ (7, 215),
+ -- Workflow
+ (7, 123),
+ -- All Drawings
+ (7, 91),
+ (7, 92),
+ (7, 93),
+ (7, 94),
+ (7, 95);
+
+-- ==========================================================
+-- VERIFICATION: Run permissions-verification.sql after this
+-- ==========================================================
diff --git a/specs/09-history/2025-12-13-schema-v160-document-number-fixes.md b/specs/09-history/2025-12-13-schema-v160-document-number-fixes.md
new file mode 100644
index 0000000..34d3238
--- /dev/null
+++ b/specs/09-history/2025-12-13-schema-v160-document-number-fixes.md
@@ -0,0 +1,62 @@
+# Schema v1.6.0 Migration & Document Number Fixes (2025-12-13)
+
+## Task Summary
+This session focused on completing the migration to Schema v1.6.0 (Correspondence/RFA shared PK) and resolving critical bugs in the Document Numbering system.
+
+### Status
+- **Schema Migration**: Completed (Backend & Frontend)
+- **Document Numbering**:
+ - Preview Fixed (Recipient Code resolution)
+ - Creation Fixed (Source data mapping)
+ - Update Logic Fixed (Auto-regeneration on Draft edit)
+
+## Walkthrough & Changes
+
+### 1. Correspondence Module
+- **New Entity**: `CorrespondenceRecipient` to handle multiple recipients (TO/CC).
+- **Entity Update**: `Correspondence` now has a `recipients` relation.
+- **Entity Update**: `CorrespondenceRevision` renamed `title` to `subject`, added `body`, `remarks`, `dueDate`, `schemaVersion`.
+- **Service Update**: `create` method now saves recipients and maps new revision fields.
+- **DTO Update**: `CreateCorrespondenceDto` updated to support proper fields.
+
+### 2. RFA Module
+- **Shared Primary Key**: `Rfa` entity now shares PK with `Correspondence`.
+- **Revision Update**: `RfaRevision` removed `correspondenceId` (access via `rfa.correspondence.id`), renamed `title` to `subject`, added new fields.
+- **Item Update**: `RfaItem` FK column renamed to `rfa_revision_id`.
+- **Service Update**: Only `RfaService` logic updated to handle shared PK and new field mappings. `findAll` query updated to join via `rfa.correspondence`.
+
+### 3. Frontend Adaptation
+- **Type Definitions**: Updated `CorrespondenceRevision` and `RFA` types to match schema v1.6.0.
+- **Form Components**:
+ - `CorrespondenceForm`: Renamed `title` to `subject`, added `body`, `remarks`, `dueDate`.
+ - `RFAForm`: Renamed `title` to `subject`, added `body`, `remarks`.
+- **List & Detail Views**: Updated accessor keys (`title` -> `subject`) and added display sections for new fields (Body, Remarks) in Detail views.
+- **DTOs**: Updated `CreateCorrespondenceDto` and `CreateRFADto` to include new fields.
+
+## Bug Fixes & Refinements (Session 2)
+
+### Document Number Preview
+- **Issue**: Preview showed `--` for recipient code.
+- **Fix**:
+ - Implemented `customTokens` support in `DocumentNumberingService`.
+ - updated `CorrespondenceService.previewNextNumber` to manually resolve recipient code from `OrganizationRepository`.
+
+### Correspondence Creation
+- **Issue**: Generated document number used incorrect placeholder.
+- **Fix**: Updated `create` method to extract recipient from `recipients` array instead of legacy `details` field.
+
+### Edit Page Loading
+- **Issue**: "Failed to load" error on Edit page.
+- **Fix**: Corrected TypeORM relation path in `CorrespondenceService.findOne` from `recipients.organization` to properties `recipients.recipientOrganization`.
+
+### Document Number Auto-Update
+- **Feature**: Automatically regenerate document number when editing a Draft.
+- **Implementation**: logic added to `update` method to re-calculate number if `type`, `discipline`, `project`, or `recipient` changes.
+
+## Verification Results
+- **Backend Tests**: `correspondence.service.spec.ts` passed.
+- **Frontend Tests**: All 9 suites (113 tests) passed.
+- **Manual Verification**: Verified Preview, Creation, and Edit flows.
+
+## Future Tasks
+- [ ] **Data Cleanup**: Migration script to fix existing document numbers with missing recipient codes (e.g., `คคง.--0001-2568` -> `คคง.-XYZ-0001-2568`).