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

Entity Relationship Diagram (ERD)

ระบบเวชระเบียนหลัก (Core Medical Record System)

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


เอกสารเลขที่: SRS-1.2.1-ERD
เวอร์ชัน: 2.0
วันที่: 4 ตุลาคม 2568
ผู้จัดทำ: ทีมพัฒนาระบบ
ผู้อนุมัติ: ผู้อำนวยการโรงพยาบาลค่ายธนรัชน์
การปรับปรุง: แยกฟีเจอร์ที่ซ้ำซ้อนและเพิ่ม Integration API


ภาพรวม Entity Relationship Diagram

เอกสารนี้แสดง ERD สำหรับระบบเวชระเบียนหลัก ที่ได้รับการปรับปรุงให้เป็น Core System พร้อม API Integration กับระบบอื่นๆ

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

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

  • 🟢 สีเขียว (Core Tables): ตารางหลักของระบบเวชระเบียน ที่เก็บข้อมูลผู้ป่วยและการทำงานหลักของ OPD
  • PATIENT - ข้อมูลผู้ป่วยหลัก
  • VISIT - ข้อมูลการเข้ารับบริการ

  • 🔵 สีน้ำเงิน (Support Tables): ตารางสนับสนุนการทำงานและข้อมูลย่อย

  • PATIENT_ADDRESS, PATIENT_CONTACT - ข้อมูลที่อยู่และผู้ติดต่อ
  • PATIENT_MEDICAL_HISTORY, PATIENT_FAMILY_INFO - ข้อมูลประวัติ
  • CHART_BORROWING, APPOINTMENT - การจัดการแฟ้มและนัดหมาย

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

  • HN_HISTORY, AUDIT_LOG - บันทึกการเปลี่ยนแปลง
  • PATIENT_NOTES, SYSTEM_CONFIG - หมายเหตุและการตั้งค่า
  • SYSTEM_INTEGRATION_LOG, API_ENDPOINTS - การเชื่อมโยงระบบ
  • ADMISSION - 🔗 Integration Point ระหว่างระบบเวชระเบียน (OPD) และระบบผู้ป่วยใน (IPD)

📋 หมายเหตุสำคัญ: ตาราง ADMISSION ถูกจัดอยู่ใน System Tables เพราะทำหน้าที่เป็น Integration Point ระหว่างระบบเวชระเบียน (1.2.1) และระบบผู้ป่วยใน (1.2.17) ตามหลักการ System Separation เพื่อหลีกเลี่ยงการซ้ำซ้อนในการพัฒนา

  • 🟡 สีเหลือง (Master Data - Personal): ข้อมูลพื้นฐานส่วนบุคคล
  • 🟣 สีม่วง (Master Data - Geographic): ข้อมูลภูมิศาสตร์
  • 🔴 สีแดง (Master Data - Healthcare): ข้อมูลระบบสุขภาพ

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

แผนภาพนี้แสดงความสัมพันธ์ระหว่างกลุ่มตารางหลักๆ และ Master Data

