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

Sample Data - Laboratory Master Data

ตัวอย่างข้อมูลสำหรับ Import เข้า Database (SQL INSERT Statements)

📋 Table of Contents

  1. lab_categories
  2. specimen_types
  3. container_types
  4. lab_items (In-house)
  5. lab_items (Out Lab)
  6. lab_panels
  7. lab_panel_items
  8. lab_normal_ranges
  9. lab_critical_values

1. lab_categories

หมวดหมู่รายการตรวจ Lab

INSERT INTO lab_categories (id, code, name_th, name_en, color, display_order, is_active) VALUES
(1, 'HEMA', 'โลหิตวิทยา', 'Hematology', '#ef4444', 0, 1),
(2, 'CHEM', 'เคมีคลินิก', 'Clinical Chemistry', '#3b82f6', 10, 1),
(3, 'IMMUNO', 'ภูมิคุ้มกัน', 'Immunology', '#8b5cf6', 20, 1),
(4, 'MICRO', 'จุลชีววิทยา', 'Microbiology', '#10b981', 30, 1),
(5, 'URINE', 'ปัสสาวะวิทยา', 'Urinalysis', '#f59e0b', 40, 1),
(6, 'SEROLOGY', 'ซีรั่มวิทยา', 'Serology', '#ec4899', 50, 1),
(7, 'HORMONE', 'ฮอร์โมน', 'Hormone', '#6366f1', 60, 1),
(8, 'TUMOR', 'ทูเมอร์มาร์กเกอร์', 'Tumor Marker', '#ef4444', 70, 1),
(9, 'COAG', 'การแข็งตัวของเลือด', 'Coagulation', '#f97316', 80, 1),
(10, 'DRUG', 'ระดับยาในเลือด', 'Therapeutic Drug Monitoring', '#14b8a6', 90, 1);

2. specimen_types

ประเภทสิ่งส่งตรวจ

INSERT INTO specimen_types (id, code, name_th, name_en, description, display_order, is_active) VALUES
(1, 'BLOOD', 'เลือด', 'Blood', 'เจาะเลือดจากหลอดเลือดดำ (Venous Blood)', 0, 1),
(2, 'URINE', 'ปัสสาวะ', 'Urine', 'เก็บปัสสาวะกลางระหว่าง (Mid-stream)', 10, 1),
(3, 'STOOL', 'อุจจาระ', 'Stool', 'เก็บในภาชนะปราศจากเชื้อ ส่งตรวจภายใน 2 ชั่วโมง', 20, 1),
(4, 'SPUTUM', 'เสมหะ', 'Sputum', 'เก็บเสมหะตอนเช้าก่อนแปรงฟัน', 30, 1),
(5, 'SERUM', 'ซีรั่ม', 'Serum', 'แยกจากเลือดที่แข็งตัวแล้ว', 40, 1),
(6, 'PLASMA', 'พลาสมา', 'Plasma', 'แยกจากเลือดที่มี anticoagulant', 50, 1),
(7, 'CSF', 'น้ำไขสันหลัง', 'Cerebrospinal Fluid', 'Lumbar puncture โดยแพทย์', 60, 1),
(8, 'SWAB', 'สำลีเช็ด', 'Swab', 'เช็ดจากบริเวณที่ต้องการตรวจ', 70, 1),
(9, 'TISSUE', 'เนื้อเยื่อ', 'Tissue', 'ชิ้นเนื้อจากการตัด/เจาะ', 80, 1),
(10, 'OTHER', 'อื่นๆ', 'Other', 'สิ่งส่งตรวจอื่นๆ', 90, 1);

3. container_types

ประเภทหลอด/ภาชนะ

INSERT INTO container_types (id, code, name_th, name_en, color, description, display_order, is_active) VALUES
(1, 'EDTA', 'จุกม่วง EDTA', 'Purple Top EDTA', '#6B46C1', 'มี EDTA เป็น anticoagulant สำหรับ CBC', 0, 1),
(2, 'PLAIN', 'จุกแดง Plain', 'Red Top Plain', '#DC2626', 'ไม่มี anticoagulant ใช้เก็บ Serum', 10, 1),
(3, 'FLUORIDE', 'จุกเทา Fluoride', 'Gray Top Fluoride', '#6B7280', 'มี Sodium Fluoride สำหรับ Glucose', 20, 1),
(4, 'CITRATE', 'จุกฟ้า Citrate', 'Light Blue Top Citrate', '#3B82F6', 'มี Sodium Citrate สำหรับ Coagulation', 30, 1),
(5, 'HEPARIN', 'จุกเขียว Heparin', 'Green Top Heparin', '#10B981', 'มี Heparin สำหรับ Plasma Chemistry', 40, 1),
(6, 'STERILE', 'ภาชนะปราศจากเชื้อ', 'Sterile Container', NULL, 'สำหรับ Urine, Stool, Sputum', 50, 1);

