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

Database Schema Design

ระบบซักประวัติ (History Taking System)

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


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


Database Schema Design

ระบบซักประวัติเป็นระบบที่รองรับการบันทึกข้อมูลการซักประวัติและการตรวจรักษาของแพทย์ โดยเชื่อมโยงกับระบบอื่นผ่าน API Integration:

  • ระบบเวชระเบียน (1.2.1): ข้อมูลผู้ป่วยหลักและการส่งตรวจ
  • ระบบห้องตรวจแพทย์ (1.2.3): การส่งต่อการตรวจรักษา
  • ระบบตรวจสอบสิทธิ (1.2.15): การตรวจสอบสิทธิการรักษา
  • ระบบเภสัชกรรม (1.2.13): การสั่งจ่ายยาและเวชภัณฑ์
  • ระบบการเงิน (1.2.14): การคำนวณค่าบริการ
  • ระบบงานชันสูตร (1.2.7): การสั่ง Lab
  • ระบบรังสีวิทยา (1.2.8): การสั่ง X-Ray

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

8.2.1.1 ข้อมูลการซักประวัติหลัก

Table: HISTORY_TAKING (การซักประวัติหลัก)

วัตถุประสงค์: เก็บข้อมูลการซักประวัติของผู้ป่วยในแต่ละครั้งที่มารับบริการ รวมถึง Chief Complaint, Present Illness, Past History, Family History และ Social History ตาม TOR ข้อ 1.2.2.2.1

Field Type Key Description
HistoryID VARCHAR(20) PK รหัสการซักประวัติ
VisitID VARCHAR(20) FK รหัส Visit (อ้างอิงจาก ระบบเวชระเบียน 1.2.1)
HN VARCHAR(10) FK Hospital Number
DoctorID VARCHAR(20) FK รหัสแพทย์ผู้ซักประวัติ
HistoryDate DATETIME วันที่ซักประวัติ
ChiefComplaint NTEXT อาการสำคัญ (CC)
PresentIllness NTEXT ประวัติการเจ็บป่วยในปัจจุบัน (HPI)
OnsetDuration VARCHAR(50) เป็นมากี่วันแล้ว
PastMedicalHistory NTEXT ประวัติการเจ็บป่วยในอดีต (PMH)
FamilyHistory NTEXT ประวัติการเจ็บป่วยในครอบครัว (FH)
SocialHistory NTEXT ประวัติเกี่ยวกับการดำเนินชีวิต (SH)
IsPregnant BIT กำลังตั้งครรภ์
IsBreastfeeding BIT กำลังให้นมบุตร
TemplateName NVARCHAR(100) ชื่อ Template ที่ใช้
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
IsCompleted BIT เสร็จสิ้นการซักประวัติ

Table: VITAL_SIGNS (สัญญาณชีพ)

วัตถุประสงค์: เก็บข้อมูลสัญญาณชีพและการ Screen ของผู้ป่วย ตาม TOR ข้อ 1.2.2.2.1 รวมถึงการคำนวณ BMI อัตโนมัติ

Field Type Key Description
VitalSignsID VARCHAR(20) PK รหัสสัญญาณชีพ
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
VisitID VARCHAR(20) FK รหัส Visit
MeasurementDate DATETIME วันที่วัด
Weight DECIMAL(5,2) น้ำหนัก (กิโลกรัม)
Height DECIMAL(5,2) ส่วนสูง (เซนติเมตร)
BMI DECIMAL(5,2) ดัชนีมวลกาย (คำนวณอัตโนมัติ)
Temperature DECIMAL(4,1) อุณหภูมิ (องศาเซลเซียส)
WaistCircumference DECIMAL(5,2) รอบเอว (เซนติเมตร)
PulseRate INT อัตราเต้นชีพจร (ครั้ง/นาที)
RespiratoryRate INT อัตราหายใจ (ครั้ง/นาที)
SystolicBP INT ความดันโลหิตซิสโตลิก
DiastolicBP INT ความดันโลหิตไดแอสโตลิก
BloodPressurePosition VARCHAR(20) ท่าวัดความดันโลหิต
MeasuredBy VARCHAR(50) ผู้วัด
Notes NTEXT หมายเหตุ
IsRepeatedMeasurement BIT การวัดซ้ำ (เช่น BP ซ้ำ)

8.2.1.2 ข้อมูลการแพ้ยาและข้อมูลสำคัญ

Table: DRUG_ALLERGY (การแพ้ยา)

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

Field Type Key Description
AllergyID VARCHAR(20) PK รหัสการแพ้ยา
HN VARCHAR(10) FK รหัสผู้ป่วย
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
DrugName NVARCHAR(200) ชื่อยาที่แพ้ (ชื่อสามัญ)
DrugCode VARCHAR(20) รหัสยา
ReportDate DATETIME วันที่รายงาน
OnsetDate DATETIME วันที่มีอาการ
AllergySymptoms NTEXT อาการที่แพ้
Reporter NVARCHAR(100) ผู้รายงาน
Severity VARCHAR(20) ความร้ายแรง (MILD/MODERATE/SEVERE)
CausativeAgent NVARCHAR(200) สาเหตุการเกิด
RelationshipLevel VARCHAR(20) ระดับความสัมพันธ์
Outcome NTEXT ผลที่เกิดขึ้นภายหลัง
AdditionalNotes NTEXT หมายเหตุเพิ่มเติม
IsContraindicated BIT ห้ามสั่งใช้กับผู้ป่วย
NaranjoScore INT คะแนน Naranjo
NaranjoResult VARCHAR(50) ผลการประเมินระดับการแพ้ยา
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
IsActive BIT ใช้งานอยู่

8.2.1.3 การวินิจฉัยและหัตถการ

Table: MEDICAL_DIAGNOSIS (การวินิจฉัยทางการแพทย์ - Shared Table)

วัตถุประสงค์: เก็บข้อมูลการวินิจฉัยโรคจากทั้งระบบซักประวัติ (1.2.2) และระบบห้องตรวจแพทย์ (1.2.3) ด้วยรหัส ICD-10 และ ICD-11 ตาม TOR ข้อ 1.2.2.1.2, 1.2.2.2.7 และ 1.2.3.1.2, 1.2.3.2.7 รวมถึงการจัดกลุ่มตาม DRG

