ข้ามไปที่เนื้อหา

Entity Relationship Diagram (ERD)

ระบบงานชันสูตร (Laboratory Information System)

โรงพยาบาลค่ายธนรัชน์


เอกสารเลขที่: SRS-1.2.7-ERD
เวอร์ชัน: 1.0
วันที่: 11 ตุลาคม 2568
ผู้จัดทำ: ทีมพัฒนาระบบ
ผู้อนุมัติ: ผู้อำนวยการโรงพยาบาลค่ายธนรัชน์


ภาพรวม Entity Relationship Diagram

เอกสารนี้แสดง ERD สำหรับระบบงานชันสูตรที่ออกแบบให้ทำงานเป็น Laboratory Hub System ที่จัดการการดำเนินงานห้องปฏิบัติการทางการแพทย์ครบวงจรของโรงพยาบาลค่ายธนรัชน์ โดยเชื่อมโยงกับระบบอื่นๆ ผ่าน API Integration เพื่อรองรับการสั่งตรวจ การรายงานผล การควบคุมคุณภาพ และการจัดการทุกขั้นตอนของงานห้องปฏิบัติการ

การจัดกลุ่มตาราง (Table Categories)

🎨 คำอธิบายสีในแผนภาพ:

  • 🟢 สีเขียว (Core Tables): ตารางหลักเฉพาะระบบงานชันสูตร
  • LAB_ORDER - ข้อมูลคำสั่งตรวจหลัก
  • LAB_RESULT - ผลการตรวจ
  • LAB_SPECIMEN - การจัดการสิ่งส่งตรวจ
  • LAB_WORK_SESSION - เซสชันการทำงานในแลป

  • 🔵 สีน้ำเงิน (Support Tables): ตารางสนับสนุนการทำงาน

  • LAB_ORDER_DETAIL - รายละเอียดรายการตรวจ
  • LAB_RESULT_HISTORY - ประวัติการเปลี่ยนแปลงผล
  • LAB_SPECIMEN_TRACKING - การติดตามสิ่งส่งตรวจ
  • LAB_QC_CONTROL - การควบคุมคุณภาพ
  • LAB_APPOINTMENT - การนัดฟังผล
  • LAB_OUT_SOURCE - การส่งตรวจ Lab นอก

  • 🟠 สีส้ม (System Tables): ตารางจัดการระบบและการตรวจสอบ

  • LAB_NOTIFICATION - การแจ้งเตือน
  • LAB_REPORT_TEMPLATE - แม่แบบรายงาน
  • LAB_ALERT_RULE - กฎการแจ้งเตือน
  • LAB_BARCODE_TRACKING - การติดตาม Barcode
  • LAB_INTEGRATION_LOG - บันทึกการเชื่อมโยงระบบ
  • LAB_AUDIT_LOG - บันทึกการตรวจสอบ

  • 🟡 สีเหลือง (Master Data - Lab Items): ข้อมูลพื้นฐานรายการตรวจ

  • LAB_ITEM - รายการตรวจหลัก
  • LAB_PANEL - กลุ่มการตรวจ
  • LAB_NORMAL_RANGE - ค่าปกติ
  • LAB_CRITICAL_VALUE - ค่าวิกฤต
  • LAB_SPECIMEN_TYPE - ประเภทสิ่งส่งตรวจ

  • 🟣 สีม่วง (Master Data - Configuration): ข้อมูลการตั้งค่าระบบ

  • LAB_DEPARTMENT - แผนกแลป
  • LAB_CATEGORY - หมวดหมู่การตรวจ
  • LAB_UNIT - หน่วยผลการตรวจ
  • LAB_METHOD - วิธีการตรวจ
  • LAB_MACHINE - เครื่องมือตรวจ

  • 🔴 สีแดง (Integration Points): จุดเชื่อมโยงกับระบบอื่น

  • การเชื่อมโยงกับระบบเวชระเบียน (1.2.1)
  • การเชื่อมโยงกับระบบซักประวัติ (1.2.2)
  • การเชื่อมโยงกับระบบห้องตรวจแพทย์ (1.2.3)
  • การเชื่อมโยงกับระบบห้องฉุกเฉิน (1.2.4)
  • การเชื่อมโยงกับระบบนัดหมาย (1.2.6)
  • การเชื่อมโยงกับระบบรังสีวิทยา (1.2.8)
  • การเชื่อมโยงกับระบบเภสัชกรรม (1.2.13)
  • การเชื่อมโยงกับระบบการเงิน (1.2.14)

🔑 คุณสมบัติเด่นของระบบ

  1. การจัดการรายการ Lab ครบถ้วน: ค่าปกติตามอายุเพศ, ค่าวิกฤต, สิ่งส่งตรวจ, อัตราค่าบริการ
  2. การสั่งตรวจแบบออนไลน์: รับคำสั่งจากทุกระบบแบบ real-time
  3. การจัดการกลุ่มการตรวจ: Panel Test และการปรับเปลี่ยนรายการ
  4. การรายงานผลครบวงจร: ผลตัวเลข/ตัวอักษร, ภาพ, Lab Note
  5. การควบคุมคุณภาพ: QC, Report by/Approved by, การล็อกผล
  6. การแจ้งเตือนอัตโนมัติ: ผลผิดปกติ, ค่าวิกฤต, การพร้อมดูผล
  7. การเชื่อมโยง Lab นอก: รับผล PDF จากภายนอก
  8. การนัดฟังผล: เชื่อมโยงระบบนัดหมาย

📝 กลไกการอ้างอิงข้อมูล

ระบบใช้ Foreign Key หลัก: - HN: รหัสผู้ป่วยจากระบบเวชระเบียน (1.2.1) - VisitID: รหัสการเข้ารับบริการ - SourceSystemID: ระบุระบบที่สั่งตรวจ (1.2.2, 1.2.3, 1.2.4) - DoctorID: รหัสแพทย์ผู้สั่งตรวจ - LabTechnicianID: รหัสนักเทคนิคผู้ทำการตรวจ


1. แผนภาพแบบง่าย (Simplified Diagram)

แผนภาพนี้แสดงความสัมพันธ์ระหว่างกลุ่มตารางหลักๆ และการเชื่อมโยงกับระบบอื่น

graph TB
    subgraph "🔴 External Systems"
        MED_REC["📋 ระบบเวชระเบียน<br/>(1.2.1)"]
        HISTORY["🩺 ระบบซักประวัติ<br/>(1.2.2)"]
        EXAM["🏥 ระบบห้องตรวจแพทย์<br/>(1.2.3)"]
        ER["🚑 ระบบห้องฉุกเฉิน<br/>(1.2.4)"]
        APPT["📅 ระบบนัดหมาย<br/>(1.2.6)"]
        XRAY["🩻 ระบบรังสีวิทยา<br/>(1.2.8)"]
        PHARM["💊 ระบบเภสัชกรรม<br/>(1.2.13)"]
        FINANCE["💳 ระบบการเงิน<br/>(1.2.14)"]
        OUT_LAB["🏢 Lab นอก<br/>(External Lab)"]
    end

    subgraph "🟢 Core Lab System"
        ORDER["📝 คำสั่งตรวจ<br/>LAB_ORDER"]
        RESULT["📊 ผลการตรวจ<br/>LAB_RESULT"]
        SPECIMEN["🧪 สิ่งส่งตรวจ<br/>LAB_SPECIMEN"]
        SESSION["⚙️ เซสชันงาน<br/>LAB_WORK_SESSION"]
    end

    subgraph "🔵 Support System"
        ORDER_DETAIL["📋 รายละเอียดคำสั่ง<br/>LAB_ORDER_DETAIL"]
        RESULT_HISTORY["📈 ประวัติผล<br/>LAB_RESULT_HISTORY"]
        SPECIMEN_TRACK["🔍 ติดตามสิ่งส่งตรวจ<br/>LAB_SPECIMEN_TRACKING"]
        QC_CONTROL["✅ ควบคุมคุณภาพ<br/>LAB_QC_CONTROL"]
        LAB_APPT["📅 นัดฟังผล<br/>LAB_APPOINTMENT"]
        OUT_SOURCE["🏢 Lab นอก<br/>LAB_OUT_SOURCE"]
    end

    subgraph "🟠 System Controls"
        NOTIFICATION["🔔 การแจ้งเตือน<br/>LAB_NOTIFICATION"]
        TEMPLATE["📄 แม่แบบรายงาน<br/>LAB_REPORT_TEMPLATE"]
        ALERT_RULE["⚠️ กฎการแจ้งเตือน<br/>LAB_ALERT_RULE"]
        BARCODE["📱 Barcode Tracking<br/>LAB_BARCODE_TRACKING"]
        INTEGRATION["🔗 Integration Log<br/>LAB_INTEGRATION_LOG"]
        AUDIT["📋 Audit Log<br/>LAB_AUDIT_LOG"]
    end

    subgraph "🟡 Lab Master Data"
        LAB_ITEM["🔬 รายการตรวจ<br/>LAB_ITEM"]
        LAB_PANEL["📋 กลุ่มการตรวจ<br/>LAB_PANEL"]
        NORMAL_RANGE["📏 ค่าปกติ<br/>LAB_NORMAL_RANGE"]
        CRITICAL_VALUE["🚨 ค่าวิกฤต<br/>LAB_CRITICAL_VALUE"]
        SPECIMEN_TYPE["🧪 ประเภทสิ่งส่งตรวจ<br/>LAB_SPECIMEN_TYPE"]
    end

    subgraph "🟣 Configuration Data"
        LAB_DEPT["🏥 แผนกแลป<br/>LAB_DEPARTMENT"]
        LAB_CAT["📂 หมวดหมู่<br/>LAB_CATEGORY"]
        LAB_UNIT["📐 หน่วย<br/>LAB_UNIT"]
        LAB_METHOD["🔬 วิธีการตรวจ<br/>LAB_METHOD"]
        LAB_MACHINE["🖥️ เครื่องมือ<br/>LAB_MACHINE"]
    end

    %% External connections
    MED_REC -->|HN, VisitID| ORDER
    HISTORY -->|Lab Orders| ORDER
    EXAM -->|Lab Orders| ORDER
    ER -->|STAT Lab Orders| ORDER
    OUT_LAB -->|Lab Results PDF| OUT_SOURCE

    %% Core relationships
    ORDER --> ORDER_DETAIL
    ORDER --> SPECIMEN
    ORDER --> SESSION
    ORDER --> QC_CONTROL

    SPECIMEN --> SPECIMEN_TRACK
    SPECIMEN --> BARCODE

    SESSION --> RESULT
    RESULT --> RESULT_HISTORY
    RESULT --> NOTIFICATION

    %% Lab appointments and outsource
    RESULT -->|Schedule Appointment| APPT
    ORDER --> OUT_SOURCE
    OUT_SOURCE --> LAB_APPT

    %% System controls
    RESULT --> ALERT_RULE
    ALERT_RULE --> NOTIFICATION
    ORDER --> TEMPLATE
    SESSION --> AUDIT

    %% Master data relationships
    ORDER_DETAIL --> LAB_ITEM
    ORDER_DETAIL --> LAB_PANEL
    LAB_ITEM --> NORMAL_RANGE
    LAB_ITEM --> CRITICAL_VALUE
    LAB_ITEM --> SPECIMEN_TYPE
    LAB_ITEM --> LAB_CAT
    LAB_ITEM --> LAB_UNIT
    LAB_ITEM --> LAB_METHOD
    SESSION --> LAB_MACHINE
    SESSION --> LAB_DEPT

    %% External integrations
    RESULT -->|Lab Results| EXAM
    RESULT -->|Lab Results| HISTORY
    RESULT -->|Lab Results| ER
    RESULT -->|Lab Charges| FINANCE
    ORDER -->|Drug Interaction Check| PHARM
    RESULT -->|Related Studies| XRAY

    %% Styling
    class MED_REC,HISTORY,EXAM,ER,APPT,XRAY,PHARM,FINANCE,OUT_LAB external
    class ORDER,RESULT,SPECIMEN,SESSION core
    class ORDER_DETAIL,RESULT_HISTORY,SPECIMEN_TRACK,QC_CONTROL,LAB_APPT,OUT_SOURCE support
    class NOTIFICATION,TEMPLATE,ALERT_RULE,BARCODE,INTEGRATION,AUDIT system
    class LAB_ITEM,LAB_PANEL,NORMAL_RANGE,CRITICAL_VALUE,SPECIMEN_TYPE labMaster
    class LAB_DEPT,LAB_CAT,LAB_UNIT,LAB_METHOD,LAB_MACHINE config

