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

ระบบงานชันสูตร (Laboratory System) - Complete Workflow

📋 สารบัญ


ภาพรวมระบบ

🎯 วัตถุประสงค์

ระบบงานชันสูตรเป็นระบบที่จัดการกระบวนการตรวจทางห้องปฏิบัติการตั้งแต่แพทย์สั่ง Order จนถึงการออกผลและแจ้งผลกลับไปยังแพทย์ พร้อมรองรับการเชื่อมต่อกับระบบ LIS (Laboratory Information System)

🌟 จุดเด่นของระบบ

  • ✅ ลดเวลา TAT (Turnaround Time) จากการสั่งจนได้ผล
  • ✅ ติดตามสถานะ Order แบบ Real-time
  • ✅ รองรับทั้ง Walk-in และ Appointment
  • ✅ มีระบบ Critical Result Alert พร้อม 30-min Countdown
  • ✅ เชื่อมต่อ LIS และลงผล Manual ได้
  • ✅ Audit Trail ครบถ้วนทุกขั้นตอน
  • ✅ คำนวณราคาตามสิทธิอัตโนมัติ
  • ✅ Partial Approval (อนุมัติบางรายการได้)
  • ✅ Delta Check (เปรียบเทียบผลครั้งก่อนอัตโนมัติ)
  • ✅ Outlab File Upload (อัปโหลด PDF/รูปภาพผลจากภายนอก)
  • ✅ Specimen Quality Control (4 ระดับคุณภาพ)
  • ✅ Rejection Workflow (ปฏิเสธสิ่งส่งตรวจ/ผล พร้อมเหตุผล)
  • ✅ Recollection Tracking (ติดตาม R1/R2/R3 อัตโนมัติ)

ผู้ใช้งานระบบ (Actors)

1. 👨‍⚕️ แพทย์ (Doctor)

หน้าที่: - สั่ง Order แล็บ (Panel หรือรายการเดี่ยว) - เลือกประเภท Order (Walk-in / Appointment) - ดูผลแล็บผู้ป่วย - ดูประวัติผล Lab History - ยกเลิก/แก้ไข Order (ก่อนเริ่มตรวจ)

สิทธิ์: - ✅ สั่ง Order ได้ - ✅ ดูผลผู้ป่วยของตนเอง - ❌ ไม่สามารถแก้ไขผล

2. 💉 เจ้าหน้าที่เจาะเลือด (Phlebotomist)

หน้าที่: - เก็บสิ่งส่งตรวจ (Specimen Collection) - พิมพ์ Barcode Label ติดหลอด - ตรวจสอบคุณภาพสิ่งส่งตรวจ - Reject Specimen ที่ไม่ผ่านเกณฑ์

สิทธิ์: - ✅ เข้าถึงรายการรอเก็บสิ่งส่งตรวจ - ✅ บันทึกข้อมูลการเก็บ - ❌ ไม่สามารถเห็นผล

3. 🧬 เทคนิคแล็บ (Lab Technician)

หน้าที่: - ยืนยัน Order ที่ได้รับ - ตรวจวิเคราะห์สิ่งส่งตรวจ - ลงผลแล็บ (Manual Entry) - ส่ง Order ไป LIS - Import ผลจาก LIS - แก้ไขผล (Result Correction)

สิทธิ์: - ✅ ดู Order ทั้งหมด - ✅ ลงผล (Preliminary) - ❌ ไม่สามารถอนุมัติผลเอง

4. 👨‍🔬 หัวหน้าแล็บ / พยาธิแพทย์ (Lab Supervisor / Pathologist)

หน้าที่: - อนุมัติผลแล็บ (Approve Results) - ตรวจสอบผลวิกฤต (Critical Result) - อนุมัติผล Batch (ผลปกติ) - จัดการ Master Data

สิทธิ์: - ✅ ทำได้ทุกอย่างของ Lab Tech - ✅ อนุมัติผล → Final - ✅ จัดการตั้งค่าระบบ


Flow หลักทั้งหมด

📊 Workflow Overview (ภาพรวม)

graph TB
    Start([เริ่มต้น]) --> OrderType{ประเภท Order}

    %% Walk-in Path
    OrderType -->|ทันที Walk-in| Doctor1[แพทย์สั่ง Order]

    %% Appointment Path
    OrderType -->|นัดหมาย| Doctor2[แพทย์สั่ง Order + นัดหมาย]
    Doctor2 --> Appointment[บันทึกนัดหมาย]
    Appointment --> WaitDay[รอถึงวันนัด]
    WaitDay --> CheckIn[ผู้ป่วยเช็คอิน]
    CheckIn --> ActivateOrder[Activate Order]
    ActivateOrder --> Doctor1

    %% Common Path
    Doctor1 --> LabReceive[ห้องแล็บรับ Order]
    LabReceive --> Confirm[ยืนยัน Order]
    Confirm --> ConfirmCheck{ถูกต้อง?}

    ConfirmCheck -->|ไม่ OK| Reject1[Reject/Request Info]
    Reject1 --> Doctor1
    ConfirmCheck -->|OK| Collect[เก็บสิ่งส่งตรวจ]

    Collect --> QualityCheck{คุณภาพ OK?}
    QualityCheck -->|ไม่ผ่าน| RejectSpec[Reject Specimen]
    RejectSpec --> Collect
    QualityCheck -->|ผ่าน| SpecCollected[Specimen Collected]

    SpecCollected --> LISAvailable{มี LIS?}

    %% LIS Path
    LISAvailable -->|มี| SendLIS[ส่ง Order → LIS]
    SendLIS --> LISProcess[เครื่อง LIS ตรวจ]
    LISProcess --> ReceiveLIS[รับผลจาก LIS]
    ReceiveLIS --> ImportResult[Import ผลเข้าระบบ]

    %% Manual Path
    LISAvailable -->|ไม่มี| ManualTest[ตรวจ Manual]
    ManualTest --> ManualEntry[เทคนิคลงผล Manual]

    %% Common Result Path
    ImportResult --> ResultEntry[ผลพร้อมตรวจสอบ]
    ManualEntry --> ResultEntry

    ResultEntry --> TechReview[เทคนิคตรวจสอบ]
    TechReview --> SaveDraft[Save Result Draft]
    SaveDraft --> SupervisorReview[Supervisor ตรวจสอบ]

    SupervisorReview --> ResultCheck{ผล OK?}
    ResultCheck -->|ผิดปกติ| CriticalCheck{วิกฤต?}
    ResultCheck -->|ปกติ| Approve1[อนุมัติผล]

    CriticalCheck -->|วิกฤต| Alert[🚨 Alert แพทย์ทันที]
    Alert --> PathologistApprove[Pathologist อนุมัติ]
    CriticalCheck -->|ไม่วิกฤต แต่ผิดปกติ| Approve2[อนุมัติผล + Flag]

    PathologistApprove --> Final[ผล Final]
    Approve1 --> Final
    Approve2 --> Final

    Final --> NotifyDoctor[แจ้งแพทย์]
    NotifyDoctor --> DoctorView[แพทย์ดูผล]
    DoctorView --> Print[พิมพ์ผล/ส่งผล]
    Print --> End([สิ้นสุด])

    %% Styling
    style Start fill:#90EE90
    style End fill:#FFB6C1
    style Alert fill:#FF6B6B,color:#fff
    style CriticalCheck fill:#FFA500
    style Final fill:#87CEEB
    style Reject1 fill:#FFD700
    style RejectSpec fill:#FFD700