Field Type Key Description
DiagnosisID VARCHAR(20) PK รหัสการวินิจฉัย
SourceSystem VARCHAR(20) ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)
SourceID VARCHAR(20) FK รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)
VisitID VARCHAR(20) FK รหัส Visit
HN VARCHAR(10) FK Hospital Number
ICDCode VARCHAR(10) รหัส ICD (WHO)
ICDCodeThai VARCHAR(10) รหัส ICD ไทย
DiseaseName NVARCHAR(200) ชื่อโรค
DiseaseNameEng NVARCHAR(200) ชื่อโรค (อังกฤษ)
DiagnosisType VARCHAR(20) ประเภทการวินิจฉัย (PRIMARY/SECONDARY/PROVISIONAL)
CertaintyLevel VARCHAR(20) ระดับความแน่นอน (CONFIRMED/SUSPECTED/RULE_OUT)
OnsetType VARCHAR(20) ลักษณะการเกิด (ACUTE/CHRONIC/SUBACUTE)
DiagnosisText NTEXT การวินิจฉัยแบบข้อความ (Diag Text)
TreatmentGroupCode VARCHAR(20) FK รหัสกลุ่มค่ารักษาพยาบาล (อ้างอิง TREATMENT_GROUP)
DRGCode VARCHAR(10) รหัส DRG
DRGWeight DECIMAL(5,3) น้ำหนัก DRG
ComplicationCode VARCHAR(10) รหัสภาวะแทรกซ้อน
IsFromTemplate BIT มาจาก Template
IsFromReDiag BIT มาจาก Re-diag
TemplateID VARCHAR(20) รหัส Template
OriginalDiagnosisID VARCHAR(20) รหัสการวินิจฉัยต้นฉบับ (สำหรับ Re-diag)
DiagnosisDate DATETIME วันที่วินิจฉัย
DiagnosedBy VARCHAR(50) แพทย์ผู้วินิจฉัย
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
FinanceServiceCode VARCHAR(20) รหัสบริการสำหรับการคิดเงิน (อ้างอิงไปยัง 1.2.14)

Table: MEDICAL_PROCEDURE (หัตถการทางการแพทย์ - Shared Table)

วัตถุประสงค์: เก็บข้อมูลหัตถการที่ทำกับผู้ป่วยจากทั้งระบบซักประวัติ (1.2.2) และระบบห้องตรวจแพทย์ (1.2.3) ตาม TOR ข้อ 1.2.2.1.1, 1.2.2.2.8 และ 1.2.3.1.1, 1.2.3.2.8 รวมถึงรายละเอียดผู้ทำและระยะเวลา

Field Type Key Description
ProcedureID VARCHAR(20) PK รหัสหัตถการ
SourceSystem VARCHAR(20) ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)
SourceID VARCHAR(20) FK รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)
VisitID VARCHAR(20) FK รหัส Visit
HN VARCHAR(10) FK Hospital Number
ICDProcedureCode VARCHAR(10) รหัสหัตถการ ICD (WHO)
ProcedureName NVARCHAR(200) ชื่อหัตถการ
ProcedureNameEng NVARCHAR(200) ชื่อหัตถการ (อังกฤษ)
TreatmentGroupCode VARCHAR(20) FK รหัสกลุ่มค่ารักษาพยาบาล
PerformerID VARCHAR(20) FK รหัสแพทย์/เจ้าหน้าที่ผู้ทำ
PerformerName NVARCHAR(100) ชื่อผู้ทำหัตถการ
StartTime DATETIME เวลาเริ่ม
EndTime DATETIME เวลาสิ้นสุด
Duration INT ระยะเวลา (นาที)
ProcedureLocation NVARCHAR(100) สถานที่ทำหัตถการ
ProcedureNotes NTEXT หมายเหตุหัตถการ
Complications NTEXT ภาวะแทรกซ้อน
ProcedureDate DATETIME วันที่ทำหัตถการ
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
FinanceServiceCode VARCHAR(20) รหัสบริการสำหรับการคิดเงิน (อ้างอิงไปยัง 1.2.14)

8.2.1.4 การสั่งยาและเวชภัณฑ์

Table: MEDICATION_ORDER (การสั่งยาและเวชภัณฑ์ - Shared Table)

วัตถุประสงค์: เก็บข้อมูลการสั่งจ่ายยาและเวชภัณฑ์จากทั้งระบบซักประวัติ (1.2.2) และระบบห้องตรวจแพทย์ (1.2.3) ตาม TOR ข้อ 1.2.2.2.5, 1.2.2.2.6 และ 1.2.3.2.5, 1.2.3.2.6 รวมถึงการตรวจสอบ Drug Interaction และการ RE-MED

Field Type Key Description
MedicationOrderID VARCHAR(20) PK รหัสการสั่งยา
SourceSystem VARCHAR(20) ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)
SourceID VARCHAR(20) FK รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)
VisitID VARCHAR(20) FK รหัส Visit
HN VARCHAR(10) FK Hospital Number
DrugCode VARCHAR(20) FK รหัสยา (อ้างอิงจาก ระบบเภสัชกรรม 1.2.13)
DrugName NVARCHAR(200) ชื่อยา
GenericName NVARCHAR(200) ชื่อสามัญยา
Strength VARCHAR(50) ความแรง
DosageForm VARCHAR(50) รูปแบบยา
Quantity DECIMAL(10,2) จำนวน
Unit VARCHAR(20) หน่วย
Frequency VARCHAR(50) ความถี่การใช้
Duration INT จำนวนวันใช้ยา
Instructions NTEXT วิธีการใช้
Route VARCHAR(50) วิธีให้ยา
IsFromTemplate BIT มาจาก Template
TemplateID VARCHAR(20) รหัส Template
IsFromReMed BIT มาจาก RE-MED
OriginalMedicationID VARCHAR(20) รหัสการสั่งยาต้นฉบับ (สำหรับ RE-MED)
IsChronicDisease BIT ยาโรคเรื้อรัง
TotalAmount DECIMAL(10,2) จำนวนรวม (คำนวณจากวันใช้)
OrderDate DATETIME วันที่สั่งยา
OrderedBy VARCHAR(50) แพทย์ผู้สั่งยา
PharmacyStatus VARCHAR(20) สถานะเภสัชกรรม (ORDERED/DISPENSED/CANCELLED)
AllergyChecked BIT ตรวจสอบการแพ้ยาแล้ว
DrugInteractionChecked BIT ตรวจสอบ Drug Interaction แล้ว
FinanceReferenceID VARCHAR(20) FK รหัสอ้างอิงระบบการเงิน (1.2.14)
FinanceServiceCode VARCHAR(20) รหัสบริการสำหรับการคิดเงิน

Table: DRUG_INTERACTION_CHECK (การตรวจสอบ Drug Interaction)

