ระบบงานชันสูตร (Laboratory System) - Complete Workflow
📋 สารบัญ
- ภาพรวมระบบ
- ผู้ใช้งานระบบ (Actors)
- Flow หลักทั้งหมด
- Feature ที่มีในระบบปัจจุบัน
- Process Flow แต่ละขั้นตอน
- สถานะของ Order
- การเชื่อมต่อระบบ
ภาพรวมระบบ
🎯 วัตถุประสงค์
ระบบงานชันสูตรเป็นระบบที่จัดการกระบวนการตรวจทางห้องปฏิบัติการตั้งแต่แพทย์สั่ง 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
ขั้นตอนละเอียด:
- แพทย์เข้าระบบ
- เปิดหน้า OPD/IPD Module
- System ตรวจสอบ Active Visit (ถ้าไม่มี → Error)
-
แสดงข้อมูลผู้ป่วย: HN, ชื่อ, อายุ, สิทธิ
-
เลือกรายการแล็บ
- Panel Tab: ชุดตรวจ (CBC, LFT, RFT, Lipid Profile)
- Category Tab: แบ่งตามหมวด (HEMA, CHEM, IMMUNO, MICRO)
-
Individual Tab: Search รายการเดี่ยว
-
กำหนดรายละเอียด
- Priority: STAT (ด่วนมาก) / Urgent (ด่วน) / Routine (ปกติ)
- วินิจฉัย/อาการ: เช่น "Suspected anemia"
-
คำแนะนำพิเศษ: เช่น "งดอาหาร 8 ชม."
-
ตรวจสอบก่อนบันทึก
- แสดงสรุปรายการ
- ราคาเต็ม + ส่วนลดตามสิทธิ = ราคาสุทธิ
-
คำนวณหลอดเลือดที่ต้องใช้
-
บันทึก Order
- Generate Order Number (LAB20250001)
- Status: "pending" (รอห้องแล็บยืนยัน)
- พิมพ์ใบนำส่งแล็บ
- แจ้งห้องแล็บ (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
- สั่ง Order - รองรับทั้ง Walk-in และ Appointment
- เก็บสิ่งส่งตรวจ - มี Barcode + Quality Check
- ลงผล - Manual Entry + LIS Import
- อนุมัติผล - มี Validation + Critical Alert
- แพทย์ดูผล - Real-time + Trend Graph
🔐 ความปลอดภัย
- Audit Trail ทุกขั้นตอน
- Role-based Access Control
- แก้ไขผลต้องระบุเหตุผล
📈 รายงานและสถิติ
- TAT Monitoring
- Quality Metrics (Reject Rate)
- Workload Analysis
- Critical Result Response Time
📚 เอกสารอ้างอิง
เอกสารรายละเอียด (docs/LAB/)
- 01-OVERVIEW.md - ภาพรวมระบบ + Stakeholders + Status Flows
- 02-MAIN-WORKFLOW.md - Workflow 6 ขั้นตอนแบบละเอียด
- 03-REJECTION-WORKFLOW.md - การปฏิเสธสิ่งส่งตรวจ/ผล
- 04-PAGES-FEATURES.md - Feature ทุกหน้าแบบละเอียด
- 05-DATA-STATUS-FLOW.md - Data Models + Status Transitions + Relationships
เอกสาร SA (SA/LAB/)
- Process Flow Detail - Flow แบบละเอียด
- ERD Design - Database Schema
- User Flow - Use Case แต่ละ Role
- TOR Gap Analysis - ส่วนที่ยังขาด
Mock Data & Implementation
- data/README_SPECIMEN_MOCK_DATA.md - Mock Data สิ่งส่งตรวจ
- data/README_REJECTION_WORKFLOW.md - Rejection Implementation
- data/README_RESULT_ENTRY.md - Result Entry Features
สร้างเมื่อ: 24 ธันวาคม 2568
อัปเดตล่าสุด: 26 ธันวาคม 2568
เวอร์ชัน: 2.0
ผู้จัดทำ: GitHub Copilot