4. lab_items (In-house)

รายการตรวจ Lab แบบ In-house (ตรวจเอง)

INSERT INTO lab_items (
  id, lab_code, lab_name_th, lab_name_en, 
  category_id, specimen_type_id, container_type_id,
  specimen_volume, unit, method, turn_around_time,
  price, cost, is_out_lab, is_active
) VALUES
-- CBC (Complete Blood Count)
(1, 'CBC', 'นับเม็ดเลือดสมบูรณ์', 'Complete Blood Count', 1, 1, 1, 3.00, NULL, 'Automated Hematology Analyzer', 60, 100.00, 50.00, 0, 1),
(2, 'WBC', 'นับเม็ดเลือดขาว', 'White Blood Cell Count', 1, 1, 1, 3.00, 'cells/µL', 'Automated', 60, 30.00, 15.00, 0, 1),
(3, 'RBC', 'นับเม็ดเลือดแดง', 'Red Blood Cell Count', 1, 1, 1, 3.00, 'cells/µL', 'Automated', 60, 30.00, 15.00, 0, 1),
(4, 'HB', 'ฮีโมโกลบิน', 'Hemoglobin', 1, 1, 1, 3.00, 'g/dL', 'Automated', 60, 30.00, 15.00, 0, 1),
(5, 'HCT', 'ฮีมาโตคริต', 'Hematocrit', 1, 1, 1, 3.00, '%', 'Automated', 60, 30.00, 15.00, 0, 1),

-- Chemistry
(6, 'FBS', 'น้ำตาลในเลือดขณะอดอาหาร', 'Fasting Blood Sugar', 2, 1, 3, 2.00, 'mg/dL', 'Enzymatic', 120, 80.00, 30.00, 0, 1),
(7, 'CHOL', 'คอเลสเตอรอลรวม', 'Total Cholesterol', 2, 5, 2, 2.00, 'mg/dL', 'Enzymatic', 120, 80.00, 30.00, 0, 1),
(8, 'TG', 'ไตรกลีเซอไรด์', 'Triglyceride', 2, 5, 2, 2.00, 'mg/dL', 'Enzymatic', 120, 80.00, 30.00, 0, 1),
(9, 'HDL', 'คอเลสเตอรอลชนิดดี', 'HDL Cholesterol', 2, 5, 2, 2.00, 'mg/dL', 'Direct Method', 120, 100.00, 40.00, 0, 1),
(10, 'LDL', 'คอเลสเตอรอลชนิดร้าย', 'LDL Cholesterol', 2, 5, 2, 2.00, 'mg/dL', 'Calculated', 120, 100.00, 40.00, 0, 1),

-- Liver Function (LFT)
(11, 'TBIL', 'บิลิรูบินรวม', 'Total Bilirubin', 2, 5, 2, 2.00, 'mg/dL', 'Diazo Method', 120, 80.00, 35.00, 0, 1),
(12, 'DBIL', 'บิลิรูบินตรง', 'Direct Bilirubin', 2, 5, 2, 2.00, 'mg/dL', 'Diazo Method', 120, 80.00, 35.00, 0, 1),
(13, 'SGOT', 'เอนไซม์ SGOT (AST)', 'SGOT (AST)', 2, 5, 2, 2.00, 'U/L', 'Kinetic UV', 120, 80.00, 35.00, 0, 1),
(14, 'SGPT', 'เอนไซม์ SGPT (ALT)', 'SGPT (ALT)', 2, 5, 2, 2.00, 'U/L', 'Kinetic UV', 120, 80.00, 35.00, 0, 1),
(15, 'ALP', 'เอนไซม์ ALP', 'Alkaline Phosphatase', 2, 5, 2, 2.00, 'U/L', 'Kinetic', 120, 80.00, 35.00, 0, 1),