วัตถุประสงค์: เก็บข้อมูลการตรวจสอบอันตกริยาของยา ตาม TOR ข้อ 1.2.2.2.6

Field Type Key Description
InteractionID VARCHAR(20) PK รหัสการตรวจสอบ
MedicationOrderID1 VARCHAR(20) FK รหัสการสั่งยาที่ 1
MedicationOrderID2 VARCHAR(20) FK รหัสการสั่งยาที่ 2
DrugCode1 VARCHAR(20) รหัสยาที่ 1
DrugCode2 VARCHAR(20) รหัสยาที่ 2
InteractionLevel VARCHAR(20) ระดับอันตกริยา (MINOR/MODERATE/MAJOR)
InteractionDescription NTEXT รายละเอียดอันตกริยา
RecommendedAction NTEXT คำแนะนำ
CheckDate DATETIME วันที่ตรวจสอบ
CheckedBy VARCHAR(50) ผู้ตรวจสอบ
IsOverridden BIT ข้ามการเตือน
OverrideReason NTEXT เหตุผลการข้าม

8.2.1.5 การสั่งตรวจทางห้องปฏิบัติการ

Table: LAB_ORDER (การสั่ง Lab - Shared Table)

วัตถุประสงค์: เก็บข้อมูลการสั่งตรวจทางห้องปฏิบัติการจากทั้งระบบซักประวัติ (1.2.2) และระบบห้องตรวจแพทย์ (1.2.3) ตาม TOR ข้อ 1.2.2.2.9 และ 1.2.3.2.9 รวมถึงการกำหนดความเร่งด่วนและห้องที่รับผล

Field Type Key Description
LabOrderID VARCHAR(20) PK รหัสการสั่ง Lab
SourceSystem VARCHAR(20) ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)
SourceID VARCHAR(20) FK รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)
VisitID VARCHAR(20) FK รหัส Visit
HN VARCHAR(10) FK Hospital Number
LabCode VARCHAR(20) FK รหัสรายการ Lab (อ้างอิงจาก ระบบงานชันสูตร 1.2.7)
LabName NVARCHAR(200) ชื่อรายการตรวจ
LabGroupCode VARCHAR(20) รหัสกลุ่มการตรวจ
OrderingDoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
LabRoomCode VARCHAR(10) FK รหัสห้อง Lab
ResultNotifyRoom VARCHAR(10) FK ห้องที่ต้องการให้เตือนผล
UrgencyLevel VARCHAR(20) ความเร่งด่วน (ROUTINE/URGENT/STAT)
SpecimenType VARCHAR(50) ประเภทสิ่งส่งตรวจ
ClinicalInfo NTEXT ข้อมูลทางคลินิก
IsAdvanceOrder BIT การสั่งล่วงหน้า
AdvanceOrderDate DATETIME วันที่สั่งล่วงหน้า
ExpectedCollectionDate DATETIME วันที่คาดว่าจะเก็บสิ่งส่งตรวจ
CollectionDate DATETIME วันที่เก็บสิ่งส่งตรวจ
CollectedBy VARCHAR(50) ผู้เก็บสิ่งส่งตรวจ
OrderDate DATETIME วันที่สั่ง
OrderedBy VARCHAR(50) ผู้สั่ง
LabStatus VARCHAR(20) สถานะ Lab (ORDERED/COLLECTED/COMPLETED/CANCELLED)
ResultAvailableDate DATETIME วันที่มีผลตรวจ
NotificationSent BIT ส่งการแจ้งเตือนแล้ว
FinanceServiceCode VARCHAR(20) รหัสบริการสำหรับการคิดเงิน
IsAbnormal BIT ผลผิดปกติ
ReportedBy VARCHAR(50) ผู้รายงานผล
LabSystemRef VARCHAR(20) FK รหัสอ้างอิงระบบชันสูตร (1.2.7)
FinanceReferenceID VARCHAR(20) FK รหัสอ้างอิงระบบการเงิน (1.2.14)

8.2.1.6 การสั่งตรวจทางรังสี

Table: RADIOLOGY_ORDER (การสั่ง X-Ray - Shared Table)

วัตถุประสงค์: เก็บข้อมูลการสั่งตรวจทางรังสีจากทั้งระบบซักประวัติ (1.2.2) และระบบห้องตรวจแพทย์ (1.2.3) ตาม TOR ข้อ 1.2.2.2.13, 1.2.2.2.14 และ 1.2.3.2.9 รวมถึงการระบุข้อมูลต่างๆ

Field Type Key Description
RadiologyOrderID VARCHAR(20) PK รหัสการสั่ง X-Ray
SourceSystem VARCHAR(20) ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)
SourceID VARCHAR(20) FK รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)
VisitID VARCHAR(20) FK รหัส Visit
HN VARCHAR(10) FK Hospital Number
XRayCode VARCHAR(20) FK รหัสรายการ X-Ray (อ้างอิงจาก ระบบรังสีวิทยา 1.2.8)
XRayName NVARCHAR(200) ชื่อรายการตรวจ
XRayGroupCode VARCHAR(20) รหัสกลุ่มการตรวจ
OrderingDoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
BodyPart VARCHAR(100) ส่วนของร่างกายที่ตรวจ
Position VARCHAR(50) ท่า
Side VARCHAR(20) ด้าน
XRayRoomCode VARCHAR(10) FK ห้องตรวจ (กรณีมีหลายห้อง)
PatientCondition VARCHAR(100) สภาพผู้ป่วย
UrgencyLevel VARCHAR(20) ความเร่งด่วน (ROUTINE/URGENT/STAT)
ClinicalInfo NTEXT ข้อมูลทางคลินิก (Clinical Information)
ClinicalDiagnosis NTEXT การวินิจฉัยทางคลินิก (Clinical Diagnosis)
IsAdvanceOrder BIT การสั่งล่วงหน้า
AdvanceOrderDate DATETIME วันที่สั่งล่วงหน้า
ExpectedExamDate DATETIME วันที่คาดว่าจะตรวจ
OrderDate DATETIME วันที่สั่ง
OrderedBy VARCHAR(50) ผู้สั่ง
RadiologyStatus VARCHAR(20) สถานะ X-Ray (ORDERED/COMPLETED/CANCELLED)
ResultAvailableDate DATETIME วันที่มีผลตรวจ
NotificationSent BIT ส่งการแจ้งเตือนแล้ว
OrderNotes NTEXT หมายเหตุ
FinanceServiceCode VARCHAR(20) รหัสบริการสำหรับการคิดเงิน

8.2.1.7 การนัดหมาย

