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

Database Schema Design

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

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


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


Database Schema Design

ER Diagram: รายละเอียด Entity-Relationship Diagram และความสัมพันธ์ระหว่างตารางแบบละเอียด ดูได้ในไฟล์ ER Diagram.md

ระบบงานชันสูตรเป็นระบบที่ทำหน้าที่เป็นศูนย์กลางการจัดการงานห้องปฏิบัติการ รองรับการสั่งตรวจ การรายงานผล การควบคุมคุณภาพ และการส่งผล Lab นอก โดยเชื่อมโยงกับระบบอื่นผ่าน API Integration:

  • ระบบเวชระเบียน (1.2.1): ข้อมูลผู้ป่วยหลักและ Visit
  • ระบบซักประวัติ (1.2.2): การสั่งตรวจจากการซักประวัติ
  • ระบบห้องตรวจแพทย์ (1.2.3): การสั่งตรวจจากห้องตรวจ
  • ระบบห้องฉุกเฉิน (1.2.4): การสั่งตรวจแบบ STAT จากห้องฉุกเฉิน
  • ระบบนัดหมายและตารางเวรแพทย์ (1.2.6): การสั่งตรวจล่วงหน้าตามนัด
  • ระบบตรวจสอบสิทธิ (1.2.15): การตรวจสอบสิทธิสำหรับการตรวจ Lab
  • ระบบการเงิน (1.2.14): การคำนวณค่าบริการตรวจ Lab
  • ระบบผู้ดูแลระบบ (1.2.21): การจัดการข้อมูลพื้นฐานและตั้งค่า

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

หมายเหตุ: ตาราง PATIENT, VISIT จะอยู่ในระบบเวชระเบียน (1.2.1) ระบบงานชันสูตรจะอ้างอิงผ่าน Foreign Key เท่านั้น

8.2.7.1 ข้อมูลพื้นฐาน (Master Data)

