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

Entity Relationship Diagram (ERD)

ระบบซักประวัติ (Medical History and Examination System)

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


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


ภาพรวม Entity Relationship Diagram

เอกสารนี้แสดง ERD สำหรับระบบซักประวัติที่ปรับปรุงใหม่ โดยใช้ Shared Tables ร่วมกับระบบห้องตรวจแพทย์ (1.2.3) เพื่อลดความซ้ำซ้อนของข้อมูลและเพิ่มประสิทธิภาพในการจัดการข้อมูล โดยเชื่อมโยงกับระบบอื่นๆ ผ่าน API Integration

การจัดกลุ่มตาราง (Table Categories)

🎨 คำอธิบายสีในแผนภาพ:

  • 🟢 สีเขียว (Core Tables): ตารางหลักเฉพาะระบบซักประวัติ
  • HISTORY_TAKING - ข้อมูลการซักประวัติหลัก
  • VITAL_SIGNS - สัญญาณชีพและการ Screen

  • 🔵 สีน้ำเงิน (Shared Tables): ตารางที่ใช้ร่วมกันระหว่างระบบ

  • MEDICAL_DIAGNOSIS - การวินิจฉัยโรค (ร่วมกับ 1.2.3)
  • MEDICAL_PROCEDURE - หัตถการทางการแพทย์ (ร่วมกับ 1.2.3)
  • MEDICATION_ORDER - การสั่งจ่ายยา (ร่วมกับ 1.2.3)
  • LAB_ORDER - การสั่งตรวจทางห้องปฏิบัติการ (ร่วมกับ 1.2.3)
  • RADIOLOGY_ORDER - การสั่งตรวจรังสี (ร่วมกับ 1.2.3)
  • PATIENT_REFERRAL - การส่งต่อผู้ป่วย (ร่วมกับ 1.2.3)
  • PATIENT_CONSULTATION - การขอปรึกษา (ร่วมกับ 1.2.3)
  • PATIENT_APPOINTMENT - การนัดหมาย (ร่วมกับ 1.2.3)

  • 🟠 สีส้ม (System Tables): ตารางจัดการระบบและการตรวจสอบ

  • DRUG_ALLERGY - การแพ้ยา
  • DRUG_INTERACTION_CHECK - ตรวจสอบ Drug Interaction
  • TEMPLATE_USAGE - การใช้งาน Template
  • PATIENT_ADVICE - คำแนะนำผู้ป่วย
  • SYSTEM_INTEGRATION_LOG - บันทึกการเชื่อมโยงระบบ
  • AUDIT_LOG - บันทึกการเปลี่ยนแปลง

  • 🟡 สีเหลือง (Master Data - Medical): ข้อมูลพื้นฐานทางการแพทย์

  • ICD_CODES - รหัส ICD
  • HISTORY_TEMPLATES - Template การซักประวัติ
  • MEDICATION_TEMPLATES - Template การสั่งยา

  • 🟣 สีม่วง (Master Data - Reference): ข้อมูลอ้างอิงจากระบบอื่น

  • DOCTORS - ข้อมูลแพทย์
  • DEPARTMENTS - ข้อมูลแผนก
  • LAB_ITEMS - รายการ Lab
  • XRAY_ITEMS - รายการ X-Ray

  • 🔴 สีแดง (Integration Points): จุดเชื่อมโยงกับระบบอื่น

  • การเชื่อมโยงกับระบบเวชระเบียน (1.2.1)
  • การเชื่อมโยงกับระบบห้องตรวจแพทย์ (1.2.3)
  • การเชื่อมโยงกับระบบเภสัชกรรม (1.2.13)
  • การเชื่อมโยงกับระบบตรวจสอบสิทธิ (1.2.15)
  • การเชื่อมโยงกับระบบงานชันสูตร (1.2.7)
  • การเชื่อมโยงกับระบบรังสีวิทยา (1.2.8)

🔑 ประโยชน์ของ Shared Tables

  1. ลดความซ้ำซ้อน: ไม่ต้องมีตารางเหมือนกันในหลายระบบ
  2. Data Consistency: ข้อมูลมีความสอดคล้องกัน
  3. Easy Integration: ง่ายต่อการรวมข้อมูลระหว่างระบบ
  4. Reduced Maintenance: ลดการบำรุงรักษาโครงสร้างข้อมูล
  5. Better Performance: ประสิทธิภาพในการค้นหาและรายงาน

📝 กลไกการระบุแหล่งที่มา

ทุก Shared Table จะมี field สำคัญ: - SourceSystem: ระบุว่าข้อมูลมาจากระบบไหน ('HISTORY_TAKING' หรือ 'EXAMINATION') - SourceID: รหัสอ้างอิงไปยัง HistoryID หรือ ExaminationID ตามแหล่งที่มา


1. แผนภาพแบบง่าย (Simplified Diagram)

แผนภาพนี้แสดงความสัมพันธ์ระหว่างกลุ่มตารางหลักๆ ที่ปรับปรุงใหม่ด้วย Shared Tables และการเชื่อมโยงกับระบบอื่น