Feature ที่มีในระบบปัจจุบัน

📁 Module Structure

modules/lab/
├── index.html                   # หน้าหลัก Lab Menu
├── doctor-order.html            # สั่ง Order (MVP 1) ✅
├── order-queue.html             # คิว Order รอยืนยัน (MVP 1)
├── specimen-collection.html     # เก็บสิ่งส่งตรวจ (MVP 2) ✅
├── result-entry.html            # ลงผล Manual (MVP 3) ✅
├── result-approval.html         # อนุมัติผล (MVP 4) ✅
└── debug-lab-data.html          # Debug Tool

✅ Features ที่ Implement แล้ว

1. สั่ง Order แล็บ (Doctor Order) - MVP 1 ✅

หน้าจอ: doctor-order.html

ฟีเจอร์: - ✅ ค้นหาผู้ป่วยด้วย HN/ชื่อ/เลขบัตร - ✅ แสดงข้อมูลผู้ป่วย + สิทธิ - ✅ เลือกประเภท Order: Walk-in / Appointment - ✅ เลือกรายการแล็บจาก 3 แท็บ: - Panel (ชุดตรวจ): CBC, LFT, RFT, Lipid Profile - Category (หมวดหมู่): HEMA, CHEM, IMMUNO, MICRO - Individual (รายการเดี่ยว): Search รายการ - ✅ แสดงราคา + ส่วนลดตามสิทธิ - ✅ เลือกความเร่งด่วน: STAT / Urgent / Routine - ✅ ระบุวินิจฉัย/อาการ - ✅ สรุปรายการก่อนบันทึก - ✅ พิมพ์ใบนำส่งแล็บ (Lab Form)

Data Model:

{
  orderNumber: "LAB20250001",
  orderDate: "2025-12-24",
  orderType: "walk-in", // or "appointment"
  patientHN: "HN000123",
  visitId: "V000123",
  doctorId: "DOC001",

  priority: "routine", // stat, urgent, routine
  diagnosis: "Suspected anemia",
  clinicalNote: "Check Hb level",

  items: [
    {
      labItemId: "LAB001",
      code: "CBC",
      name: "Complete Blood Count",
      specimenType: "EDTA",
      price: 150,
      discount: 100, // สิทธิ UC
      netPrice: 50
    }
  ],

  status: "pending",
  createdBy: "DOC001",
  createdAt: "2025-12-24T09:00:00"
}


2. เก็บสิ่งส่งตรวจ (Specimen Collection) - MVP 2 ✅

หน้าจอ: specimen-collection.html

ฟีเจอร์: - ✅ แสดงรายการ Order รอเก็บสิ่งส่งตรวจ - ✅ Filter ตาม Priority (STAT → Urgent → Routine) - ✅ Search ด้วย HN / Order Number - ✅ แสดงรายละเอียด Order: - ผู้ป่วย, แพทย์ผู้สั่ง - รายการตรวจ - หลอดเลือดที่ต้องใช้ (EDTA/Plain/Heparin) - ✅ คำนวณหลอดเลือดอัตโนมัติ (ลดจำนวนหลอด) - ✅ Auto Specimen Numbering: SPEC-YYYYMMDD-XXXX - ✅ พิมพ์ Barcode Label ติดหลอด (100mm×50mm) - ✅ Quality Control (4 ระดับ): - 🟢 Good (ดีมาก) - 🟡 Acceptable (ใช้ได้) - 🟠 Poor (ไม่ดี แต่ตรวจได้) - 🔴 Rejected (ปฏิเสธ) - ✅ Reject Specimen พร้อม 7 เหตุผล: - Hemolysis (เลือดแดงแตก) - Clotted (เลือดแข็งตัว) - Insufficient Volume (ปริมาณไม่พอ) - Unlabeled (ไม่มีฉลาก) - Contaminated (ปนเปื้อน) - Wrong Container (หลอดผิด) - Lipemia (ไขมันสูง) - ✅ Recollection Tracking: เก็บใหม่ → เพิ่ม R1, R2, R3 ต่อท้าย - ✅ บันทึกการเก็บ: - เวลาเก็บ - Specimen Number - คุณภาพสิ่งส่งตรวจ - ผู้เก็บ - Parent Specimen Number (ถ้าเป็น Recollection)

Specimen Data Model:

{
  specimenNumber: "SPEC20250001",
  orderNumber: "LAB20250001",
  patientHN: "HN000123",

  containerType: "EDTA",
  containerColor: "purple",
  collectionTime: "2025-12-24T09:15:00",
  collectedBy: "USER001",

  quality: "acceptable", // acceptable, rejected
  rejectReason: null,

  tests: ["CBC", "HbA1C"],
  status: "collected"
}


3. ลงผลแล็บ (Result Entry) - MVP 3 ✅

หน้าจอ: result-entry.html

ฟีเจอร์: - ✅ แสดงรายการ Order ที่พร้อมลงผล - ✅ Filter ตามสถานะ: - Specimen Collected - In Progress (ลงผลบางรายการ) - Waiting for Approval - ✅ ลงผลแบบตารางสำหรับ Panel - ✅ รองรับ 3 รูปแบบ: - Manual Entry: เทคนิคพิมพ์เอง - LIS Import: รับผลจาก LIS - Outlab Upload: อัปโหลดไฟล์ PDF/รูปภาพจากแล็บภายนอก - ✅ Auto-calculate Flag: - N (Normal): ค่าอยู่ในช่วงปกติ - H (High): สูงกว่าปกติ - L (Low): ต่ำกว่าปกติ - C (Critical): วิกฤต (ต่ำหรือสูงมาก) - ✅ Validation ผล: - ตรวจสอบค่าตัวเลข - ตรวจสอบความสมเหตุสมผล (Delta Check) - แจ้งเตือนถ้าค่าเปลี่ยนแปลงมากกว่า 50% - ✅ Delta Check อัตโนมัติ: เปรียบเทียบกับผลครั้งก่อน - ✅ Critical Alert Modal: แจ้งเตือนผลวิกฤต พร้อม Countdown 30 นาที - ✅ Partial Result Support: บันทึกผลบางรายการได้ - ✅ Lab Note Section: เขียนหมายเหตุพิเศษ - ✅ Instrument Selection: เลือกเครื่องที่ใช้ตรวจ - ✅ Outlab File Upload: Drag & Drop PDF/Image (Max 5MB) - ✅ บันทึกเป็น Draft - ✅ ส่งอนุมัติ