Table: LAB_TEST_MASTER (ข้อมูลรายการตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลรายการตรวจ Lab ทั้งหมด รวมถึงค่าปกติ ค่าวิกฤต และการตั้งค่าต่างๆ ตาม TOR ข้อ 1.2.7.1.1

Field Type Key Description
TestCode VARCHAR(20) PK รหัสรายการตรวจ
TestName NVARCHAR(200) ชื่อรายการตรวจ
TestNameEng NVARCHAR(200) ชื่อรายการตรวจ (อังกฤษ)
TestNameShort NVARCHAR(50) ชื่อรายการตรวจ (ย่อ)
TestCategoryCode VARCHAR(10) FK รหัสหมวดการตรวจ (อ้างอิง LAB_CATEGORY)
TestGroupCode VARCHAR(10) FK รหัสกลุ่มการตรวจ (อ้างอิง LAB_GROUP)
SpecimenTypeCode VARCHAR(10) FK รหัสประเภทสิ่งส่งตรวจ (อ้างอิง SPECIMEN_TYPE)
UnitCode VARCHAR(10) FK รหัสหน่วย (อ้างอิง LAB_UNIT)
ServiceCost DECIMAL(10,2) อัตราค่าบริการ
TAT_Normal INT เวลาออกผลปกติ (นาที)
TAT_STAT INT เวลาออกผล STAT (นาที)
TAT_ASAP INT เวลาออกผล ASAP (นาที)
IsOutLab BIT เป็น Lab นอก
OutLabName NVARCHAR(200) ชื่อ Lab นอก
OutLabCode VARCHAR(20) รหัส Lab นอก
OutLabCost DECIMAL(10,2) ค่าบริการ Lab นอก
IsActive BIT ใช้งานอยู่
IsSTAT BIT สามารถสั่งแบบ STAT ได้
IsGroupable BIT สามารถจัดกลุ่มได้
RequiresFasting BIT ต้องงดอาหาร
FastingHours INT จำนวนชั่วโมงงดอาหาร
TreatmentGroupCode VARCHAR(20) FK รหัสกลุ่มค่ารักษาพยาบาล (อ้างอิง TREATMENT_GROUP)
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: LAB_NORMAL_VALUES (ค่าปกติการตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลค่าปกติของการตรวจ Lab แยกตามอายุและเพศ ตาม TOR ข้อ 1.2.7.1.1

Field Type Key Description
NormalValueID VARCHAR(20) PK รหัสค่าปกติ
TestCode VARCHAR(20) FK รหัสรายการตรวจ
AgeMin INT อายุขั้นต่ำ (วัน)
AgeMax INT อายุสูงสุด (วัน)
Gender CHAR(1) เพศ (M/F/A=ทั้งหมด)
ValueType ENUM('NUMERIC','TEXT','RANGE') ประเภทค่า
MinValue DECIMAL(15,6) ค่าต่ำสุด (กรณีตัวเลข)
MaxValue DECIMAL(15,6) ค่าสูงสุด (กรณีตัวเลข)
TextValue NVARCHAR(200) ค่าปกติ (กรณีข้อความ)
PossibleValues NTEXT ค่าที่เป็นไปได้ (JSON Array)
CriticalLow DECIMAL(15,6) ค่าวิกฤตต่ำ
CriticalHigh DECIMAL(15,6) ค่าวิกฤตสูง
PanicLow DECIMAL(15,6) ค่า Panic ต่ำ
PanicHigh DECIMAL(15,6) ค่า Panic สูง
IsActive BIT ใช้งานอยู่
EffectiveDate DATE วันที่เริ่มใช้
ExpiryDate DATE วันที่หมดอายุ
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_TEST_GROUP (กลุ่มการตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลกลุ่มการตรวจ Lab สำหรับการสั่งแบบเป็นกลุ่ม ตาม TOR ข้อ 1.2.7.1.2

Field Type Key Description
GroupCode VARCHAR(10) PK รหัสกลุ่มการตรวจ
GroupName NVARCHAR(100) ชื่อกลุ่มการตรวจ
GroupNameEng NVARCHAR(100) ชื่อกลุ่มการตรวจ (อังกฤษ)
GroupDescription NTEXT คำอธิบายกลุ่มการตรวจ
CategoryCode VARCHAR(10) FK รหัสหมวดการตรวจ
GroupCost DECIMAL(10,2) ราคากลุ่ม
DiscountPercent DECIMAL(5,2) เปอร์เซ็นต์ส่วนลด
IsPackage BIT เป็นแพ็คเกจ
RequiresFasting BIT ต้องงดอาหาร
FastingHours INT จำนวนชั่วโมงงดอาหาร
TATMinutes INT เวลาออกผล (นาที)
IsActive BIT ใช้งานอยู่
DisplayOrder INT ลำดับการแสดง
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_GROUP_TESTS (รายการตรวจในกลุ่ม)

วัตถุประสงค์: เก็บข้อมูลรายการตรวจ Lab ที่อยู่ในแต่ละกลุ่ม

Field Type Key Description
GroupTestID VARCHAR(20) PK รหัสรายการในกลุ่ม
GroupCode VARCHAR(10) FK รหัสกลุ่มการตรวจ
TestCode VARCHAR(20) FK รหัสรายการตรวจ
IsRequired BIT จำเป็นต้องมี
DisplayOrder INT ลำดับการแสดง
CreatedDate DATETIME วันที่สร้าง

Table: LAB_CATEGORY (หมวดการตรวจ Lab)

วัตถุประสงค์: จัดหมวดหมู่การตรวจ Lab ตาม TOR ข้อ 1.2.7.1.3

Field Type Key Description
CategoryCode VARCHAR(10) PK รหัสหมวดการตรวจ
CategoryName NVARCHAR(100) ชื่อหมวดการตรวจ
CategoryNameEng NVARCHAR(100) ชื่อหมวดการตรวจ (อังกฤษ)
ParentCategoryCode VARCHAR(10) FK หมวดหลัก
TreatmentGroupCode VARCHAR(20) FK รหัสกลุ่มค่ารักษาพยาบาล
DisplayOrder INT ลำดับการแสดง
IsActive BIT ใช้งานอยู่
Description NTEXT คำอธิบาย
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: SPECIMEN_TYPE (ประเภทสิ่งส่งตรวจ)

วัตถุประสงค์: เก็บข้อมูลประเภทสิ่งส่งตรวจต่างๆ ตาม TOR ข้อ 1.2.7.1.1

Field Type Key Description
SpecimenCode VARCHAR(10) PK รหัสสิ่งส่งตรวจ
SpecimenName NVARCHAR(100) ชื่อสิ่งส่งตรวจ
SpecimenNameEng NVARCHAR(100) ชื่อสิ่งส่งตรวจ (อังกฤษ)
ContainerType NVARCHAR(100) ประเภทภาชนะ
ContainerColor NVARCHAR(50) สีภาชนะ
Volume DECIMAL(10,2) ปริมาณที่ต้องการ
VolumeUnit VARCHAR(10) หน่วยปริมาณ
StorageTemperature NVARCHAR(50) อุณหภูมิเก็บรักษา
StabilityHours INT ความคงตัว (ชั่วโมง)
PreparationInstructions NTEXT คำแนะนำการเตรียม
CollectionInstructions NTEXT คำแนะนำการเก็บ
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_UNIT (หน่วยการตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลหน่วยต่างๆ ที่ใช้ในการรายงานผล Lab

Field Type Key Description
UnitCode VARCHAR(10) PK รหัสหน่วย
UnitName NVARCHAR(50) ชื่อหน่วย
UnitSymbol NVARCHAR(20) สัญลักษณ์หน่วย
UnitType VARCHAR(20) ประเภทหน่วย
ConversionFactor DECIMAL(15,6) ตัวคูณการแปลง
BaseUnitCode VARCHAR(10) FK หน่วยพื้นฐาน
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_FORM_TEMPLATE (แบบฟอร์มการสั่ง Lab)

วัตถุประสงค์: เก็บ Template แบบฟอร์มการสั่ง Lab ที่สามารถออกแบบเองได้ ตาม TOR ข้อ 1.2.7.1.5

Field Type Key Description
TemplateID VARCHAR(20) PK รหัส Template
TemplateName NVARCHAR(100) ชื่อ Template
DepartmentCode VARCHAR(10) FK รหัสแผนก
ClinicCode VARCHAR(10) FK รหัสคลินิก
FormLayout NTEXT รูปแบบฟอร์ม (JSON)
DefaultTests NTEXT รายการตรวจเริ่มต้น (JSON Array)
HeaderText NTEXT ข้อความหัวกระดาษ
FooterText NTEXT ข้อความท้ายกระดาษ
PaperSize VARCHAR(10) ขนาดกระดาษ
Orientation VARCHAR(10) แนวกระดาษ
IsDefault BIT เป็น Template เริ่มต้น
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

8.2.7.2 การสั่งตรวจห้องปฏิบัติการ (Lab Orders)

Table: LAB_ORDER (การสั่งตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลการสั่งตรวจ Lab จากแต่ละจุดบริการ รองรับการสั่งแบบ Online ตาม TOR ข้อ 1.2.7.2.1

Field Type Key Description
OrderID VARCHAR(20) PK รหัสการสั่งตรวจ (LAB-XXXXXXXXXXX)
LabNumber VARCHAR(15) UK หมายเลข Lab (รัน Auto ต่อเนื่อง)
HN VARCHAR(10) FK รหัสผู้ป่วย (อ้างอิง PATIENT จากระบบเวชระเบียน)
VisitID VARCHAR(20) FK รหัสการเข้ารับบริการ (อ้างอิง VISIT จากระบบเวชระเบียน)
AN VARCHAR(15) FK หมายเลขผู้ป่วยใน (สำหรับ IPD)
SourceSystem VARCHAR(20) ระบบที่สั่ง (HISTORY_TAKING/EXAMINATION/EMERGENCY/APPOINTMENT)
SourceID VARCHAR(20) FK รหัสอ้างอิงระบบต้นทาง
OrderDate DATE วันที่สั่งตรวจ
OrderTime TIME เวลาที่สั่งตรวจ
OrderDateTime DATETIME วันเวลาที่สั่งตรวจ (รวม)
DoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
DoctorName NVARCHAR(100) ชื่อแพทย์ผู้สั่ง
DepartmentCode VARCHAR(10) FK รหัสแผนกที่สั่ง
ClinicCode VARCHAR(10) FK รหัสคลินิกที่สั่ง
RoomCode VARCHAR(10) FK รหัสห้องที่สั่ง
Priority ENUM('NORMAL','STAT','ASAP','ROUTINE') ลำดับความสำคัญ
PatientType ENUM('OPD','IPD','ER','CHECKUP') ประเภทผู้ป่วย
OrderStatus ENUM('ORDERED','COLLECTED','RECEIVED','PROCESSING','COMPLETED','CANCELLED') สถานะการสั่ง
CollectionDateTime DATETIME วันเวลาเก็บสิ่งส่งตรวจ
CollectedBy VARCHAR(50) ผู้เก็บสิ่งส่งตรวจ
ReceivedDateTime DATETIME วันเวลาที่ Lab รับ
ReceivedBy VARCHAR(50) ผู้รับใน Lab
ClinicalInfo NTEXT ข้อมูลทางคลินิก
ClinicalDiagnosis NTEXT การวินิจฉัยเบื้องต้น
SpecialInstructions NTEXT คำแนะนำพิเศษ
RightsCode VARCHAR(10) FK รหัสสิทธิการรักษา
TotalCost DECIMAL(10,2) ค่าใช้จ่ายรวม
IsGroup BIT สั่งแบบกลุ่ม
GroupCode VARCHAR(10) FK รหัสกลุ่มการตรวจ
TemplateID VARCHAR(20) FK รหัส Template ที่ใช้
IsReorder BIT เป็นการสั่งซ้ำ
OriginalOrderID VARCHAR(20) FK รหัสการสั่งต้นฉบับ
Barcode VARCHAR(50) UK บาร์โค้ดใบ Lab
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สั่ง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: LAB_ORDER_DETAIL (รายละเอียดการสั่งตรวจ)

วัตถุประสงค์: เก็บรายละเอียดรายการตรวจแต่ละรายการในการสั่ง รองรับการเลือกรายการทีละรายการหรือเป็นกลุ่ม ตาม TOR ข้อ 1.2.7.2.2

Field Type Key Description
OrderDetailID VARCHAR(20) PK รหัสรายละเอียดการสั่ง
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
TestCode VARCHAR(20) FK รหัสรายการตรวจ
TestName NVARCHAR(200) ชื่อรายการตรวจ
SpecimenCode VARCHAR(10) FK รหัสสิ่งส่งตรวจ
Priority ENUM('NORMAL','STAT','ASAP','ROUTINE') ลำดับความสำคัญ
OrderStatus ENUM('ORDERED','COLLECTED','RECEIVED','PROCESSING','COMPLETED','CANCELLED') สถานะรายการ
SpecimenStatus ENUM('NOT_COLLECTED','COLLECTED','INSUFFICIENT','REJECTED','PROCESSED') สถานะสิ่งส่งตรวจ
Cost DECIMAL(10,2) ค่าบริการ
IsOutLab BIT เป็น Lab นอก
OutLabCode VARCHAR(20) FK รหัส Lab นอก
OutLabCost DECIMAL(10,2) ค่าบริการ Lab นอก
TubeNumber VARCHAR(20) หมายเลข Tube
TubeBarcode VARCHAR(50) บาร์โค้ด Tube
CollectionDateTime DATETIME วันเวลาเก็บสิ่งส่งตรวจ
CollectedBy VARCHAR(50) ผู้เก็บ
ReceivedDateTime DATETIME วันเวลารับใน Lab
ReceivedBy VARCHAR(50) ผู้รับ
ProcessedDateTime DATETIME วันเวลาประมวลผล
ProcessedBy VARCHAR(50) ผู้ประมวลผล
CompletedDateTime DATETIME วันเวลาเสร็จสิ้น
TAT_Expected DATETIME เวลาที่คาดว่าจะเสร็จ
IsAddOn BIT เป็นรายการเพิ่ม
AddedDateTime DATETIME วันเวลาที่เพิ่ม
IsReduced BIT เป็นรายการที่ลด
RemovedDateTime DATETIME วันเวลาที่ลด
RemovalReason NVARCHAR(200) เหตุผลที่ลด
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_SPECIMEN (ข้อมูลสิ่งส่งตรวจ)

วัตถุประสงค์: เก็บข้อมูลสิ่งส่งตรวจที่ได้รับ รวมถึงคุณภาพและสภาพของสิ่งส่งตรวจ

Field Type Key Description
SpecimenID VARCHAR(20) PK รหัสสิ่งส่งตรวจ
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
SpecimenCode VARCHAR(10) FK รหัสประเภทสิ่งส่งตรวจ
TubeNumber VARCHAR(20) UK หมายเลข Tube
Barcode VARCHAR(50) UK บาร์โค้ด
CollectionDate DATE วันที่เก็บ
CollectionTime TIME เวลาที่เก็บ
CollectedBy VARCHAR(50) ผู้เก็บ
Volume DECIMAL(10,2) ปริมาณ
VolumeUnit VARCHAR(10) หน่วยปริมาณ
Quality ENUM('GOOD','ACCEPTABLE','POOR','REJECTED') คุณภาพ
Appearance NVARCHAR(100) ลักษณะที่ปรากฏ
Color NVARCHAR(50) สี
Clarity NVARCHAR(50) ความใส
Temperature DECIMAL(4,1) อุณหภูมิ
pH DECIMAL(4,2) ค่า pH
SpecificGravity DECIMAL(4,3) ความถ่วงจำเพาะ
ReceivedDateTime DATETIME วันเวลาที่รับ
ReceivedBy VARCHAR(50) ผู้รับ
StorageLocation VARCHAR(50) สถานที่เก็บ
StorageTemperature DECIMAL(4,1) อุณหภูมิเก็บ
ExpiryDateTime DATETIME วันเวลาหมดอายุ
RejectionReason NVARCHAR(200) เหตุผลที่ปฏิเสธ
IsRejected BIT ถูกปฏิเสธ
RejectedBy VARCHAR(50) ผู้ปฏิเสธ
RejectedDateTime DATETIME วันเวลาที่ปฏิเสธ
Comments NTEXT หมายเหตุ
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_APPOINTMENT_ORDER (การสั่งตรวจล่วงหน้า)

วัตถุประสงค์: เก็บข้อมูลการสั่งตรวจ Lab ล่วงหน้าตามนัดหมาย เชื่อมโยงกับระบบนัดหมาย (1.2.6)

Field Type Key Description
AppointmentOrderID VARCHAR(20) PK รหัสการสั่งล่วงหน้า
AppointmentID VARCHAR(20) FK รหัสนัดหมาย (อ้างอิงจากระบบนัดหมาย 1.2.6)
HN VARCHAR(10) FK รหัสผู้ป่วย
DoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
AppointmentDate DATE วันที่นัด
OrderDate DATE วันที่สั่ง
TestCodes NTEXT รหัสรายการตรวจ (JSON Array)
SpecialInstructions NTEXT คำแนะนำพิเศษ
IsActivated BIT เปิดใช้งานแล้ว
ActivatedDateTime DATETIME วันเวลาที่เปิดใช้
GeneratedOrderID VARCHAR(20) FK รหัสการสั่งที่สร้างขึ้น
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.7.3 การรายงานผลการตรวจทางห้องปฏิบัติการ (Lab Results)

Table: LAB_RESULT (ผลการตรวจ Lab)

วัตถุประสงค์: เก็บข้อมูลผลการตรวจ Lab รองรับการแสดงผลออนไลน์และการเปรียบเทียบผลย้อนหลัง ตาม TOR ข้อ 1.2.7.3.1-4

Field Type Key Description
ResultID VARCHAR(20) PK รหัสผลการตรวจ (RES-XXXXXXXXXXX)
OrderDetailID VARCHAR(20) FK รหัสรายละเอียดการสั่ง
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
TestCode VARCHAR(20) FK รหัสรายการตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัสการเข้ารับบริการ
LabNumber VARCHAR(15) หมายเลข Lab
ResultValue NTEXT ผลการตรวจ
ResultNumeric DECIMAL(15,6) ผลการตรวจ (ตัวเลข)
ResultText NTEXT ผลการตรวจ (ข้อความ)
ResultStatus ENUM('NORMAL','ABNORMAL','CRITICAL','PANIC','PENDING') สถานะผล
UnitCode VARCHAR(10) FK รหัสหน่วย
NormalRange NVARCHAR(100) ช่วงค่าปกติ
ReferenceRange NVARCHAR(100) ช่วงค่าอ้างอิง
Interpretation NTEXT การแปลผล
ResultFlag ENUM('HIGH','LOW','CRITICAL_HIGH','CRITICAL_LOW','ABNORMAL') Flag ผลการตรวจ
IsAbnormal BIT ผลผิดปกติ
IsCritical BIT ผลวิกฤต
IsPanic BIT ผลอันตราย
AlertGenerated BIT ส่งสัญญาณเตือนแล้ว
AlertDateTime DATETIME วันเวลาที่แจ้งเตือน
TestDateTime DATETIME วันเวลาทำการตรวจ
ResultDateTime DATETIME วันเวลาออกผล
ReportedBy VARCHAR(50) ผู้รายงานผล
VerifiedBy VARCHAR(50) ผู้ตรวจสอบผล
ApprovedBy VARCHAR(50) ผู้อนุมัติผล
TechnicianID VARCHAR(20) FK รหัสนักเทคนิคการแพทย์
PathologistID VARCHAR(20) FK รหัสพยาธิแพทย์
InstrumentCode VARCHAR(20) FK รหัสเครื่องมือ
MethodCode VARCHAR(20) FK รหัสวิธีการตรวจ
QualityControl NVARCHAR(100) การควบคุมคุณภาพ
CalibrationDate DATE วันที่ปรับเทียบเครื่องมือ
Dilution NVARCHAR(50) การเจือจาง
Comments NTEXT หมายเหตุ
LabNote NTEXT Lab Note สำหรับผู้ดูผล
IsRerun BIT เป็นการตรวจซ้ำ
RerunReason NVARCHAR(200) เหตุผลการตรวจซ้ำ
OriginalResultID VARCHAR(20) FK รหัสผลเดิม (กรณีตรวจซ้ำ)
IsReported BIT รายงานผลแล้ว
ReportedDateTime DATETIME วันเวลาที่รายงาน
IsLocked BIT ล็อคผลแล้ว
LockedBy VARCHAR(50) ผู้ล็อค
LockedDateTime DATETIME วันเวลาที่ล็อค
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: LAB_RESULT_IMAGE (ภาพผลการตรวจ)

วัตถุประสงค์: เก็บข้อมูลภาพถ่ายและ Result Text ที่เกี่ยวข้องกับผลการตรวจ ตาม TOR ข้อ 1.2.7.3.6

Field Type Key Description
ImageID VARCHAR(20) PK รหัสภาพ
ResultID VARCHAR(20) FK รหัสผลการตรวจ
ImageType ENUM('PHOTO','MICROSCOPY','GRAPH','CHART','DOCUMENT') ประเภทภาพ
ImagePath VARCHAR(500) path ไฟล์ภาพ
ImageDescription NTEXT คำอธิบายภาพ
ImageSize BIGINT ขนาดไฟล์ (bytes)
ImageFormat VARCHAR(10) รูปแบบไฟล์
Magnification VARCHAR(20) กำลังขยาย (กรณีกล้องจุลทรรศน์)
StainingMethod NVARCHAR(100) วิธีการย้อมสี
CapturedBy VARCHAR(50) ผู้ถ่ายภาพ
CapturedDateTime DATETIME วันเวลาที่ถ่าย
IsDefault BIT เป็นภาพหลัก
DisplayOrder INT ลำดับการแสดง
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_RESULT_HISTORY (ประวัติการแก้ไขผล)

วัตถุประสงค์: เก็บประวัติการรายงานผลและการเปลี่ยนแปลงผล Lab ตาม TOR ข้อ 1.2.7.4.4

Field Type Key Description
HistoryID VARCHAR(20) PK รหัสประวัติ
ResultID VARCHAR(20) FK รหัสผลการตรวจ
ChangeType ENUM('CREATE','UPDATE','DELETE','APPROVE','REJECT','LOCK','UNLOCK') ประเภทการเปลี่ยนแปลง
OldValue NTEXT ค่าเดิม
NewValue NTEXT ค่าใหม่
OldStatus VARCHAR(20) สถานะเดิม
NewStatus VARCHAR(20) สถานะใหม่
ChangeReason NVARCHAR(200) เหตุผลการเปลี่ยนแปลง
ChangedBy VARCHAR(50) ผู้เปลี่ยนแปลง
ChangedDateTime DATETIME วันเวลาที่เปลี่ยน
ApprovedBy VARCHAR(50) ผู้อนุมัติการเปลี่ยนแปลง
ApprovedDateTime DATETIME วันเวลาที่อนุมัติ
IPAddress VARCHAR(45) IP Address
UserAgent NVARCHAR(500) ข้อมูล Browser

Table: LAB_REPORT (รายงานผล Lab)

วัตถุประสงค์: เก็บข้อมูลรายงานผล Lab ที่สร้างขึ้น รองรับการพิมพ์และการดูออนไลน์

Field Type Key Description
ReportID VARCHAR(20) PK รหัสรายงาน
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัสการเข้ารับบริการ
ReportType ENUM('INDIVIDUAL','CUMULATIVE','SUMMARY','TREND') ประเภทรายงาน
ReportFormat ENUM('PDF','HTML','XML','JSON') รูปแบบรายงาน
ReportData NTEXT ข้อมูลรายงาน
ReportPath VARCHAR(500) path ไฟล์รายงาน
ReportStatus ENUM('DRAFT','FINAL','AMENDED','CANCELLED') สถานะรายงาน
GeneratedDateTime DATETIME วันเวลาที่สร้าง
GeneratedBy VARCHAR(50) ผู้สร้าง
ReviewedBy VARCHAR(50) ผู้ตรวจสอบ
ReviewedDateTime DATETIME วันเวลาที่ตรวจสอบ
ApprovedBy VARCHAR(50) ผู้อนุมัติ
ApprovedDateTime DATETIME วันเวลาที่อนุมัติ
PrintCount INT จำนวนครั้งที่พิมพ์
LastPrintDateTime DATETIME วันเวลาพิมพ์ล่าสุด
EmailSent BIT ส่งอีเมลแล้ว
EmailDateTime DATETIME วันเวลาส่งอีเมล
SMSSent BIT ส่ง SMS แล้ว
SMSDateTime DATETIME วันเวลาส่ง SMS

Table: LAB_APPOINTMENT_RESULT (การนัดฟังผล)

วัตถุประสงค์: เก็บข้อมูลการนัดหมายเพื่อฟังผลในวันอื่น ตาม TOR ข้อ 1.2.7.3.7

Field Type Key Description
AppointmentResultID VARCHAR(20) PK รหัสการนัดฟังผล
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
AppointmentDate DATE วันที่นัดฟังผล
AppointmentTime TIME เวลาที่นัดฟังผล
DoctorID VARCHAR(20) FK รหัสแพทย์
ClinicCode VARCHAR(10) FK รหัสคลินิก
RoomCode VARCHAR(10) FK รหัสห้อง
Notes NTEXT หมายเหตุ
IsCompleted BIT เสร็จสิ้นการนัด
CompletedDateTime DATETIME วันเวลาที่เสร็จสิ้น
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_EXTERNAL_RESULT (ผล Lab นอก)

วัตถุประสงค์: เก็บข้อมูลผล Lab นอกในรูปแบบ PDF File ตาม TOR ข้อ 1.2.7.3.12

Field Type Key Description
ExternalResultID VARCHAR(20) PK รหัสผล Lab นอก
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
ExternalLabCode VARCHAR(20) FK รหัส Lab นอก
ExternalLabName NVARCHAR(200) ชื่อ Lab นอก
PDFFilePath VARCHAR(500) path ไฟล์ PDF
OriginalFileName NVARCHAR(200) ชื่อไฟล์ต้นฉบับ
FileSize BIGINT ขนาดไฟล์
ReceivedDate DATE วันที่ได้รับผล
ReceivedBy VARCHAR(50) ผู้รับผล
UploadedBy VARCHAR(50) ผู้อัปโหลด
UploadedDateTime DATETIME วันเวลาอัปโหลด
IsReported BIT รายงานผลแล้ว
ReportedDateTime DATETIME วันเวลารายงาน
Comments NTEXT หมายเหตุ
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.7.4 การควบคุมคุณภาพทางห้องปฏิบัติการ (Quality Control)

Table: LAB_ACCESS_LOG (บันทึกการเข้าอ่านผล)

วัตถุประสงค์: เก็บบันทึกการเข้ามาอ่านผล Lab ตาม TOR ข้อ 1.2.7.4.1

Field Type Key Description
AccessLogID VARCHAR(20) PK รหัสบันทึกการเข้าถึง
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
HN VARCHAR(10) FK รหัสผู้ป่วย
AccessType ENUM('VIEW','PRINT','DOWNLOAD','EMAIL','EXPORT') ประเภทการเข้าถึง
AccessDateTime DATETIME วันเวลาเข้าถึง
UserID VARCHAR(50) รหัสผู้ใช้
UserName NVARCHAR(100) ชื่อผู้ใช้
UserRole VARCHAR(20) บทบาทผู้ใช้
DepartmentCode VARCHAR(10) FK รหัสแผนก
IPAddress VARCHAR(45) IP Address
UserAgent NVARCHAR(500) ข้อมูล Browser
SessionID VARCHAR(100) รหัสเซสชัน
Duration INT ระยะเวลาดู (วินาที)

Table: LAB_APPROVAL_WORKFLOW (ขั้นตอนการอนุมัติ)

วัตถุประสงค์: เก็บข้อมูลการระบุ Report by และ Approved by ตาม TOR ข้อ 1.2.7.4.2

Field Type Key Description
WorkflowID VARCHAR(20) PK รหัสขั้นตอนการอนุมัติ
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
ResultID VARCHAR(20) FK รหัสผลการตรวจ
WorkflowStep ENUM('REPORTED','REVIEWED','APPROVED','REJECTED') ขั้นตอน
StepOrder INT ลำดับขั้นตอน
UserID VARCHAR(50) รหัสผู้ปฏิบัติ
UserName NVARCHAR(100) ชื่อผู้ปฏิบัติ
UserRole VARCHAR(20) บทบาท (TECHNICIAN/SUPERVISOR/PATHOLOGIST)
ActionDateTime DATETIME วันเวลาดำเนินการ
Comments NTEXT หมายเหตุ
IsRequired BIT จำเป็นต้องผ่าน
IsCompleted BIT เสร็จสิ้นแล้ว
DigitalSignature NTEXT ลายเซ็นดิจิทัล

Table: LAB_QUALITY_CONTROL (การควบคุมคุณภาพ)

วัตถุประสงค์: เก็บข้อมูลการควบคุมคุณภาพการตรวจ รวมถึงการยืนยันและล็อคผล ตาม TOR ข้อ 1.2.7.4.3

Field Type Key Description
QualityControlID VARCHAR(20) PK รหัสการควบคุมคุณภาพ
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
TestCode VARCHAR(20) FK รหัสรายการตรวจ
QCType ENUM('NORMAL_CONTROL','ABNORMAL_CONTROL','BLANK','DUPLICATE','CALIBRATION') ประเภท QC
QCLevel ENUM('LEVEL_1','LEVEL_2','LEVEL_3') ระดับ QC
ExpectedValue DECIMAL(15,6) ค่าที่คาดหวัง
ActualValue DECIMAL(15,6) ค่าที่ได้จริง
Deviation DECIMAL(15,6) ค่าเบี่ยงเบน
DeviationPercent DECIMAL(5,2) เปอร์เซ็นต์เบี่ยงเบน
AcceptanceRange NVARCHAR(100) ช่วงที่ยอมรับได้
IsAcceptable BIT ผลยอมรับได้
QCStatus ENUM('PASS','FAIL','WARNING') สถานะ QC
ControlLotNumber VARCHAR(50) เลขที่ล็อต Control
ExpiryDate DATE วันหมดอายุ Control
TestedDateTime DATETIME วันเวลาทดสอบ
TestedBy VARCHAR(50) ผู้ทดสอบ
ReviewedBy VARCHAR(50) ผู้ตรวจสอบ
ReviewedDateTime DATETIME วันเวลาตรวจสอบ
Action NTEXT การดำเนินการ
Comments NTEXT หมายเหตุ

Table: LAB_INSTRUMENT (เครื่องมือตรวจ)

วัตถุประสงค์: เก็บข้อมูลเครื่องมือและอุปกรณ์ใช้ในการตรวจ

Field Type Key Description
InstrumentCode VARCHAR(20) PK รหัสเครื่องมือ
InstrumentName NVARCHAR(200) ชื่อเครื่องมือ
Manufacturer NVARCHAR(100) ผู้ผลิต
Model NVARCHAR(100) รุ่น
SerialNumber VARCHAR(100) หมายเลขเครื่อง
InstallationDate DATE วันติดตั้ง
LastCalibrationDate DATE วันปรับเทียบล่าสุด
NextCalibrationDate DATE วันปรับเทียบครั้งต่อไป
MaintenanceSchedule NVARCHAR(200) กำหนดการบำรุงรักษา
LastMaintenanceDate DATE วันบำรุงรักษาล่าสุด
NextMaintenanceDate DATE วันบำรุงรักษาครั้งต่อไป
Location NVARCHAR(100) สถานที่ตั้ง
Status ENUM('ACTIVE','INACTIVE','MAINTENANCE','CALIBRATION') สถานะ
IsActive BIT ใช้งานอยู่
WarrantyExpiry DATE วันหมดประกัน
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.7.5 การพิมพ์และการส่งออก (Printing & Export)

Table: LAB_PRINT_LOG (บันทึกการพิมพ์)

วัตถุประสงค์: เก็บบันทึกการพิมพ์เอกสารต่างๆ ตาม TOR ข้อ 1.2.7.5.1-4

Field Type Key Description
PrintLogID VARCHAR(20) PK รหัสบันทึกการพิมพ์
OrderID VARCHAR(20) FK รหัสการสั่งตรวจ
PrintType ENUM('REQUEST','RESULT','STICKER','APPOINTMENT','REPORT') ประเภทการพิมพ์
DocumentType VARCHAR(20) ประเภทเอกสาร
PrintLocation ENUM('ORDERING_POINT','LAB','BOTH') จุดพิมพ์
PrintDateTime DATETIME วันเวลาพิมพ์
PrintedBy VARCHAR(50) ผู้พิมพ์
PrinterName VARCHAR(100) ชื่อเครื่องพิมพ์
PrinterIP VARCHAR(45) IP Address เครื่องพิมพ์
Copies INT จำนวนสำเนา
PaperSize VARCHAR(10) ขนาดกระดาษ
Orientation VARCHAR(10) แนวกระดาษ
IsSuccessful BIT พิมพ์สำเร็จ
ErrorMessage NTEXT ข้อความข้อผิดพลาด
DocumentPath VARCHAR(500) path เอกสาร

Table: LAB_STICKER_CONFIG (การตั้งค่า Sticker)

วัตถุประสงค์: กำหนดการพิมพ์ Sticker ติด Tube ตาม TOR ข้อ 1.2.7.5.2

Field Type Key Description
StickerConfigID VARCHAR(20) PK รหัสการตั้งค่า Sticker
ConfigName NVARCHAR(100) ชื่อการตั้งค่า
SpecimenCode VARCHAR(10) FK รหัสสิ่งส่งตรวจ
StickerSize VARCHAR(20) ขนาด Sticker
StickerLayout NTEXT รูปแบบ Sticker (JSON)
BarcodeType VARCHAR(20) ประเภท Barcode
BarcodePosition VARCHAR(20) ตำแหน่ง Barcode
FontSize INT ขนาดตัวอักษร
FontFamily VARCHAR(50) แบบตัวอักษร
IncludePatientInfo BIT รวมข้อมูลผู้ป่วย
IncludeTestInfo BIT รวมข้อมูลการตรวจ
IncludeDateTime BIT รวมวันเวลา
IsDefault BIT เป็นค่าเริ่มต้น
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.7.6 ตารางข้อมูลพื้นฐานเสริม (Supporting Master Data)

Table: EXTERNAL_LAB (ข้อมูล Lab นอก)

วัตถุประสงค์: เก็บข้อมูล Lab นอกที่ร่วมมือ ตาม TOR ข้อ 1.2.7.1.6

Field Type Key Description
ExternalLabCode VARCHAR(20) PK รหัส Lab นอก
LabName NVARCHAR(200) ชื่อ Lab
Address NTEXT ที่อยู่
Phone VARCHAR(20) หมายเลขโทรศัพท์
Fax VARCHAR(20) หมายเลขแฟกซ์
Email VARCHAR(100) อีเมล
ContactPerson NVARCHAR(100) ผู้ติดต่อ
License VARCHAR(50) ใบอนุญาต
Accreditation NVARCHAR(200) การรับรอง
ServiceType NVARCHAR(200) ประเภทบริการ
TAT_Normal INT เวลาออกผลปกติ (วัน)
TAT_STAT INT เวลาออกผล STAT (วัน)
CostMarkup DECIMAL(5,2) เปอร์เซ็นต์เพิ่ม
PaymentTerms NVARCHAR(200) เงื่อนไขการชำระ
ContractStart DATE วันเริ่มสัญญา
ContractEnd DATE วันสิ้นสุดสัญญา
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: LAB_ALERT_CONFIG (การตั้งค่าแจ้งเตือน)

วัตถุประสงค์: กำหนดการแจ้งเตือนเมื่อมีค่าผิดปกติ ตาม TOR ข้อ 1.2.7.1.4

Field Type Key Description
AlertConfigID VARCHAR(20) PK รหัสการตั้งค่าแจ้งเตือน
TestCode VARCHAR(20) FK รหัสรายการตรวจ
AlertType ENUM('CRITICAL','PANIC','ABNORMAL','DELTA_CHECK') ประเภทการแจ้งเตือน
AlertMethod ENUM('POPUP','EMAIL','SMS','SYSTEM_NOTIFICATION') วิธีการแจ้งเตือน
RecipientGroup VARCHAR(20) กลุ่มผู้รับแจ้งเตือน
TriggerCondition NTEXT เงื่อนไขการแจ้งเตือน
MessageTemplate NTEXT Template ข้อความ
IsEnabled BIT เปิดใช้งาน
Priority INT ลำดับความสำคัญ
DelayMinutes INT ความล่าช้าแจ้งเตือน (นาที)
MaxRetries INT จำนวนครั้งลองใหม่สูงสุด
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.7.7 Views และ Stored Procedures

8.2.7.7.1 Views สำคัญ

View: VW_LAB_PENDING_ORDERS

-- แสดงรายการสั่งตรวจที่รอดำเนินการ
CREATE VIEW VW_LAB_PENDING_ORDERS AS
SELECT 
    o.OrderID, o.LabNumber, o.HN, p.FirstName, p.LastName,
    o.OrderDateTime, o.Priority, o.OrderStatus,
    COUNT(od.OrderDetailID) as TotalTests,
    COUNT(CASE WHEN od.OrderStatus = 'COMPLETED' THEN 1 END) as CompletedTests
FROM LAB_ORDER o
JOIN PATIENT p ON o.HN = p.HN
JOIN LAB_ORDER_DETAIL od ON o.OrderID = od.OrderID
WHERE o.OrderStatus IN ('ORDERED','COLLECTED','RECEIVED','PROCESSING')
GROUP BY o.OrderID, o.LabNumber, o.HN, p.FirstName, p.LastName, o.OrderDateTime, o.Priority, o.OrderStatus;

View: VW_LAB_CRITICAL_RESULTS

-- แสดงผลการตรวจที่มีค่าวิกฤต
CREATE VIEW VW_LAB_CRITICAL_RESULTS AS
SELECT 
    r.ResultID, r.OrderID, r.HN, p.FirstName, p.LastName,
    r.TestCode, tm.TestName, r.ResultValue, r.ResultFlag,
    r.ResultDateTime, r.AlertGenerated
FROM LAB_RESULT r
JOIN PATIENT p ON r.HN = p.HN
JOIN LAB_TEST_MASTER tm ON r.TestCode = tm.TestCode
WHERE r.IsCritical = 1 OR r.IsPanic = 1;

View: VW_LAB_WORKLOAD

-- แสดงปริมาณงานห้อง Lab
CREATE VIEW VW_LAB_WORKLOAD AS
SELECT 
    DATE(o.OrderDateTime) as OrderDate,
    o.Priority,
    COUNT(DISTINCT o.OrderID) as TotalOrders,
    COUNT(od.OrderDetailID) as TotalTests,
    AVG(TIMESTAMPDIFF(MINUTE, o.OrderDateTime, r.ResultDateTime)) as AvgTAT
FROM LAB_ORDER o
JOIN LAB_ORDER_DETAIL od ON o.OrderID = od.OrderID
LEFT JOIN LAB_RESULT r ON od.OrderDetailID = r.OrderDetailID
WHERE o.OrderDateTime >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY DATE(o.OrderDateTime), o.Priority
ORDER BY OrderDate DESC, o.Priority;

View: VW_LAB_PATIENT_HISTORY

-- แสดงประวัติการตรวจ Lab ของผู้ป่วย
CREATE VIEW VW_LAB_PATIENT_HISTORY AS
SELECT 
    r.HN, r.TestCode, tm.TestName,
    r.ResultValue, r.UnitCode, r.NormalRange,
    r.ResultDateTime, r.IsAbnormal, r.IsCritical,
    LAG(r.ResultValue) OVER (PARTITION BY r.HN, r.TestCode ORDER BY r.ResultDateTime) as PreviousValue,
    LAG(r.ResultDateTime) OVER (PARTITION BY r.HN, r.TestCode ORDER BY r.ResultDateTime) as PreviousDate
FROM LAB_RESULT r
JOIN LAB_TEST_MASTER tm ON r.TestCode = tm.TestCode
WHERE r.IsReported = 1
ORDER BY r.HN, r.TestCode, r.ResultDateTime DESC;

8.2.7.7.2 Stored Procedures สำคัญ

SP_CreateLabOrder

-- สร้างการสั่งตรวจ Lab
DELIMITER //
CREATE PROCEDURE SP_CreateLabOrder(
    IN p_HN VARCHAR(10),
    IN p_VisitID VARCHAR(20),
    IN p_DoctorID VARCHAR(20),
    IN p_TestCodes TEXT,
    IN p_Priority VARCHAR(10),
    IN p_ClinicalInfo TEXT,
    OUT p_OrderID VARCHAR(20)
)
BEGIN
    DECLARE v_OrderID VARCHAR(20);
    DECLARE v_LabNumber VARCHAR(15);

    -- Generate OrderID and LabNumber
    SET v_OrderID = CONCAT('LAB-', DATE_FORMAT(NOW(), '%Y%m%d'), '-', LPAD(LAST_INSERT_ID() + 1, 6, '0'));
    SET v_LabNumber = LPAD(LAST_INSERT_ID() + 1, 8, '0');

    -- Insert main order
    INSERT INTO LAB_ORDER (OrderID, LabNumber, HN, VisitID, DoctorID, Priority, ClinicalInfo, OrderDateTime, OrderStatus, CreatedBy)
    VALUES (v_OrderID, v_LabNumber, p_HN, p_VisitID, p_DoctorID, p_Priority, p_ClinicalInfo, NOW(), 'ORDERED', USER());

    -- Insert order details (implementation would parse p_TestCodes)
    -- ... detail insertion logic

    SET p_OrderID = v_OrderID;
END //
DELIMITER ;

SP_UpdateLabResult

-- บันทึกผลการตรวจ Lab
DELIMITER //
CREATE PROCEDURE SP_UpdateLabResult(
    IN p_OrderDetailID VARCHAR(20),
    IN p_ResultValue TEXT,
    IN p_ResultNumeric DECIMAL(15,6),
    IN p_IsAbnormal BIT,
    IN p_TechnicianID VARCHAR(20)
)
BEGIN
    DECLARE v_IsCritical BIT DEFAULT 0;
    DECLARE v_AlertNeeded BIT DEFAULT 0;

    -- Check for critical values
    -- ... critical value checking logic

    -- Insert result
    INSERT INTO LAB_RESULT (OrderDetailID, ResultValue, ResultNumeric, IsAbnormal, IsCritical, 
                           TechnicianID, TestDateTime, ReportedBy, CreatedBy)
    VALUES (p_OrderDetailID, p_ResultValue, p_ResultNumeric, p_IsAbnormal, v_IsCritical,
            p_TechnicianID, NOW(), USER(), USER());

    -- Generate alerts if needed
    IF v_AlertNeeded = 1 THEN
        CALL SP_GenerateLabAlert(LAST_INSERT_ID());
    END IF;
END //
DELIMITER ;

8.2.7.8 Integration Points

8.2.7.8.1 API Endpoints

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

  1. ระบบเวชระเบียน (1.2.1)
  2. GET /api/patient/{HN} - ดึงข้อมูลผู้ป่วย
  3. GET /api/visit/{VisitID} - ดึงข้อมูลการเข้ารับบริการ

  4. ระบบซักประวัติ/ห้องตรวจ (1.2.2/1.2.3)

  5. POST /api/lab/order - รับการสั่งตรวจจากระบบอื่น
  6. GET /api/lab/result/{OrderID} - ส่งผลการตรวจกลับ

  7. ระบบการเงิน (1.2.14)

  8. POST /api/finance/charge - ส่งค่าบริการ
  9. GET /api/finance/payment-status/{OrderID} - ตรวจสอบสถานะการชำระ

  10. ระบบตรวจสอบสิทธิ (1.2.15)

  11. GET /api/rights/verify/{HN} - ตรวจสอบสิทธิ
  12. GET /api/rights/coverage/{TestCode} - ตรวจสอบความคุ้มครอง

8.2.7.8.2 Data Flow Integration

Inbound Data: - ข้อมูลผู้ป่วยจากระบบเวชระเบียน (1.2.1) - การสั่งตรวจจากระบบซักประวัติ/ห้องตรวจ (1.2.2/1.2.3) - การสั่งตรวจฉุกเฉินจากห้องฉุกเฉิน (1.2.4) - การนัดตรวจล่วงหน้าจากระบบนัดหมาย (1.2.6)

Outbound Data: - ผลการตรวจไปยังระบบต้นทาง - ค่าบริการไปยังระบบการเงิน (1.2.14) - การแจ้งเตือนผลวิกฤตไปยังระบบที่เกี่ยวข้อง - รายงานสถิติการใช้บริการ

8.2.7.8.3 Real-time Notifications

การแจ้งเตือนแบบ Real-time:

{
  "event_type": "lab_critical_result",
  "order_id": "LAB-20241011-001234",
  "patient_hn": "0123456789",
  "test_code": "GLU",
  "result_value": "450",
  "critical_level": "HIGH",
  "alert_recipients": ["doctor_id", "nurse_id"],
  "timestamp": "2024-10-11T14:30:00Z"
}

8.2.7.9 Security และ Audit Trail

8.2.7.9.1 การรักษาความปลอดภัย

  1. การเข้ารหัสข้อมูล:
  2. ผลการตรวจที่มีความลับ
  3. การเชื่อมต่อระหว่างระบบ (TLS/SSL)
  4. ลายเซ็นดิจิทัลสำหรับการอนุมัติ

  5. การควบคุมการเข้าถึง:

  6. Role-based access control
  7. Permission matrix ตามหน้าที่
  8. Session management

  9. การตรวจสอบการใช้งาน:

  10. Audit trail ทุกการเปลี่ยนแปลง
  11. Access log การดูผลการตรวจ
  12. การแจ้งเตือนความผิดปกติ

8.2.7.9.2 Performance Optimization

  1. Database Indexing:

    -- Indexes สำคัญ
    CREATE INDEX IDX_LAB_ORDER_HN_DATE ON LAB_ORDER(HN, OrderDateTime);
    CREATE INDEX IDX_LAB_RESULT_TEST_DATE ON LAB_RESULT(TestCode, ResultDateTime);
    CREATE INDEX IDX_LAB_ORDER_STATUS ON LAB_ORDER(OrderStatus, Priority);
    CREATE INDEX IDX_LAB_RESULT_CRITICAL ON LAB_RESULT(IsCritical, IsPanic, ResultDateTime);
    

  2. Partitioning Strategy:

    -- Partition ตาราง LAB_RESULT ตามเดือน
    ALTER TABLE LAB_RESULT 
    PARTITION BY RANGE (YEAR(ResultDateTime) * 100 + MONTH(ResultDateTime)) (
        PARTITION p202401 VALUES LESS THAN (202402),
        PARTITION p202402 VALUES LESS THAN (202403),
        -- ... additional partitions
    );
    


สรุป

ระบบงานชันสูตรนี้ได้รับการออกแบบให้ครอบคลุมทุกข้อกำหนดใน TOR โดยเฉพาะ:

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

  1. ข้อมูลพื้นฐาน (1.2.7.1) - ครบทุกข้อ
  2. การสั่งตรวจ (1.2.7.2) - รองรับการสั่งออนไลน์และแบบกลุ่ม
  3. การรายงานผล (1.2.7.3) - รองรับการแสดงออนไลน์และเปรียบเทียบ
  4. การควบคุมคุณภาพ (1.2.7.4) - ระบบ audit trail ครบถ้วน
  5. การพิมพ์ (1.2.7.5) - รองรับทุกรูปแบบตาม TOR

🔗 Integration กับระบบอื่น:

  • เชื่อมโยงกับระบบเวชระเบียน, ซักประวัติ, ห้องตรวจ
  • รองรับการสั่งจากห้องฉุกเฉินและการนัดล่วงหน้า
  • เชื่อมต่อระบบการเงินและตรวจสอบสิทธิ

📊 Performance และ Scalability:

  • Database partitioning สำหรับข้อมูลจำนวนมาก
  • Indexing strategy ที่เหมาะสม
  • Real-time notification system

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