Table: APPOINTMENT_HISTORY (การนัดหมายจากการซักประวัติ)

วัตถุประสงค์: เก็บข้อมูลการนัดหมายที่สร้างจากการซักประวัติ ตาม TOR ข้อ 1.2.2.3 รวมถึงการนัดหลายแผนกและการสั่ง Lab/X-Ray ล่วงหน้า

Field Type Key Description
AppointmentHistoryID VARCHAR(20) PK รหัสการนัดหมาย
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
HN VARCHAR(10) FK รหัสผู้ป่วย
AppointmentDate DATE วันที่นัดหมาย
AppointmentTime TIME เวลานัดหมาย
DepartmentCode VARCHAR(10) FK รหัสแผนก
RoomCode VARCHAR(10) FK รหัสห้อง
DoctorID VARCHAR(20) FK รหัสแพทย์
AppointmentType VARCHAR(20) ประเภทการนัด (FOLLOW_UP/CHECK_UP/TREATMENT)
AppointmentReason NTEXT สาเหตุการนัดหมาย
PatientInstructions NTEXT การปฏิบัติตัวสำหรับผู้ป่วย
SpecialInstructions NTEXT คำแนะนำพิเศษ
IsMultipleDepartments BIT นัดหลายแผนก
IsAdvanceLabOrder BIT สั่ง Lab ล่วงหน้า
IsAdvanceXrayOrder BIT สั่ง X-Ray ล่วงหน้า
IsTemplate BIT เป็น Template (เช่น นัดรับยา/ฉีดยา)
TemplateID VARCHAR(20) รหัส Template
CreatedDate DATETIME วันที่สร้างนัด
CreatedBy VARCHAR(50) ผู้สร้างนัด
Status VARCHAR(20) สถานะ (SCHEDULED/CONFIRMED/COMPLETED/CANCELLED)
IsHolidayWarning BIT เตือนวันหยุด

Table: MULTIPLE_APPOINTMENT (การนัดหลายแผนก)

วัตถุประสงค์: เก็บรายละเอียดการนัดหลายแผนกในการมา Visit 1 ครั้ง ตาม TOR ข้อ 1.2.2.3.2

Field Type Key Description
MultipleAppointmentID VARCHAR(20) PK รหัสการนัดหลายแผนก
AppointmentHistoryID VARCHAR(20) FK รหัสการนัดหมายหลัก
DepartmentCode VARCHAR(10) FK รหัสแผนก
RoomCode VARCHAR(10) FK รหัสห้อง
AppointmentSequence INT ลำดับการนัด
EstimatedTime TIME เวลาโดยประมาณ
SpecialNotes NTEXT หมายเหตุพิเศษ

8.2.1.8 การส่งต่อและปรึกษา

Table: REFERRAL (การส่งต่อ - Refer)

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

Field Type Key Description
ReferralID VARCHAR(20) PK รหัสการส่งต่อ
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
VisitID VARCHAR(20) FK รหัส Visit
ReferToHospital NVARCHAR(200) สถานพยาบาลที่ส่งต่อ
ReferReason NTEXT เหตุผลการส่งตัว
PreliminaryDiagnosis NTEXT การวินิจฉัยขั้นต้น
MainDiagnosis NTEXT การวินิจฉัยหลัก
ReferringDoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
ReferPoint NVARCHAR(100) จุดส่งต่อ
Department NVARCHAR(100) แผนก
CauseType VARCHAR(50) สาเหตุ
TreatmentGiven NTEXT การรักษาที่ให้ไว้
TransportType VARCHAR(50) การขนส่ง (NURSE_REFER/AMBULANCE/FAMILY)
ReferType VARCHAR(50) ประเภทการส่งต่อ
ReferEndDate DATE วันที่สิ้นสุดการส่งต่อ
ReferDate DATETIME วันที่ส่งต่อ
Status VARCHAR(20) สถานะ (PENDING/SENT/RECEIVED/COMPLETED)
IsEmergency BIT ฉุกเฉิน
CreatedBy VARCHAR(50) ผู้สร้าง
RightsVerificationRef VARCHAR(20) FK รหัสอ้างอิงการตรวจสอบสิทธิ (1.2.15)
FinanceReferenceID VARCHAR(20) FK รหัสอ้างอิงระบบการเงิน (1.2.14)

Table: CONSULTATION (การปรึกษา - Consult)

วัตถุประสงค์: เก็บข้อมูลการขอปรึกษาแพทย์/ทันตแพทย์หรือแผนกอื่น ตาม TOR ข้อ 1.2.2.4

Field Type Key Description
ConsultationID VARCHAR(20) PK รหัสการปรึกษา
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
VisitID VARCHAR(20) FK รหัส Visit
ConsultToDoctorID VARCHAR(20) FK รหัสแพทย์ที่ขอปรึกษา
ConsultToDepartment VARCHAR(10) FK รหัสแผนกที่ขอปรึกษา
RequestingDoctorID VARCHAR(20) FK รหัสแพทย์ผู้ขอปรึกษา
UrgencyLevel VARCHAR(20) ความเร่งด่วน (ROUTINE/URGENT/EMERGENT)
ConsultQuestion NTEXT คำถามการปรึกษา
ClinicalFindings NTEXT ผลการตรวจทางคลินิก
RequestDate DATETIME วันที่ขอปรึกษา
ResponseDate DATETIME วันที่ตอบกลับ
ConsultAnswer NTEXT คำตอบการปรึกษา
Recommendations NTEXT คำแนะนำ
Status VARCHAR(20) สถานะ (PENDING/ANSWERED/COMPLETED)
IsComplete BIT เสร็จสิ้น
ExamRoomSystemRef VARCHAR(20) FK รหัสอ้างอิงระบบห้องตรวจ (1.2.3)

8.2.2 ตารางรองรับการทำงาน (Support Tables)

8.2.2.1 การให้คำแนะนำผู้ป่วย

Table: PATIENT_EDUCATION (การให้คำแนะนำผู้ป่วย)

วัตถุประสงค์: เก็บข้อมูลการให้คำแนะนำผู้ป่วย ตาม TOR ข้อ 1.2.2.2.12 เช่น การใช้ยา การปฏิบัติตัว การรับประทานอาหาร