Lab Result Data Model:

{
  resultId: "RES20250001",
  orderNumber: "LAB20250001",
  patientHN: "HN000123",
  visitId: "V000123",

  testCode: "HB",
  testName: "Hemoglobin",

  value: 12.5,
  unit: "g/dL",
  referenceRange: "12.0-16.0",
  flag: "N", // N, H, L, C

  resultType: "numeric", // numeric, text, positive/negative
  resultDate: "2025-12-24T10:30:00",
  enteredBy: "TECH001",

  status: "preliminary", // preliminary, approved
  approvedBy: null,
  approvedAt: null,

  comment: null,
  correctionHistory: []
}


4. อนุมัติผลแล็บ (Result Approval) - MVP 4 ✅

หน้าจอ: result-approval.html

ฟีเจอร์: - ✅ Statistics Dashboard: แสดง 3 การ์ด (รอการอนุมัติ/วิกฤต/ปฏิเสธ) - ✅ แสดงรายการผลรอการอนุมัติ - ✅ แยกตามความสำคัญ: - 🔴 Critical Results (วิกฤต) + 🚨 Critical Badge - 🟠 Abnormal Results (ผิดปกติ) - 🟢 Normal Results (ปกติ) - ✅ Outlab Detection: แสดง 📎 Outlab Badge ถ้ามีไฟล์แนบ - ✅ ตรวจสอบความสมเหตุสมผล: - Delta Check (เปรียบเทียบผลครั้งก่อน) - Logical Check (เช่น Hb3 ≈ Hct) - ✅ แสดง Trend Graph (ผลย้อนหลัง) - ✅ Partial Approval Support: เลือกอนุมัติเฉพาะรายการที่ต้องการ - ✅ Selection Toolbar: Checkbox เพื่อเลือกหลายรายการ - ✅ 4 Action Buttons: - Cancel (ยกเลิก) - Approve Selected (อนุมัติที่เลือก) - Reject Selected (ปฏิเสธที่เลือก) - Approve All (อนุมัติทั้งหมด) - ✅ Quick Actions: ปุ่ม [✓] [✗] แต่ละแถว - ✅ Reject Modal: เลือกเหตุผล + Checkbox "ต้องการเก็บสิ่งส่งตรวจใหม่" - ✅ Outlab Attachment Display:* แสดงไฟล์แนบในตาราง - ✅ Batch Approval (อนุมัติพร้อมกัน) - ✅ Request Re-test (ขอตรวจซ้ำ)

Approval Flow:

1. เทคนิคลงผล → Status: "preliminary"
2. Supervisor Review → ตรวจสอบ
3. กดอนุมัติ (ทั้งหมดหรือบางรายการ) → Status: "approved"
4. แจ้งแพทย์อัตโนมัติ

Partial Approval Workflow:

1. Order มี 5 รายการ: CBC, LFT, RFT, Lipid, HbA1C
2. ผลพร้อม: CBC, LFT, RFT (3 รายการ)
3. Supervisor เลือกอนุมัติ CBC + LFT (2 รายการ)
4. Order Status: "partial_approved" (2/5)
5. แพทย์ดูผลที่อนุมัติแล้วได้ทันที
6. รอ RFT, Lipid, HbA1C ครบ → อนุมัติต่อ
7. Order Status: "approved" (5/5) → "completed"


5. รายการเมนูหลัก (Lab Index)

หน้าจอ: index.html

เมนูที่มี: - 👨‍⚕️ สำหรับแพทย์: - สั่งตรวจแล็บ ✅ - รายการ Order ของฉัน (Coming Soon) - ผลแล็บ (Coming Soon)

  • 💉 สำหรับเจ้าหน้าที่เจาะเลือด:
  • เก็บสิ่งส่งตรวจ ✅
  • พิมพ์ Barcode Label ✅

  • 🧬 สำหรับเทคนิคแล็บ:

  • คิว Order รอยืนยัน
  • ลงผลแล็บ ✅
  • Import ผลจาก LIS

  • 👨‍🔬 สำหรับหัวหน้าแล็บ:

  • อนุมัติผล ✅
  • จัดการผลวิกฤต
  • รายงานสถิติ

🚫 Rejection Workflow

ภาพรวมการปฏิเสธ

ระบบรองรับการปฏิเสธ 2 ประเภท: 1. Specimen Rejection (ปฏิเสธสิ่งส่งตรวจ) - เจ้าหน้าที่เจาะเลือด 2. Result Rejection (ปฏิเสธผล) - Lab Supervisor

R1: Specimen Rejection Workflow

stateDiagram-v2
    [*] --> OrderConfirmed: Order ยืนยันแล้ว
    OrderConfirmed --> SpecimenCollection: เจาะเลือด

    SpecimenCollection --> QualityCheck: ตรวจคุณภาพ

    QualityCheck --> Good: 🟢 Good
    QualityCheck --> Acceptable: 🟡 Acceptable
    QualityCheck --> Poor: 🟠 Poor
    QualityCheck --> Rejected: 🔴 Rejected

    Good --> Collected: บันทึกเก็บสำเร็จ
    Acceptable --> Collected: บันทึกเก็บสำเร็จ (มีหมายเหตุ)
    Poor --> Collected: บันทึกเก็บสำเร็จ (แจ้งเตือน)

    Rejected --> SelectReason: เลือกเหตุผล Reject
    SelectReason --> CreateRecollection: สร้าง Recollection Request
    CreateRecollection --> R1Number: เพิ่ม R1 ต่อท้าย Specimen Number
    R1Number --> NotifyPhlebotomist: แจ้งเจ้าหน้าที่เจาะใหม่
    NotifyPhlebotomist --> SpecimenCollection: วนกลับไปเจาะใหม่

    Collected --> [*]: ส่งต่อห้องแล็บ

    note right of Rejected
        7 เหตุผล Reject:
        - Hemolysis (Critical)
        - Clotted (Critical)
        - Insufficient Volume (High)
        - Unlabeled (High)
        - Contaminated (Medium)
        - Wrong Container (High)
        - Lipemia (Low)
    end note

Specimen Quality Levels:

Level Color Description Action Impact
🟢 Good Green คุณภาพดีมาก เก็บตามปกติ ไม่มี
🟡 Acceptable Yellow ใช้ได้ แต่มีข้อสังเกต เก็บได้ + เขียนหมายเหตุ แจ้งเตือนเทคนิค
🟠 Poor Orange ไม่ดี แต่ยังตรวจได้ เก็บได้ + Flag คุณภาพ อาจส่งผลต่อความแม่นยำ
🔴 Rejected Red ไม่ผ่านเกณฑ์ ปฏิเสธ + เก็บใหม่ ต้องเก็บใหม่ 100%

Rejection Reasons (7 เหตุผล):

Code Reason Severity Description Impact
hemolysis Hemolysis 🔴 Critical เลือดแดงแตก ทำให้ค่า K+, LDH สูงเทียม ต้องเก็บใหม่ทันที
clotted Clotted 🔴 Critical เลือดแข็งตัว ตรวจไม่ได้ ต้องเก็บใหม่ทันที
insufficient Insufficient Volume 🟠 High ปริมาณเลือดไม่พอ ตรวจได้บางรายการ
unlabeled Unlabeled 🟠 High ไม่มีฉลาก/Barcode อ่านไม่ได้ ไม่สามารถระบุผู้ป่วย
contaminated Contaminated 🟡 Medium ปนเปื้อนจากภายนอก อาจส่งผลต่อผล Culture
wrong_container Wrong Container 🟠 High ใช้หลอดผิดประเภท (เช่น Plain แทน EDTA) ผลผิดพลาด
lipemia Lipemia 🟢 Low ไขมันสูง ทำให้ Serum ขุ่น แจ้งให้งดอาหาร + เจาะใหม่

Recollection Numbering Logic:

// ตัวอย่าง Recollection Numbering
Original: SPEC-20251224-0001
R1 (เก็บครั้งที่ 2): SPEC-20251224-0001-R1
R2 (เก็บครั้งที่ 3): SPEC-20251224-0001-R2
R3 (เก็บครั้งที่ 4): SPEC-20251224-0001-R3

// ถ้าเก็บเกิน 3 ครั้ง (R3) → แจ้ง Supervisor

Recollection Workflow Detail:

sequenceDiagram
    participant P as เจ้าหน้าที่เจาะเลือด
    participant S as System
    participant L as Lab Supervisor
    participant Patient as ผู้ป่วย

    P->>S: บันทึก Reject Specimen
    S->>S: ตรวจสอบจำนวน Reject

    alt Reject ครั้งแรก (R1)
        S->>S: สร้าง Specimen Number ใหม่ + R1
        S->>P: แจ้งเจาะใหม่
        P->>Patient: เรียกผู้ป่วยเจาะใหม่
    else Reject ครั้งที่ 2 (R2)
        S->>S: สร้าง Specimen Number ใหม่ + R2
        S->>P: แจ้งเจาะใหม่ + เตือน
        P->>Patient: เรียกผู้ป่วยเจาะใหม่
    else Reject ครั้งที่ 3 (R3)
        S->>S: สร้าง Specimen Number ใหม่ + R3
        S->>L: แจ้ง Supervisor (Reject บ่อยผิดปกติ)
        S->>P: แจ้งเจาะใหม่ + เตือน Critical
        P->>Patient: เรียกผู้ป่วยเจาะใหม่
    else Reject มากกว่า 3 ครั้ง
        S->>L: 🚨 Alert Supervisor ทันที
        S-->>P: หยุดกระบวนการ
        L->>L: ตรวจสอบสาเหตุ
        Note over L: - ปัญหาผู้ป่วย? (ยากต่อการเจาะ)
        Note over L: - ปัญหาเจ้าหน้าที่? (ฝึกใหม่)
        Note over L: - ปัญหาอุปกรณ์? (หลอดหมดอายุ)
    end

R2: Result Rejection Workflow

stateDiagram-v2
    [*] --> ResultEntered: เทคนิคลงผล
    ResultEntered --> PendingApproval: ส่งอนุมัติ

    PendingApproval --> SupervisorReview: Supervisor ตรวจสอบ

    SupervisorReview --> Approve: ✅ ผลถูกต้อง
    SupervisorReview --> Reject: ❌ ผลผิดพลาด

    Reject --> SelectRejectionReason: เลือกเหตุผล
    SelectRejectionReason --> NeedNewSpecimen: ต้องการสิ่งส่งตรวจใหม่?

    NeedNewSpecimen -->|ใช่| CreateRecollection: สร้าง Recollection R1
    NeedNewSpecimen -->|ไม่| RetestExisting: ตรวจซ้ำด้วยสิ่งส่งตรวจเดิม

    CreateRecollection --> NotifyPhlebotomist: แจ้งเจ้าหน้าที่เจาะ
    NotifyPhlebotomist --> SpecimenCollection: เก็บสิ่งส่งตรวจใหม่
    SpecimenCollection --> ResultEntered: ลงผลใหม่

    RetestExisting --> NotifyTechnician: แจ้งเทคนิค
    NotifyTechnician --> ResultEntered: ลงผลใหม่

    Approve --> Completed: ผลสมบูรณ์
    Completed --> [*]

    note right of SelectRejectionReason
        5 เหตุผลหลัก:
        1. Delta Check Error
        2. Logical Check Error
        3. ผลไม่สมเหตุสมผล
        4. ข้อมูลไม่ครบ
        5. อื่นๆ (ระบุ)
    end note

Result Rejection Reasons (5 เหตุผลหลัก):

Reason Description Need New Specimen? Example
Delta Check Error ผลเปลี่ยนแปลงมากกว่า 50% จากครั้งก่อน อาจต้อง Hb 7.2 → 12.5 g/dL ใน 2 วัน
Logical Check Error ผลไม่สอดคล้องกัน ไม่ต้อง Hb×3 ≠ Hct
ผลไม่สมเหตุสมผล ผลผิดปกติผิดธรรมชาติ อาจต้อง WBC = 500,000 K/µL
ข้อมูลไม่ครบ ขาดรายการสำคัญ ไม่ต้อง Panel CBC แต่ขาด Plt
อื่นๆ เหตุผลอื่นที่ระบุ ขึ้นกับสาเหตุ ระบุใน Comment

Reject Modal (หน้าจออนุมัติผล):

