ภาพรวมระบบ (Overview)
นี่คือรายงานสรุปเชิงโต้ตอบสำหรับ **ระบบจัดการเอกสาร (DMS) v1.3.0** แอปพลิเคชันนี้ถูกออกแบบมาเพื่อวิเคราะห์ข้อกำหนดของระบบ, สถาปัตยกรรม, และโครงสร้างข้อมูล เพื่อให้ทีมพัฒนาและผู้มีส่วนได้ส่วนเสียสามารถทำความเข้าใจภาพรวมของโปรเจกต์ที่ซับซ้อนนี้ได้อย่างรวดเร็ว
สถาปัตยกรรมและเทคโนโลยี (System Architecture)
ระบบ DMS v1.3.0 ถูกออกแบบบนสถาปัตยกรรม Headless/API-First ที่ทันสมัย โดยทำงานทั้งหมดบน QNAP Server ผ่าน Container Station (Docker) เพื่อให้ง่ายต่อการจัดการและบำรุงรักษา
แผนผังการเชื่อมต่อ (Docker Container Stack)
np-dms.work (HTTPS)
Next.js (Frontend)
ให้บริการ UI (React)
NestJS (Backend)
จัดการ API & Business Logic
N8N (Automation)
จัดการ Workflow & Line Notify
MariaDB (Database)
เก็บข้อมูลทั้งหมด (SQL)
Elasticsearch (Search)
ให้บริการค้นหาขั้นสูง
โมดูลเอกสารหลัก (Document Modules)
ระบบ DMS แบ่งการจัดการเอกสารออกเป็นโมดูลย่อยที่ชัดเจน แต่ละโมดูลมี Workflow และตารางข้อมูลเฉพาะของตนเอง แต่ทั้งหมดเชื่อมโยงกับโครงสร้างเอกสารกลาง (Correspondence)
1. Correspondence (เอกสารโต้ตอบ)
โมดูลหลักสำหรับเอกสารเข้า-ออกทั่วไป (จดหมาย, เมโม) เป็นตาราง "แม่" สำหรับเอกสารประเภทอื่นเกือบทั้งหมด
ตารางข้อมูลหลัก:- `correspondences` (Master)
- `correspondence_revisions` (Child)
- `correspondence_recipients`
2. RFA (ขออนุมัติ)
โมดูลสำหรับเอกสารขออนุมัติ (Request for Approval) เช่น ขออนุมัติแบบ, วัสดุ, หรือเอกสาร ที่มี Workflow ชัดเจน (Draft, Submit, Review, Approved)
ตารางข้อมูลหลัก:- `rfas` (Master)
- `rfa_revisions` (Child)
- `rfa_status_codes`
- `rfa_items` (เชื่อม Shop Drawing)
3. Drawing (แบบแปลน)
จัดการแบบแปลน 2 ประเภทหลัก: แบบตามสัญญา (Contract Drawing) และแบบสำหรับก่อสร้าง (Shop Drawing) ซึ่ง Shop Drawing จะถูกอ้างอิงใน RFA
ตารางข้อมูลหลัก:- `contract_drawings`
- `shop_drawings` (Master)
- `shop_drawing_revisions` (Child)
- `shop_drawing_revision_contract_refs`
4. Transmittal (เอกสารนำส่ง)
เอกสารนำส่ง (คล้ายใบปะหน้า) ที่ใช้สำหรับรวบรวมเอกสาร RFA หลายๆ ฉบับ เพื่อส่งให้ผู้รับในคราวเดียว
ตารางข้อมูลหลัก:- `transmittals` (1:1 with Correspondence)
- `transmittal_items` (เชื่อม RFA)
5. Circulation (ใบเวียนภายใน)
ระบบใบเวียนภายในองค์กร (Internal) ใช้สำหรับส่งเอกสาร (ที่อ้างอิงจาก Correspondence) เพื่อให้ทีมตรวจสอบ, รับทราบ, หรือดำเนินการ
ตารางข้อมูลหลัก:- `circulations` (Master)
- `circulation_assignees` (Tasks)
- `circulation_actions` (Logs)
6. สัดส่วนตารางข้อมูล
แผนภูมิแสดงสัดส่วนตารางข้อมูลที่เกี่ยวข้องในแต่ละโมดูลหลัก (ไม่รวมตาราง Core และ RBAC)
ฟีเจอร์หลัก (Core Features)
นอกเหนือจากโมดูลเอกสาร ระบบยังมีฟีเจอร์สนับสนุนที่สำคัญ ซึ่งทำงานข้ามโมดูลต่างๆ เพื่อให้ระบบทำงานได้อย่างสมบูรณ์
การจัดการสิทธิ์ (RBAC)
ระบบใช้ Role-Based Access Control (RBAC) ที่ละเอียดมาก ผู้ใช้ (Users) จะได้รับบทบาท (Roles) ซึ่งผูกกับสิทธิ์ (Permissions) แผนภูมินี้แสดงตัวอย่างจำนวนสิทธิ์ (Permissions) ที่แต่ละบทบาทพื้นฐานอาจมี เพื่อให้เห็นภาพความซับซ้อนในการเข้าถึง
การสร้างเลขที่เอกสาร (Numbering)
หนึ่งในส่วนที่สำคัญที่สุด คือการสร้างเลขที่เอกสาร (Running Number) เพื่อป้องกันเลขที่ซ้ำ (Race Condition) ระบบใช้ Stored Procedure (`sp_get_next_document_number`) ใน MariaDB ซึ่งใช้คำสั่ง `SELECT ... FOR UPDATE` เพื่อ "ล็อก" แถวของตัวนับก่อนที่จะอัปเดตค่า
SELECT last_number INTO v_last_number FROM document_number_counters WHERE project_id = p_project_id AND ... FOR UPDATE; IF v_last_number IS NULL THEN INSERT INTO ... (last_number) VALUES (1); SET p_next_number = 1; ELSE SET p_next_number = v_last_number + 1; UPDATE document_number_counters SET last_number = p_next_number WHERE ...; END IF;
การค้นหา (Advanced Search)
(Req 6.2) ระบบใช้ **Elasticsearch** เป็น Service แยกต่างหากสำหรับให้บริการค้นหาขั้นสูง NestJS (Backend) จะทำการ Index ข้อมูลจาก Views (`v_current_correspondences`, `v_current_rfas` ฯลฯ) ไปยัง Elasticsearch ทำให้ผู้ใช้สามารถค้นหาแบบ Full-text ข้ามโมดูลทั้งหมด (Correspondence, RFA, Drawing) ได้อย่างรวดเร็ว
การแจ้งเตือน (Notifications)
(Req 6.7) ระบบใช้ **N8N (Automation)** เป็นศูนย์กลางการแจ้งเตือน เมื่อมีเหตุการณ์สำคัญ (เช่น มีการสร้างใบเวียนใหม่) NestJS (Backend) จะยิง Webhook ไปที่ N8N จากนั้น N8N จะทำหน้าที่ส่งการแจ้งเตือนไปยัง **Line Notify** หรือ Email ตาม Workflow ที่ตั้งค่าไว้
สำรวจโครงสร้างข้อมูล (Data Explorer)
ระบบ DMS มีตารางข้อมูลมากกว่า 44 ตารางเพื่อรองรับฟีเจอร์ที่ซับซ้อน เลือกตารางจากรายการด้านล่างเพื่อดูโครงสร้าง, ประเภทข้อมูล, และความสัมพันธ์ (Foreign Keys)
| Column (Field) | Type | Description / Relation |
|---|