graph TB
    subgraph "🔴 External Systems"
        PATIENT_SYS["📋 ระบบเวชระเบียน<br/>(1.2.1)"]
        EXAM_SYS["🏥 ระบบห้องตรวจแพทย์<br/>(1.2.3)"]
        PHARMACY_SYS["💊 ระบบเภสัชกรรม<br/>(1.2.13)"]
        RIGHT_SYS["🎫 ระบบตรวจสอบสิทธิ<br/>(1.2.15)"]
        LAB_SYS["🔬 ระบบงานชันสูตร<br/>(1.2.7)"]
        XRAY_SYS["📡 ระบบรังสีวิทยา<br/>(1.2.8)"]
        FINANCE_SYS["💰 ระบบการเงิน<br/>(1.2.14)"]
    end

    subgraph "🟢 Core History System"
        HISTORY["📝 การซักประวัติหลัก<br/>HISTORY_TAKING"]
        VITALS["❤️ สัญญาณชีพ<br/>VITAL_SIGNS"]
    end

    subgraph "🔵 Shared Tables (ใช้ร่วมกับ 1.2.3)"
        DIAGNOSIS["🩺 การวินิจฉัย<br/>MEDICAL_DIAGNOSIS"]
        PROCEDURES["⚕️ หัตถการ<br/>MEDICAL_PROCEDURE"]
        MEDICATION["💊 การสั่งยา<br/>MEDICATION_ORDER"]
        LAB_ORDER["🔬 การสั่ง Lab<br/>LAB_ORDER"]
        XRAY_ORDER["📡 การสั่ง X-Ray<br/>RADIOLOGY_ORDER"]
        REFER["🏥 การส่งต่อ<br/>PATIENT_REFERRAL"]
        CONSULT["👨‍⚕️ การปรึกษา<br/>PATIENT_CONSULTATION"]
        APPOINTMENT["📅 การนัดหมาย<br/>PATIENT_APPOINTMENT"]
    end

    subgraph "🟠 System Controls"
        ALLERGY["⚠️ การแพ้ยา<br/>DRUG_ALLERGY"]
        DRUG_CHECK["🛡️ ตรวจสอบ Drug<br/>DRUG_INTERACTION_CHECK"]
        TEMPLATES["📋 Templates<br/>TEMPLATE_USAGE"]
        ADVICE["💬 คำแนะนำ<br/>PATIENT_ADVICE"]
    end

    %% External connections
    PATIENT_SYS -->|HN, VisitID| HISTORY
    EXAM_SYS -.->|SourceSystem='EXAMINATION'| DIAGNOSIS
    EXAM_SYS -.->|SourceSystem='EXAMINATION'| PROCEDURES
    EXAM_SYS -.->|SourceSystem='EXAMINATION'| MEDICATION
    EXAM_SYS -.->|SourceSystem='EXAMINATION'| LAB_ORDER

    %% History system connections with SourceSystem='HISTORY_TAKING'
    HISTORY -->|SourceSystem='HISTORY_TAKING'| DIAGNOSIS
    HISTORY -->|SourceSystem='HISTORY_TAKING'| PROCEDURES
    HISTORY -->|SourceSystem='HISTORY_TAKING'| MEDICATION
    HISTORY -->|SourceSystem='HISTORY_TAKING'| LAB_ORDER
    HISTORY -->|SourceSystem='HISTORY_TAKING'| XRAY_ORDER
    HISTORY -->|SourceSystem='HISTORY_TAKING'| REFER
    HISTORY -->|SourceSystem='HISTORY_TAKING'| CONSULT
    HISTORY -->|SourceSystem='HISTORY_TAKING'| APPOINTMENT

    %% Core relationships
    HISTORY --> VITALS
    HISTORY --> ALLERGY

    %% System controls
    MEDICATION --> DRUG_CHECK
    HISTORY --> TEMPLATES
    HISTORY --> ADVICE

    %% External integrations
    MEDICATION -->|DrugCode| PHARMACY_SYS
    LAB_ORDER -->|LabCode| LAB_SYS
    XRAY_ORDER -->|XRayCode| XRAY_SYS
    DIAGNOSIS -->|FinanceServiceCode| FINANCE_SYS

    %% Styling
    classDef external fill:#ffebee,stroke:#c62828,stroke-width:2px
    classDef core fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
    classDef shared fill:#e3f2fd,stroke:#1565c0,stroke-width:3px
    classDef system fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class PATIENT_SYS,EXAM_SYS,PHARMACY_SYS,RIGHT_SYS,LAB_SYS,XRAY_SYS,FINANCE_SYS external
    class HISTORY,VITALS core
    class DIAGNOSIS,PROCEDURES,MEDICATION,LAB_ORDER,XRAY_ORDER,REFER,CONSULT,APPOINTMENT shared
    class ALLERGY,DRUG_CHECK,TEMPLATES,ADVICE system

2. แผนภาพรายละเอียด (Detailed ERD)

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