┌──────────────────────────────────────────┐
│ 🚫 ปฏิเสธผล                             │
├──────────────────────────────────────────┤
│                                          │
│ Order: LAB20250001                       │
│ Patient: นายสมชาย ใจดี (HN000123)       │
│                                          │
│ เหตุผลการปฏิเสธ: *                      │
│ ┌──────────────────────────────────┐    │
│ │ ○ Delta Check Error              │    │
│ │ ○ Logical Check Error            │    │
│ │ ● ผลไม่สมเหตุสมผล                │    │
│ │ ○ ข้อมูลไม่ครบ                    │    │
│ │ ○ อื่นๆ (ระบุ)                    │    │
│ └──────────────────────────────────┘    │
│                                          │
│ รายละเอียดเพิ่มเติม:                     │
│ ┌──────────────────────────────────┐    │
│ │ WBC = 500,000 สูงผิดปกติ          │    │
│ │ ขอตรวจซ้ำ                         │    │
│ └──────────────────────────────────┘    │
│                                          │
│ ☑ ต้องการเก็บสิ่งส่งตรวจใหม่          │
│                                          │
│ [ยกเลิก]  [ยืนยันการปฏิเสธ]             │
└──────────────────────────────────────────┘

R3: Rejection Statistics & Monitoring

KPIs ที่ต้องติดตาม:

// Specimen Rejection Rate
Specimen Rejection Rate = (Rejected Specimens / Total Specimens) × 100

// Target: < 2%
// Warning: > 3%
// Critical: > 5%

// Result Rejection Rate
Result Rejection Rate = (Rejected Results / Total Results) × 100

// Target: < 1%
// Warning: > 2%
// Critical: > 3%

// Recollection Rate
Recollection Rate = (R1 + R2 + R3) / Total Orders × 100

// Target: < 1%
// Warning: > 2%

Dashboard Metrics:

┌─────────────────────────────────────────────┐
│ 📊 Rejection Dashboard (เดือนนี้)          │
├─────────────────────────────────────────────┤
│                                             │
│ Specimen Rejection:  2.1% ⚠️ (45/2,150)   │
│ Result Rejection:    0.8% ✅ (17/2,150)    │
│ Recollection (R1):   1.5% ✅ (32/2,150)    │
│ Recollection (R2):   0.3% ✅ (7/2,150)     │
│ Recollection (R3):   0.1% ✅ (2/2,150)     │
│                                             │
│ Top Reject Reasons:                         │
│ 1. Hemolysis          15 ครั้ง (33%)       │
│ 2. Clotted            12 ครั้ง (27%)       │
│ 3. Insufficient        8 ครั้ง (18%)       │
│ 4. Delta Check Error   6 ครั้ง (35%)       │
│ 5. Logical Error       4 ครั้ง (24%)       │
│                                             │
│ [ดูรายงานแบบเต็ม] [Export Excel]           │
└─────────────────────────────────────────────┘

Process Flow แต่ละขั้นตอน

P1: สั่ง Order แล็บทันที (Walk-in)

sequenceDiagram
    participant D as แพทย์
    participant S as System
    participant L as ห้องแล็บ
    participant N as Notification

    D->>S: เข้าหน้า OPD/IPD
    S->>S: ตรวจสอบ Active Visit
    S-->>D: แสดงข้อมูลผู้ป่วย + สิทธิ

    D->>S: คลิกแท็บ "LAB"
    D->>S: เลือกรายการ (Panel/Individual)
    S-->>D: แสดงราคา + ส่วนลด

    D->>S: เลือก Priority (STAT/Urgent/Routine)
    D->>S: ระบุวินิจฉัย/อาการ
    D->>S: บันทึก Order

    S->>S: Generate Order Number (LAB20250001)
    S->>S: คำนวณราคาตามสิทธิ
    S->>S: บันทึกลง Database

    S->>N: แจ้งห้องแล็บ (Order ใหม่)
    S-->>D: แสดง Success + ใบนำส่งแล็บ

    Note over D,L: Order Status: "pending"

    L->>S: ดูรายการ Order ใหม่
    L->>S: คลิก "ยืนยัน Order"
    S->>S: Validate (ข้อมูลครบ, สิทธิถูกต้อง)

    alt ข้อมูลถูกต้อง
        S->>S: Status: "confirmed"
        S->>N: แจ้งเจ้าหน้าที่เจาะเลือด
        Note over L: พร้อมเก็บสิ่งส่งตรวจ
    else ข้อมูลไม่ครบ
        S->>S: Status: "request_info"
        S->>N: แจ้งแพทย์ (ขอข้อมูลเพิ่ม)
    end

ขั้นตอนละเอียด:

  1. แพทย์เข้าระบบ
  2. เปิดหน้า OPD/IPD Module
  3. System ตรวจสอบ Active Visit (ถ้าไม่มี → Error)
  4. แสดงข้อมูลผู้ป่วย: HN, ชื่อ, อายุ, สิทธิ

  5. เลือกรายการแล็บ

  6. Panel Tab: ชุดตรวจ (CBC, LFT, RFT, Lipid Profile)
  7. Category Tab: แบ่งตามหมวด (HEMA, CHEM, IMMUNO, MICRO)
  8. Individual Tab: Search รายการเดี่ยว

  9. กำหนดรายละเอียด

  10. Priority: STAT (ด่วนมาก) / Urgent (ด่วน) / Routine (ปกติ)
  11. วินิจฉัย/อาการ: เช่น "Suspected anemia"
  12. คำแนะนำพิเศษ: เช่น "งดอาหาร 8 ชม."

  13. ตรวจสอบก่อนบันทึก

  14. แสดงสรุปรายการ
  15. ราคาเต็ม + ส่วนลดตามสิทธิ = ราคาสุทธิ
  16. คำนวณหลอดเลือดที่ต้องใช้

  17. บันทึก Order

  18. Generate Order Number (LAB20250001)
  19. Status: "pending" (รอห้องแล็บยืนยัน)
  20. พิมพ์ใบนำส่งแล็บ
  21. แจ้งห้องแล็บ (Notification)

P2: สั่ง Order แบบนัดหมาย (Appointment)

sequenceDiagram
    participant D as แพทย์
    participant S as System
    participant P as ผู้ป่วย
    participant L as ห้องแล็บ

    D->>S: เลือก "Appointment"
    S-->>D: แสดงปฏิทิน + Time Slots

    D->>S: เลือกวันที่ + เวลา
    D->>S: เลือกรายการแล็บ
    S-->>D: แสดงคำแนะนำเตรียมตัว

    D->>S: บันทึกนัดหมาย
    S->>S: สร้าง Appointment + Order (Inactive)
    S->>S: พิมพ์ใบนัดหมาย
    S->>P: ส่ง SMS Reminder

    Note over P: รอถึงวันนัด

    P->>L: มาถึงโรงพยาบาล (วันนัด)
    L->>S: สแกน Barcode ใบนัด
    S->>S: เช็คอิน (Activate Order)
    S->>S: Order Status: "confirmed"

    Note over L,S: ดำเนินการเหมือน Walk-in

    L->>P: เก็บสิ่งส่งตรวจ