-- Renal Function (RFT)
(16, 'BUN', 'ยูเรียไนโตรเจนในเลือด', 'Blood Urea Nitrogen', 2, 5, 2, 2.00, 'mg/dL', 'Enzymatic', 120, 80.00, 30.00, 0, 1),
(17, 'CR', 'ครีเอทินีน', 'Creatinine', 2, 5, 2, 2.00, 'mg/dL', 'Jaffe Method', 120, 80.00, 30.00, 0, 1);

5. lab_items (Out Lab)

รายการตรวจที่ส่งตรวจนอก (Out Lab)

INSERT INTO lab_items (
  id, lab_code, lab_name_th, lab_name_en, 
  category_id, specimen_type_id, container_type_id,
  specimen_volume, unit, method, turn_around_time,
  price, cost, is_out_lab, out_lab_name, out_lab_code, out_lab_cost, is_active
) VALUES
-- Tumor Markers (Out Lab)
(23, 'CEA', 'CEA Tumor Marker', 'Carcinoembryonic Antigen', 8, 5, 2, 3.00, 'ng/mL', 'ECLIA', 2880, 800.00, 550.00, 1, 'Bangkok Lab', 'BKK-CEA-001', 500.00, 1),
(24, 'CA19-9', 'CA 19-9 Tumor Marker', 'CA 19-9', 8, 5, 2, 3.00, 'U/mL', 'ECLIA', 2880, 900.00, 650.00, 1, 'Central Lab', 'CTR-CA19-002', 600.00, 1),

-- Hormones (Out Lab)
(25, 'FT3', 'Free T3', 'Free Triiodothyronine', 7, 5, 2, 3.00, 'pg/mL', 'CLIA', 2880, 450.00, 310.00, 1, 'Bangkok Lab', 'BKK-FT3-003', 280.00, 1),

-- Therapeutic Drug Monitoring (Out Lab)
(26, 'VANCO', 'Vancomycin Level', 'Vancomycin', 10, 5, 2, 2.00, 'µg/mL', 'Immunoassay', 2880, 1200.00, 900.00, 1, 'Central Lab', 'CTR-VANCO-004', 850.00, 1),

-- Immunology (Out Lab)
(27, 'HLA-B27', 'HLA-B27', 'HLA-B27 Antigen', 3, 1, 1, 5.00, NULL, 'Flow Cytometry', 10080, 3500.00, 2950.00, 1, 'Siriraj Lab', 'SIR-HLA-005', 2800.00, 1);

6. lab_panels

กลุ่มรายการตรวจ (Lab Profiles)

INSERT INTO lab_panels (id, panel_code, panel_name_th, panel_name_en, description, price, cost, is_active) VALUES
(1, 'CBC-ESR', 'CBC + ESR', 'Complete Blood Count + ESR', 'ตรวจนับเม็ดเลือดและอัตราการตกตะกอนของเม็ดเลือดแดง', 120.00, 60.00, 1),
(2, 'LFT', 'Liver Function Test', 'Liver Function Test', 'ตรวจหน้าที่ตับ (TBIL, DBIL, SGOT, SGPT, ALP)', 350.00, 180.00, 1),
(3, 'RFT', 'Renal Function Test', 'Renal Function Test', 'ตรวจหน้าที่ไต (BUN, Creatinine)', 150.00, 70.00, 1),
(4, 'LIPID', 'Lipid Profile', 'Lipid Profile', 'ตรวจไขมันในเลือด (CHOL, TG, HDL, LDL)', 400.00, 180.00, 1),
(5, 'TFT', 'Thyroid Function Test (with Out Lab)', 'Thyroid Function Test', 'ตรวจหน้าที่ต่อมไทรอยด์ (มี Out Lab)', 500.00, 320.00, 1),
(6, 'CANCER', 'Cancer Screening Panel', 'Cancer Screening Panel', 'ตรวจคัดกรองมะเร็ง (มีทั้ง In-house และ Out Lab)', 1800.00, 1350.00, 1);

7. lab_panel_items

รายการตรวจใน Panel (Junction Table)

INSERT INTO lab_panel_items (panel_id, lab_item_id, display_order) VALUES
-- Panel 1: CBC-ESR
(1, 1, 0),  -- CBC

-- Panel 2: LFT (Liver Function Test)
(2, 11, 0), -- Total Bilirubin
(2, 12, 10), -- Direct Bilirubin
(2, 13, 20), -- SGOT
(2, 14, 30), -- SGPT
(2, 15, 40), -- ALP