graph TD
    subgraph "🟢 Core Medical Record System - ระบบเวชระเบียนหลัก"
        P[PATIENT<br/>ข้อมูลผู้ป่วย]
        V[VISIT<br/>การเข้ารับบริการ]
    end

    subgraph "🔵 Patient Detail Tables - ตารางข้อมูลรายละเอียดผู้ป่วย"
        PA[PATIENT_ADDRESS<br/>ที่อยู่ผู้ป่วย]
        PC[PATIENT_CONTACT<br/>ผู้ติดต่อ]
        PMH[PATIENT_MEDICAL_HISTORY<br/>ประวัติทางการแพทย์]
        PFI[PATIENT_FAMILY_INFO<br/>ข้อมูลครอบครัว]
        POI[PATIENT_OFFICER_INFO<br/>ข้อมูลข้าราชการ]
        PAI[PATIENT_ALIEN_INFO<br/>ข้อมูลต่างด้าว]
    end

    subgraph "🔵 Service Support Tables - ตารางสนับสนุนการบริการ"
        VR[VISIT_RIGHTS<br/>สิทธิการรักษา]
        CB[CHART_BORROWING<br/>การยืม-คืนแฟ้ม]
        CL[CHART_LOCATION<br/>ตำแหน่งแฟ้ม]
        AP[APPOINTMENT<br/>การนัดหมาย]
    end

    subgraph "🟠 System Management Tables - ตารางจัดการระบบ"
        HH[HN_HISTORY<br/>ประวัติการเปลี่ยน HN]
        PN[PATIENT_NOTES<br/>หมายเหตุผู้ป่วย]
        AL[AUDIT_LOG<br/>บันทึกการแก้ไข]
        SC[SYSTEM_CONFIG<br/>การตั้งค่าระบบ]
        SIL[SYSTEM_INTEGRATION_LOG<br/>บันทึกการเชื่อมต่อระบบ]
        AE[API_ENDPOINTS<br/>จุดเชื่อมต่อ API]
        A[ADMISSION<br/>การรับเข้าผู้ป่วยใน<br/>🔗 Integration Point]
    end

    subgraph "🟡 Master Data - Personal Info"
        TN[TITLE_NAME<br/>คำนำหน้าชื่อ]
        GN[GENDER<br/>เพศ]
        BG[BLOOD_GROUP<br/>หมู่เลือด]
        MS[MARITAL_STATUS<br/>สถานภาพสมรส]
        RC[RACE<br/>เชื้อชาติ]
        NT[NATIONALITY<br/>สัญชาติ]
        OG[OCCUPATION_GROUP<br/>กลุ่มอาชีพ]
        RL[RELIGION<br/>ศาสนา]
        EL[EDUCATION_LEVEL<br/>ระดับการศึกษา]
        RS[RELATIONSHIP<br/>ความสัมพันธ์]
    end

    subgraph "🟣 Master Data - Geographic"
        RG[REGION<br/>ภูมิภาค]
        PR[PROVINCE<br/>จังหวัด]
        DT[DISTRICT<br/>อำเภอ]
        SD[SUBDISTRICT<br/>ตำบล]
    end

    subgraph "🔴 Master Data - Healthcare System"
        VT[VISIT_TYPE<br/>ประเภทการมา]
        PT[PATIENT_TYPE<br/>ประเภทผู้ป่วย]
        UL[URGENCY_LEVEL<br/>ระดับความเร่งด่วน]
        PC2[PATIENT_CONDITION<br/>สภาพผู้ป่วย]
        DP[DEPARTMENT<br/>แผนก]
        RM[ROOM<br/>ห้อง]
        AT[APPOINTMENT_TYPE<br/>ประเภทการนัด]
        AS[APPOINTMENT_STATUS<br/>สถานะการนัด]
    end

    %% Core relationships
    P --> V
    P --> A
    P --> PA
    P --> PC
    P --> PMH
    P --> PFI
    P --> POI
    P --> PAI
    P --> HH
    P --> PN
    P --> CL
    P --> AP

    V --> VR
    V --> CB
    A --> CB

    %% Master Data relationships to Core tables
    P -.-> TN
    P -.-> GN
    P -.-> BG
    P -.-> MS
    P -.-> RC
    P -.-> NT
    P -.-> OG
    P -.-> RL

    PA -.-> SD
    PA -.-> DT
    PA -.-> PR

    PC -.-> RS
    PFI -.-> EL

    V -.-> VT
    V -.-> PT
    V -.-> UL
    V -.-> PC2
    V -.-> DP
    V -.-> RM

    AP -.-> DP
    AP -.-> RM
    AP -.-> AT
    AP -.-> AS

    %% Geographic hierarchy
    RG --> PR
    PR --> DT
    DT --> SD

    %% Department hierarchy
    DP --> RM

    %% Styling
    style P fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
    style V fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px

    style PA fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style PC fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style PMH fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style PFI fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style POI fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style PAI fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style VR fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style CB fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style CL fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style AP fill:#e3f2fd,stroke:#1976d2,stroke-width:2px

    style HH fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style PN fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style AL fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style SC fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style SIL fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style AE fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style A fill:#fff3e0,stroke:#e65100,stroke-width:3px

    style TN fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style GN fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style BG fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style MS fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style RC fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style NT fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style OG fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style RL fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style EL fill:#fffde7,stroke:#f57f17,stroke-width:2px
    style RS fill:#fffde7,stroke:#f57f17,stroke-width:2px

    style RG fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style PR fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style DT fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style SD fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px

    style VT fill:#ffebee,stroke:#c62828,stroke-width:2px
    style PT fill:#ffebee,stroke:#c62828,stroke-width:2px
    style UL fill:#ffebee,stroke:#c62828,stroke-width:2px
    style PC2 fill:#ffebee,stroke:#c62828,stroke-width:2px
    style DP fill:#ffebee,stroke:#c62828,stroke-width:2px
    style RM fill:#ffebee,stroke:#c62828,stroke-width:2px
    style AT fill:#ffebee,stroke:#c62828,stroke-width:2px
    style AS fill:#ffebee,stroke:#c62828,stroke-width:2px