ความแตกต่างจาก Walk-in: - Order สร้างไว้แล้ว แต่ยัง Inactive - ผู้ป่วยได้ใบนัดหมาย + คำแนะนำเตรียมตัว - ส่ง SMS Reminder (1 วันก่อนนัด) - วันนัด → เช็คอิน ถึงจะ Activate Order


P3: เก็บสิ่งส่งตรวจ (Specimen Collection)

sequenceDiagram
    participant P as ผู้ป่วย
    participant N as เจ้าหน้าที่เจาะเลือด
    participant S as System
    participant L as ห้องแล็บ

    P->>N: เดินทางมาที่ห้องเจาะเลือด
    N->>S: เปิดหน้า Specimen Collection
    S-->>N: แสดงรายการรอเก็บ (แยกตาม Priority)

    N->>S: เลือก Order
    S-->>N: แสดงรายละเอียด + หลอดที่ต้องใช้

    N->>S: พิมพ์ Barcode Label
    S->>S: Generate Specimen Number
    S-->>N: พิมพ์ Label ติดหลอด

    N->>P: เจาะเลือด
    N->>N: ตรวจสอบคุณภาพ

    alt คุณภาพผ่าน
        N->>S: บันทึก "Collected"
        S->>S: Status: "specimen_collected"
        S->>L: แจ้งห้องแล็บ (มีสิ่งส่งตรวจใหม่)
    else คุณภาพไม่ผ่าน
        N->>S: Reject Specimen
        S->>S: Status: "rejected"
        S-->>N: แสดงเหตุผล Reject
        N->>P: เจาะใหม่
    end

    N->>L: ส่งหลอดเลือดไปห้องแล็บ

การคำนวณหลอดเลือด:

// ระบบคำนวณหลอดอัตโนมัติ
Order: CBC + HbA1C + LFT + RFT

หลอดที่ต้องใช้:
├─ 🟣 EDTA (สีม่วง) x 1 หลอด
  └─ CBC, HbA1C

└─ 🔴 Plain (สีแดง) x 1 หลอด
   └─ LFT, RFT (ใช้ Serum ร่วมกันได้)

รวม: 2 หลอด

การตรวจสอบคุณภาพ: - ☑ ปริมาณเลือดเพียงพอ - ☑ ไม่มี Hemolysis (เลือดแดงแตก) - ☑ ไม่มี Clotted (เลือดแข็งตัว) - ☑ Label ติดถูกต้อง - ☑ Barcode อ่านได้


P4: ตรวจวิเคราะห์และลงผล (Manual)

sequenceDiagram
    participant S as ห้องแล็บ (รับสิ่งส่งตรวจ)
    participant T as เทคนิคแล็บ
    participant Sys as System
    participant Sup as Supervisor

    S->>T: นำสิ่งส่งตรวจมาห้องแล็บ
    T->>Sys: เปิดหน้า Result Entry
    Sys-->>T: แสดงรายการรอลงผล

    T->>Sys: เลือก Order
    Sys-->>T: แสดงตารางลงผล

    T->>T: ตรวจวิเคราะห์ด้วยเครื่อง
    T->>Sys: พิมพ์ผลลงตาราง

    Sys->>Sys: Auto-calculate Flag (N/H/L/C)
    Sys->>Sys: Validate (Delta Check, Logical Check)

    alt ผลผ่าน Validation
        Sys-->>T: แสดง Flag
        T->>Sys: Save Draft
        Sys->>Sys: Status: "result_entered"
    else ผล Abnormal
        Sys-->>T: ⚠️ แจ้งเตือน (Delta Check Error)
        T->>T: ตรวจสอบอีกครั้ง
        T->>Sys: ยืนยันผล
    end

    T->>Sys: ส่งอนุมัติ
    Sys->>Sup: แจ้ง Supervisor
    Sys->>Sys: Status: "pending_approval"

ตัวอย่างการลงผล (CBC):

Test Result Unit Ref Range Flag Comment
WBC 7.5 K/µL 4.0-11.0 N Normal
RBC 4.2 M/µL 4.0-5.5 N Normal
Hb 12.5 g/dL 12.0-16.0 N Normal
Hct 37 % 36-48 N Normal
MCV 88 fL 80-100 N Normal
MCH 29.8 pg 27-31 N Normal
MCHC 33.8 g/dL 32-36 N Normal
Plt 250 K/µL 150-400 N Normal

Auto Flag Logic:

function calculateFlag(value, refRange, gender) {
  const min = refRange[gender]?.min || refRange.min;
  const max = refRange[gender]?.max || refRange.max;

  const criticalLow = min - (min * 0.3);  // ต่ำกว่า 30%
  const criticalHigh = max + (max * 0.3); // สูงกว่า 30%

  if (value < criticalLow) return 'CRITICAL_LOW';
  if (value > criticalHigh) return 'CRITICAL_HIGH';
  if (value < min) return 'LOW';
  if (value > max) return 'HIGH';
  return 'NORMAL';
}


P5: Import ผลจาก LIS

sequenceDiagram
    participant L as LIS System
    participant I as Interface Engine
    participant S as HIS System
    participant T as เทคนิค
    participant Sup as Supervisor

    T->>S: ส่ง Order → LIS
    S->>I: HL7 Message (ORM^O01)
    I->>L: Forward Order

    L->>L: รับ Order และประมวลผล
    Note over L: เครื่อง LIS ตรวจอัตโนมัติ

    L->>I: ส่งผลกลับ (HL7 ORU^R01)
    I->>S: Parse HL7 → JSON

    S->>S: Validate ผล
    S->>S: Import ลง Database
    S->>S: Status: "result_entered"

    S->>T: แจ้งเตือน (มีผลจาก LIS)
    T->>S: ตรวจสอบผล
    T->>S: ส่งอนุมัติ

    S->>Sup: แจ้ง Supervisor

HL7 Message Example (ORU^R01):

MSH|^~\&|LIS|LAB|HIS|HOSPITAL|20251224103000||ORU^R01|MSG001|P|2.5
PID|1||HN000123||สมชาย^ใจดี||19950515|M
OBR|1||LAB20250001|CBC^Complete Blood Count
OBX|1|NM|WBC||7.5|K/µL|4.0-11.0|N|||F
OBX|2|NM|RBC||4.2|M/µL|4.0-5.5|N|||F
OBX|3|NM|HB||12.5|g/dL|12.0-16.0|N|||F
OBX|4|NM|HCT||37|%|36-48|N|||F

ข้อดีของ LIS: - ⚡ รวดเร็ว (ไม่ต้องพิมพ์เอง) - ✅ ถูกต้อง (ไม่มีข้อผิดพลาดจากการพิมพ์) - 📊 เชื่อมต่อเครื่องตรวจอัตโนมัติ - 🔄 Real-time Result


P6: อนุมัติผลแล็บ (Result Approval)

