ภาพรวมระบบ (Overview)

นี่คือรายงานสรุปเชิงโต้ตอบสำหรับ **ระบบจัดการเอกสาร (DMS) v1.3.0** แอปพลิเคชันนี้ถูกออกแบบมาเพื่อวิเคราะห์ข้อกำหนดของระบบ, สถาปัตยกรรม, และโครงสร้างข้อมูล เพื่อให้ทีมพัฒนาและผู้มีส่วนได้ส่วนเสียสามารถทำความเข้าใจภาพรวมของโปรเจกต์ที่ซับซ้อนนี้ได้อย่างรวดเร็ว

6+
โมดูลเอกสารหลัก
44+
ตารางข้อมูล (Tables)
5+
วิวข้อมูล (Views)
7
Services (Docker)

สถาปัตยกรรมและเทคโนโลยี (System Architecture)

ระบบ DMS v1.3.0 ถูกออกแบบบนสถาปัตยกรรม Headless/API-First ที่ทันสมัย โดยทำงานทั้งหมดบน QNAP Server ผ่าน Container Station (Docker) เพื่อให้ง่ายต่อการจัดการและบำรุงรักษา

แผนผังการเชื่อมต่อ (Docker Container Stack)

Nginx Proxy Manager

np-dms.work (HTTPS)

Network: 'lcbp3'

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