erDiagram
    HISTORY_TAKING {
        varchar HistoryID PK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit (อ้างอิงจาก 1.2.1)"
        varchar HN FK "Hospital Number"
        varchar DoctorID FK "รหัสแพทย์ผู้ซักประวัติ"
        datetime HistoryDate "วันที่ซักประวัติ"
        ntext ChiefComplaint "อาการสำคัญ (CC)"
        ntext PresentIllness "ประวัติการเจ็บป่วยในปัจจุบัน (HPI)"
        varchar OnsetDuration "เป็นมากี่วันแล้ว"
        ntext PastMedicalHistory "ประวัติการเจ็บป่วยในอดีต (PMH)"
        ntext FamilyHistory "ประวัติการเจ็บป่วยในครอบครัว (FH)"
        ntext SocialHistory "ประวัติเกี่ยวกับการดำเนินชีวิต (SH)"
        bit IsPregnant "กำลังตั้งครรภ์"
        bit IsBreastfeeding "กำลังให้นมบุตร"
        nvarchar TemplateName "ชื่อ Template ที่ใช้"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
        datetime LastModified "วันที่แก้ไขล่าสุด"
        varchar ModifiedBy "ผู้แก้ไขล่าสุด"
        bit IsCompleted "เสร็จสิ้นการซักประวัติ"
    }

    VITAL_SIGNS {
        varchar VitalSignsID PK "รหัสสัญญาณชีพ"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        datetime MeasurementDate "วันที่วัด"
        decimal Weight "น้ำหนัก (กิโลกรัม)"
        decimal Height "ส่วนสูง (เซนติเมตร)"
        decimal BMI "ดัชนีมวลกาย (คำนวณอัตโนมัติ)"
        decimal Temperature "อุณหภูมิ (องศาเซลเซียส)"
        decimal WaistCircumference "รอบเอว (เซนติเมตร)"
        int PulseRate "อัตราเต้นชีพจร (ครั้ง/นาที)"
        int RespiratoryRate "อัตราหายใจ (ครั้ง/นาที)"
        int SystolicBP "ความดันโลหิตซิสโตลิก"
        int DiastolicBP "ความดันโลหิตไดแอสโตลิก"
        varchar BloodPressurePosition "ท่าวัดความดันโลหิต"
        varchar MeasuredBy "ผู้วัด"
        ntext Notes "หมายเหตุ"
        bit IsRepeatedMeasurement "การวัดซ้ำ (เช่น BP ซ้ำ)"
    }

    DIAGNOSIS {
        varchar DiagnosisID PK "รหัสการวินิจฉัย"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar ICDCode "รหัส ICD (WHO)"
        varchar ICDCodeThai "รหัส ICD ไทย"
        nvarchar DiseaseName "ชื่อโรค"
        nvarchar DiseaseNameEng "ชื่อโรค (อังกฤษ)"
        varchar DiagnosisType "ประเภทการวินิจฉัย (PRIMARY/SECONDARY)"
        varchar CertaintyLevel "ระดับความแน่นอน (CONFIRMED/SUSPECTED/RULE_OUT)"
        varchar OnsetType "ลักษณะการเกิด (ACUTE/CHRONIC/SUBACUTE)"
        ntext DiagnosisText "การวินิจฉัยแบบข้อความ"
        varchar DRGCode "รหัส DRG"
        decimal DRGWeight "น้ำหนัก DRG"
        varchar ComplicationCode "รหัสภาวะแทรกซ้อน"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก (แพทย์)"
        bit IsFromTemplate "มาจาก Template"
        varchar TemplateID "รหัส Template"
    }

    PROCEDURES {
        varchar ProcedureID PK "รหัสหัตถการ"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar ICDProcedureCode "รหัสหัตถการ ICD"
        nvarchar ProcedureName "ชื่อหัตถการ"
        nvarchar ProcedureNameEng "ชื่อหัตถการ (อังกฤษ)"
        varchar PerformerID FK "รหัสแพทย์/เจ้าหน้าที่ผู้ทำ"
        nvarchar PerformerName "ชื่อผู้ทำหัตถการ"
        datetime StartTime "เวลาเริ่ม"
        datetime EndTime "เวลาสิ้นสุด"
        int Duration "ระยะเวลา (นาที)"
        nvarchar ProcedureLocation "สถานที่ทำหัตถการ"
        ntext Complications "ภาวะแทรกซ้อน"
        ntext Notes "หมายเหตุ"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
    }

    %% Relationships
    HISTORY_TAKING ||--o{ VITAL_SIGNS : "has"
    HISTORY_TAKING ||--o{ MEDICAL_DIAGNOSIS : "SourceSystem='HISTORY_TAKING'"
    HISTORY_TAKING ||--o{ MEDICAL_PROCEDURE : "SourceSystem='HISTORY_TAKING'"

2.2 ตารางการแพ้ยาและการสั่งยา (Drug Allergy & Medication Tables)

erDiagram
    DRUG_ALLERGY {
        varchar AllergyID PK "รหัสการแพ้ยา"
        varchar HN FK "รหัสผู้ป่วย"
        varchar HistoryID FK "รหัสการซักประวัติ"
        nvarchar DrugName "ชื่อยาที่แพ้ (ชื่อสามัญ)"
        varchar DrugCode "รหัสยา"
        datetime ReportDate "วันที่รายงาน"
        datetime OnsetDate "วันที่มีอาการ"
        ntext AllergySymptoms "อาการที่แพ้"
        nvarchar Reporter "ผู้รายงาน"
        varchar Severity "ความร้ายแรง (MILD/MODERATE/SEVERE)"
        nvarchar CausativeAgent "สาเหตุการเกิด"
        varchar RelationshipLevel "ระดับความสัมพันธ์"
        ntext Outcome "ผลที่เกิดขึ้นภายหลัง"
        ntext AdditionalNotes "หมายเหตุเพิ่มเติม"
        bit IsContraindicated "ห้ามสั่งใช้กับผู้ป่วย"
        int NaranjoScore "คะแนน Naranjo"
        varchar NaranjoResult "ผลการประเมินระดับการแพ้ยา"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
        bit IsActive "ใช้งานอยู่"
    }

    MEDICATION_ORDER {
        varchar MedicationOrderID PK "รหัสการสั่งยา"
        varchar SourceSystem "ระบบที่สร้าง (HISTORY_TAKING/EXAMINATION)"
        varchar SourceID FK "รหัสอ้างอิงต้นทาง (HistoryID หรือ ExaminationID)"
        varchar VisitID FK "รหัส Visit"
        varchar HN FK "Hospital Number"
        varchar DrugCode FK "รหัสยา (อ้างอิงจาก ระบบเภสัชกรรม 1.2.13)"
        nvarchar DrugName "ชื่อยา"
        nvarchar GenericName "ชื่อสามัญยา"
        varchar Strength "ความแรง"
        varchar DosageForm "รูปแบบยา"
        decimal Quantity "จำนวน"
        varchar Unit "หน่วย"
        varchar Frequency "ความถี่การใช้"
        int Duration "จำนวนวันใช้ยา"
        ntext Instructions "วิธีการใช้"
        varchar Route "วิธีให้ยา"
        bit IsFromTemplate "มาจาก Template"
        varchar TemplateID "รหัส Template"
        bit IsFromReMed "มาจาก RE-MED"
        varchar OriginalMedicationID "รหัสการสั่งยาต้นฉบับ (สำหรับ RE-MED)"
        bit IsChronicDisease "ยาโรคเรื้อรัง"
        decimal TotalAmount "จำนวนรวม (คำนวณจากวันใช้)"
        datetime OrderDate "วันที่สั่งยา"
        varchar OrderedBy "แพทย์ผู้สั่งยา"
        varchar PharmacyStatus "สถานะเภสัชกรรม (ORDERED/DISPENSED/CANCELLED)"
        bit AllergyChecked "ตรวจสอบการแพ้ยาแล้ว"
        bit DrugInteractionChecked "ตรวจสอบ Drug Interaction แล้ว"
        varchar FinanceReferenceID FK "รหัสอ้างอิงระบบการเงิน (1.2.14)"
        varchar FinanceServiceCode "รหัสบริการสำหรับการคิดเงิน"
    }

    DRUG_INTERACTION_CHECK {
        varchar InteractionID PK "รหัสการตรวจสอบ"
        varchar MedicationOrderID1 FK "รหัสการสั่งยาที่ 1"
        varchar MedicationOrderID2 FK "รหัสการสั่งยาที่ 2"
        varchar DrugCode1 "รหัสยาที่ 1"
        varchar DrugCode2 "รหัสยาที่ 2"
        varchar InteractionLevel "ระดับอันตกริยา (MINOR/MODERATE/MAJOR)"
        ntext InteractionDescription "รายละเอียดอันตกริยา"
        ntext RecommendedAction "คำแนะนำ"
        datetime CheckDate "วันที่ตรวจสอบ"
        varchar CheckedBy "ผู้ตรวจสอบ"
        bit IsOverridden "ข้ามการเตือน"
        ntext OverrideReason "เหตุผลการข้าม"
    }

    %% Relationships
    HISTORY_TAKING ||--o{ DRUG_ALLERGY : "records"
    HISTORY_TAKING ||--o{ MEDICATION_ORDER : "generates"
    MEDICATION_ORDER ||--o{ DRUG_INTERACTION_CHECK : "checks"

2.3 ตารางการสั่งตรวจทางห้องปฏิบัติการและรังสี (Lab & X-Ray Orders)

erDiagram
    LAB_ORDER {
        varchar LabOrderID PK "รหัสการสั่ง Lab"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar LabCode FK "รหัสรายการ Lab (อ้างอิงจาก 1.2.7)"
        nvarchar LabName "ชื่อรายการตรวจ"
        varchar LabGroupCode "รหัสกลุ่มการตรวจ"
        varchar OrderingDoctorID FK "รหัสแพทย์ผู้สั่ง"
        varchar LabRoomCode FK "รหัสห้อง Lab"
        varchar ResultNotifyRoom FK "ห้องที่ต้องการให้เตือนผล"
        varchar UrgencyLevel "ความเร่งด่วน (ROUTINE/URGENT/STAT)"
        varchar SpecimenType "ประเภทสิ่งส่งตรวจ"
        ntext ClinicalInfo "ข้อมูลทางคลินิก"
        datetime CollectionDate "วันที่เก็บสิ่งส่งตรวจ"
        varchar CollectedBy "ผู้เก็บสิ่งส่งตรวจ"
        bit IsAdvanceOrder "การสั่งล่วงหน้า"
        datetime OrderDate "วันที่สั่ง"
        varchar OrderBy "ผู้สั่ง"
        varchar Status "สถานะ (ORDERED/COLLECTED/COMPLETED/CANCELLED)"
        datetime ResultDate "วันที่มีผล"
        ntext Result "ผลการตรวจ"
        varchar ReferenceRange "ค่าปกติ"
        bit IsAbnormal "ผลผิดปกติ"
        varchar FinanceReferenceID FK "รหัสอ้างอิงระบบการเงิน (1.2.14)"
        varchar ServiceCode "รหัสบริการสำหรับการคิดเงิน"
    }

    XRAY_ORDER {
        varchar XRayOrderID PK "รหัสการสั่ง X-Ray"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar XRayCode FK "รหัสรายการ X-Ray (อ้างอิงจาก 1.2.8)"
        nvarchar XRayName "ชื่อรายการตรวจ"
        varchar XRayGroupCode "รหัสกลุ่มการตรวจ"
        varchar OrderingDoctorID FK "รหัสแพทย์ผู้สั่ง"
        varchar XRayRoomCode FK "รหัสห้องตรวจ"
        varchar Position "ท่า"
        varchar Side "ด้าน"
        varchar PatientCondition "สภาพผู้ป่วย"
        varchar UrgencyLevel "ความเร่งด่วน (ROUTINE/URGENT/STAT)"
        ntext ClinicalInformation "ข้อมูลทางคลินิก"
        ntext ClinicalDiagnosis "การวินิจฉัยทางคลินิก"
        ntext Notes "หมายเหตุ"
        bit IsAdvanceOrder "การสั่งล่วงหน้า"
        datetime OrderDate "วันที่สั่ง"
        varchar OrderBy "ผู้สั่ง"
        varchar Status "สถานะ (ORDERED/TAKEN/REPORTED/CANCELLED)"
        datetime ExamDate "วันที่ถ่าย"
        varchar TechnicianID "รหัสเจ้าหน้าที่ถ่าย"
        datetime ReportDate "วันที่อ่านผล"
        varchar RadiologistID "รหัสแพทย์อ่านผล"
        ntext RadiologyReport "รายงานการอ่านผล"
        ntext RadiologyImpression "สรุปผลการอ่าน"
        varchar FinanceReferenceID FK "รหัสอ้างอิงระบบการเงิน (1.2.14)"
        varchar ServiceCode "รหัสบริการสำหรับการคิดเงิน"
    }

    %% Relationships
    HISTORY_TAKING ||--o{ LAB_ORDER : "orders"
    HISTORY_TAKING ||--o{ XRAY_ORDER : "orders"

2.4 ตารางการส่งต่อและการปรึกษา (Referral & Consultation Tables)

erDiagram
    PATIENT_REFER {
        varchar ReferID PK "รหัสการส่งต่อ"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar HN FK "รหัสผู้ป่วย"
        varchar ReferToHospitalCode "รหัสสถานพยาบาลที่ส่งต่อ"
        nvarchar ReferToHospitalName "ชื่อสถานพยาบาลที่ส่งต่อ"
        ntext ReferReason "เหตุผลการส่งตัว"
        ntext PreliminaryDiagnosis "การวินิจฉัยขั้นต้น"
        ntext PrimaryDiagnosis "การวินิจฉัยหลัก"
        varchar OrderingDoctorID FK "รหัสแพทย์ผู้สั่ง"
        nvarchar OrderingDoctorName "ชื่อแพทย์ผู้สั่ง"
        varchar ReferPoint "จุดส่งต่อ"
        varchar ReferDepartment "แผนก"
        varchar ReferCause "สาเหตุ"
        ntext TreatmentGiven "การรักษาที่ให้ไว้"
        varchar TransportMethod "พยาบาล refer หรือรถ Ambulance"
        varchar ReferType "ประเภทการส่งต่อ"
        datetime ReferDate "วันที่ส่งต่อ"
        datetime ReferEndDate "วันที่สิ้นสุดการส่งต่อ"
        varchar Status "สถานะ (PENDING/SENT/COMPLETED/CANCELLED)"
        bit IsEmergency "เป็นฉุกเฉิน"
        varchar Priority "ระดับความสำคัญ"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
        varchar RightCheckReferenceID FK "รหัสอ้างอิงตรวจสอบสิทธิ (1.2.15)"
    }

    CONSULT_REQUEST {
        varchar ConsultID PK "รหัสการปรึกษา"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar HN FK "รหัสผู้ป่วย"
        varchar ConsultToDoctorID FK "รหัสแพทย์ที่ปรึกษา"
        nvarchar ConsultToDoctorName "ชื่อแพทย์ที่ปรึกษา"
        varchar ConsultToDepartmentCode "รหัสแผนกที่ปรึกษา"
        nvarchar ConsultToDepartmentName "ชื่อแผนกที่ปรึกษา"
        varchar RequestingDoctorID FK "รหัสแพทย์ผู้ขอปรึกษา"
        nvarchar RequestingDoctorName "ชื่อแพทย์ผู้ขอปรึกษา"
        varchar UrgencyLevel "ความเร่งด่วน (ROUTINE/URGENT/STAT)"
        ntext ConsultQuestion "คำถามสำหรับการปรึกษา"
        ntext ClinicalInformation "ข้อมูลทางคลินิก"
        ntext CurrentTreatment "การรักษาปัจจุบัน"
        datetime RequestDate "วันที่ขอปรึกษา"
        datetime ResponseDate "วันที่ตอบกลับ"
        ntext ConsultAnswer "คำตอบสำหรับการปรึกษา"
        ntext Recommendations "คำแนะนำ"
        varchar Status "สถานะ (PENDING/ANSWERED/COMPLETED/CANCELLED)"
        varchar Priority "ระดับความสำคัญ"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
    }

    APPOINTMENT {
        varchar AppointmentID PK "รหัสการนัดหมาย"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit ปัจจุบัน"
        varchar HN FK "รหัสผู้ป่วย"
        datetime AppointmentDate "วันที่นัดหมาย"
        varchar AppointmentTime "เวลานัดหมาย"
        varchar DepartmentCode FK "รหัสแผนกที่นัด"
        nvarchar DepartmentName "ชื่อแผนกที่นัด"
        varchar DoctorID FK "รหัสแพทย์ที่นัด"
        nvarchar DoctorName "ชื่อแพทย์ที่นัด"
        varchar AppointmentType "ประเภทการนัด"
        ntext AppointmentReason "สาเหตุการนัดหมาย"
        ntext PatientInstructions "การปฏิบัติตัวในการมารับการรักษาครั้งต่อไป"
        bit IsMultipleDepartments "นัดหลายแผนก"
        varchar RelatedAppointmentID "รหัสการนัดที่เกี่ยวข้อง"
        bit IsAdvanceOrder "การสั่งล่วงหน้า"
        varchar AdvanceLabOrders "การสั่ง Lab ล่วงหน้า"
        varchar AdvanceXRayOrders "การสั่ง X-Ray ล่วงหน้า"
        bit IsTemplate "เป็น Template"
        varchar TemplateType "ประเภท Template (MEDICATION/INJECTION)"
        int TemplateSequence "ลำดับใน Template"
        varchar Status "สถานะ (SCHEDULED/COMPLETED/CANCELLED/NO_SHOW)"
        bit IsHolidayWarning "เตือนวันหยุด"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
        varchar NextVisitID "รหัส Visit ครั้งต่อไป"
    }

    %% Relationships
    HISTORY_TAKING ||--o{ PATIENT_REFER : "generates"
    HISTORY_TAKING ||--o{ CONSULT_REQUEST : "requests"
    HISTORY_TAKING ||--o{ APPOINTMENT : "schedules"

2.5 ตารางจัดการระบบและคำแนะนำ (System Management & Advice Tables)

erDiagram
    PATIENT_ADVICE {
        varchar AdviceID PK "รหัสคำแนะนำ"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        varchar HN FK "รหัสผู้ป่วย"
        varchar AdviceType "ประเภทคำแนะนำ"
        ntext MedicationAdvice "การใช้ยา"
        ntext DiseaseManagement "การปฏิบัติตัวให้เหมาะสมกับโรค"
        ntext DietAdvice "การรับประทานอาหาร"
        ntext FollowUpAdvice "การมาตรวจตามนัด"
        ntext ExerciseAdvice "การออกกำลังกาย"
        ntext ComplicationPrevention "การป้องกันภาวะแทรกซ้อน"
        ntext WarningSignsAdvice "การผิดปกติมาพบแพทย์"
        ntext OtherAdvice "บันทึกข้อมูลแบบอื่นๆ"
        varchar GivenBy "ผู้ให้คำแนะนำ"
        datetime AdviceDate "วันที่ให้คำแนะนำ"
        bit IsPrinted "พิมพ์แล้ว"
        datetime CreatedDate "วันที่บันทึก"
        varchar CreatedBy "ผู้บันทึก"
    }

    TEMPLATE_USAGE {
        varchar TemplateUsageID PK "รหัสการใช้ Template"
        varchar TemplateID FK "รหัส Template"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar TemplateType "ประเภท Template"
        nvarchar TemplateName "ชื่อ Template"
        varchar UsedForTable "ตารางที่ใช้ Template"
        varchar UsedForRecordID "รหัสเรคอร์ดที่ใช้"
        datetime UsageDate "วันที่ใช้"
        varchar UsedBy "ผู้ใช้"
        bit IsModified "มีการแก้ไข"
        ntext ModificationNotes "หมายเหตุการแก้ไข"
    }

    SYSTEM_INTEGRATION_LOG {
        varchar LogID PK "รหัส Log"
        varchar IntegrationType "ประเภทการเชื่อมโยง"
        varchar SourceSystem "ระบบต้นทาง"
        varchar TargetSystem "ระบบปลายทาง"
        varchar TransactionID "รหัสธุรกรรม"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar VisitID FK "รหัส Visit"
        ntext RequestData "ข้อมูลที่ส่ง"
        ntext ResponseData "ข้อมูลที่ได้รับ"
        varchar Status "สถานะ (SUCCESS/FAILED/PENDING)"
        ntext ErrorMessage "ข้อความข้อผิดพลาด"
        datetime TransactionDate "วันที่ทำธุรกรรม"
        int ProcessingTime "เวลาประมวลผล (มิลลิวินาทีี)"
        varchar UserID "รหัสผู้ใช้"
    }

    AUDIT_LOG {
        varchar AuditLogID PK "รหัส Audit"
        varchar TableName "ชื่อตาราง"
        varchar RecordID "รหัสเรคอร์ด"
        varchar HistoryID FK "รหัสการซักประวัติ"
        varchar ActionType "ประเภทการกระทำ (INSERT/UPDATE/DELETE)"
        ntext OldValues "ค่าเดิม"
        ntext NewValues "ค่าใหม่"
        varchar ChangedFields "ฟิลด์ที่เปลี่ยน"
        datetime ActionDate "วันที่กระทำ"
        varchar ActionBy "ผู้กระทำ"
        varchar IPAddress "ที่อยู่ IP"
        varchar UserAgent "User Agent"
        varchar SessionID "รหัส Session"
        ntext Reason "เหตุผลการเปลี่ยนแปลง"
    }

    %% Relationships
    HISTORY_TAKING ||--o{ PATIENT_ADVICE : "provides"
    HISTORY_TAKING ||--o{ TEMPLATE_USAGE : "uses"
    HISTORY_TAKING ||--o{ SYSTEM_INTEGRATION_LOG : "logs"
    HISTORY_TAKING ||--o{ AUDIT_LOG : "audits"

3. ตาราง Master Data และการเชื่อมโยง

3.1 ตาราง Master Data ทางการแพทย์

erDiagram
    ICD_CODES {
        varchar ICDCode PK "รหัส ICD"
        varchar ICDVersion "เวอร์ชัน ICD (ICD-10/ICD-11)"
        varchar ICDCodeThai "รหัส ICD ไทย"
        nvarchar DiseaseName "ชื่อโรค"
        nvarchar DiseaseNameEng "ชื่อโรค (อังกฤษ)"
        nvarchar DiseaseNameThai "ชื่อโรค (ไทย)"
        varchar Category "หมวดหมู่"
        varchar SubCategory "หมวดหมู่ย่อย"
        bit IsProcedure "เป็นหัตถการ"
        bit IsFrequentlyUsed "ใช้บ่อย"
        varchar DRGCode "รหัส DRG"
        decimal DRGWeight "น้ำหนัก DRG"
        bit IsActive "ใช้งานอยู่"
        datetime LastUpdated "วันที่ปรับปรุงล่าสุด"
    }

    HISTORY_TEMPLATES {
        varchar TemplateID PK "รหัส Template"
        nvarchar TemplateName "ชื่อ Template"
        varchar TemplateType "ประเภท Template"
        varchar DepartmentCode "รหัสแผนก"
        varchar SpecialtyCode "รหัสความเชี่ยวชาญ"
        ntext ChiefComplaintTemplate "Template CC"
        ntext PresentIllnessTemplate "Template HPI"
        ntext PastHistoryTemplate "Template PMH"
        ntext FamilyHistoryTemplate "Template FH"
        ntext SocialHistoryTemplate "Template SH"
        ntext PhysicalExamTemplate "Template การตรวจร่างกาย"
        ntext DiagnosisTemplate "Template การวินิจฉัย"
        ntext TreatmentTemplate "Template การรักษา"
        varchar CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        bit IsActive "ใช้งานอยู่"
        int UsageCount "จำนวนครั้งที่ใช้"
    }

    MEDICATION_TEMPLATES {
        varchar MedTemplateID PK "รหัส Template ยา"
        nvarchar TemplateName "ชื่อ Template"
        varchar TemplateType "ประเภท Template"
        varchar DiseaseCode "รหัสโรค"
        varchar DepartmentCode "รหัสแผนก"
        varchar CreatedBy "ผู้สร้าง"
        datetime CreatedDate "วันที่สร้าง"
        bit IsActive "ใช้งานอยู่"
        int UsageCount "จำนวนครั้งที่ใช้"
    }

    MEDICATION_TEMPLATE_ITEMS {
        varchar MedTemplateItemID PK "รหัสรายการ Template ยา"
        varchar MedTemplateID FK "รหัส Template ยา"
        varchar DrugCode "รหัสยา"
        nvarchar DrugName "ชื่อยา"
        varchar Strength "ความแรง"
        varchar DosageForm "รูปแบบยา"
        decimal Quantity "จำนวน"
        varchar Unit "หน่วย"
        varchar Frequency "ความถี่การใช้"
        int Duration "จำนวนวันใช้ยา"
        ntext Instructions "วิธีการใช้"
        varchar Route "วิธีให้ยา"
        int SequenceOrder "ลำดับ"
    }

3.2 ตารางข้อมูลอ้างอิงจากระบบอื่น

erDiagram
    DOCTORS {
        varchar DoctorID PK "รหัสแพทย์"
        nvarchar DoctorName "ชื่อแพทย์"
        varchar LicenseNumber "เลขที่ใบอนุญาต"
        varchar SpecialtyCode "รหัสความเชี่ยวชาญ"
        varchar DepartmentCode "รหัสแผนก"
        varchar Position "ตำแหน่ง"
        bit IsActive "ใช้งานอยู่"
        varchar ExternalSystemID "รหัสในระบบอื่น"
        datetime LastSyncDate "วันที่ซิงค์ล่าสุด"
    }

    DEPARTMENTS {
        varchar DepartmentCode PK "รหัสแผนก"
        nvarchar DepartmentName "ชื่อแผนก"
        nvarchar DepartmentNameEng "ชื่อแผนก (อังกฤษ)"
        varchar DepartmentType "ประเภทแผนก"
        varchar ParentDepartmentCode "รหัสแผนกหลัก"
        bit AllowConsult "อนุญาตให้ปรึกษา"
        bit AllowRefer "อนุญาตให้ส่งต่อ"
        bit IsActive "ใช้งานอยู่"
        varchar ExternalSystemID "รหัสในระบบอื่น"
        datetime LastSyncDate "วันที่ซิงค์ล่าสุด"
    }

    LAB_ITEMS {
        varchar LabCode PK "รหัสรายการ Lab"
        nvarchar LabName "ชื่อรายการตรวจ"
        varchar LabGroupCode "รหัสกลุ่มการตรวจ"
        varchar SpecimenType "ประเภทสิ่งส่งตรวจ"
        varchar Unit "หน่วย"
        varchar ReferenceRange "ค่าปกติ"
        decimal Price "ราคา"
        bit IsActive "ใช้งานอยู่"
        varchar ExternalSystemID "รหัสในระบบงานชันสูตร (1.2.7)"
        datetime LastSyncDate "วันที่ซิงค์ล่าสุด"
    }

    XRAY_ITEMS {
        varchar XRayCode PK "รหัสรายการ X-Ray"
        nvarchar XRayName "ชื่อรายการตรวจ"
        varchar XRayGroupCode "รหัสกลุ่มการตรวจ"
        varchar BodyPart "ส่วนของร่างกาย"
        varchar DefaultPosition "ท่าปกติ"
        decimal Price "ราคา"
        bit IsActive "ใช้งานอยู่"
        varchar ExternalSystemID "รหัสในระบบรังสีวิทยา (1.2.8)"
        datetime LastSyncDate "วันที่ซิงค์ล่าสุด"
    }

4. การเชื่อมโยงกับระบบอื่น (System Integration)

4.1 แผนภาพการเชื่อมโยงระบบ

graph TB
    subgraph "🟢 ระบบซักประวัติ (1.2.2)"
        HISTORY_MAIN["📝 HISTORY_TAKING<br/>การซักประวัติหลัก"]
        MEDICATION_MAIN["💊 MEDICATION_ORDER<br/>การสั่งยา"]
        LAB_MAIN["🔬 LAB_ORDER<br/>การสั่ง Lab"]
        XRAY_MAIN["📡 XRAY_ORDER<br/>การสั่ง X-Ray"]
        REFER_MAIN["🏥 PATIENT_REFER<br/>การส่งต่อ"]
    end

    subgraph "🔴 ระบบเวชระเบียน (1.2.1)"
        PATIENT_EXT["👤 PATIENT<br/>ข้อมูลผู้ป่วย"]
        VISIT_EXT["📋 VISIT<br/>การเข้ารับบริการ"]
    end

    subgraph "🔴 ระบบเภสัชกรรม (1.2.13)"
        PHARMACY_EXT["💊 PHARMACY_SYSTEM<br/>ระบบเภสัชกรรม"]
        DRUG_MASTER["💉 DRUG_MASTER<br/>ข้อมูลยา"]
    end

    subgraph "🔴 ระบบตรวจสอบสิทธิ (1.2.15)"
        RIGHT_CHECK["🎫 RIGHT_CHECK<br/>การตรวจสอบสิทธิ"]
    end

    subgraph "🔴 ระบบงานชันสูตร (1.2.7)"
        LAB_EXT["🔬 LAB_SYSTEM<br/>ระบบ Lab"]
        LAB_RESULT["📊 LAB_RESULTS<br/>ผล Lab"]
    end

    subgraph "🔴 ระบบรังสีวิทยา (1.2.8)"
        XRAY_EXT["📡 XRAY_SYSTEM<br/>ระบบ X-Ray"]
        XRAY_RESULT["🖼️ XRAY_RESULTS<br/>ผล X-Ray"]
    end

    subgraph "🔴 ระบบการเงิน (1.2.14)"
        FINANCE_EXT["💰 FINANCE_SYSTEM<br/>ระบบการเงิน"]
    end

    %% Data Flow - Input
    PATIENT_EXT -->|HN, Patient Info| HISTORY_MAIN
    VISIT_EXT -->|VisitID, Visit Info| HISTORY_MAIN
    RIGHT_CHECK -->|Right Info| HISTORY_MAIN

    %% Data Flow - Output
    MEDICATION_MAIN -->|Medication Orders| PHARMACY_EXT
    MEDICATION_MAIN -->|Drug Check| DRUG_MASTER
    LAB_MAIN -->|Lab Orders| LAB_EXT
    XRAY_MAIN -->|X-Ray Orders| XRAY_EXT
    REFER_MAIN -->|Refer Check| RIGHT_CHECK

    %% Data Flow - Finance
    MEDICATION_MAIN -->|Service Charges| FINANCE_EXT
    LAB_MAIN -->|Service Charges| FINANCE_EXT
    XRAY_MAIN -->|Service Charges| FINANCE_EXT

    %% Data Flow - Results
    LAB_RESULT -->|Lab Results| LAB_MAIN
    XRAY_RESULT -->|X-Ray Results| XRAY_MAIN

    %% Styling
    classDef historySystem fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
    classDef externalSystem fill:#ffebee,stroke:#c62828,stroke-width:2px

    class HISTORY_MAIN,MEDICATION_MAIN,LAB_MAIN,XRAY_MAIN,REFER_MAIN historySystem
    class PATIENT_EXT,VISIT_EXT,PHARMACY_EXT,DRUG_MASTER,RIGHT_CHECK,LAB_EXT,LAB_RESULT,XRAY_EXT,XRAY_RESULT,FINANCE_EXT externalSystem

4.2 API Integration Points

🔗 การเชื่อมโยงข้อมูลเข้า (Input Integration): - HN และ VisitID จากระบบเวชระเบียน (1.2.1) - ข้อมูลสิทธิจากระบบตรวจสอบสิทธิ (1.2.15) - ข้อมูล Master Data ยาจากระบบเภสัชกรรม (1.2.13)

🔗 การเชื่อมโยงข้อมูลออก (Output Integration): - การสั่งยาไปยังระบบเภสัชกรรม (1.2.13) - การสั่ง Lab ไปยังระบบงานชันสูตร (1.2.7) - การสั่ง X-Ray ไปยังระบบรังสีวิทยา (1.2.8) - ข้อมูลค่าบริการไปยังระบบการเงิน (1.2.14)

🔗 การเชื่อมโยงสองทาง (Bidirectional Integration): - ผล Lab จากระบบงานชันสูตร (1.2.7) - ผล X-Ray จากระบบรังสีวิทยา (1.2.8) - การตรวจสอบ Drug Interaction กับระบบเภสัชกรรม (1.2.13)


5. ข้อมูลสำคัญและข้อจำกัด

5.1 ข้อมูลสำคัญ

  • การบันทึกการซักประวัติ: รองรับการบันทึกตาม TOR ข้อ 1.2.2.2.1
  • การตรวจสอบ Drug Interaction: ตาม TOR ข้อ 1.2.2.2.6
  • การจัดการ Template: รองรับ Template ต่างๆ ตาม TOR ข้อ 1.2.2.2.5
  • การเชื่อมโยงระบบ: API Integration กับระบบอื่นๆ ครบถ้วน
  • การ Audit และ Log: บันทึกการเปลี่ยนแปลงและการใช้งานระบบ

5.2 ข้อจำกัดและหมายเหตุ

  • 🔸 Foreign Key Constraints: ตาราง Master Data จากระบบอื่นเป็น Reference เท่านั้น
  • 🔸 Data Synchronization: ต้องมีกลไกซิงค์ข้อมูลกับระบบอื่นๆ เป็นระยะ
  • 🔸 Template Management: Template ต้องได้รับการอนุมัติก่อนนำไปใช้งาน
  • 🔸 Drug Interaction Database: ต้องมีการอัปเดตฐานข้อมูล Drug Interaction สม่ำเสมอ

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