sequenceDiagram
    participant T as เทคนิค
    participant S as System
    participant Sup as Supervisor
    participant D as แพทย์

    T->>S: ส่งผลขออนุมัติ
    S->>S: Status: "pending_approval"
    S->>Sup: แจ้งเตือน

    Sup->>S: เปิดหน้า Result Approval
    S-->>Sup: แสดงรายการรอการอนุมัติ

    Sup->>S: เลือก Order
    S-->>Sup: แสดงผลพร้อม Validation

    S->>S: Delta Check (เปรียบเทียบผลครั้งก่อน)
    S->>S: Logical Check (Hb*3 ≈ Hct)
    S-->>Sup: แสดง Checklist

    alt ผลปกติ
        Sup->>S: อนุมัติ (Approve)
        S->>S: Status: "approved"
        S->>D: แจ้งแพทย์ (ผลพร้อม)
    else ผลวิกฤต (Critical)
        Sup->>S: อนุมัติ + Alert
        S->>S: Status: "approved_critical"
        S->>D: 🚨 แจ้งทันที (Phone + SMS + System)
        D->>S: Acknowledge
    else ผลผิดปกติ (Abnormal)
        Sup->>S: Request Re-test
        S->>S: Status: "retest_requested"
        S->>T: แจ้งตรวจซ้ำ
    end

Delta Check:

// เปรียบเทียบผลกับครั้งก่อน
Current Result: Hb = 12.5 g/dL
Previous Result: Hb = 7.2 g/dL (2 วันก่อน)

Delta = 12.5 - 7.2 = 5.3 g/dL
Delta % = (5.3 / 7.2) * 100 = 73.6%

⚠️ Warning: Hb เพิ่มขึ้นมากกว่า 50% ใน 2 วัน
 ตรวจสอบ: ผู้ป่วยได้รับเลือดหรือไม่?

Critical Result Notification:

🚨 ผลวิกฤต! 🚨

Patient: นายสมชาย ใจดี (HN000123)
Order: LAB20250001
Test: Potassium (K+)
Result: 6.8 mmol/L (CRITICAL HIGH)
Ref Range: 3.5-5.0 mmol/L

⚠️ ติดต่อแพทย์ทันที!
Dr. สมศรี ใจงาม (DOC001)
Tel: 081-234-5678


P7: แพทย์ดูผล (Doctor View Result)

sequenceDiagram
    participant S as System
    participant D as แพทย์
    participant P as Printer

    S->>D: แจ้งเตือน (มีผลใหม่)
    D->>S: เข้าหน้า OPD/IPD
    D->>S: คลิกแท็บ "Lab Results"

    S-->>D: แสดงรายการผล
    Note over S,D: ✅ ปกติ / ⚠️ ผิดปกติ / 🔴 วิกฤต

    D->>S: คลิกดูผลละเอียด
    S-->>D: แสดงตารางผล
    S-->>D: แสดง Trend Graph
    S-->>D: แสดงประวัติผลย้อนหลัง

    alt ผลวิกฤต
        S-->>D: 🚨 Highlight Critical
        D->>D: ตัดสินใจรักษา
        D->>S: Acknowledge (รับทราบ)
        S->>S: Record Acknowledgment
    end

    D->>S: พิมพ์ผล
    S->>P: Generate PDF
    P-->>D: ใบผลแล็บ

หน้าจอผลแล็บ (แพทย์):

┌────────────────────────────────────────────────┐
│ ผลแล็บ - HN000123: นายสมชาย ใจดี              │
├────────────────────────────────────────────────┤
│ Order: LAB20250001                             │
│ สั่งเมื่อ: 24/12/2568 09:00                   │
│ ผลเมื่อ: 24/12/2568 11:30                     │
│ TAT: 2 ชม. 30 นาที                            │
│                                                │
│ ┌──────────────────────────────────────────┐  │
│ │ Complete Blood Count (CBC)               │  │
│ ├──────────────────────────────────────────┤  │
│ │ Test    Result  Unit   Ref Range  Flag  │  │
│ │ ──────────────────────────────────────── │  │
│ │ WBC     7.5     K/µL   4.0-11.0   ✅    │  │
│ │ RBC     4.2     M/µL   4.0-5.5    ✅    │  │
│ │ Hb      12.5    g/dL   12.0-16.0  ✅    │  │
│ │ Hct     37      %      36-48      ✅    │  │
│ │ Plt     250     K/µL   150-400    ✅    │  │
│ └──────────────────────────────────────────┘  │
│                                                │
│ สรุป: ผลปกติทั้งหมด ✅                        │
│                                                │
│ [ดูประวัติผล] [Trend Graph] [พิมพ์]           │
└────────────────────────────────────────────────┘

Trend Graph (Hb ย้อนหลัง 6 เดือน):

Hb (g/dL)
16 ┤
15 ┤
14 ┤                               ●
13 ┤                   ●       ●
12 ┤       ●       ●               ● ← ล่าสุด
11 ┤   ●
10 ┤
   └─────────────────────────────────────────
     Jan  Feb  Mar  Apr  May  Jun


สถานะของ Order

🔄 Order Status Lifecycle

stateDiagram-v2
    [*] --> draft: แพทย์เริ่มสร้าง
    draft --> pending: บันทึก Order

    pending --> confirmed: ห้องแล็บยืนยัน
    pending --> rejected: ห้องแล็บปฏิเสธ
    pending --> cancelled: แพทย์ยกเลิก

    confirmed --> specimen_pending: รอเก็บสิ่งส่งตรวจ
    specimen_pending --> specimen_collected: เก็บสำเร็จ
    specimen_pending --> specimen_rejected: สิ่งส่งตรวจไม่ผ่าน

    specimen_rejected --> specimen_pending: เก็บใหม่
    specimen_collected --> in_progress: เริ่มตรวจ

    in_progress --> partial_result: มีผลบางรายการ
    partial_result --> in_progress: ยังตรวจไม่ครบ
    partial_result --> result_entered: ครบทุกรายการ
    in_progress --> result_entered: ครบทุกรายการ

    result_entered --> pending_approval: ส่งอนุมัติ
    pending_approval --> approved: อนุมัติแล้ว
    pending_approval --> retest_requested: ขอตรวจซ้ำ

    retest_requested --> in_progress: ตรวจใหม่
    approved --> completed: แพทย์รับทราบ

    completed --> [*]: สิ้นสุด
    rejected --> [*]: สิ้นสุด
    cancelled --> [*]: สิ้นสุด

    note right of pending
        ห้องแล็บตรวจสอบ:
        - ข้อมูลครบถ้วน?
        - ตรงกับสิทธิ?
        - มีอุปกรณ์?
    end note

    note right of specimen_collected
        ตรวจคุณภาพ:
        - Volume เพียงพอ?
        - ไม่ Hemolysis?
        - ไม่ Clotted?
    end note

    note right of approved
        ถ้าเป็น Critical:
        แจ้งแพทย์ทันที!
    end note