Field Type Key Description
EducationID VARCHAR(20) PK รหัสการให้คำแนะนำ
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
EducationType VARCHAR(50) ประเภทคำแนะนำ (MEDICATION/LIFESTYLE/DIET/EXERCISE/FOLLOW_UP/PREVENTION/EMERGENCY)
EducationTitle NVARCHAR(200) หัวข้อคำแนะนำ
EducationContent NTEXT เนื้อหาคำแนะนำ
IsStandardContent BIT เป็นเนื้อหามาตรฐาน
TemplateID VARCHAR(20) รหัส Template
Priority VARCHAR(20) ระดับความสำคัญ (HIGH/MEDIUM/LOW)
CreatedDate DATETIME วันที่ให้คำแนะนำ
CreatedBy VARCHAR(50) ผู้ให้คำแนะนำ
IsPatientUnderstood BIT ผู้ป่วยเข้าใจ

8.2.2.2 Template และการใช้ซ้ำ

Table: HISTORY_TEMPLATE (Template การซักประวัติ)

วัตถุประสงค์: เก็บ Template สำหรับการซักประวัติและการรักษาที่ใช้บ่อย เพื่อความสะดวกในการบันทึกข้อมูล

Field Type Key Description
TemplateID VARCHAR(20) PK รหัส Template
TemplateName NVARCHAR(100) ชื่อ Template
TemplateType VARCHAR(50) ประเภท Template (HISTORY/MEDICATION/APPOINTMENT/EDUCATION)
DepartmentCode VARCHAR(10) FK รหัสแผนก
CreatedBy VARCHAR(50) ผู้สร้าง
TemplateContent NTEXT เนื้อหา Template (JSON format)
IsPublic BIT ใช้ร่วมกันได้
UsageCount INT จำนวนครั้งที่ใช้
LastUsedDate DATETIME ใช้ครั้งล่าสุด
IsActive BIT ใช้งานอยู่

Table: BP_MONITORING (การติดตามความดันโลหิต)

วัตถุประสงค์: เก็บข้อมูลการวัดความดันโลหิตซ้ำและการนั่งพักวัด BP ตาม TOR ข้อ 1.2.2.2.11

Field Type Key Description
BPMonitoringID VARCHAR(20) PK รหัสการติดตาม BP
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
VitalSignsID VARCHAR(20) FK รหัสสัญญาณชีพ
MeasurementSequence INT ลำดับการวัด
RestingTime INT เวลาพัก (นาที)
SystolicBP INT ความดันโลหิตซิสโตลิก
DiastolicBP INT ความดันโลหิตไดแอสโตลิก
MeasurementTime DATETIME เวลาที่วัด
Position VARCHAR(20) ท่านั่ง/นอน
ArmUsed VARCHAR(10) แขนที่ใช้วัด (LEFT/RIGHT)
CuffSize VARCHAR(20) ขนาดข้อมือ
Notes NVARCHAR(200) หมายเหตุ
MeasuredBy VARCHAR(50) ผู้วัด

8.2.2.3 การจัดการข้อมูลอ้างอิง

Table: ICD_CODE_MAPPING (การแมป ICD Code)

วัตถุประสงค์: จัดการการแมปรหัส ICD ระหว่างเวอร์ชันต่างๆ และรหัสไทย ตาม TOR ข้อ 1.2.2.1.2 และ 1.2.2.2.7

Field Type Key Description
MappingID VARCHAR(20) PK รหัสการแมป
ICDCodeWHO VARCHAR(10) รหัส ICD WHO
ICDCodeThai VARCHAR(10) รหัส ICD ไทย
ICDVersion VARCHAR(10) เวอร์ชัน ICD (10/11)
DiseaseName NVARCHAR(200) ชื่อโรค
DiseaseNameEng NVARCHAR(200) ชื่อโรค (อังกฤษ)
CategoryCode VARCHAR(20) รหัสหมวด
IsCommonDiagnosis BIT วินิจฉัยบ่อย
UsageCount INT จำนวนครั้งที่ใช้
IsActive BIT ใช้งานอยู่

Table: TREATMENT_GROUPING (การจัดกลุ่มค่ารักษาพยาบาล)

วัตถุประสงค์: เก็บข้อมูลการจัดกลุ่มค่ารักษาพยาบาลตาม DRG ตาม TOR ข้อ 1.2.2.1.3

Field Type Key Description
GroupingID VARCHAR(20) PK รหัสการจัดกลุ่ม
DRGCode VARCHAR(10) รหัส DRG
DRGName NVARCHAR(200) ชื่อ DRG
DRGWeight DECIMAL(5,3) น้ำหนัก DRG
BaseRate DECIMAL(10,2) อัตราพื้นฐาน
ServiceCharges NTEXT ค่าบริการที่รวม (JSON format)
IsActive BIT ใช้งานอยู่

8.2.3 ตารางจัดการระบบ (System Tables)

8.2.3.1 การพิมพ์เอกสาร

Table: DOCUMENT_PRINTING (การพิมพ์เอกสาร)

วัตถุประสงค์: เก็บข้อมูลการพิมพ์เอกสารต่างๆ ตาม TOR ข้อ 1.2.2.5 เช่น ใบรับรองแพทย์ ใบสั่งยา ใบนัดหมาย

Field Type Key Description
PrintingID VARCHAR(20) PK รหัสการพิมพ์
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
VisitID VARCHAR(20) FK รหัส Visit
DocumentType VARCHAR(50) ประเภทเอกสาร (MEDICAL_CERT/SICK_LEAVE/OPD_CARD/PRESCRIPTION/REFER/APPOINTMENT)
DocumentSubType VARCHAR(50) ประเภทย่อย (WORK_APPLICATION/SICK_LEAVE/REFER_OUT/REFER_REPLY)
Language VARCHAR(10) ภาษา (TH/EN)
TemplateName VARCHAR(100) ชื่อ Template
PrintDate DATETIME วันที่พิมพ์
PrintedBy VARCHAR(50) ผู้พิมพ์
PrinterName VARCHAR(100) ชื่อเครื่องพิมพ์
Copies INT จำนวนฉบับ
DocumentContent NTEXT เนื้อหาเอกสาร
Status VARCHAR(20) สถานะ (SUCCESS/FAILED/PENDING)

8.2.3.2 บันทึกการแก้ไข

Table: HISTORY_AUDIT_LOG (บันทึกการแก้ไข)

วัตถุประสงค์: เก็บบันทึกการเปลี่ยนแปลงข้อมูลการซักประวัติทั้งหมด เพื่อการตรวจสอบย้อนหลัง (Audit Trail)