-- Panel 3: RFT (Renal Function Test)
(3, 16, 0), -- BUN
(3, 17, 10), -- Creatinine

-- Panel 4: LIPID (Lipid Profile)
(4, 7, 0),  -- Total Cholesterol
(4, 8, 10), -- Triglyceride
(4, 9, 20), -- HDL
(4, 10, 30), -- LDL

-- Panel 5: TFT (มี Out Lab: Free T3)
(5, 25, 0), -- Free T3 (Out Lab)
(5, 6, 10), -- FBS (In-house)

-- Panel 6: Cancer Screening (Mixed: In-house + Out Lab)
(6, 23, 0), -- CEA (Out Lab)
(6, 24, 10), -- CA 19-9 (Out Lab)
(6, 13, 20), -- SGOT (In-house)
(6, 14, 30); -- SGPT (In-house)

8. lab_normal_ranges

ค่าปกติตามอายุ/เพศ

INSERT INTO lab_normal_ranges (
  lab_item_id, age_min_days, age_max_days, gender, 
  range_type, min_value, max_value, text_value
) VALUES
-- WBC (White Blood Cell) - ผู้ใหญ่
(2, 6570, NULL, 'ALL', 'NUMERIC', 4000.0000, 10000.0000, NULL),

-- RBC (Red Blood Cell) - แยกเพศ
(3, 6570, NULL, 'M', 'NUMERIC', 4.5000, 5.9000, NULL),
(3, 6570, NULL, 'F', 'NUMERIC', 4.1000, 5.1000, NULL),

-- Hemoglobin - แยกเพศ
(4, 6570, NULL, 'M', 'NUMERIC', 13.5000, 17.5000, NULL),
(4, 6570, NULL, 'F', 'NUMERIC', 12.0000, 16.0000, NULL),

-- Hematocrit - แยกเพศ
(5, 6570, NULL, 'M', 'NUMERIC', 40.0000, 54.0000, NULL),
(5, 6570, NULL, 'F', 'NUMERIC', 36.0000, 48.0000, NULL),

-- FBS (Fasting Blood Sugar) - ผู้ใหญ่
(6, 6570, NULL, 'ALL', 'NUMERIC', 70.0000, 110.0000, NULL),

-- Total Cholesterol - ผู้ใหญ่
(7, 6570, NULL, 'ALL', 'NUMERIC', 0.0000, 200.0000, NULL),

-- Triglyceride - ผู้ใหญ่
(8, 6570, NULL, 'ALL', 'NUMERIC', 0.0000, 150.0000, NULL),

-- HDL - แยกเพศ
(9, 6570, NULL, 'M', 'NUMERIC', 40.0000, 60.0000, NULL),
(9, 6570, NULL, 'F', 'NUMERIC', 50.0000, 70.0000, NULL),

-- LDL - ผู้ใหญ่
(10, 6570, NULL, 'ALL', 'NUMERIC', 0.0000, 130.0000, NULL),

-- Total Bilirubin
(11, 6570, NULL, 'ALL', 'NUMERIC', 0.3000, 1.2000, NULL),

-- SGOT (AST)
(13, 6570, NULL, 'ALL', 'NUMERIC', 0.0000, 40.0000, NULL),

-- SGPT (ALT)
(14, 6570, NULL, 'ALL', 'NUMERIC', 0.0000, 41.0000, NULL),

-- BUN
(16, 6570, NULL, 'ALL', 'NUMERIC', 7.0000, 20.0000, NULL),

-- Creatinine - แยกเพศ
(17, 6570, NULL, 'M', 'NUMERIC', 0.7000, 1.3000, NULL),
(17, 6570, NULL, 'F', 'NUMERIC', 0.6000, 1.1000, NULL);

9. lab_critical_values

ค่าวิกฤต (Critical/Panic Values)

INSERT INTO lab_critical_values (
  lab_item_id, critical_low, critical_high, panic_low, panic_high,
  alert_message, action_required, notify_immediately
) VALUES
-- FBS (Glucose)
(6, 50.0000, 400.0000, 40.0000, 500.0000, 
 'พบค่าน้ำตาลในเลือดผิดปกติวิกฤต', 
 'แจ้งแพทย์เวรทันที ตรวจสอบอาการผู้ป่วย', 
 1),

-- Hemoglobin
(4, 7.0000, 18.0000, 5.0000, 20.0000, 
 'พบค่าฮีโมโกลบินผิดปกติวิกฤต', 
 'แจ้งแพทย์ทันที พิจารณาให้เลือด', 
 1),

