01. ระบบงานชันสูตร (Laboratory Management System)
📋 ภาพรวมระบบ
ระบบงานชันสูตรเป็นส่วนสำคัญของ HIS ที่จัดการกระบวนการตรวจทางห้องปฏิบัติการตั้งแต่แพทย์สั่งตรวจจนถึงการรายงานผล รองรับการทำงานของบุคลากรหลายแผนก และมีระบบตรวจสอบคุณภาพที่เข้มงวด
🎯 วัตถุประสงค์หลัก
- เพิ่มความรวดเร็ว: ลดเวลาตั้งแต่สั่งตรวจจนได้ผล (Turnaround Time)
- ความปลอดภัย: ป้องกันข้อผิดพลาด ด้วย Barcode, Delta Check, Critical Alert
- ตรวจสอบได้: Track ทุกขั้นตอน พร้อม Audit Trail
- คุณภาพสูง: Specimen Quality Control + Result Approval Workflow
- รองรับ Outlab: จัดการแล็บนอก (Outsourcing) ได้สะดวก
👥 ผู้ใช้งานหลัก (Stakeholders)
1. แพทย์ (Doctor) 🩺
บทบาท: สั่งตรวจแล็บและดูผลการตรวจ - สั่ง Lab Order ผ่านระบบ OPD/IPD - ดูผลแล็บ Real-time - รับ Critical Alert กรณีผลผิดปกติร้ายแรง
หน้าที่เกี่ยวข้อง:
- modules/lab/doctor-order.html - สั่งตรวจแล็บ
- modules/opd-exam/ - ดูผลแล็บใน OPD Visit
2. เจ้าหน้าที่เก็บสิ่งส่งตรวจ (Phlebotomist/Nurse) 💉
บทบาท: เจาะเลือด/เก็บตัวอย่างสิ่งส่งตรวจ - เรียกคิว Lab Order - เจาะเลือด/เก็บปัสสาวะ/อื่นๆ - ตรวจสอบคุณภาพสิ่งส่งตรวจ (Specimen QC) - ปฏิเสธสิ่งส่งตรวจที่ไม่ผ่านมาตรฐาน - พิมพ์ Barcode Label
หน้าที่เกี่ยวข้อง:
- modules/lab/specimen-collection.html - เก็บสิ่งส่งตรวจ + QC
3. นักเทคนิคการแพทย์ (Medical Technologist) 🔬
บทบาท: ตรวจวิเคราะห์และลงผลแล็บ - รับงานจากคิว (Order Queue) - ตรวจวิเคราะห์ด้วยเครื่องมือ - ลงผลแล็บ (Manual/Interface) - ตรวจสอบความผิดปกติ (Delta Check) - แนบไฟล์ผลจากแล็บนอก - จัดการผลที่ถูกปฏิเสธ (Re-entry)
หน้าที่เกี่ยวข้อง:
- modules/lab/order-queue.html - คิวงาน
- modules/lab/result-entry.html - ลงผลแล็บ
4. หัวหน้าห้องแล็บ (Lab Supervisor) 👨⚕️
บทบาท: ตรวจสอบและอนุมัติผล - Review ผลแล็บก่อนรายงาน - อนุมัติผล (Approve) - ปฏิเสธผล (Reject) กรณีผิดปกติ - ระบุว่าต้องเก็บสิ่งส่งตรวจใหม่หรือไม่ - ติดต่อแพทย์กรณี Critical Result
หน้าที่เกี่ยวข้อง:
- modules/lab/result-approval.html - อนุมัติผล
5. เจ้าหน้าที่แผนกต้นสังกัด (Ward Staff) 🏥
บทบาท: ติดตามผล และนำส่งผู้ป่วยเจาะเลือด (กรณี IPD) - ตรวจสอบสถานะ Order - พิมพ์ใบนัด/ใบนำส่ง - รับผลแล็บเพื่อนำเข้าแฟ้ม
🏗️ โครงสร้างระบบ (System Architecture)
┌─────────────────────────────────────────────────────────────────┐
│ LABORATORY MANAGEMENT SYSTEM │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
┌────▼─────┐ ┌─────▼──────┐ ┌──────▼──────┐
│ Frontend │ │ Services │ │ Data │
│ (HTML) │───────────▶│ (JS) │─────────▶│ (LocalStorage│
└──────────┘ └────────────┘ │ + JSON) │
└─────────────┘
┌─────────────────────── FRONTEND MODULES ───────────────────────┐
│ │
│ 📄 doctor-order.html สั่งตรวจแล็บ │
│ 📄 order-queue.html คิวงานแล็บ │
│ 📄 specimen-collection.html เก็บสิ่งส่งตรวจ │
│ 📄 result-entry.html ลงผลแล็บ │
│ 📄 result-approval.html อนุมัติผล │
│ 📄 index.html หน้าหลักเมนู Lab │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────── SERVICE LAYER ─────────────────────────┐
│ │
│ 🔧 PatientService จัดการข้อมูลผู้ป่วย │
│ 🔧 LabOrderService จัดการ Lab Orders │
│ 🔧 LabResultService จัดการผลแล็บ │
│ 🔧 SpecimenService จัดการสิ่งส่งตรวจ │
│ 🔧 FileAttachmentService จัดการไฟล์แนบ (Outlab) │
│ │
└────────────────────────────────────────────────────────────────┘
┌─────────────────────── DATA MODELS ───────────────────────────┐
│ │
│ 📦 Patient ข้อมูลผู้ป่วย │
│ 📦 LabOrder คำสั่งตรวจแล็บ │
│ 📦 LabItem รายการตรวจ │
│ 📦 LabResult ผลการตรวจ │
│ 📦 Specimen สิ่งส่งตรวจ │
│ │
└────────────────────────────────────────────────────────────────┘
┌─────────────────────── MOCK DATA FILES ───────────────────────┐
│ │
│ 📊 patients.json รายชื่อผู้ป่วย │
│ 📊 lab-items.json รายการตรวจทั้งหมด │
│ 📊 lab-orders-specimen.json Lab Orders + Specimens │
│ 📊 lab-previous-results.json ผลเก่าสำหรับ Delta Check │
│ 📊 lab-instruments.json เครื่องมือตรวจวิเคราะห์ │
│ 📊 lab-pricing.json ราคารายการตรวจ │
│ 📊 lab-panels.json Lab Panels (กลุ่มรายการ) │
│ 📊 rejection-reasons.json เหตุผลการปฏิเสธ │
│ │
└────────────────────────────────────────────────────────────────┘
📊 ขั้นตอนหลักของระบบ (Main Workflow)
graph TD
A[1. Doctor Order<br/>แพทย์สั่งตรวจ] --> B[2. Order Queue<br/>คิวงาน]
B --> C[3. Specimen Collection<br/>เก็บสิ่งส่งตรวจ]
C --> D[4. Result Entry<br/>ลงผลแล็บ]
D --> E[5. Result Approval<br/>อนุมัติผล]
E --> F{ผลผ่าน?}
F -->|✅ Approve| G[6. Report<br/>รายงานผล]
F -->|❌ Reject| H{ต้องเก็บใหม่?}
H -->|ไม่ต้อง| D
H -->|ต้องเก็บ| C
style A fill:#e3f2fd
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e8f5e9
style G fill:#c8e6c9
คำอธิบาย: 1. Doctor Order: แพทย์สั่งตรวจผ่านระบบ 2. Order Queue: งานเข้าคิว รอดำเนินการ 3. Specimen Collection: เจาะเลือด/เก็บตัวอย่าง พร้อม QC 4. Result Entry: นักเทคนิคลงผลการตรวจ 5. Result Approval: หัวหน้า Review และอนุมัติ 6. Report: ผลออกรายงาน พร้อมแจ้งแพทย์
🔄 สถานะของ Lab Order (Order Status Flow)
pending
↓
confirmed ────────────┐
↓ │
collecting │ (Cancel)
↓ │
specimen_collected │
↓ │
sent_to_lis │
↓ │
in_progress │
↓ ↓
partial_result cancelled
↓
pending_approval
↓
├─ Approve All → approved (completed)
└─ Approve Some → partial_approved
↓
approved (completed)
รายละเอียดสถานะ:
| Status | ความหมาย | หน้าที่เกี่ยวข้อง |
|---|---|---|
pending |
รอยืนยัน Order | doctor-order.html |
confirmed |
ยืนยันแล้ว รอเก็บสิ่งส่งตรวจ | specimen-collection.html |
collecting |
กำลังเก็บสิ่งส่งตรวจ | specimen-collection.html |
specimen_collected |
เก็บเสร็จ รอส่ง LIS | order-queue.html |
sent_to_lis |
ส่ง LIS แล้ว รอลงผล | result-entry.html |
in_progress |
กำลังตรวจวิเคราะห์ | result-entry.html |
partial_result |
ลงผลบางส่วน | result-entry.html |
pending_approval |
ลงผลครบแล้ว รออนุมัติ | result-approval.html |
partial_approved |
อนุมัติบางรายการ 🔄 | result-approval.html |
approved |
อนุมัติครบทุกรายการ | - |
completed |
เสร็จสมบูรณ์ | - |
cancelled |
ยกเลิก | - |
📌 สถานะพิเศษ: Partial Approval
partial_approved = อนุมัติบางรายการแล้ว ยังมีรายการที่รออนุมัติหรือรอลงผล
เงื่อนไขที่จะเป็น partial_approved:
- อนุมัติบางส่วน + ยังมีผลรออนุมัติ
- มีผลที่อนุมัติแล้ว (result status =
final) ≥ 1 รายการ -
และ ยังมีผลรออนุมัติ (result status =
preliminary) ≥ 1 รายการ -
อนุมัติบางส่วน + ยังรอลงผลบางรายการ
- มีผลที่อนุมัติแล้ว ≥ 1 รายการ
- และ ยังมีผลที่ยังไม่ลง (result status =
pending) ≥ 1 รายการ - ตัวอย่าง: อนุมัติ CBC แล้ว แต่ยังรอผล HIV จากแล็บนอก
ตัวอย่างสถานการณ์:
Order LAB202500001 (5 รายการ):
├─ CBC ................ ✅ อนุมัติแล้ว (final)
├─ Glucose ............ ✅ อนุมัติแล้ว (final)
├─ Creatinine ......... ⏳ รออนุมัติ (preliminary)
├─ HIV ................ ⏳ ยังไม่ลงผล (pending) - Outlab
└─ HBsAg .............. ⏳ ยังไม่ลงผล (pending) - Outlab
Order Status = partial_approved (อนุมัติ 2/5 รายการ)
🔄 สถานะของผลแล็บ (Result Status Flow)
pending (ยังไม่ลงผล)
↓
preliminary (ลงผลแล้ว) ────┐
↓ │
├─ Approve All │ Reject
│ ↓ │ ↓
│ final (all) │ rejected ─────┐
│ ↓ │ ↓ │
│ Order: approved │ requireNew? │
│ │ ├─ No │ Yes
├─ Approve Some │ │ ↓ │ ↓
│ ↓ │ │ reenter │ recollect
│ final (partial) │ │ ↓ │ ↓
│ ↓ │ └─ preliminary
│ Order: partial_approved └─ specimen_collected
└────────────────────────────────────────┘
รายละเอียดสถานะผล:
| Status | ความหมาย | หน้าที่เกี่ยวข้อง | Actions |
|---|---|---|---|
pending |
ยังไม่ลงผล (รอจากแล็บนอก) | result-entry.html | รอ Upload ไฟล์ |
preliminary |
ลงผลแล้ว รอตรวจสอบ/อนุมัติ | result-entry.html → result-approval.html | Approve/Reject |
final |
ผลสุดท้าย อนุมัติแล้ว ✅ | result-approval.html | พิมพ์รายงาน |
rejected |
ถูกปฏิเสธ ต้องดำเนินการ ❌ | result-entry / specimen-collection | Re-enter / Recollect |
corrected |
แก้ไขผลที่อนุมัติแล้ว | result-approval.html | Audit Trail |
📌 Approval Modes
ระบบรองรับการอนุมัติ 2 แบบ:
1. Approve All (อนุมัติทั้งหมด)
- อนุมัติทุกรายการใน Order พร้อมกัน
- ทุกผล status →
final - Order status →
approved
2. Approve Selected (อนุมัติบางรายการ) 🔄
- เลือกอนุมัติเฉพาะรายการที่ต้องการ
- ผลที่เลือก status →
final - ผลที่ไม่เลือก status → ยังคง
preliminary - Order status →
partial_approved - Use Case: อนุมัติผลที่แน่นอนก่อน เก็บผลที่สงสัยไว้ตรวจสอบเพิ่ม
🔄 สถานะของสิ่งส่งตรวจ (Specimen Status Flow)
collected ────┐
↓ │
sent_to_lab │ Reject
↓ │ ↓
testing │ rejected ──┐
↓ │ │
completed │ │ Recollect
└────────────┘ ↓
collected (new)
รายละเอียดสถานะ:
| Status | ความหมาย | หน้าที่เกี่ยวข้อง |
|---|---|---|
collected |
เก็บสำเร็จ | specimen-collection.html |
sent_to_lab |
ส่งห้องแล็บ | - |
testing |
กำลังตรวจ | result-entry.html |
completed |
ตรวจเสร็จ | result-approval.html |
rejected |
ปฏิเสธ ต้องเก็บใหม่ | specimen-collection.html |
📁 โครงสร้างไฟล์ (File Structure)
modules/lab/
├── index.html # หน้าหลัก Lab Menu
├── doctor-order.html # สั่งตรวจแล็บ
├── order-queue.html # คิวงานแล็บ
├── specimen-collection.html # เก็บสิ่งส่งตรวจ
├── result-entry.html # ลงผลแล็บ
├── result-approval.html # อนุมัติผล
└── test-service.html # ทดสอบ Services
assets/js/
├── models/
│ ├── Patient.js
│ ├── LabOrder.js
│ ├── LabItem.js
│ ├── LabResult.js
│ └── Specimen.js
└── services/
├── PatientService.js
├── LabOrderService.js
├── LabResultService.js
├── SpecimenService.js
└── FileAttachmentService.js
data/
├── patients.json
├── lab-items.json
├── lab-orders-specimen.json
├── lab-previous-results.json
├── lab-instruments.json
├── lab-pricing.json
├── lab-panels.json
└── rejection-reasons.json
🎨 Design Principles
1. User-Centric Design
- แต่ละหน้าออกแบบเฉพาะบทบาท (Role-based UI)
- ลดขั้นตอนที่ไม่จำเป็น (Minimal clicks)
- ข้อมูลสำคัญแสดงเด่นชัด (Visual hierarchy)
2. Safety First
- Confirmation dialogs สำหรับการกระทำสำคัญ
- Color-coded status (สีเขียว=ปกติ, เหลือง=รอ, แดง=ปัญหา)
- Alert modals สำหรับผลผิดปกติ (Critical, Delta Check)
3. Traceability
- บันทึกว่าใครทำอะไรเมื่อไหร่ (Audit Trail)
- แสดงประวัติการปฏิเสธ/แก้ไข
- Track specimen versions (original + recollections)
4. Performance
- LocalStorage สำหรับ state management
- JSON files สำหรับ mock data
- Lazy loading รายการตรวจ (ไม่โหลดทั้งหมดทันที)
📱 Responsive Design
ระบบรองรับการใช้งานบนหน้าจอขนาดต่างๆ: - Desktop (1920x1080): Full feature, Multi-column layout - Tablet (768px+): ปรับ Grid เป็น 2 คอลัมน์ - Mobile (320px+): Stack layout, Touch-optimized buttons
🔒 Data Privacy & Security
- Mock Data Only: ข้อมูลทั้งหมดเป็น Mock ไม่มีข้อมูลผู้ป่วยจริง
- LocalStorage: ข้อมูลเก็บใน Browser ไม่ส่งไปเซิร์ฟเวอร์
- No Real API: ไม่มีการเชื่อมต่อ Backend จริง
- User Simulation: ใช้ Mock User Role (เลือกเองในระบบ)
📚 เอกสารเพิ่มเติม
- 02-MAIN-WORKFLOW.md - Flow หลักแบบละเอียด
- 03-REJECTION-WORKFLOW.md - การปฏิเสธผล/สิ่งส่งตรวจ
- 04-PAGES-FEATURES.md - Features แต่ละหน้า
- 05-DATA-STATUS-FLOW.md - Data Models & Status
📞 ติดต่อทีมพัฒนา
หากมีคำถามหรือต้องการข้อมูลเพิ่มเติม:
- GitHub Issues: สร้าง issue ใน repository
- Documentation: อ่านเอกสารเพิ่มเติมในโฟลเดอร์ docs/LAB/
- Data README: ดูคำอธิบาย Mock Data ใน data/README_*.md
Last Updated: December 26, 2025
Version: 1.0.0
Target Audience: UX/UI Designer, Product Owner, QA Team