Field Type Key Description
LogID VARCHAR(20) PK รหัส Log
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
TableName VARCHAR(50) ชื่อตาราง
RecordID VARCHAR(20) รหัสระเบียน
FieldName VARCHAR(50) ชื่อฟิลด์
OldValue NTEXT ค่าเดิม
NewValue NTEXT ค่าใหม่
Action VARCHAR(50) การกระทำ (INSERT/UPDATE/DELETE)
ActionDate DATETIME วันที่ทำรายการ
ActionBy VARCHAR(50) ผู้ทำรายการ
IPAddress VARCHAR(50) IP Address
UserAgent VARCHAR(200) User Agent
Reason NVARCHAR(200) เหตุผล

8.2.3.3 การเชื่อมโยงระบบ

Table: SYSTEM_INTEGRATION_LOG (Log การเชื่อมโยงระบบ)

วัตถุประสงค์: เก็บ Log การเชื่อมต่อกับระบบอื่นๆ เช่น ระบบเภสัชกรรม ระบบการเงิน

Field Type Key Description
IntegrationLogID VARCHAR(20) PK รหัส Integration Log
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
TargetSystem VARCHAR(50) ระบบปลายทาง (PHARMACY/FINANCE/LAB/RADIOLOGY)
IntegrationType VARCHAR(50) ประเภทการเชื่อมต่อ (MEDICATION_ORDER/LAB_ORDER/BILLING)
RequestData NTEXT ข้อมูลที่ส่ง
ResponseData NTEXT ข้อมูลที่ได้รับ
ResponseCode VARCHAR(10) รหัสตอบกลับ
ResponseMessage NVARCHAR(200) ข้อความตอบกลับ
ProcessingTime INT เวลาประมวลผล (มิลลิวินาที)
CreatedDate DATETIME วันที่ทำรายการ
IsSuccess BIT สำเร็จ
ErrorDetails NTEXT รายละเอียดข้อผิดพลาด

8.2.4 ดัชนี (Indexes)

8.2.4.1 Primary Indexes

-- ดัชนีหลักสำหรับการค้นหาข้อมูลผู้ป่วย
CREATE INDEX IX_HISTORY_TAKING_HN ON HISTORY_TAKING (HN);
CREATE INDEX IX_HISTORY_TAKING_VISIT ON HISTORY_TAKING (VisitID);
CREATE INDEX IX_HISTORY_TAKING_DATE ON HISTORY_TAKING (HistoryDate);
CREATE INDEX IX_HISTORY_TAKING_DOCTOR ON HISTORY_TAKING (DoctorID);

-- ดัชนีสำหรับการสั่งยา
CREATE INDEX IX_MEDICATION_ORDER_HISTORY ON MEDICATION_ORDER (HistoryID);
CREATE INDEX IX_MEDICATION_ORDER_DRUG ON MEDICATION_ORDER (DrugCode);
CREATE INDEX IX_MEDICATION_ORDER_DATE ON MEDICATION_ORDER (OrderDate);
CREATE INDEX IX_MEDICATION_ORDER_STATUS ON MEDICATION_ORDER (Status);

-- ดัชนีสำหรับการสั่ง Lab และ X-Ray
CREATE INDEX IX_LAB_ORDER_HISTORY ON LAB_ORDER (HistoryID);
CREATE INDEX IX_LAB_ORDER_DATE ON LAB_ORDER (OrderDate);
CREATE INDEX IX_LAB_ORDER_STATUS ON LAB_ORDER (Status);
CREATE INDEX IX_RADIOLOGY_ORDER_HISTORY ON RADIOLOGY_ORDER (HistoryID);
CREATE INDEX IX_RADIOLOGY_ORDER_DATE ON RADIOLOGY_ORDER (OrderDate);

-- ดัชนีสำหรับการวินิจฉัย
CREATE INDEX IX_DIAGNOSIS_HISTORY ON DIAGNOSIS (HistoryID);
CREATE INDEX IX_DIAGNOSIS_ICD ON DIAGNOSIS (ICDCode);
CREATE INDEX IX_DIAGNOSIS_TYPE ON DIAGNOSIS (DiagnosisType);

-- ดัชนีสำหรับการแพ้ยา
CREATE INDEX IX_DRUG_ALLERGY_HN ON DRUG_ALLERGY (HN);
CREATE INDEX IX_DRUG_ALLERGY_DRUG ON DRUG_ALLERGY (DrugCode);
CREATE INDEX IX_DRUG_ALLERGY_ACTIVE ON DRUG_ALLERGY (IsActive);

8.2.4.2 Composite Indexes

-- ดัชนีรวมสำหรับการค้นหาที่ซับซ้อน
CREATE INDEX IX_HISTORY_TAKING_HN_DATE ON HISTORY_TAKING (HN, HistoryDate);
CREATE INDEX IX_MEDICATION_ORDER_HN_DATE ON MEDICATION_ORDER (HistoryID, OrderDate);
CREATE INDEX IX_VITAL_SIGNS_HISTORY_DATE ON VITAL_SIGNS (HistoryID, MeasurementDate);
CREATE INDEX IX_APPOINTMENT_HISTORY_HN_DATE ON APPOINTMENT_HISTORY (HN, AppointmentDate);

8.2.5 ข้อจำกัดและกฎธุรกิจ (Constraints & Business Rules)

8.2.5.1 Foreign Key Constraints

-- ความสัมพันธ์กับระบบเวชระเบียน
ALTER TABLE HISTORY_TAKING ADD FOREIGN KEY (VisitID) REFERENCES VISIT(VisitID);
ALTER TABLE HISTORY_TAKING ADD FOREIGN KEY (HN) REFERENCES PATIENT(HN);

-- ความสัมพันธ์ภายในระบบซักประวัติ
ALTER TABLE VITAL_SIGNS ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);
ALTER TABLE DRUG_ALLERGY ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);
ALTER TABLE DIAGNOSIS ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);
ALTER TABLE MEDICATION_ORDER ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);
ALTER TABLE LAB_ORDER ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);
ALTER TABLE RADIOLOGY_ORDER ADD FOREIGN KEY (HistoryID) REFERENCES HISTORY_TAKING(HistoryID);

-- ความสัมพันธ์กับระบบอื่นๆ (Cross-System References)
-- ระบบเภสัชกรรม (1.2.13)
ALTER TABLE MEDICATION_ORDER ADD FOREIGN KEY (DrugCode) REFERENCES PHARMACY_DRUG_MASTER(DrugCode);
ALTER TABLE MEDICATION_ORDER ADD FOREIGN KEY (PharmacistID) REFERENCES PHARMACY_STAFF(PharmacistID);

-- ระบบงานชันสูตร (1.2.7)
ALTER TABLE LAB_ORDER ADD FOREIGN KEY (LabCode) REFERENCES LAB_TEST_MASTER(LabCode);