-- WBC
(2, 2000.0000, 30000.0000, 1000.0000, 50000.0000, 
 'พบค่าเม็ดเลือดขาวผิดปกติวิกฤต', 
 'แจ้งแพทย์ ตรวจหาสาเหตุการติดเชื้อ/มะเร็งเม็ดเลือด', 
 1),

-- Creatinine (ไตวาย)
(17, NULL, 3.0000, NULL, 5.0000, 
 'พบค่าครีเอทินีนสูงวิกฤต บ่งชี้ไตวาย', 
 'แจ้งแพทย์ทันที พิจารณาฟอกไตเร่งด่วน', 
 1),

-- SGOT (ตับอักเสบรุนแรง)
(13, NULL, 300.0000, NULL, 1000.0000, 
 'พบค่า SGOT สูงมาก บ่งชี้ตับอักเสบรุนแรง', 
 'แจ้งแพทย์ทันที ตรวจหาสาเหตุ', 
 1),

-- SGPT (ตับอักเสบรุนแรง)
(14, NULL, 300.0000, NULL, 1000.0000, 
 'พบค่า SGPT สูงมาก บ่งชี้ตับอักเสบรุนแรง', 
 'แจ้งแพทย์ทันที ตรวจหาสาเหตุ', 
 1);

🔄 Complete Import Script

สำหรับ MySQL

-- Set charset
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;

-- Start transaction
START TRANSACTION;

-- Import Master Data (Categories, Specimen, Container)
-- [Insert statements จากด้านบน...]

-- Import Lab Items
-- [Insert statements จากด้านบน...]

-- Import Panels
-- [Insert statements จากด้านบน...]

-- Import Panel Items
-- [Insert statements จากด้านบน...]

-- Import Normal Ranges
-- [Insert statements จากด้านบน...]

-- Import Critical Values
-- [Insert statements จากด้านบน...]

-- Commit
COMMIT;

-- Verify data
SELECT 'Categories', COUNT(*) FROM lab_categories
UNION ALL
SELECT 'Specimen Types', COUNT(*) FROM specimen_types
UNION ALL
SELECT 'Container Types', COUNT(*) FROM container_types
UNION ALL
SELECT 'Lab Items', COUNT(*) FROM lab_items
UNION ALL
SELECT 'Lab Panels', COUNT(*) FROM lab_panels
UNION ALL
SELECT 'Panel Items', COUNT(*) FROM lab_panel_items
UNION ALL
SELECT 'Normal Ranges', COUNT(*) FROM lab_normal_ranges
UNION ALL
SELECT 'Critical Values', COUNT(*) FROM lab_critical_values;

📊 Expected Data Counts

Table Row Count Notes
lab_categories 10 หมวดหมู่พื้นฐาน
specimen_types 10 ประเภทสิ่งส่งตรวจ
container_types 6 ประเภทหลอด
lab_items 27 22 In-house + 5 Out Lab
lab_panels 6 4 In-house + 2 Mixed
lab_panel_items 18 Items ใน Panels
lab_normal_ranges 18 แยกตามอายุ/เพศ
lab_critical_values 6 รายการที่มีค่าวิกฤต

🧪 Validation Queries

ตรวจสอบ Out Lab Items

SELECT 
  lab_code, 
  lab_name_th, 
  is_out_lab, 
  out_lab_name, 
  price, 
  out_lab_cost
FROM lab_items 
WHERE is_out_lab = 1;

ตรวจสอบ Panels ที่มี Out Lab

SELECT 
  lp.panel_code,
  lp.panel_name_th,
  COUNT(*) AS total_items,
  SUM(CASE WHEN li.is_out_lab = 1 THEN 1 ELSE 0 END) AS out_lab_items
FROM lab_panels lp
JOIN lab_panel_items lpi ON lp.id = lpi.panel_id
JOIN lab_items li ON lpi.lab_item_id = li.id
GROUP BY lp.id;

ตรวจสอบ Normal Ranges

SELECT 
  li.lab_code,
  li.lab_name_th,
  COUNT(nr.id) AS range_count
FROM lab_items li
LEFT JOIN lab_normal_ranges nr ON li.id = nr.lab_item_id
GROUP BY li.id
ORDER BY range_count DESC;

Next: ดู MIGRATION_GUIDE.md สำหรับคู่มือการ Migrate