2. ERD แบบละเอียด (Detailed ERD)

แผนภาพนี้แสดงโครงสร้างตารางและความสัมพันธ์แบบละเอียดทั้งหมด

erDiagram
    %% Master Data Tables - Personal Information
    TITLE_NAME {
        varchar TitleID PK
        varchar TitleCode UK
        nvarchar TitleNameTH
        varchar TitleNameEN
        char Gender
        varchar Category
        int DisplayOrder
        bit IsActive
    }

    GENDER {
        char GenderCode PK
        nvarchar GenderNameTH
        varchar GenderNameEN
        int DisplayOrder
        bit IsActive
    }

    BLOOD_GROUP {
        varchar BloodGroupID PK
        varchar BloodGroup
        varchar RhFactor
        varchar DisplayName
        nvarchar NameTH
        varchar NameEN
        int DisplayOrder
        bit IsActive
    }

    MARITAL_STATUS {
        varchar MaritalStatusCode PK
        nvarchar MaritalStatusNameTH
        varchar MaritalStatusNameEN
        int DisplayOrder
        bit IsActive
    }

    RACE {
        varchar RaceCode PK
        nvarchar RaceNameTH
        varchar RaceNameEN
        int DisplayOrder
        bit IsActive
    }

    NATIONALITY {
        varchar NationalityCode PK
        nvarchar NationalityNameTH
        varchar NationalityNameEN
        varchar ISO3Code
        int DisplayOrder
        bit IsActive
    }

    OCCUPATION_GROUP {
        varchar OccupationGroupCode PK
        nvarchar OccupationGroupNameTH
        varchar OccupationGroupNameEN
        int DisplayOrder
        bit IsActive
    }

    RELIGION {
        varchar ReligionID PK
        nvarchar ReligionNameTH
        varchar ReligionNameEN
        int DisplayOrder
        bit IsActive
    }

    EDUCATION_LEVEL {
        varchar EducationLevelCode PK
        nvarchar EducationLevelNameTH
        varchar EducationLevelNameEN
        int DisplayOrder
        bit IsActive
    }

    RELATIONSHIP {
        varchar RelationshipCode PK
        nvarchar RelationshipNameTH
        varchar RelationshipNameEN
        int DisplayOrder
        bit IsActive
    }

    %% Geographic Master Data
    REGION {
        varchar RegionID PK
        nvarchar RegionNameTH
        varchar RegionNameEN
        int DisplayOrder
        bit IsActive
    }

    PROVINCE {
        varchar ProvinceCode PK
        nvarchar ProvinceNameTH
        varchar ProvinceNameEN
        varchar RegionID FK
        int DisplayOrder
        bit IsActive
    }

    DISTRICT {
        varchar DistrictCode PK
        nvarchar DistrictNameTH
        varchar DistrictNameEN
        varchar ProvinceCode FK
        int DisplayOrder
        bit IsActive
    }

    SUBDISTRICT {
        varchar SubdistrictCode PK
        nvarchar SubdistrictNameTH
        varchar SubdistrictNameEN
        varchar DistrictCode FK
        varchar PostalCode
        int DisplayOrder
        bit IsActive
    }

    %% Healthcare System Master Data
    VISIT_TYPE {
        varchar VisitTypeCode PK
        nvarchar VisitTypeNameTH
        varchar VisitTypeNameEN
        int DisplayOrder
        bit IsActive
    }

    PATIENT_TYPE {
        varchar PatientTypeCode PK
        nvarchar PatientTypeNameTH
        varchar PatientTypeNameEN
        int DisplayOrder
        bit IsActive
    }

    URGENCY_LEVEL {
        varchar UrgencyCode PK
        nvarchar UrgencyNameTH
        varchar UrgencyNameEN
        int Priority
        varchar ColorCode
        int DisplayOrder
        bit IsActive
    }

    PATIENT_CONDITION {
        varchar ConditionCode PK
        nvarchar ConditionNameTH
        varchar ConditionNameEN
        int DisplayOrder
        bit IsActive
    }

    DEPARTMENT {
        varchar DepartmentCode PK
        nvarchar DepartmentNameTH
        varchar DepartmentNameEN
        varchar DepartmentType
        varchar ParentDepartmentCode FK
        int DisplayOrder
        bit IsActive
    }

    ROOM {
        varchar RoomCode PK
        nvarchar RoomNameTH
        varchar RoomNameEN
        varchar DepartmentCode FK
        varchar RoomType
        int Capacity
        int DisplayOrder
        bit IsActive
    }

    APPOINTMENT_TYPE {
        varchar AppointmentTypeCode PK
        nvarchar AppointmentTypeNameTH
        varchar AppointmentTypeNameEN
        varchar ColorCode
        int DisplayOrder
        bit IsActive
    }

    APPOINTMENT_STATUS {
        varchar StatusCode PK
        nvarchar StatusNameTH
        varchar StatusNameEN
        varchar ColorCode
        int DisplayOrder
        bit IsActive
    }

    %% Core Tables
    PATIENT {
        varchar HN PK
        varchar CitizenID UK
        varchar PassportNumber
        varchar AlienID
        varchar OfficerID
        varchar TitleID FK
        nvarchar FirstName
        nvarchar LastName
        nvarchar OldFirstName
        nvarchar OldLastName
        char GenderCode FK
        date DateOfBirth
        time TimeOfBirth
        int Age
        int AgeInDays
        varchar BloodGroupID FK
        varchar MaritalStatusCode FK
        varchar RaceCode FK
        varchar NationalityCode FK
        varchar OccupationGroupCode FK
        nvarchar OccupationDetail
        varchar ReligionID FK
        nvarchar FatherName
        nvarchar MotherName
        nvarchar SpouseName
        varchar PhotoPath
        varbinary FingerprintData
        ntext PhysicalDescription
        bit IsDeceased
        datetime DeathDate
        datetime CreatedDate
        varchar CreatedBy
        datetime LastModified
        varchar ModifiedBy
        bit IsActive
    }

    PATIENT_ADDRESS {
        varchar AddressID PK
        varchar HN FK
        varchar AddressType
        nvarchar HouseNumber
        nvarchar VillageNumber
        nvarchar Street
        varchar SubdistrictCode FK
        varchar DistrictCode FK
        varchar ProvinceCode FK
        varchar PostalCode
        varchar CountryCode
        varchar PhoneNumber
        varchar Email
        bit IsDefault
    }

    PATIENT_CONTACT {
        varchar ContactID PK
        varchar HN FK
        nvarchar ContactName
        varchar RelationshipCode FK
        varchar PhoneNumber
        ntext Address
        bit IsEmergencyContact
    }

    PATIENT_MEDICAL_HISTORY {
        varchar MedicalHistoryID PK
        varchar HN FK
        varchar DiseaseType
        nvarchar DiseaseName
        int OnsetYear
        nvarchar FamilyMember
        int MemberAge
        bit IsDeceased
        ntext Notes
        datetime CreatedDate
    }

    PATIENT_FAMILY_INFO {
        varchar FamilyInfoID PK
        varchar HN FK
        nvarchar FamilyStatus
        nvarchar PersonStatus
        varchar EducationLevelCode FK
        nvarchar PersonType
        nvarchar CommunityPosition
    }

    PATIENT_OFFICER_INFO {
        varchar OfficerInfoID PK
        varchar HN FK
        nvarchar MainAgency
        nvarchar SubAgency
        nvarchar Position
        varchar Level
    }

    PATIENT_ALIEN_INFO {
        varchar AlienInfoID PK
        varchar HN FK
        nvarchar EmployerName
        nvarchar EmployerType
        nvarchar RegistrationUnit
        varchar WorkPermitNumber
    }

    VISIT {
        varchar VisitID PK
        varchar HN FK
        datetime VisitDate
        varchar VisitTypeCode FK
        varchar PatientTypeCode FK
        varchar UrgencyCode FK
        varchar ConditionCode FK
        ntext ChiefComplaint
        varchar QueueNumber
        varchar DepartmentCode FK
        varchar RoomCode FK
        nvarchar Doctor
        varchar Status
        bit IsAdvanceBooking
        varchar PhotoPath
        datetime CreatedDate
        varchar CreatedBy
        datetime CompletedDate
    }

    VISIT_RIGHTS {
        varchar VisitRightID PK
        varchar VisitID FK
        varchar RightTypeID FK
        varchar RightNumber
        bit IsPrimary
    }

    ADMISSION {
        varchar AN PK
        varchar HN FK
        varchar VisitID FK
        datetime AdmitDate
        nvarchar AdmitWard
        varchar AdmitBed
        nvarchar AdmitDoctor
        ntext AdmitDiagnosis
        datetime DischargeDate
        varchar DischargeType
        varchar Status
        datetime CreatedDate
        varchar CreatedBy
    }

    CHART_BORROWING {
        varchar BorrowingID PK
        varchar HN FK
        varchar AN FK
        varchar VisitID FK
        varchar ChartType
        datetime BorrowDate
        time BorrowTime
        varchar BorrowerID FK
        nvarchar BorrowDepartment
        nvarchar BorrowReason
        varchar BorrowerPhone
        datetime ReturnDate
        time ReturnTime
        varchar ReturnedBy FK
        varchar Status
        varchar BarcodeID
        bit IsAdvanceBorrow
        nvarchar Location
    }

    CHART_LOCATION {
        varchar LocationID PK
        varchar HN FK
        nvarchar CurrentLocation
        varchar LocationType
        datetime UpdateDate
        varchar UpdateBy
    }

    APPOINTMENT {
        varchar AppointmentID PK
        varchar HN FK
        date AppointmentDate
        time AppointmentTime
        varchar DepartmentCode FK
        varchar RoomCode FK
        varchar DoctorID FK
        varchar AppointmentTypeCode FK
        ntext Notes
        varchar StatusCode FK
        bit IsChartPrepared
        datetime CreatedDate
        varchar CreatedBy
        datetime ConfirmedDate
        datetime CompletedDate
    }

    HN_HISTORY {
        varchar HNHistoryID PK
        varchar CurrentHN FK
        varchar OldHN
        varchar ChangeType
        ntext ChangeReason
        datetime ChangeDate
        varchar ChangedBy
        varchar ApprovedBy
    }

    PATIENT_NOTES {
        varchar NoteID PK
        varchar HN FK
        varchar NoteType
        ntext NoteText
        datetime DisplayFrom
        datetime DisplayTo
        bit IsPopup
        varchar Priority
        datetime CreatedDate
        varchar CreatedBy
        bit IsActive
    }

    AUDIT_LOG {
        varchar LogID PK
        varchar TableName
        varchar RecordID
        varchar HN
        varchar Action
        varchar FieldName
        ntext OldValue
        ntext NewValue
        datetime ChangeDate
        varchar UserID
        varchar IPAddress
        ntext Reason
    }

    SYSTEM_CONFIG {
        varchar ConfigID PK
        varchar ConfigCategory
        varchar ConfigKey
        ntext ConfigValue
        ntext Description
        bit IsActive
        datetime LastModified
        varchar ModifiedBy
    }

    %% Integration Tables
    SYSTEM_INTEGRATION_LOG {
        varchar LogID PK
        varchar SystemCode
        varchar OperationType
        ntext RequestData
        ntext ResponseData
        varchar Status
        ntext ErrorMessage
        datetime ProcessedDate
        varchar CreatedBy
    }

    API_ENDPOINTS {
        varchar EndpointID PK
        varchar SystemCode
        varchar EndpointURL
        varchar Method
        varchar AuthType
        bit IsActive
        int TimeoutSeconds
        int RetryCount
    }

    %% Master Data Relationships
    PATIENT ||--|| TITLE_NAME : "uses"
    PATIENT ||--|| GENDER : "has"
    PATIENT ||--|| BLOOD_GROUP : "has"
    PATIENT ||--|| MARITAL_STATUS : "has"
    PATIENT ||--|| RACE : "belongs to"
    PATIENT ||--|| NATIONALITY : "has"
    PATIENT ||--|| OCCUPATION_GROUP : "works in"
    PATIENT ||--|| RELIGION : "follows"

    %% Geographic Relationships
    REGION ||--o{ PROVINCE : "contains"
    PROVINCE ||--o{ DISTRICT : "contains"
    DISTRICT ||--o{ SUBDISTRICT : "contains"

    PATIENT_ADDRESS ||--|| SUBDISTRICT : "located in"
    PATIENT_ADDRESS ||--|| DISTRICT : "located in"
    PATIENT_ADDRESS ||--|| PROVINCE : "located in"

    %% Patient Detail Relationships
    PATIENT ||--o{ PATIENT_ADDRESS : "lives at"
    PATIENT ||--o{ PATIENT_CONTACT : "has contact"
    PATIENT ||--o{ PATIENT_MEDICAL_HISTORY : "has history"
    PATIENT ||--|| PATIENT_FAMILY_INFO : "has family info"
    PATIENT ||--o| PATIENT_OFFICER_INFO : "has officer info"
    PATIENT ||--o| PATIENT_ALIEN_INFO : "has alien info"

    PATIENT_CONTACT ||--|| RELATIONSHIP : "relationship type"
    PATIENT_FAMILY_INFO ||--|| EDUCATION_LEVEL : "education level"

    %% Healthcare System Relationships
    VISIT ||--|| VISIT_TYPE : "is type"
    VISIT ||--|| PATIENT_TYPE : "patient type"
    VISIT ||--|| URGENCY_LEVEL : "urgency level"
    VISIT ||--|| PATIENT_CONDITION : "condition"
    VISIT ||--|| DEPARTMENT : "visits"
    VISIT ||--|| ROOM : "in room"

    DEPARTMENT ||--o{ DEPARTMENT : "parent of"
    DEPARTMENT ||--o{ ROOM : "contains"

    APPOINTMENT ||--|| DEPARTMENT : "at department"
    APPOINTMENT ||--|| ROOM : "in room"
    APPOINTMENT ||--|| APPOINTMENT_TYPE : "type"
    APPOINTMENT ||--|| APPOINTMENT_STATUS : "status"

    %% Core Relationships
    PATIENT ||--o{ VISIT : "makes"
    PATIENT ||--o{ ADMISSION : "admitted"
    PATIENT ||--o{ CHART_BORROWING : "chart borrowed"
    PATIENT ||--|| CHART_LOCATION : "chart location"
    PATIENT ||--o{ APPOINTMENT : "schedules"
    PATIENT ||--o{ HN_HISTORY : "HN changes"
    PATIENT ||--o{ PATIENT_NOTES : "has notes"

    VISIT ||--o{ VISIT_RIGHTS : "uses rights"
    VISIT ||--o{ CHART_BORROWING : "chart for visit"
    VISIT ||--o| ADMISSION : "leads to admission"

    ADMISSION ||--o{ CHART_BORROWING : "IPD chart"

3. Integration Architecture Diagram

แผนภาพแสดงการเชื่อมโยงกับระบบอื่นๆ ผ่าน API

graph TB
    subgraph "Core Medical Record System 🟢"
        P1[PATIENT<br/>HN, CitizenID, PersonalInfo]
        V1[VISIT<br/>VisitID, VisitDate, QueueNumber]
    end

    subgraph "Integration Tables 🟠"
        A1[ADMISSION<br/>AN, AdmitDate, Ward<br/>🔗 Bridge to IPD System]
        SIL1[SYSTEM_INTEGRATION_LOG<br/>API การเชื่อมต่อ]
        AE1[API_ENDPOINTS<br/>URL และ Config]
    end

    subgraph "External Systems 🔵"
        SYS1[ระบบซักประวัติ<br/>1.2.2]
        SYS2[ระบบห้องตรวจ<br/>1.2.3]
        SYS3[ระบบเภสัชกรรม<br/>1.2.13]
        SYS4[ระบบการเงิน<br/>1.2.14]
        SYS5[ระบบตรวจสิทธิ<br/>1.2.15]
        SYS6[ระบบผู้ป่วยใน<br/>1.2.17]
    end

    %% API Connections
    P1 -.->|API: Patient Data| SYS1
    P1 -.->|API: Patient Data| SYS2
    P1 -.->|API: Patient Data| SYS3
    P1 -.->|API: Patient Data| SYS4
    P1 -.->|API: Patient Data| SYS5

    V1 -.->|API: Visit Data| SYS1
    V1 -.->|API: Visit Data| SYS2
    V1 -.->|API: Visit Data| SYS3
    V1 -.->|API: Visit Data| SYS4
    V1 -.->|API: Visit Data| SYS5

    A1 -.->|API: Admission Data| SYS6
    A1 -.->|API: Admission Data| SYS2
    A1 -.->|API: Admission Data| SYS3
    A1 -.->|API: Admission Data| SYS4

    %% Integration Monitoring
    SIL1 -.->|Log All| SYS1
    SIL1 -.->|Log All| SYS2
    SIL1 -.->|Log All| SYS3
    SIL1 -.->|Log All| SYS4
    SIL1 -.->|Log All| SYS5
    SIL1 -.->|Log All| SYS6

    AE1 -.->|Endpoints| SYS1
    AE1 -.->|Endpoints| SYS2
    AE1 -.->|Endpoints| SYS3
    AE1 -.->|Endpoints| SYS4
    AE1 -.->|Endpoints| SYS5
    AE1 -.->|Endpoints| SYS6

    style P1 fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
    style V1 fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
    style A1 fill:#fff3e0,stroke:#e65100,stroke-width:3px
    style SIL1 fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style AE1 fill:#fff3e0,stroke:#e65100,stroke-width:2px

    style SYS1 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style SYS2 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style SYS3 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style SYS4 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style SYS5 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style SYS6 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px

4. Database Relationships Summary

Primary Relationships (ความสัมพันธ์หลัก)

  1. PATIENT เป็นศูนย์กลางของระบบ เชื่อมโยงกับ:
  2. PATIENT_ADDRESS (1:N)
  3. PATIENT_CONTACT (1:N)
  4. PATIENT_MEDICAL_HISTORY (1:N)
  5. PATIENT_FAMILY_INFO (1:1)
  6. VISIT (1:N)
  7. ADMISSION (1:N)
  8. APPOINTMENT (1:N)

  9. VISIT เชื่อมโยงการเข้ารับบริการ:

  10. VISIT_RIGHTS (1:N)
  11. CHART_BORROWING (1:N)
  12. ADMISSION (1:1, optional)

  13. Master Data ให้ข้อมูลอ้างอิง:

  14. Personal: TITLE_NAME, GENDER, BLOOD_GROUP, etc.
  15. Geographic: REGION → PROVINCE → DISTRICT → SUBDISTRICT
  16. Healthcare: VISIT_TYPE, PATIENT_TYPE, DEPARTMENT, etc.

Integration Points (จุดเชื่อมโยง)

  • SYSTEM_INTEGRATION_LOG: บันทึกการติดต่อกับระบบอื่น
  • API_ENDPOINTS: กำหนดจุดเชื่อมต่อ API
  • HN & VisitID: เป็น Foreign Key หลักที่ระบบอื่นอ้างอิง

5. Notes และข้อแนะนำ

Performance Considerations

  • สร้าง Index บน HN, CitizenID, VisitID
  • Partition ตาราง VISIT และ AUDIT_LOG ตามวันที่
  • Archive ข้อมูลเก่าเป็น periodic

Security Considerations

  • Encrypt ข้อมูล CitizenID, FingerprintData
  • Audit Log ทุกการเข้าถึงข้อมูลผู้ป่วย
  • API Authentication ด้วย JWT Tokens

Integration Best Practices

  • ใช้ Asynchronous API calls สำหรับ non-critical operations
  • Implement Circuit Breaker pattern
  • Monitor API performance ผ่าน SYSTEM_INTEGRATION_LOG

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