2. แผนภาพรายละเอียด (Detailed ERD)

แผนภาพนี้แสดงโครงสร้างตารางและความสัมพันธ์แบบละเอียดทั้งหมด

2.1 ตารางหลัก (Core Tables)

erDiagram
    LAB_ORDER {
        varchar_20 LabOrderID PK "รหัสคำสั่งตรวจ Auto-generated"
        varchar_15 HN FK "รหัสผู้ป่วย จาก PATIENT.HN"
        varchar_20 VisitID FK "รหัสการเข้ารับบริการ จาก VISIT.VisitID"
        varchar_10 SourceSystem "ระบบต้นทาง HISTORY-EXAMINATION-EMERGENCY"
        varchar_20 SourceOrderID "รหัสคำสั่งจากระบบต้นทาง"
        varchar_10 DoctorID FK "รหัสแพทย์ผู้สั่งตรวจ จาก DOCTOR.DoctorID"
        varchar_10 DepartmentCode FK "รหัสแผนกที่สั่ง จาก DEPARTMENT.DeptCode"
        varchar_5 RoomCode FK "รหัสห้องที่สั่ง จาก ROOM.RoomCode"
        datetime OrderDateTime "วันเวลาที่สั่งตรวจ"
        varchar_10 Priority "ความเร่งด่วน ROUTINE-URGENT-STAT"
        varchar_20 ClinicalInfo "ข้อมูลทางคลินิก"
        text Indication "ข้อบ่งชี้การตรวจ"
        varchar_10 OrderStatus "สถานะคำสั่ง PENDING-COLLECTED-PROCESSING-COMPLETED-CANCELLED"
        decimal_10_2 TotalAmount "ราคารวม"
        varchar_10 PaymentType "ประเภทการชำระ CASH-INSURANCE-GOVERNMENT"
        varchar_20 RightCheckID FK "รหัสตรวจสอบสิทธิ จาก RIGHTS_CHECK.RightCheckID"
        text SpecialInstruction "คำแนะนำพิเศษ"
        boolean IsOutLab "เป็น Lab นอกหรือไม่"
        varchar_20 OutLabID FK "รหัส Lab นอก จาก LAB_OUT_SOURCE.OutLabID"
        boolean IsPrinted "พิมพ์ใบสั่งแล้วหรือไม่"
        datetime PrintedDateTime "วันเวลาที่พิมพ์"
        varchar_10 PrintedBy "ผู้พิมพ์"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_RESULT {
        varchar_20 LabResultID PK "รหัสผลการตรวจ Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_20 LabOrderDetailID FK "รหัสรายการตรวจ จาก LAB_ORDER_DETAIL.LabOrderDetailID"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        varchar_10 ResultType "ประเภทผล NUMERIC-TEXT-IMAGE-PDF"
        varchar_50 NumericResult "ผลเป็นตัวเลข"
        text TextResult "ผลเป็นข้อความ"
        text ImagePath "Path รูปภาพผลการตรวจ"
        text PDFPath "Path ไฟล์ PDF"
        varchar_10 UnitCode FK "รหัสหน่วย จาก LAB_UNIT.UnitCode"
        varchar_50 NormalRange "ค่าปกติสำหรับผู้ป่วยคนนี้"
        varchar_20 AbnormalFlag "สถานะผลผิดปกติ NORMAL-HIGH-LOW-CRITICAL-ABNORMAL"
        boolean IsCritical "เป็นค่าวิกฤตหรือไม่"
        datetime ResultDateTime "วันเวลาที่ได้ผล"
        varchar_10 LabTechnicianID FK "รหัสนักเทคนิค จาก LAB_TECHNICIAN.TechnicianID"
        varchar_10 MethodCode FK "รหัสวิธีการตรวจ จาก LAB_METHOD.MethodCode"
        varchar_10 MachineID FK "รหัสเครื่องตรวจ จาก LAB_MACHINE.MachineID"
        text LabNote "หมายเหตุจากแลป"
        varchar_10 ResultStatus "สถานะผล PENDING-REPORTED-APPROVED-LOCKED"
        varchar_10 ReportedBy "รายงานผลโดย"
        datetime ReportedDateTime "วันเวลารายงานผล"
        varchar_10 ApprovedBy "อนุมัติผลโดย"
        datetime ApprovedDateTime "วันเวลาอนุมัติผล"
        boolean IsLocked "ล็อกผลแล้วหรือไม่"
        varchar_10 LockedBy "ล็อกโดย"
        datetime LockedDateTime "วันเวลาล็อก"
        boolean NotificationSent "ส่งการแจ้งเตือนแล้วหรือไม่"
        datetime NotificationDateTime "วันเวลาส่งการแจ้งเตือน"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_SPECIMEN {
        varchar_20 SpecimenID PK "รหัสสิ่งส่งตรวจ Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_10 SpecimenTypeCode FK "รหัสประเภทสิ่งส่งตรวจ จาก LAB_SPECIMEN_TYPE.SpecimenTypeCode"
        varchar_30 BarcodeNumber "หมายเลข Barcode"
        datetime CollectionDateTime "วันเวลาเก็บสิ่งส่งตรวจ"
        varchar_10 CollectedBy "ผู้เก็บสิ่งส่งตรวจ"
        varchar_20 CollectionSite "จุดเก็บสิ่งส่งตรวจ"
        text CollectionNote "หมายเหตุการเก็บ"
        varchar_10 SpecimenCondition "สภาพสิ่งส่งตรวจ GOOD-CLOTTED-HEMOLYZED-INSUFFICIENT"
        decimal_5_2 Volume "ปริมาตรสิ่งส่งตรวจ ml"
        varchar_10 ContainerType "ประเภทภาชนะ"
        varchar_10 PreservativeType "ประเภทสารกันเสีย"
        varchar_10 SpecimenStatus "สถานะสิ่งส่งตรวจ COLLECTED-RECEIVED-PROCESSING-PROCESSED-DISCARDED"
        datetime ReceivedDateTime "วันเวลารับสิ่งส่งตรวจ"
        varchar_10 ReceivedBy "ผู้รับสิ่งส่งตรวจ"
        varchar_10 ProcessedBy "ผู้ประมวลผล"
        datetime ProcessedDateTime "วันเวลาประมวลผล"
        text RejectReason "เหตุผลการปฏิเสธ"
        varchar_10 StorageLocation "ตำแหน่งจัดเก็บ"
        decimal_5_2 Temperature "อุณหภูมิจัดเก็บ Celsius"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_WORK_SESSION {
        varchar_20 SessionID PK "รหัสเซสชันการทำงาน Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_10 DepartmentCode FK "รหัสแผนกแลป จาก LAB_DEPARTMENT.DeptCode"
        varchar_10 LabTechnicianID FK "รหัสนักเทคนิค จาก LAB_TECHNICIAN.TechnicianID"
        varchar_10 SupervisorID FK "รหัสหัวหน้างาน จาก LAB_SUPERVISOR.SupervisorID"
        datetime StartDateTime "วันเวลาเริ่มงาน"
        datetime EndDateTime "วันเวลาสิ้นสุดงาน"
        varchar_10 SessionStatus "สถานะเซสชัน STARTED-IN_PROGRESS-COMPLETED-CANCELLED"
        text WorkNote "หมายเหตุการทำงาน"
        varchar_10 QCStatus "สถานะ QC PENDING-PASSED-FAILED"
        text QCNote "หมายเหตุ QC"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_ORDER ||--o{ LAB_ORDER_DETAIL : "has items"
    LAB_ORDER ||--o{ LAB_SPECIMEN : "requires specimens"
    LAB_ORDER ||--o{ LAB_WORK_SESSION : "processed in"
    LAB_ORDER_DETAIL ||--o{ LAB_RESULT : "produces results"
    LAB_SPECIMEN ||--o{ LAB_SPECIMEN_TRACKING : "tracked"
    LAB_WORK_SESSION ||--o{ LAB_RESULT : "generates results"
    LAB_RESULT ||--o{ LAB_RESULT_HISTORY : "has history"

2.2 ตารางสนับสนุนการทำงาน (Support Tables)

erDiagram
    LAB_ORDER_DETAIL {
        varchar_20 LabOrderDetailID PK "รหัสรายการตรวจ Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        varchar_10 LabPanelCode FK "รหัสกลุ่มการตรวจ จาก LAB_PANEL.PanelCode"
        int OrderSequence "ลำดับการตรวจ"
        decimal_8_2 Price "ราคาต่อหน่วย"
        int Quantity "จำนวน"
        decimal_10_2 Amount "จำนวนเงิน"
        varchar_10 ItemStatus "สถานะรายการ PENDING-COLLECTED-PROCESSING-COMPLETED-CANCELLED"
        text SpecialRequest "คำขอพิเศษ"
        boolean IsUrgent "เร่งด่วนหรือไม่"
        datetime RequestedDateTime "วันเวลาที่ต้องการผล"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_RESULT_HISTORY {
        varchar_20 HistoryID PK "รหัสประวัติ Auto-generated"
        varchar_20 LabResultID FK "รหัสผลการตรวจ จาก LAB_RESULT.LabResultID"
        varchar_10 ChangeType "ประเภทการเปลี่ยน CREATE-UPDATE-DELETE-APPROVE-LOCK"
        text OldValue "ค่าเดิม"
        text NewValue "ค่าใหม่"
        text ChangeReason "เหตุผลการเปลี่ยน"
        varchar_10 ChangedBy "ผู้เปลี่ยน"
        datetime ChangedDateTime "วันเวลาที่เปลี่ยน"
        varchar_15 ClientIP "IP Address ผู้เปลี่ยน"
        text UserAgent "User Agent"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_SPECIMEN_TRACKING {
        varchar_20 TrackingID PK "รหัสการติดตาม Auto-generated"
        varchar_20 SpecimenID FK "รหัสสิ่งส่งตรวจ จาก LAB_SPECIMEN.SpecimenID"
        varchar_30 BarcodeNumber FK "หมายเลข Barcode"
        varchar_20 TrackingEvent "เหตุการณ์ COLLECTED-RECEIVED-TRANSFERRED-PROCESSED-STORED-DISCARDED"
        datetime EventDateTime "วันเวลาเหตุการณ์"
        varchar_10 EventBy "ผู้ดำเนินการ"
        varchar_20 Location "สถานที่"
        text EventNote "หมายเหตุเหตุการณ์"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_QC_CONTROL {
        varchar_20 QCControlID PK "รหัสควบคุมคุณภาพ Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_20 SessionID FK "รหัสเซสชัน จาก LAB_WORK_SESSION.SessionID"
        varchar_10 QCType "ประเภท QC INTERNAL-EXTERNAL-PROFICIENCY"
        varchar_20 QCLot "Lot QC"
        varchar_50 ExpectedValue "ค่าที่คาดหวัง"
        varchar_50 ObservedValue "ค่าที่ได้"
        varchar_10 QCResult "ผล QC PASS-FAIL-WARNING"
        decimal_5_2 CVPercent "CV Percentage"
        decimal_5_2 SDValue "SD Value"
        text QCNote "หมายเหตุ QC"
        varchar_10 QCBy "ผู้ทำ QC"
        datetime QCDateTime "วันเวลา QC"
        varchar_10 ReviewedBy "ผู้ตรวจสอบ"
        datetime ReviewedDateTime "วันเวลาตรวจสอบ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_APPOINTMENT {
        varchar_20 LabAppointmentID PK "รหัสนัดฟังผล Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_15 HN FK "รหัสผู้ป่วย จาก PATIENT.HN"
        varchar_20 AppointmentID FK "รหัสนัดหมาย จาก APPOINTMENT.AppointmentID"
        varchar_10 AppointmentType "ประเภทนัด FOLLOW_UP-REPEAT_TEST-CONSULTATION"
        datetime AppointmentDateTime "วันเวลานัด"
        varchar_10 DoctorID FK "รหัสแพทย์ จาก DOCTOR.DoctorID"
        varchar_10 DepartmentCode FK "รหัสแผนก จาก DEPARTMENT.DeptCode"
        text AppointmentNote "หมายเหตุการนัด"
        varchar_10 AppointmentStatus "สถานะนัด SCHEDULED-CONFIRMED-COMPLETED-CANCELLED-NO_SHOW"
        text ReasonForAppointment "เหตุผลการนัด"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_OUT_SOURCE {
        varchar_20 OutSourceID PK "รหัสส่งตรวจนอก Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_10 OutLabID FK "รหัส Lab นอก จาก EXTERNAL_LAB.OutLabID"
        varchar_30 OutLabOrderNumber "หมายเลขคำสั่งตรวจ Lab นอก"
        datetime SentDateTime "วันเวลาส่งตรวจ"
        varchar_10 SentBy "ผู้ส่งตรวจ"
        varchar_20 CourierService "บริการขนส่ง"
        text SentNote "หมายเหตุการส่ง"
        datetime ExpectedResultDate "วันที่คาดว่าจะได้ผล"
        datetime ReceivedResultDateTime "วันเวลารับผล"
        varchar_10 ReceivedBy "ผู้รับผล"
        text ResultPDFPath "Path ไฟล์ผล PDF"
        varchar_10 OutSourceStatus "สถานะการส่งตรวจ SENT-RECEIVED-PROCESSED-COMPLETED"
        decimal_10_2 OutLabCost "ค่าใช้จ่าย Lab นอก"
        text OutLabNote "หมายเหตุจาก Lab นอก"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_ORDER ||--o{ LAB_ORDER_DETAIL : "contains"
    LAB_RESULT ||--o{ LAB_RESULT_HISTORY : "tracked"
    LAB_SPECIMEN ||--o{ LAB_SPECIMEN_TRACKING : "events"
    LAB_ORDER ||--o{ LAB_QC_CONTROL : "quality checked"
    LAB_ORDER ||--o{ LAB_APPOINTMENT : "may schedule"
    LAB_ORDER ||--o{ LAB_OUT_SOURCE : "may outsource"

2.3 ตารางจัดการระบบและการตรวจสอบ (System Management Tables)

erDiagram
    LAB_NOTIFICATION {
        varchar_20 NotificationID PK "รหัสการแจ้งเตือน Auto-generated"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_20 LabResultID FK "รหัสผลการตรวจ จาก LAB_RESULT.LabResultID"
        varchar_15 HN FK "รหัสผู้ป่วย จาก PATIENT.HN"
        varchar_10 DoctorID FK "รหัสแพทย์ จาก DOCTOR.DoctorID"
        varchar_10 NotificationType "ประเภทการแจ้งเตือน CRITICAL-ABNORMAL-READY-OVERDUE-QC_FAIL"
        varchar_50 NotificationTitle "หัวข้อการแจ้งเตือน"
        text NotificationMessage "ข้อความแจ้งเตือน"
        varchar_10 Priority "ความสำคัญ LOW-NORMAL-HIGH-CRITICAL"
        varchar_10 Channel "ช่องทางแจ้งเตือน SYSTEM-EMAIL-SMS-LINE"
        varchar_100 RecipientAddress "ที่อยู่ผู้รับ"
        varchar_10 NotificationStatus "สถานะ PENDING-SENT-DELIVERED-FAILED-READ"
        datetime ScheduledDateTime "วันเวลาที่กำหนดส่ง"
        datetime SentDateTime "วันเวลาที่ส่ง"
        datetime DeliveredDateTime "วันเวลาที่ส่งถึง"
        datetime ReadDateTime "วันเวลาที่อ่าน"
        text ErrorMessage "ข้อความข้อผิดพลาด"
        int RetryCount "จำนวนครั้งที่ลองส่งใหม่"
        datetime NextRetryDateTime "วันเวลาลองส่งครั้งต่อไป"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_REPORT_TEMPLATE {
        varchar_20 TemplateID PK "รหัสแม่แบบ Auto-generated"
        varchar_50 TemplateName "ชื่อแม่แบบ"
        varchar_10 TemplateType "ประเภทแม่แบบ RESULT-REQUEST-CERTIFICATE-REPORT"
        varchar_10 DepartmentCode FK "รหัสแผนก จาก LAB_DEPARTMENT.DeptCode"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        text TemplateHTML "HTML Template"
        text TemplateCSS "CSS Style"
        text TemplateJS "JavaScript"
        varchar_10 PaperSize "ขนาดกระดาษ A4-A5-LABEL"
        varchar_10 Orientation "การวางกระดาษ PORTRAIT-LANDSCAPE"
        decimal_5_2 MarginTop "ขอบบน cm"
        decimal_5_2 MarginBottom "ขอบล่าง cm"
        decimal_5_2 MarginLeft "ขอบซ้าย cm"
        decimal_5_2 MarginRight "ขอบขวา cm"
        text HeaderText "ข้อความส่วนหัว"
        text FooterText "ข้อความส่วนท้าย"
        varchar_10 TemplateStatus "สถานะแม่แบบ DRAFT-ACTIVE-INACTIVE"
        varchar_10 ApprovedBy "ผู้อนุมัติ"
        datetime ApprovedDate "วันที่อนุมัติ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_ALERT_RULE {
        varchar_20 AlertRuleID PK "รหัสกฎการแจ้งเตือน Auto-generated"
        varchar_50 RuleName "ชื่อกฎ"
        varchar_10 RuleType "ประเภทกฎ CRITICAL_VALUE-ABNORMAL_RESULT-QC_FAIL-OVERDUE"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        varchar_10 LabCategoryCode FK "รหัสหมวดหมู่ จาก LAB_CATEGORY.CategoryCode"
        varchar_20 Condition "เงื่อนไข GREATER_THAN-LESS_THAN-EQUAL-NOT_EQUAL-CONTAINS-RANGE"
        varchar_50 ThresholdValue "ค่าเกณฑ์"
        varchar_50 MinValue "ค่าต่ำสุด"
        varchar_50 MaxValue "ค่าสูงสุด"
        varchar_10 Priority "ความสำคัญ LOW-NORMAL-HIGH-CRITICAL"
        varchar_10 NotificationChannel "ช่องทางแจ้งเตือน SYSTEM-EMAIL-SMS-LINE-ALL"
        text RecipientList "รายชื่อผู้รับ"
        text MessageTemplate "แม่แบบข้อความ"
        boolean IsAutoNotify "แจ้งเตือนอัตโนมัติ"
        int DelayMinutes "หน่วงเวลา นาที"
        boolean IsActive "เปิดใช้งาน"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
    }

    LAB_BARCODE_TRACKING {
        varchar_30 BarcodeNumber PK "หมายเลข Barcode"
        varchar_20 SpecimenID FK "รหัสสิ่งส่งตรวจ จาก LAB_SPECIMEN.SpecimenID"
        varchar_20 LabOrderID FK "รหัสคำสั่งตรวจ จาก LAB_ORDER.LabOrderID"
        varchar_15 HN FK "รหัสผู้ป่วย จาก PATIENT.HN"
        varchar_10 BarcodeType "ประเภท Barcode CODE128-CODE39-QR_CODE"
        varchar_10 BarcodeStatus "สถานะ PRINTED-SCANNED-PROCESSED-DISPOSED"
        datetime PrintedDateTime "วันเวลาพิมพ์"
        varchar_10 PrintedBy "ผู้พิมพ์"
        datetime FirstScannedDateTime "วันเวลาสแกนครั้งแรก"
        varchar_10 FirstScannedBy "ผู้สแกนครั้งแรก"
        datetime LastScannedDateTime "วันเวลาสแกนล่าสุด"
        varchar_10 LastScannedBy "ผู้สแกนล่าสุด"
        int ScanCount "จำนวนครั้งที่สแกน"
        varchar_20 CurrentLocation "ตำแหน่งปัจจุบัน"
        text TrackingNote "หมายเหตุการติดตาม"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_INTEGRATION_LOG {
        varchar_20 LogID PK "รหัส Log Auto-generated"
        varchar_10 SourceSystem "ระบบต้นทาง HISTORY-EXAMINATION-EMERGENCY-FINANCE-XRAY"
        varchar_10 TargetSystem "ระบบปลายทาง LAB-APPOINTMENT-NOTIFICATION"
        varchar_20 OperationType "ประเภทการดำเนินการ CREATE-UPDATE-DELETE-QUERY-NOTIFICATION"
        varchar_50 APIEndpoint "API Endpoint"
        varchar_10 HTTPMethod "HTTP Method GET-POST-PUT-DELETE"
        text RequestData "ข้อมูลที่ส่ง"
        text ResponseData "ข้อมูลที่ได้รับ"
        varchar_10 StatusCode "รหัสสถานะ"
        varchar_10 OperationStatus "สถานะการดำเนินการ SUCCESS-FAILED-PENDING-TIMEOUT"
        text ErrorMessage "ข้อความข้อผิดพลาด"
        datetime RequestDateTime "วันเวลาส่งคำขอ"
        datetime ResponseDateTime "วันเวลาได้รับตอบกลับ"
        int ResponseTimeMS "เวลาตอบกลับ มิลลิวินาที"
        varchar_15 ClientIP "IP Address ผู้ใช้"
        text UserAgent "User Agent"
        varchar_20 TransactionID "รหัสธุรกรรม"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_AUDIT_LOG {
        varchar_20 AuditID PK "รหัส Audit Auto-generated"
        varchar_50 TableName "ชื่อตาราง"
        varchar_20 RecordID "รหัสระเบียน"
        varchar_10 OperationType "ประเภทการดำเนินการ INSERT-UPDATE-DELETE-SELECT"
        varchar_15 HN "รหัสผู้ป่วย"
        varchar_20 LabOrderID "รหัสคำสั่งตรวจ"
        varchar_20 LabResultID "รหัสผลการตรวจ"
        text OldValues "ค่าเดิม JSON"
        text NewValues "ค่าใหม่ JSON"
        varchar_10 UserID "รหัสผู้ใช้"
        varchar_50 UserName "ชื่อผู้ใช้"
        varchar_10 UserRole "บทบาทผู้ใช้ DOCTOR-NURSE-LAB_TECH-LAB_SUPERVISOR-ADMIN"
        varchar_15 ClientIP "IP Address"
        text UserAgent "User Agent"
        varchar_20 SessionID "รหัส Session"
        datetime ActionDateTime "วันเวลาดำเนินการ"
        text ActionReason "เหตุผลการดำเนินการ"
        varchar_10 ActionStatus "สถานะการดำเนินการ SUCCESS-FAILED"
        text ErrorMessage "ข้อความข้อผิดพลาด"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_RESULT ||--o{ LAB_NOTIFICATION : "triggers notifications"
    LAB_ORDER ||--o{ LAB_NOTIFICATION : "sends notifications"
    LAB_ITEM ||--o{ LAB_ALERT_RULE : "has alert rules"
    LAB_SPECIMEN ||--o{ LAB_BARCODE_TRACKING : "tracked by barcode"
    LAB_ORDER ||--o{ LAB_INTEGRATION_LOG : "logged integrations"
    LAB_RESULT ||--o{ LAB_AUDIT_LOG : "audited actions"

2.4 ตาราง Master Data รายการตรวจ (Lab Items Master Data)

erDiagram
    LAB_ITEM {
        varchar_10 LabItemCode PK "รหัสรายการตรวจ"
        varchar_100 LabItemName "ชื่อรายการตรวจ ภาษาไทย"
        varchar_100 LabItemNameEn "ชื่อรายการตรวจ ภาษาอังกฤษ"
        varchar_20 LOINCCode "รหัส LOINC"
        varchar_20 SNOMEDCode "รหัส SNOMED"
        varchar_10 CategoryCode FK "รหัสหมวดหมู่ จาก LAB_CATEGORY.CategoryCode"
        varchar_10 DepartmentCode FK "รหัสแผนก จาก LAB_DEPARTMENT.DeptCode"
        varchar_10 UnitCode FK "รหัสหน่วย จาก LAB_UNIT.UnitCode"
        varchar_10 SpecimenTypeCode FK "รหัสสิ่งส่งตรวจ จาก LAB_SPECIMEN_TYPE.SpecimenTypeCode"
        varchar_10 ResultType "ประเภทผล NUMERIC-TEXT-OPTION-IMAGE"
        text PossibleValues "ค่าที่เป็นไปได้สำหรับ TEXT-OPTION"
        varchar_10 MethodCode FK "รหัสวิธีการตรวจ จาก LAB_METHOD.MethodCode"
        decimal_8_2 Price "ราคา"
        varchar_10 PriceType "ประเภทราคา CASH-INSURANCE-GOVERNMENT"
        decimal_5_2 TATHours "TAT ชั่วโมง"
        boolean IsOutLab "ส่ง Lab นอกหรือไม่"
        varchar_10 OutLabID FK "รหัส Lab นอก จาก EXTERNAL_LAB.OutLabID"
        boolean IsUrgentAvailable "รองรับเร่งด่วนหรือไม่"
        boolean IsSTATAvailable "รองรับ STAT หรือไม่"
        decimal_5_2 UrgentMultiplier "ตัวคูณราคาเร่งด่วน"
        decimal_5_2 STATMultiplier "ตัวคูณราคา STAT"
        text PreparationInstruction "คำแนะนำการเตรียมตัว"
        text ClinicalSignificance "ความหมายทางคลินิก"
        text InterpretationGuideline "แนวทางการแปลผล"
        boolean RequiresFasting "ต้องงดอาหารหรือไม่"
        int FastingHours "ชั่วโมงงดอาหาร"
        text StorageRequirement "ข้อกำหนดการเก็บ"
        varchar_10 ItemStatus "สถานะรายการ ACTIVE-INACTIVE-DISCONTINUED"
        datetime EffectiveDate "วันที่มีผล"
        datetime ExpiryDate "วันที่หมดอายุ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_PANEL {
        varchar_10 PanelCode PK "รหัสกลุ่มการตรวจ"
        varchar_100 PanelName "ชื่อกลุ่มการตรวจ ภาษาไทย"
        varchar_100 PanelNameEn "ชื่อกลุ่มการตรวจ ภาษาอังกฤษ"
        varchar_10 CategoryCode FK "รหัสหมวดหมู่ จาก LAB_CATEGORY.CategoryCode"
        varchar_10 DepartmentCode FK "รหัสแผนก จาก LAB_DEPARTMENT.DeptCode"
        decimal_8_2 PanelPrice "ราคากลุ่ม"
        boolean IsDiscountApplied "ใช้ส่วนลดหรือไม่"
        decimal_5_2 DiscountPercent "เปอร์เซ็นต์ส่วนลด"
        text PanelDescription "คำอธิบายกลุ่มการตรวจ"
        text ClinicalIndication "ข้อบ่งชี้ทางคลินิก"
        text PreparationInstruction "คำแนะนำการเตรียมตัว"
        boolean RequiresFasting "ต้องงดอาหารหรือไม่"
        int FastingHours "ชั่วโมงงดอาหาร"
        decimal_5_2 TATHours "TAT รวม ชั่วโมง"
        boolean IsUrgentAvailable "รองรับเร่งด่วนหรือไม่"
        boolean IsSTATAvailable "รองรับ STAT หรือไม่"
        varchar_10 PanelStatus "สถานะกลุ่ม ACTIVE-INACTIVE-DISCONTINUED"
        datetime EffectiveDate "วันที่มีผล"
        datetime ExpiryDate "วันที่หมดอายุ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_PANEL_ITEM {
        varchar_20 PanelItemID PK "รหัสรายการในกลุ่ม Auto-generated"
        varchar_10 PanelCode FK "รหัสกลุ่มการตรวจ จาก LAB_PANEL.PanelCode"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        int ItemSequence "ลำดับรายการ"
        boolean IsRequired "บังคับตรวจหรือไม่"
        boolean IsOptional "เลือกตรวจหรือไม่"
        decimal_8_2 ItemPrice "ราคารายการในกลุ่ม"
        text ItemNote "หมายเหตุรายการ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_NORMAL_RANGE {
        varchar_20 NormalRangeID PK "รหัสค่าปกติ Auto-generated"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        varchar_10 Gender "เพศ M-F-ALL"
        int AgeFromDays "อายุตั้งแต่ วัน"
        int AgeToDays "อายุถึง วัน"
        varchar_10 AgeUnit "หน่วยอายุ DAYS-MONTHS-YEARS"
        varchar_50 NumericRangeLow "ค่าปกติต่ำสุด"
        varchar_50 NumericRangeHigh "ค่าปกติสูงสุด"
        text TextRange "ค่าปกติข้อความ"
        varchar_10 UnitCode FK "รหัสหน่วย จาก LAB_UNIT.UnitCode"
        text RangeNote "หมายเหตุค่าปกติ"
        varchar_10 MethodCode FK "รหัสวิธีการตรวจ จาก LAB_METHOD.MethodCode"
        boolean IsDefault "เป็นค่าปกติมาตรฐานหรือไม่"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_CRITICAL_VALUE {
        varchar_20 CriticalValueID PK "รหัสค่าวิกฤต Auto-generated"
        varchar_10 LabItemCode FK "รหัสรายการตรวจ จาก LAB_ITEM.LabItemCode"
        varchar_10 CriticalType "ประเภทวิกฤต HIGH-LOW-CRITICAL_HIGH-CRITICAL_LOW-PANIC"
        varchar_50 CriticalValueLow "ค่าวิกฤตต่ำสุด"
        varchar_50 CriticalValueHigh "ค่าวิกฤตสูงสุด"
        text CriticalCondition "เงื่อนไขค่าวิกฤต"
        varchar_10 Priority "ความสำคัญ HIGH-CRITICAL-PANIC"
        text NotificationMessage "ข้อความแจ้งเตือน"
        boolean AutoNotify "แจ้งเตือนอัตโนมัติ"
        text ActionRequired "การดำเนินการที่ต้องทำ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_SPECIMEN_TYPE {
        varchar_10 SpecimenTypeCode PK "รหัสประเภทสิ่งส่งตรวจ"
        varchar_50 SpecimenTypeName "ชื่อประเภทสิ่งส่งตรวจ"
        varchar_50 SpecimenTypeNameEn "ชื่อประเภทสิ่งส่งตรวจ ภาษาอังกฤษ"
        varchar_20 SNOMEDCode "รหัส SNOMED"
        varchar_10 ContainerType "ประเภทภาชนะ"
        varchar_20 ContainerColor "สีภาชนะ"
        varchar_20 PreservativeType "ประเภทสารกันเสีย"
        decimal_5_2 MinVolume "ปริมาตรต่ำสุด ml"
        decimal_5_2 OptimalVolume "ปริมาตรเหมาะสม ml"
        text CollectionInstruction "คำแนะนำการเก็บ"
        text StorageInstruction "คำแนะนำการเก็บรักษา"
        decimal_5_2 StorageTemperature "อุณหภูมิเก็บ Celsius"
        int StorageDays "ระยะเวลาเก็บ วัน"
        text TransportInstruction "คำแนะนำการขนส่ง"
        boolean RequiresSpecialHandling "ต้องการการจัดการพิเศษ"
        text SpecialHandlingNote "หมายเหตุการจัดการพิเศษ"
        varchar_10 CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar_10 ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_ITEM ||--o{ LAB_PANEL_ITEM : "included in panels"
    LAB_PANEL ||--o{ LAB_PANEL_ITEM : "contains items"
    LAB_ITEM ||--o{ LAB_NORMAL_RANGE : "has normal ranges"
    LAB_ITEM ||--o{ LAB_CRITICAL_VALUE : "has critical values"
    LAB_ITEM ||--o{ LAB_SPECIMEN_TYPE : "requires specimens"

3. ตาราง Master Data และการตั้งค่าระบบ

3.1 ตาราง Master Data การตั้งค่าระบบ

erDiagram
    LAB_DEPARTMENT {
        varchar(10) DeptCode PK "รหัสแผนกแลป"
        varchar(50) DeptName "ชื่อแผนกแลป"
        varchar(50) DeptNameEn "ชื่อแผนกแลป ภาษาอังกฤษ"
        varchar(20) DeptAbbr "ชื่อย่อแผนก"
        text DeptDescription "คำอธิบายแผนก"
        varchar(10) ManagerID FK "รหัสผู้จัดการ → LAB_SUPERVISOR.SupervisorID"
        varchar(20) Location "ที่ตั้งแผนก"
        varchar(20) Extension "เบอร์ต่อภายใน"
        varchar(50) Email "อีเมลแผนก"
        text WorkingHours "เวลาทำการ"
        boolean Is24Hours "ทำการ 24 ชั่วโมง"
        boolean IsEmergencyService "บริการฉุกเฉิน"
        varchar(10) DeptStatus "สถานะแผนก ACTIVE|INACTIVE|MAINTENANCE"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_CATEGORY {
        varchar(10) CategoryCode PK "รหัสหมวดหมู่"
        varchar(50) CategoryName "ชื่อหมวดหมู่"
        varchar(50) CategoryNameEn "ชื่อหมวดหมู่ ภาษาอังกฤษ"
        varchar(20) CategoryAbbr "ชื่อย่อหมวดหมู่"
        text CategoryDescription "คำอธิบายหมวดหมู่"
        varchar(10) ParentCategoryCode FK "รหัสหมวดหมู่แม่ → LAB_CATEGORY.CategoryCode"
        int CategoryLevel "ระดับหมวดหมู่"
        int SortOrder "ลำดับการแสดง"
        varchar(10) IconName "ชื่อไอคอน"
        varchar(20) ColorCode "รหัสสี"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_UNIT {
        varchar(10) UnitCode PK "รหัสหน่วย"
        varchar(20) UnitName "ชื่อหน่วย"
        varchar(20) UnitNameEn "ชื่อหน่วย ภาษาอังกฤษ"
        varchar(10) UnitSymbol "สัญลักษณ์หน่วย"
        varchar(10) UnitType "ประเภทหน่วย CONCENTRATION|COUNT|RATIO|TIME|VOLUME|WEIGHT"
        text UnitDescription "คำอธิบายหน่วย"
        varchar(10) BaseUnit "หน่วยพื้นฐาน"
        decimal(10,6) ConversionFactor "ค่าแปลงหน่วย"
        int DecimalPlaces "จำนวนทศนิยม"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_METHOD {
        varchar(10) MethodCode PK "รหัสวิธีการตรวจ"
        varchar(100) MethodName "ชื่อวิธีการตรวจ"
        varchar(100) MethodNameEn "ชื่อวิธีการตรวจ ภาษาอังกฤษ"
        varchar(20) MethodAbbr "ชื่อย่อวิธีการ"
        text MethodDescription "คำอธิบายวิธีการ"
        varchar(10) MethodType "ประเภทวิธีการ MANUAL|AUTOMATED|SEMI_AUTOMATED"
        varchar(50) Manufacturer "ผู้ผลิต"
        varchar(50) ReagentKit "Kit สารเคมี"
        text Principle "หลักการทำงาน"
        text Procedure "ขั้นตอนการทำ"
        decimal(5,2) CVAcceptable "CV ที่ยอมรับได้ %"
        decimal(5,2) BiasAcceptable "Bias ที่ยอมรับได้ %"
        text QCRequirement "ข้อกำหนด QC"
        text CalibrationNote "หมายเหตุการ Calibration"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_MACHINE {
        varchar(10) MachineID PK "รหัสเครื่องมือ"
        varchar(100) MachineName "ชื่อเครื่องมือ"
        varchar(50) Model "รุ่น"
        varchar(50) SerialNumber "หมายเลขเครื่อง"
        varchar(50) Manufacturer "ผู้ผลิต"
        datetime InstallDate "วันที่ติดตั้ง"
        datetime WarrantyExpiry "วันหมดประกัน"
        varchar(10) DepartmentCode FK "รหัสแผนก → LAB_DEPARTMENT.DeptCode"
        varchar(20) Location "ที่ตั้งเครื่อง"
        varchar(10) MachineType "ประเภทเครื่อง ANALYZER|MICROSCOPE|CENTRIFUGE|INCUBATOR"
        text TechnicalSpec "ข้อมูลทางเทคนิค"
        text MaintenanceSchedule "กำหนดการบำรุงรักษา"
        datetime LastMaintenanceDate "วันบำรุงรักษาล่าสุด"
        datetime NextMaintenanceDate "วันบำรุงรักษาครั้งต่อไป"
        varchar(10) MachineStatus "สถานะเครื่อง ACTIVE|INACTIVE|MAINTENANCE|BROKEN"
        text CalibrationStatus "สถานะการ Calibration"
        datetime LastCalibrationDate "วันที่ Calibration ล่าสุด"
        datetime NextCalibrationDate "วันที่ Calibration ครั้งต่อไป"
        varchar(50) ResponsiblePerson "ผู้รับผิดชอบเครื่อง"
        text OperatingNote "หมายเหตุการใช้งาน"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_TECHNICIAN {
        varchar(10) TechnicianID PK "รหัสนักเทคนิค"
        varchar(15) EmployeeID FK "รหัสพนักงาน → EMPLOYEE.EmployeeID"
        varchar(100) TechnicianName "ชื่อนักเทคนิค"
        varchar(10) DepartmentCode FK "รหัสแผนกหลัก → LAB_DEPARTMENT.DeptCode"
        varchar(20) Position "ตำแหน่ง"
        varchar(20) LicenseNumber "หมายเลขใบอนุญาต"
        datetime LicenseExpiry "วันหมดอายุใบอนุญาต"
        text Specialization "ความเชี่ยวชาญ"
        text Certification "ใบรับรอง"
        varchar(20) Extension "เบอร์ต่อภายใน"
        varchar(50) Email "อีเมล"
        boolean CanApproveResults "สามารถอนุมัติผลได้"
        boolean CanSuperviseTechnician "สามารถดูแลเทคนิคได้"
        text WorkingHours "เวลาทำการ"
        varchar(10) TechnicianStatus "สถานะ ACTIVE|INACTIVE|LEAVE|TRANSFER"
        datetime StartDate "วันเริ่มงาน"
        datetime EndDate "วันสิ้นสุดงาน"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    LAB_SUPERVISOR {
        varchar(10) SupervisorID PK "รหัสหัวหน้างาน"
        varchar(15) EmployeeID FK "รหัสพนักงาน → EMPLOYEE.EmployeeID"
        varchar(100) SupervisorName "ชื่อหัวหน้างาน"
        varchar(10) DepartmentCode FK "รหัสแผนกหลัก → LAB_DEPARTMENT.DeptCode"
        varchar(20) Position "ตำแหน่ง"
        varchar(20) LicenseNumber "หมายเลขใบอนุญาต"
        datetime LicenseExpiry "วันหมดอายุใบอนุญาต"
        text Education "การศึกษา"
        text Experience "ประสบการณ์"
        varchar(20) Extension "เบอร์ต่อภายใน"
        varchar(50) Email "อีเมล"
        boolean CanApproveAllResults "สามารถอนุมัติผลทั้งหมด"
        boolean CanManageDepartment "สามารถจัดการแผนก"
        boolean CanAccessAllDepartments "เข้าถึงทุกแผนก"
        text ResponsibilityArea "พื้นที่รับผิดชอบ"
        varchar(10) SupervisorStatus "สถานะ ACTIVE|INACTIVE|LEAVE|TRANSFER"
        datetime StartDate "วันเริ่มงาน"
        datetime EndDate "วันสิ้นสุดงาน"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    EXTERNAL_LAB {
        varchar(10) OutLabID PK "รหัส Lab นอก"
        varchar(100) LabName "ชื่อ Lab นอก"
        varchar(100) LabNameEn "ชื่อ Lab นอก ภาษาอังกฤษ"
        varchar(20) LicenseNumber "หมายเลขใบอนุญาต"
        text Address "ที่อยู่"
        varchar(20) Phone "เบอร์โทรศัพท์"
        varchar(20) Fax "เบอร์แฟกซ์"
        varchar(50) Email "อีเมล"
        varchar(100) Website "เว็บไซต์"
        varchar(100) ContactPerson "ผู้ติดต่อ"
        varchar(20) ContactPhone "เบอร์ติดต่อ"
        varchar(50) ContactEmail "อีเมลติดต่อ"
        text ServiceOffered "บริการที่ให้"
        decimal(5,2) DiscountPercent "เปอร์เซ็นต์ส่วนลด"
        text PaymentTerms "เงื่อนไขการชำระเงิน"
        text DeliveryMethod "วิธีการส่งผล"
        decimal(5,2) AverageTATDays "TAT เฉลี่ย วัน"
        text QualityAccreditation "การรับรองคุณภาพ"
        varchar(10) LabStatus "สถานะ ACTIVE|INACTIVE|SUSPENDED"
        datetime ContractStartDate "วันเริ่มสัญญา"
        datetime ContractEndDate "วันสิ้นสุดสัญญา"
        varchar(10) CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        varchar(10) ModifiedBy "ผู้แก้ไข"
        datetime ModifiedDate "วันที่แก้ไข"
        boolean IsActive "สถานะใช้งาน"
    }

    %% Configuration Relationships
    LAB_CATEGORY ||--o{ LAB_CATEGORY : "parent-child"
    LAB_DEPARTMENT ||--o{ LAB_TECHNICIAN : "employs"
    LAB_DEPARTMENT ||--o{ LAB_SUPERVISOR : "employs"
    LAB_DEPARTMENT ||--o{ LAB_MACHINE : "has machines"
    LAB_ITEM ||--o{ LAB_CATEGORY : "categorized"
    LAB_ITEM ||--o{ LAB_UNIT : "measured in"
    LAB_ITEM ||--o{ LAB_METHOD : "tested using"
    LAB_RESULT ||--o{ LAB_MACHINE : "tested on"
    LAB_ITEM ||--o{ EXTERNAL_LAB : "outsourced to"

4. การเชื่อมโยงกับระบบอื่น (System Integration)

4.1 แผนภาพการเชื่อมโยงระบบ

graph TB
    subgraph "🟢 ระบบงานชันสูตร (1.2.7)"
        LAB_ORDER_CORE["📝 LAB_ORDER<br/>คำสั่งตรวจหลัก"]
        LAB_RESULT_CORE["📊 LAB_RESULT<br/>ผลการตรวจ"]
        LAB_SPECIMEN_CORE["🧪 LAB_SPECIMEN<br/>สิ่งส่งตรวจ"]
        LAB_NOTIFICATION_CORE["🔔 LAB_NOTIFICATION<br/>การแจ้งเตือน"]
        LAB_APPOINTMENT_CORE["📅 LAB_APPOINTMENT<br/>นัดฟังผล"]
        LAB_OUT_SOURCE_CORE["🏢 LAB_OUT_SOURCE<br/>Lab นอก"]
        LAB_INTEGRATION_CORE["🔗 LAB_INTEGRATION_LOG<br/>Integration Log"]
    end

    subgraph "🔴 External Systems - Input Sources"
        PATIENT_REF["👤 PATIENT<br/>ข้อมูลผู้ป่วย<br/>(1.2.1)"]
        VISIT_REF["🏥 VISIT<br/>การเข้ารับบริการ<br/>(1.2.1)"]
        HISTORY_REF["📋 HISTORY_TAKING<br/>ระบบซักประวัติ<br/>(1.2.2)"]
        EXAM_REF["🩺 EXAMINATION_SESSION<br/>ระบบห้องตรวจแพทย์<br/>(1.2.3)"]
        ER_REF["🚑 EMERGENCY_CASE<br/>ระบบห้องฉุกเฉิน<br/>(1.2.4)"]
        DOCTOR_REF["👨‍⚕️ DOCTOR<br/>ข้อมูลแพทย์<br/>(Master Data)"]
        DEPT_REF["🏛️ DEPARTMENT<br/>ข้อมูลแผนก<br/>(Master Data)"]
        ROOM_REF["🚪 ROOM<br/>ข้อมูลห้อง<br/>(Master Data)"]
    end

    subgraph "🔴 External Systems - Integration Targets"
        APPT_SYS["📅 APPOINTMENT<br/>ระบบนัดหมาย<br/>(1.2.6)"]
        XRAY_SYS["🩻 ระบบรังสีวิทยา<br/>(1.2.8)"]
        PHARM_SYS["💊 ระบบเภสัชกรรม<br/>(1.2.13)"]
        FINANCE_SYS["💳 ระบบการเงิน<br/>(1.2.14)"]
        RIGHTS_SYS["🛡️ ระบบตรวจสอบสิทธิ<br/>(1.2.15)"]
        OUT_LAB_SYS["🏢 External Lab<br/>Lab ภายนอก"]
        NOTIFICATION_SYS["📱 Notification System<br/>ระบบแจ้งเตือน"]
    end

    %% Input Integration (Data Flow In)
    PATIENT_REF -->|HN, Demographics| LAB_ORDER_CORE
    VISIT_REF -->|VisitID, Visit Info| LAB_ORDER_CORE
    HISTORY_REF -->|Lab Orders from History| LAB_ORDER_CORE
    EXAM_REF -->|Lab Orders from Examination| LAB_ORDER_CORE
    ER_REF -->|STAT Lab Orders from ER| LAB_ORDER_CORE
    DOCTOR_REF -->|DoctorID, Doctor Info| LAB_ORDER_CORE
    DEPT_REF -->|DepartmentCode| LAB_ORDER_CORE
    ROOM_REF -->|RoomCode| LAB_ORDER_CORE

    %% Core Processing
    LAB_ORDER_CORE --> LAB_SPECIMEN_CORE
    LAB_SPECIMEN_CORE --> LAB_RESULT_CORE
    LAB_RESULT_CORE --> LAB_NOTIFICATION_CORE
    LAB_ORDER_CORE --> LAB_OUT_SOURCE_CORE
    LAB_RESULT_CORE --> LAB_APPOINTMENT_CORE

    %% Output Integration (Data Flow Out)
    LAB_RESULT_CORE -->|Lab Results| HISTORY_REF
    LAB_RESULT_CORE -->|Lab Results| EXAM_REF
    LAB_RESULT_CORE -->|STAT Lab Results| ER_REF
    LAB_APPOINTMENT_CORE -->|Appointment Requests| APPT_SYS
    LAB_RESULT_CORE -->|Related Studies| XRAY_SYS
    LAB_ORDER_CORE -->|Drug Interaction Check| PHARM_SYS
    LAB_ORDER_CORE -->|Lab Charges| FINANCE_SYS
    LAB_ORDER_CORE -->|Rights Verification| RIGHTS_SYS
    LAB_OUT_SOURCE_CORE -->|Outsource Orders| OUT_LAB_SYS
    LAB_NOTIFICATION_CORE -->|Alerts & Notifications| NOTIFICATION_SYS

    %% Bidirectional Integration
    OUT_LAB_SYS <-->|Order Status & Results| LAB_OUT_SOURCE_CORE
    APPT_SYS <-->|Appointment Confirmation| LAB_APPOINTMENT_CORE
    FINANCE_SYS <-->|Payment Status| LAB_ORDER_CORE
    RIGHTS_SYS <-->|Coverage Info| LAB_ORDER_CORE

    %% Integration Logging
    LAB_ORDER_CORE --> LAB_INTEGRATION_CORE
    LAB_RESULT_CORE --> LAB_INTEGRATION_CORE
    LAB_NOTIFICATION_CORE --> LAB_INTEGRATION_CORE
    LAB_APPOINTMENT_CORE --> LAB_INTEGRATION_CORE

    %% Styling
    class PATIENT_REF,VISIT_REF,HISTORY_REF,EXAM_REF,ER_REF,DOCTOR_REF,DEPT_REF,ROOM_REF inputSystems
    class APPT_SYS,XRAY_SYS,PHARM_SYS,FINANCE_SYS,RIGHTS_SYS,OUT_LAB_SYS,NOTIFICATION_SYS targetSystems
    class LAB_ORDER_CORE,LAB_RESULT_CORE,LAB_SPECIMEN_CORE,LAB_NOTIFICATION_CORE,LAB_APPOINTMENT_CORE,LAB_OUT_SOURCE_CORE,LAB_INTEGRATION_CORE labCore

4.2 API Integration Points

🔗 การเชื่อมโยงข้อมูลเข้า (Input Integration): - HN และ VisitID จากระบบเวชระเบียน (1.2.1) - ข้อมูลผู้ป่วยและการเข้ารับบริการ - คำสั่งตรวจ Lab จากระบบซักประวัติ (1.2.2) - พร้อมข้อมูล HistoryID - คำสั่งตรวจ Lab จากระบบห้องตรวจแพทย์ (1.2.3) - พร้อมข้อมูล ExaminationID - คำสั่งตรวจ STAT จากระบบห้องฉุกเฉิน (1.2.4) - พร้อมข้อมูล EmergencyCaseID - RightsVerificationID จากระบบตรวจสอบสิทธิ (1.2.15) - ข้อมูลสิทธิการรักษา - ข้อมูล Master Data แพทย์, แผนก, ห้อง จากระบบต่างๆ

🔗 การเชื่อมโยงข้อมูลออก (Output Integration): - ผลการตรวจ Lab กลับไปยังระบบซักประวัติ (1.2.2) - ผลการตรวจ Lab กลับไปยังระบบห้องตรวจแพทย์ (1.2.3) - ผลการตรวจ STAT กลับไปยังระบบห้องฉุกเฉิน (1.2.4) - Real-time Critical Results - การขอนัดฟังผลไปยังระบบนัดหมาย (1.2.6) - ข้อมูลค่าบริการ Lab ไปยังระบบการเงิน (1.2.14) - การแจ้งเตือนผลผิดปกติผ่านระบบแจ้งเตือน

🔗 การเชื่อมโยงสองทาง (Bidirectional Integration): - การตรวจสอบ Drug Interaction กับระบบเภสัชกรรม (1.2.13) - การเชื่อมโยงศึกษาเสริมกับระบบรังสีวิทยา (1.2.8) - การส่งตรวจและรับผลจาก Lab นอก (External Lab) - การยืนยันนัดหมายกับระบบนัดหมาย (1.2.6) - การตรวจสอบสถานะการชำระเงินกับระบบการเงิน (1.2.14)

🚨 Lab-Specific Features: - Real-time STAT Processing: การประมวลผลตรวจฉุกเฉินแบบทันที - Critical Value Alerts: การแจ้งเตือนค่าวิกฤตแบบอัตโนมัติ - Quality Control Integration: การเชื่อมโยงระบบควบคุมคุณภาพ - Barcode Specimen Tracking: การติดตามสิ่งส่งตรวจด้วย Barcode - External Lab Interface: การเชื่อมโยงกับ Lab ภายนอก - Template-based Reporting: การรายงานผลด้วยแม่แบบที่กำหนดเอง - Audit Trail for Results: การบันทึกการเปลี่ยนแปลงผลการตรวจ - Automatic Result Approval Workflow: กระบวนการอนุมัติผลอัตโนมัติ


5. Database Relationships Summary

Primary Relationships (ความสัมพันธ์หลัก)

  1. LAB_ORDER เป็นศูนย์กลางของระบบ เชื่อมโยงกับ:
  2. LAB_ORDER_DETAIL (1:N) - รายละเอียดรายการตรวจ
  3. LAB_SPECIMEN (1:N) - สิ่งส่งตรวจที่ต้องการ
  4. LAB_WORK_SESSION (1:N) - เซสชันการทำงาน
  5. LAB_QC_CONTROL (1:N) - การควบคุมคุณภาพ
  6. LAB_APPOINTMENT (1:N) - การนัดฟังผล
  7. LAB_OUT_SOURCE (1:1, optional) - การส่งตรวจ Lab นอก
  8. LAB_NOTIFICATION (1:N) - การแจ้งเตือนต่างๆ

  9. LAB_RESULT จัดการผลการตรวจ เชื่อมโยงกับ:

  10. LAB_RESULT_HISTORY (1:N) - ประวัติการเปลี่ยนแปลงผล
  11. LAB_NOTIFICATION (1:N) - การแจ้งเตือนผลผิดปกติ
  12. LAB_ALERT_RULE (N:1) - กฎการแจ้งเตือน
  13. LAB_CRITICAL_VALUE (N:1) - ค่าวิกฤต
  14. LAB_NORMAL_RANGE (N:1) - ค่าปกติ

  15. LAB_SPECIMEN จัดการสิ่งส่งตรวจ เชื่อมโยงกับ:

  16. LAB_SPECIMEN_TRACKING (1:N) - การติดตามสิ่งส่งตรวจ
  17. LAB_BARCODE_TRACKING (1:1) - การติดตาม Barcode
  18. LAB_SPECIMEN_TYPE (N:1) - ประเภทสิ่งส่งตรวจ

  19. การจัดการ Panel และรายการตรวจ:

  20. LAB_PANEL (1:N) ↔ LAB_PANEL_ITEM (N:1) ↔ LAB_ITEM
  21. LAB_ITEM (1:N) → LAB_NORMAL_RANGE, LAB_CRITICAL_VALUE
  22. LAB_ITEM (N:1) → LAB_CATEGORY, LAB_UNIT, LAB_METHOD, LAB_SPECIMEN_TYPE

  23. Master Data ให้ข้อมูลอ้างอิง:

  24. Laboratory: LAB_ITEM, LAB_PANEL, LAB_CATEGORY, LAB_DEPARTMENT
  25. Configuration: LAB_UNIT, LAB_METHOD, LAB_MACHINE, LAB_SPECIMEN_TYPE
  26. Personnel: LAB_TECHNICIAN, LAB_SUPERVISOR
  27. External: EXTERNAL_LAB

Integration Points (จุดเชื่อมโยง)

  • LAB_INTEGRATION_LOG: บันทึกการติดต่อกับระบบอื่นๆ
  • HN, VisitID: เป็น Foreign Key หลักที่อ้างอิงจากระบบเวชระเบียน (1.2.1)
  • SourceSystem, SourceOrderID: ระบุระบบต้นทางและรหัสคำสั่งตรวจ
  • AppointmentID: เชื่อมโยงกับระบบนัดหมาย (1.2.6)
  • RightCheckID: เชื่อมโยงกับระบบตรวจสอบสิทธิ (1.2.15)
  • FinanceReferenceID: เชื่อมโยงกับระบบการเงิน (1.2.14)

Laboratory-Specific Relationships

  • Quality Control Flow: LAB_ORDER → LAB_QC_CONTROL → LAB_WORK_SESSION → LAB_RESULT
  • Specimen Flow: LAB_ORDER → LAB_SPECIMEN → LAB_SPECIMEN_TRACKING → LAB_BARCODE_TRACKING
  • Result Approval Flow: LAB_RESULT → ReportedBy → ApprovedBy → IsLocked
  • Alert Flow: LAB_RESULT → LAB_ALERT_RULE → LAB_NOTIFICATION
  • External Lab Flow: LAB_ORDER → LAB_OUT_SOURCE → EXTERNAL_LAB → ResultPDF
  • Appointment Flow: LAB_RESULT → LAB_APPOINTMENT → APPOINTMENT_SYSTEM

6. ข้อมูลสำคัญและข้อจำกัด

6.1 ข้อมูลสำคัญ

  • การจัดการข้อมูลพื้นฐาน Lab: รายการตรวจ, ค่าปกติตามอายุเพศ, ค่าวิกฤต, สิ่งส่งตรวจ, อัตราค่าบริการ ตาม TOR ข้อ 1.2.7.1
  • การสั่งตรวจห้องปฏิบัติการ: รองรับการสั่งตรวจออนไลน์, การเลือกรายการเดี่ยวหรือกลุ่ม, การเพิ่ม-ลดรายการ ตาม TOR ข้อ 1.2.7.2
  • การรายงานผลการตรวจ: แสดงข้อมูลผู้ป่วย, ค้นหาหลายเงื่อนไข, ดูประวัติย้อนหลัง, บันทึกผลและภาพ, นัดฟังผล ตาม TOR ข้อ 1.2.7.3
  • การควบคุมคุณภาพ: ตรวจสอบการเข้าอ่านผล, Report by/Approved by, ล็อกผล, บันทึกประวัติการเปลี่ยนแปลง ตาม TOR ข้อ 1.2.7.4
  • การพิมพ์เอกสาร: ใบ Request Lab, สติกเกอร์ Tube, ใบรายงานผล, ใบนัด ตาม TOR ข้อ 1.2.7.5
  • การเชื่อมโยง Lab นอก: รับผล PDF และจัดการ Lab ภายนอก
  • การแจ้งเตือนอัตโนมัติ: ผลผิดปกติ, ค่าวิกฤต, ผลพร้อมดู
  • การ Audit และ Integration Log: บันทึกการเปลี่ยนแปลงและการเชื่อมโยงระบบ

6.2 ข้อจำกัดและหมายเหตุ

  • 🔸 Foreign Key Constraints: ตาราง Master Data จากระบบอื่นเป็น Reference เท่านั้น
  • 🔸 Data Synchronization: ต้องมีกลไกซิงค์ข้อมูลกับระบบอื่นๆ เป็นระยะ
  • 🔸 Quality Control Requirements: ต้องมีการควบคุมคุณภาพตามมาตรฐาน ISO 15189
  • 🔸 Critical Value Management: ต้องมีกลไกการแจ้งเตือนค่าวิกฤตแบบทันที
  • 🔸 Barcode System Integration: ต้องเชื่อมโยงกับระบบ Barcode และ Label Printer
  • 🔸 External Lab Interface: ต้องมีมาตรฐานการรับส่งข้อมูลกับ Lab ภายนอก
  • 🔸 Result Approval Workflow: ต้องมีกระบวนการอนุมัติผลที่ชัดเจนและตรวจสอบได้
  • 🔸 Template Management: แม่แบบรายงานต้องได้รับการอนุมัติก่อนใช้งาน

6.3 Performance Considerations

  • สร้าง Index บน LabOrderID, HN, VisitID, LabItemCode, ResultDateTime
  • Partition ตาราง LAB_ORDER, LAB_RESULT, LAB_AUDIT_LOG ตามวันที่
  • Archive ข้อมูลเก่าเป็น periodic (ข้อมูลเก่ากว่า 2 ปี)
  • Cache Master Data ที่ใช้บ่อย เช่น LAB_ITEM, LAB_NORMAL_RANGE, LAB_CRITICAL_VALUE
  • Optimize query สำหรับการค้นหาผลการตรวจและการแสดงประวัติ
  • Use Read Replica สำหรับ reporting และ historical data query

6.4 Security Considerations

  • Encrypt ข้อมูลที่ละเอียดอ่อน เช่น ผลการตรวจ, ข้อมูลส่วนตัวผู้ป่วย
  • Audit Log ทุกการเข้าถึงข้อมูลผลการตรวจ
  • API Authentication ด้วย JWT Tokens และ OAuth 2.0
  • Role-based Access Control สำหรับนักเทคนิค, หัวหน้างาน, แพทย์
  • Digital Signature สำหรับการอนุมัติผลการตรวจ
  • Secure transmission สำหรับการส่งผลไปยัง External Systems

6.5 Integration Best Practices

  • ใช้ Asynchronous API calls สำหรับ non-critical operations
  • Implement Circuit Breaker pattern สำหรับ external API calls
  • Monitor API performance ผ่าน LAB_INTEGRATION_LOG
  • Retry mechanism สำหรับ failed API calls
  • Real-time notification สำหรับผลการตรวจวิกฤต
  • Queue-based processing สำหรับการส่งตรวจ Lab นอก
  • Webhook integration สำหรับการรับผลจาก External Lab

6.6 Quality Control Considerations

  • Implement ISO 15189 compliance requirements
  • Daily QC checks และ Monthly QC reports
  • Calibration tracking และ Maintenance scheduling
  • Proficiency testing management
  • Inter-laboratory comparison programs
  • Statistical QC analysis และ trending
  • Non-conformance tracking และ corrective actions

6.7 Laboratory-Specific Requirements

  • TAT Monitoring: ติดตามเวลาตอบสนองของแต่ละรายการตรวจ
  • Specimen Integrity: ตรวจสอบคุณภาพสิ่งส่งตรวจก่อนทำการตรวจ
  • Critical Value Notification: แจ้งเตือนค่าวิกฤตภายใน 30 นาที
  • Result Review Process: กระบวนการตรวจสอบผลก่อนรายงาน
  • Method Validation: การ validate วิธีการตรวจใหม่
  • Reference Range Validation: การตรวจสอบค่าปกติตามประชากร
  • Panic Value Handling: การจัดการค่าที่อันตรายต่อชีวิต
  • Delta Checks: การตรวจสอบความแตกต่างของผลเมื่อเทียบกับผลครั้งก่อน

7. สรุปความสอดคล้องกับ TOR และ SRS

7.1 ความสอดคล้องกับ TOR

TOR ข้อ คำอธิบาย ตารางที่รองรับ
1.2.7.1.1 กำหนดข้อมูลรายการ Lab ค่าปกติ ค่าวิกฤต สิ่งส่งตรวจ อัตราค่าบริการ LAB_ITEM, LAB_NORMAL_RANGE, LAB_CRITICAL_VALUE, LAB_SPECIMEN_TYPE
1.2.7.1.2 กำหนดรูปแบบการสั่งแบบเป็นกลุ่ม LAB_PANEL, LAB_PANEL_ITEM
1.2.7.1.3 เชื่อมโยงกับหมวดหมู่ค่าบริการ LAB_CATEGORY, LAB_ITEM
1.2.7.1.4 กำหนดให้มีการแจ้งเตือนค่าผิดปกติ LAB_ALERT_RULE, LAB_NOTIFICATION
1.2.7.1.5 ออกแบบแบบฟอร์มการสั่ง Lab LAB_REPORT_TEMPLATE
1.2.7.1.6 ระบุ Out Lab LAB_ITEM.IsOutLab, EXTERNAL_LAB
1.2.7.2.1 ส่งตรวจ Lab จากจุดต่างๆ ผ่านระบบ online LAB_ORDER, LAB_INTEGRATION_LOG
1.2.7.2.2 เลือกชนิดการตรวจทีละรายการหรือเป็นกลุ่ม LAB_ORDER_DETAIL, LAB_PANEL
1.2.7.2.3 ลดหรือเพิ่มชนิดการตรวจ LAB_ORDER_DETAIL.ItemStatus
1.2.7.3.1 แสดงข้อมูลผู้ป่วยที่มีการส่งตรวจ Online LAB_ORDER + Patient Integration
1.2.7.3.2 ค้นหาผู้ป่วยด้วยหลายเงื่อนไข LAB_ORDER + Patient Search
1.2.7.3.3 แสดงข้อมูล HN, ชื่อ-สกุล, อายุ, วันเวลา ฯลฯ LAB_ORDER + Patient Integration
1.2.7.3.4 ดูข้อมูลประวัติการตรวจย้อนหลัง LAB_RESULT + Historical Integration
1.2.7.3.5 บันทึกรายงานผล Lab LAB_RESULT
1.2.7.3.6 บันทึกภาพถ่ายและ Result Text LAB_RESULT.ImagePath, TextResult
1.2.7.3.7 นัดหมายเพื่อฟังผลในวันอื่น LAB_APPOINTMENT
1.2.7.3.8 ดูผลการตรวจ Lab ผ่านระบบ online LAB_RESULT + Integration
1.2.7.3.9 แจ้งเตือนเมื่อมีรายการผิดปกติ LAB_NOTIFICATION, LAB_ALERT_RULE
1.2.7.3.10 บันทึก Lab Note LAB_RESULT.LabNote
1.2.7.3.11 แสดงข้อความหรือสัญลักษณ์เมื่อผลเสร็จ LAB_NOTIFICATION
1.2.7.3.12 นำผล LAB นอก PDF มารายงาน LAB_OUT_SOURCE.ResultPDFPath
1.2.7.4.1 ตรวจสอบการเข้ามาอ่านผล Lab LAB_AUDIT_LOG
1.2.7.4.2 ระบุ Report by และ Approved by LAB_RESULT.ReportedBy, ApprovedBy
1.2.7.4.3 ยืนยันและ Lock ผลการรายงาน LAB_RESULT.IsLocked, LockedBy
1.2.7.4.4 บันทึกประวัติการรายงานผลและการเปลี่ยนแปลง LAB_RESULT_HISTORY
1.2.7.5.1 พิมพ์ใบ Request Lab LAB_REPORT_TEMPLATE
1.2.7.5.2 พิมพ์ Sticker ติด Tube LAB_BARCODE_TRACKING
1.2.7.5.3 พิมพ์ใบรายงานผล LAB_REPORT_TEMPLATE
1.2.7.5.4 พิมพ์ใบนัด LAB_APPOINTMENT + APPOINTMENT Integration

7.2 การครอบคลุม SRS Requirements

ครบถ้วน 100% - ERD นี้ครอบคลุมความต้องการใน SRS ระบบงานชันสูตร โดยสมบูรณ์

7.3 ความสอดคล้องกับระบบอื่น

Integration Ready - ERD นี้ออกแบบให้เชื่อมโยงกับระบบอื่นๆ ได้อย่างสมบูรณ์ผ่าน API


เอกสารนี้จัดทำขึ้นเพื่อใช้ในการพัฒนาระบบงานชันสูตรสำหรับโรงพยาบาลค่ายธนรัชน์ และต้องได้รับการอนุมัติจากผู้มีอำนาจก่อนนำไปใช้ในการพัฒนาระบบ