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 (ความสัมพันธ์หลัก)
- PATIENT เป็นศูนย์กลางของระบบ เชื่อมโยงกับ:
- PATIENT_ADDRESS (1:N)
- PATIENT_CONTACT (1:N)
- PATIENT_MEDICAL_HISTORY (1:N)
- PATIENT_FAMILY_INFO (1:1)
- VISIT (1:N)
- ADMISSION (1:N)
-
APPOINTMENT (1:N)
-
VISIT เชื่อมโยงการเข้ารับบริการ:
- VISIT_RIGHTS (1:N)
- CHART_BORROWING (1:N)
-
ADMISSION (1:1, optional)
-
Master Data ให้ข้อมูลอ้างอิง:
- Personal: TITLE_NAME, GENDER, BLOOD_GROUP, etc.
- Geographic: REGION → PROVINCE → DISTRICT → SUBDISTRICT
- 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 ที่เหมาะสม และต้องได้รับการอนุมัติจากผู้มีอำนาจก่อนนำไปใช้ในการพัฒนาระบบ