📊 TAT (Turnaround Time) ของแต่ละขั้น

ขั้นตอน STAT Urgent Routine
สั่ง → ยืนยัน < 5 นาที < 15 นาที < 30 นาที
ยืนยัน → เก็บ < 10 นาที < 20 นาที < 30 นาที
เก็บ → เริ่มตรวจ ทันที < 15 นาที < 30 นาที
ตรวจ → ได้ผล 30-60 นาที 2-4 ชม. 4-8 ชม.
ผล → อนุมัติ < 15 นาที < 30 นาที < 1 ชม.
TAT รวม 1-2 ชม. 3-5 ชม. 5-10 ชม.

หมายเหตุ: - Culture/Pathology: 3-7 วัน - Special Test: ขึ้นกับรายการ


การเชื่อมต่อระบบ

🔗 Integration Points

graph LR
    subgraph HIS["HIS System"]
        OPD[OPD Module]
        IPD[IPD Module]
        LAB[LAB Module]
        Billing[Billing Module]
        Pharmacy[Pharmacy Module]
    end

    subgraph External["External Systems"]
        LIS[LIS System]
        Analyzer[Lab Analyzer]
        NHSO[NHSO E-Claim]
    end

    OPD -->|"สั่ง Order"| LAB
    IPD -->|"สั่ง Order"| LAB
    LAB -->|"คำนวณค่าใช้จ่าย"| Billing
    LAB -->|"แจ้งผล"| OPD
    LAB -->|"แจ้งผล"| IPD
    LAB -.->|"ส่ง Order HL7"| LIS
    LIS -.->|"ส่งผลกลับ HL7"| LAB
    Analyzer -->|"ผลอัตโนมัติ"| LIS
    LAB -->|"ข้อมูลเคลม"| NHSO

    style LAB fill:#87CEEB,stroke:#333,stroke-width:3px
    style LIS fill:#FFD700
    style NHSO fill:#90EE90

📡 HL7 Interface (LIS Integration)

ส่ง Order ไป LIS (ORM^O01):

MSH|^~\&|HIS|HOSPITAL|LIS|LAB|20251224090000||ORM^O01|MSG001|P|2.5
PID|1||HN000123||สมชาย^ใจดี||19950515|M
PV1|1|O|OPD^OPD1|||||||DOC001^นพ.สมศรี^ใจงาม
ORC|NW|LAB20250001||||||20251224090000
OBR|1|LAB20250001||CBC^Complete Blood Count|R||20251224090000|||||||||DOC001

รับผลจาก LIS (ORU^R01):

MSH|^~\&|LIS|LAB|HIS|HOSPITAL|20251224103000||ORU^R01|MSG002|P|2.5
PID|1||HN000123||สมชาย^ใจดี||19950515|M
OBR|1||LAB20250001|CBC^Complete Blood Count|||20251224103000
OBX|1|NM|WBC^White Blood Cell||7.5|K/µL|4.0-11.0|N|||F
OBX|2|NM|RBC^Red Blood Cell||4.2|M/µL|4.0-5.5|N|||F
OBX|3|NM|HB^Hemoglobin||12.5|g/dL|12.0-16.0|N|||F


📊 Data Models

Lab Order

{
  "orderNumber": "LAB20250001",
  "orderDate": "2025-12-24T09:00:00",
  "orderType": "walk-in",

  "patientHN": "HN000123",
  "patientName": "นายสมชาย ใจดี",
  "age": 30,
  "gender": "male",

  "visitId": "V000123",
  "visitType": "OPD",
  "clinicCode": "MED01",

  "doctorId": "DOC001",
  "doctorName": "นพ.สมศรี ใจงาม",

  "priority": "routine",
  "diagnosis": "Suspected anemia",
  "clinicalNote": "Check Hb level",

  "items": [
    {
      "labItemId": "LAB003",
      "code": "HB",
      "name": "Hemoglobin",
      "category": "HEMA",
      "specimenType": "EDTA",
      "price": 50,
      "discount": 0,
      "netPrice": 50
    }
  ],

  "insuranceType": "uc",
  "totalPrice": 150,
  "totalDiscount": 100,
  "netPrice": 50,

  "status": "pending",
  "createdBy": "DOC001",
  "createdAt": "2025-12-24T09:00:00",

  "confirmedBy": null,
  "confirmedAt": null,
  "collectionTime": null,
  "completedAt": null
}

Lab Result

{
  "resultId": "RES20250001",
  "orderNumber": "LAB20250001",
  "patientHN": "HN000123",

  "testCode": "HB",
  "testName": "Hemoglobin",

  "value": 12.5,
  "unit": "g/dL",
  "referenceRange": "12.0-16.0",
  "flag": "NORMAL",

  "resultType": "numeric",
  "resultDate": "2025-12-24T10:30:00",
  "enteredBy": "TECH001",

  "status": "approved",
  "approvedBy": "SUP001",
  "approvedAt": "2025-12-24T11:00:00",

  "comment": null,
  "correctionHistory": []
}

Specimen

{
  "specimenNumber": "SPEC20250001",
  "orderNumber": "LAB20250001",
  "patientHN": "HN000123",

  "containerType": "EDTA",
  "containerColor": "purple",
  "collectionTime": "2025-12-24T09:15:00",
  "collectedBy": "USER001",

  "quality": "acceptable",
  "rejectReason": null,

  "tests": ["CBC", "HbA1C"],
  "status": "collected"
}

🎯 สรุปจุดเด่นของระบบ

✅ ครอบคลุมทุก Workflow

  1. สั่ง Order - รองรับทั้ง Walk-in และ Appointment
  2. เก็บสิ่งส่งตรวจ - มี Barcode + Quality Check
  3. ลงผล - Manual Entry + LIS Import
  4. อนุมัติผล - มี Validation + Critical Alert
  5. แพทย์ดูผล - Real-time + Trend Graph

🔐 ความปลอดภัย

  • Audit Trail ทุกขั้นตอน
  • Role-based Access Control
  • แก้ไขผลต้องระบุเหตุผล

📈 รายงานและสถิติ

  • TAT Monitoring
  • Quality Metrics (Reject Rate)
  • Workload Analysis
  • Critical Result Response Time

📚 เอกสารอ้างอิง

เอกสารรายละเอียด (docs/LAB/)

เอกสาร SA (SA/LAB/)

Mock Data & Implementation


สร้างเมื่อ: 24 ธันวาคม 2568
อัปเดตล่าสุด: 26 ธันวาคม 2568
เวอร์ชัน: 2.0
ผู้จัดทำ: GitHub Copilot