-- ระบบรังสีวิทยา (1.2.8)
ALTER TABLE RADIOLOGY_ORDER ADD FOREIGN KEY (ExamCode) REFERENCES RADIOLOGY_EXAM_MASTER(ExamCode);

-- ระบบตรวจสอบสิทธิ (1.2.15)
ALTER TABLE REFERRAL ADD FOREIGN KEY (RightsVerificationRef) REFERENCES RIGHTSVERIFICATION(VerificationID);

-- ระบบการเงิน (1.2.14)
ALTER TABLE MEDICATION_ORDER ADD FOREIGN KEY (FinanceReferenceID) REFERENCES FINANCE_TRANSACTION(TransactionID);
ALTER TABLE LAB_ORDER ADD FOREIGN KEY (FinanceReferenceID) REFERENCES FINANCE_TRANSACTION(TransactionID);
ALTER TABLE RADIOLOGY_ORDER ADD FOREIGN KEY (FinanceReferenceID) REFERENCES FINANCE_TRANSACTION(TransactionID);

-- ระบบห้องตรวจแพทย์ (1.2.3)
ALTER TABLE CONSULTATION ADD FOREIGN KEY (ExamRoomSystemRef) REFERENCES EXAM_ROOM_CONSULT(ConsultID);

8.2.5.2 Check Constraints

-- ตรวจสอบค่าสัญญาณชีพ
ALTER TABLE VITAL_SIGNS ADD CONSTRAINT CHK_Weight CHECK (Weight > 0 AND Weight < 500);
ALTER TABLE VITAL_SIGNS ADD CONSTRAINT CHK_Height CHECK (Height > 0 AND Height < 300);
ALTER TABLE VITAL_SIGNS ADD CONSTRAINT CHK_Temperature CHECK (Temperature >= 30 AND Temperature <= 50);
ALTER TABLE VITAL_SIGNS ADD CONSTRAINT CHK_BloodPressure CHECK (SystolicBP >= 50 AND SystolicBP <= 300 AND DiastolicBP >= 30 AND DiastolicBP <= 200);

-- ตรวจสอบปริมาณยา
ALTER TABLE MEDICATION_ORDER ADD CONSTRAINT CHK_Quantity CHECK (Quantity > 0);
ALTER TABLE MEDICATION_ORDER ADD CONSTRAINT CHK_Duration CHECK (Duration > 0 AND Duration <= 365);

8.2.5.3 Business Rules

-- กฎธุรกิจ: BMI คำนวณอัตโนมัติ
CREATE TRIGGER TRG_CALCULATE_BMI
ON VITAL_SIGNS
AFTER INSERT, UPDATE
AS
BEGIN
    UPDATE VITAL_SIGNS 
    SET BMI = ROUND((Weight / POWER(Height/100, 2)), 2)
    WHERE VitalSignsID IN (SELECT VitalSignsID FROM INSERTED)
    AND Weight IS NOT NULL AND Height IS NOT NULL AND Height > 0;
END;

-- กฎธุรกิจ: ตรวจสอบการแพ้ยาก่อนสั่งยา
CREATE TRIGGER TRG_CHECK_DRUG_ALLERGY
ON MEDICATION_ORDER
AFTER INSERT
AS
BEGIN
    IF EXISTS (
        SELECT 1 FROM INSERTED i
        INNER JOIN DRUG_ALLERGY da ON da.HN = (
            SELECT HN FROM HISTORY_TAKING WHERE HistoryID = i.HistoryID
        )
        WHERE da.DrugCode = i.DrugCode 
        AND da.IsContraindicated = 1 
        AND da.IsActive = 1
    )
    BEGIN
        RAISERROR ('ผู้ป่วยแพ้ยาที่สั่ง กรุณาตรวจสอบ', 16, 1);
        ROLLBACK TRANSACTION;
    END;
END;

8.2.6 Views สำหรับการทำงาน

8.2.6.1 Views หลัก

-- View สำหรับแสดงข้อมูลการซักประวัติพร้อมข้อมูลผู้ป่วย
CREATE VIEW VW_HISTORY_TAKING_SUMMARY AS
SELECT 
    ht.HistoryID,
    ht.VisitID,
    p.HN,
    p.FirstName + ' ' + p.LastName AS PatientName,
    ht.HistoryDate,
    ht.ChiefComplaint,
    ht.DoctorID,
    ht.IsCompleted,
    vs.Weight,
    vs.Height,
    vs.BMI,
    vs.SystolicBP,
    vs.DiastolicBP,
    COUNT(mo.MedicationOrderID) AS MedicationCount,
    COUNT(lo.LabOrderID) AS LabOrderCount,
    COUNT(ro.RadiologyOrderID) AS RadiologyOrderCount
FROM HISTORY_TAKING ht
LEFT JOIN PATIENT p ON p.HN = ht.HN
LEFT JOIN VITAL_SIGNS vs ON vs.HistoryID = ht.HistoryID
LEFT JOIN MEDICATION_ORDER mo ON mo.HistoryID = ht.HistoryID
LEFT JOIN LAB_ORDER lo ON lo.HistoryID = ht.HistoryID
LEFT JOIN RADIOLOGY_ORDER ro ON ro.HistoryID = ht.HistoryID
GROUP BY ht.HistoryID, ht.VisitID, p.HN, p.FirstName, p.LastName, 
         ht.HistoryDate, ht.ChiefComplaint, ht.DoctorID, ht.IsCompleted,
         vs.Weight, vs.Height, vs.BMI, vs.SystolicBP, vs.DiastolicBP;

-- View สำหรับแสดงประวัติการแพ้ยาที่ใช้งานอยู่
CREATE VIEW VW_ACTIVE_DRUG_ALLERGIES AS
SELECT 
    da.HN,
    p.FirstName + ' ' + p.LastName AS PatientName,
    da.DrugName,
    da.AllergySymptoms,
    da.Severity,
    da.IsContraindicated,
    da.NaranjoResult,
    da.ReportDate
FROM DRUG_ALLERGY da
INNER JOIN PATIENT p ON p.HN = da.HN
WHERE da.IsActive = 1;

8.2.7 การเชื่อมโยงระบบ (System Integration Tables)

8.2.7.1 ตารางแมปข้อมูลระหว่างระบบ

Table: SYSTEM_REFERENCE_MAPPING (การแมปอ้างอิงระหว่างระบบ)

วัตถุประสงค์: เก็บข้อมูลการแมปและอ้างอิงระหว่างระบบซักประวัติกับระบบอื่นๆ เพื่อการ Integration และ Data Synchronization

Field Type Key Description
MappingID VARCHAR(20) PK รหัสการแมป
SourceSystem VARCHAR(20) ระบบต้นทาง (HISTORY_TAKING)
SourceTableName VARCHAR(50) ชื่อตารางต้นทาง
SourceRecordID VARCHAR(20) รหัสระเบียนต้นทาง
TargetSystem VARCHAR(20) ระบบปลายทาง (PHARMACY/FINANCE/LAB/RADIOLOGY/RIGHTS/EXAM_ROOM)
TargetTableName VARCHAR(50) ชื่อตารางปลายทาง
TargetRecordID VARCHAR(20) รหัสระเบียนปลายทาง
MappingType VARCHAR(30) ประเภทการแมป (ORDER/REFERENCE/BILLING/VERIFICATION)
SyncStatus VARCHAR(20) สถานะ Sync (PENDING/SYNCED/FAILED/CONFLICT)
LastSyncDate DATETIME วันที่ Sync ล่าสุด
SyncAttempts INT จำนวนครั้งที่พยายาม Sync
ErrorMessage NTEXT ข้อความข้อผิดพลาด
CreatedDate DATETIME วันที่สร้าง
IsActive BIT ใช้งานอยู่

Table: CROSS_SYSTEM_VALIDATION (การตรวจสอบข้อมูลข้ามระบบ)

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

Field Type Key Description
ValidationID VARCHAR(20) PK รหัสการตรวจสอบ
HistoryID VARCHAR(20) FK รหัสการซักประวัติ
ValidationType VARCHAR(30) ประเภทการตรวจสอบ (DRUG_ALLERGY/RIGHTS/FINANCE/LAB_APPROVAL)
ExternalSystemID VARCHAR(20) รหัสระบบภายนอก
ValidationRequest NTEXT ข้อมูลที่ส่งไปตรวจสอบ
ValidationResponse NTEXT ข้อมูลที่ได้รับกลับ
ValidationResult VARCHAR(20) ผลการตรวจสอบ (APPROVED/REJECTED/PENDING/WARNING)
RequestDate DATETIME วันที่ร้องขอ
ResponseDate DATETIME วันที่ได้รับผล
ValidatedBy VARCHAR(50) ผู้ตรวจสอบ
OverrideReason NTEXT เหตุผลการข้ามการตรวจสอบ
IsOverridden BIT ข้ามการตรวจสอบ

8.2.8 API Integration Specifications

8.2.8.1 การเชื่อมต่อแบบ Real-time

-- Table: API_ENDPOINT_CONFIG (การตั้งค่า API Endpoints)
CREATE TABLE API_ENDPOINT_CONFIG (
    EndpointID VARCHAR(20) PRIMARY KEY,
    SystemCode VARCHAR(20) NOT NULL, -- PHARMACY/FINANCE/LAB/RADIOLOGY/RIGHTS
    EndpointName VARCHAR(100) NOT NULL,
    BaseURL VARCHAR(500) NOT NULL,
    AuthType VARCHAR(20) NOT NULL, -- JWT/API_KEY/OAUTH
    TimeoutSeconds INT DEFAULT 30,
    MaxRetryAttempts INT DEFAULT 3,
    IsActive BIT DEFAULT 1,
    CreatedDate DATETIME DEFAULT GETDATE()
);

-- Table: API_CALL_LOG (บันทึกการเรียก API)
CREATE TABLE API_CALL_LOG (
    CallLogID VARCHAR(20) PRIMARY KEY,
    HistoryID VARCHAR(20),
    EndpointID VARCHAR(20) REFERENCES API_ENDPOINT_CONFIG(EndpointID),
    RequestMethod VARCHAR(10), -- GET/POST/PUT/DELETE
    RequestURL VARCHAR(500),
    RequestHeaders NTEXT,
    RequestBody NTEXT,
    ResponseCode INT,
    ResponseHeaders NTEXT,
    ResponseBody NTEXT,
    ProcessingTime INT, -- milliseconds
    CallDate DATETIME DEFAULT GETDATE(),
    IsSuccess BIT,
    ErrorMessage NTEXT
);

8.2.8.2 Integration Patterns ตาม TOR

🔗 ระบบเภสัชกรรม (1.2.13) Integration:

{
  "medication_order_sync": {
    "trigger": "MEDICATION_ORDER.INSERT/UPDATE",
    "endpoint": "/api/v1/pharmacy/orders",
    "payload": {
      "order_id": "MedicationOrderID",
      "drug_code": "DrugCode", 
      "quantity": "Quantity",
      "patient_allergies": "from DRUG_ALLERGY table"
    },
    "response_mapping": {
      "pharmacy_order_id": "PharmacySystemRef",
      "dispensing_status": "Status"
    }
  }
}

💰 ระบบการเงิน (1.2.14) Integration:

{
  "billing_calculation": {
    "trigger": "HISTORY_TAKING.IsCompleted = 1",
    "endpoint": "/api/v1/finance/calculate",
    "payload": {
      "visit_id": "VisitID",
      "medications": "from MEDICATION_ORDER",
      "lab_orders": "from LAB_ORDER", 
      "radiology_orders": "from RADIOLOGY_ORDER",
      "procedures": "from PROCEDURES",
      "patient_rights": "from VISIT_RIGHTS"
    }
  }
}

🏥 ระบบห้องตรวจ (1.2.3) Integration:

{
  "consultation_request": {
    "trigger": "CONSULTATION.INSERT",
    "endpoint": "/api/v1/examroom/consult/request",
    "payload": {
      "consultation_id": "ConsultationID",
      "target_department": "ConsultToDepartment",
      "urgency": "UrgencyLevel",
      "clinical_question": "ConsultQuestion"
    }
  }
}


หมายเหตุการออกแบบ:

  1. การเชื่อมโยงระบบ: Schema นี้ออกแบบให้เชื่อมโยงกับระบบอื่นผ่าน Foreign Key และ API Integration
  2. ความยืดหยุ่น: รองรับการขยายระบบในอนาคต เช่น การเพิ่ม Template, การ Integration กับระบบภายนอก
  3. การตรวจสอบข้อมูล: มี Trigger และ Constraint เพื่อรักษาความถูกต้องของข้อมูล
  4. ประสิทธิภาพ: ออกแบบ Index เพื่อการค้นหาที่รวดเร็ว
  5. ความปลอดภัย: มี Audit Log เพื่อติดตามการเปลี่ยนแปลงข้อมูล
  6. Cross-System Integrity: มีการตรวจสอบความสอดคล้องข้อมูลระหว่างระบบ

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