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

Database Schema Design

ระบบเวชระเบียน (Core Medical Record System)

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


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


Database Schema Design

ระบบเวชระเบียนเป็นระบบหลักที่ทำหน้าที่จัดการข้อมูลผู้ป่วยหลัก การลงทะเบียน การส่งตรวจ และการจัดการแฟ้มเวชระเบียน โดยเชื่อมโยงกับระบบอื่นผ่าน API Integration:

  • ระบบซักประวัติ (1.2.2): การจัดการประวัติการรักษารายละเอียด
  • ระบบตรวจสอบสิทธิ (1.2.15): การตรวจสอบและยืนยันสิทธิการรักษา
  • ระบบการเงิน (1.2.14): การคำนวณและเรียกเก็บค่าบริการ
  • ระบบเภสัชกรรม (1.2.13): การสั่งจ่ายยาและเวชภัณฑ์
  • ระบบห้องตรวจ (1.2.3): การจัดการคิวและตรวจรักษา

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

8.2.1.1 ข้อมูลผู้ป่วยหลัก

Table: PATIENT (ข้อมูลผู้ป่วย)

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

Field Type Key Description
HN VARCHAR(10) PK Hospital Number - หมายเลขประจำตัวผู้ป่วย
CitizenID VARCHAR(13) UK เลขบัตรประจำตัวประชาชน
PassportNumber VARCHAR(20) เลขที่หนังสือเดินทาง
AlienID VARCHAR(20) เลขที่บัตรแรงงานต่างด้าว
OfficerID VARCHAR(20) เลขที่บัตรข้าราชการ
TitleID VARCHAR(10) FK รหัสคำนำหน้านาม (อ้างอิง TITLE_NAME)
FirstName NVARCHAR(50) ชื่อ
LastName NVARCHAR(50) นามสกุล
OldFirstName NVARCHAR(50) ชื่อเดิม (กรณีเปลี่ยนชื่อ)
OldLastName NVARCHAR(50) นามสกุลเดิม (กรณีเปลี่ยนนามสกุล)
GenderCode CHAR(1) FK รหัสเพศ (อ้างอิง GENDER)
DateOfBirth DATE วันเดือนปีเกิด
TimeOfBirth TIME เวลาเกิด
Age INT อายุ (คำนวณจากวันเกิด)
AgeInDays INT อายุเป็นวัน (สำหรับทารก < 1 เดือน)
BloodGroupID VARCHAR(5) FK รหัสหมู่เลือด (อ้างอิง BLOOD_GROUP)
MaritalStatusCode VARCHAR(5) FK รหัสสถานภาพสมรส (อ้างอิง MARITAL_STATUS)
RaceCode VARCHAR(5) FK รหัสเชื้อชาติ (อ้างอิง RACE)
NationalityCode VARCHAR(5) FK รหัสสัญชาติ (อ้างอิง NATIONALITY)
OccupationGroupCode VARCHAR(5) FK รหัสกลุ่มอาชีพ (อ้างอิง OCCUPATION_GROUP)
OccupationDetail NVARCHAR(100) รายละเอียดอาชีพเฉพาะ
ReligionID VARCHAR(5) FK รหัสศาสนา (อ้างอิง RELIGION)
FatherName NVARCHAR(100) ชื่อ-นามสกุลบิดา
MotherName NVARCHAR(100) ชื่อ-นามสกุลมารดา
SpouseName NVARCHAR(100) ชื่อ-นามสกุลคู่สมรส
PhotoPath VARCHAR(255) path รูปถ่าย
FingerprintData VARBINARY(MAX) ข้อมูลลายนิ้วมือ
PhysicalDescription NTEXT รูปพรรณสัณฐาน
IsDeceased BIT สถานะเสียชีวิต
DeathDate DATETIME วันที่เสียชีวิต
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
IsActive BIT ใช้งานได้

Table: PATIENT_ADDRESS (ที่อยู่ผู้ป่วย)

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

Field Type Key Description
AddressID VARCHAR(20) PK รหัสที่อยู่
HN VARCHAR(10) FK รหัสผู้ป่วย
AddressType VARCHAR(20) ประเภทที่อยู่ (CURRENT/REGISTERED)
HouseNumber NVARCHAR(20) บ้านเลขที่
VillageNumber NVARCHAR(10) หมู่
Street NVARCHAR(100) ถนน
SubdistrictCode VARCHAR(10) FK รหัสตำบล (อ้างอิง SUBDISTRICT)
DistrictCode VARCHAR(8) FK รหัสอำเภอ (อ้างอิง DISTRICT)
ProvinceCode VARCHAR(5) FK รหัสจังหวัด (อ้างอิง PROVINCE)
PostalCode VARCHAR(5) รหัสไปรษณีย์
CountryCode VARCHAR(3) รหัสประเทศ (ISO3)
PhoneNumber VARCHAR(20) หมายเลขโทรศัพท์
Email VARCHAR(100) อีเมล
IsDefault BIT เป็นที่อยู่หลัก

Table: PATIENT_CONTACT (ผู้ติดต่อผู้ป่วย)

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

Field Type Key Description
ContactID VARCHAR(20) PK รหัสผู้ติดต่อ
HN VARCHAR(10) FK รหัสผู้ป่วย
ContactName NVARCHAR(100) ชื่อผู้ติดต่อ
RelationshipCode VARCHAR(10) FK รหัสความสัมพันธ์ (อ้างอิง RELATIONSHIP)
PhoneNumber VARCHAR(20) หมายเลขโทรศัพท์
Address NTEXT ที่อยู่
IsEmergencyContact BIT เป็นผู้ติดต่อฉุกเฉิน

Table: PATIENT_MEDICAL_HISTORY (ประวัติทางการแพทย์)

วัตถุประสงค์: เก็บข้อมูลโรคประจำตัว โรคเรื้อรัง และประวัติการเจ็บป่วยของผู้ป่วยและครอบครัว

Field Type Key Description
MedicalHistoryID VARCHAR(20) PK รหัสประวัติทางการแพทย์
HN VARCHAR(10) FK รหัสผู้ป่วย
DiseaseType VARCHAR(20) ประเภท (CHRONIC/CONGENITAL/FAMILY)
DiseaseName NVARCHAR(100) ชื่อโรค
OnsetYear INT ปีที่เริ่มเป็น
FamilyMember NVARCHAR(50) สมาชิกครอบครัว (กรณีประวัติครอบครัว)
MemberAge INT อายุสมาชิกครอบครัว
IsDeceased BIT สถานะชีวิต (สำหรับประวัติครอบครัว)
Notes NTEXT หมายเหตุ
CreatedDate DATETIME วันที่บันทึก

Table: PATIENT_FAMILY_INFO (ข้อมูลครอบครัว)

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

Field Type Key Description
FamilyInfoID VARCHAR(20) PK รหัสข้อมูลครอบครัว
HN VARCHAR(10) FK รหัสผู้ป่วย
FamilyStatus NVARCHAR(50) สถานะในครอบครัว
PersonStatus NVARCHAR(50) สถานะบุคคล
EducationLevelCode VARCHAR(5) FK รหัสระดับการศึกษา (อ้างอิง EDUCATION_LEVEL)
PersonType NVARCHAR(50) ประเภทบุคคล
CommunityPosition NVARCHAR(100) ตำแหน่งในชุมชน

Table: PATIENT_OFFICER_INFO (ข้อมูลข้าราชการ)

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

Field Type Key Description
OfficerInfoID VARCHAR(20) PK รหัสข้อมูลข้าราชการ
HN VARCHAR(10) FK รหัสผู้ป่วย
MainAgency NVARCHAR(100) สังกัดหลัก
SubAgency NVARCHAR(100) สังกัดรอง
Position NVARCHAR(100) ตำแหน่ง
Level VARCHAR(10) ระดับ

Table: PATIENT_ALIEN_INFO (ข้อมูลแรงงานต่างด้าว)

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

Field Type Key Description
AlienInfoID VARCHAR(20) PK รหัสข้อมูลแรงงานต่างด้าว
HN VARCHAR(10) FK รหัสผู้ป่วย
EmployerName NVARCHAR(100) ชื่อนายจ้าง
EmployerType NVARCHAR(50) ประเภทนายจ้าง
RegistrationUnit NVARCHAR(100) หน่วยขึ้นทะเบียน
WorkPermitNumber VARCHAR(20) เลขที่ใบอนุญาตทำงาน

8.2.1.2 ข้อมูลการเข้ารับบริการ

Table: VISIT (ข้อมูลการเข้ารับบริการ)

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

Field Type Key Description
VisitID VARCHAR(20) PK รหัส Visit
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitDate DATETIME วันที่เข้ารับบริการ
VisitTypeCode VARCHAR(10) FK รหัสประเภทการมา (อ้างอิง VISIT_TYPE)
PatientTypeCode VARCHAR(10) FK รหัสประเภทผู้ป่วย (อ้างอิง PATIENT_TYPE)
UrgencyCode VARCHAR(10) FK รหัสความเร่งด่วน (อ้างอิง URGENCY_LEVEL)
ConditionCode VARCHAR(10) FK รหัสสภาพผู้ป่วย (อ้างอิง PATIENT_CONDITION)
ChiefComplaint NTEXT อาการสำคัญ
QueueNumber VARCHAR(20) หมายเลขคิว
DepartmentCode VARCHAR(10) FK รหัสแผนก (อ้างอิง DEPARTMENT)
RoomCode VARCHAR(10) FK รหัสห้อง (อ้างอิง ROOM)
Doctor NVARCHAR(100) แพทย์ผู้รักษา
Status VARCHAR(20) สถานะ (WAITING/EXAMINING/COMPLETED/CANCELLED)
IsAdvanceBooking BIT การส่งตรวจล่วงหน้า
PhotoPath VARCHAR(255) รูปถ่ายเมื่อมารับบริการ
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
CompletedDate DATETIME วันที่เสร็จสิ้นการตรวจ

Table: VISIT_RIGHTS (สิทธิการรักษาในแต่ละครั้ง)

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

Field Type Key Description
VisitRightID VARCHAR(20) PK รหัสสิทธิในการมา
VisitID VARCHAR(20) FK รหัส Visit
RightTypeID VARCHAR(10) FK รหัสประเภทสิทธิ (อ้างอิงจากระบบตรวจสอบสิทธิ)
RightNumber VARCHAR(50) เลขที่สิทธิ
IsPrimary BIT เป็นสิทธิหลัก

8.2.1.3 ข้อมูลประวัติและการจัดการ

Table: HN_HISTORY (ประวัติการเปลี่ยน HN)

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

Field Type Key Description
HNHistoryID VARCHAR(20) PK รหัสประวัติ HN
CurrentHN VARCHAR(10) FK HN ปัจจุบัน
OldHN VARCHAR(10) HN เดิม
ChangeType VARCHAR(20) ประเภทการเปลี่ยน (MERGE/CHANGE)
ChangeReason NTEXT เหตุผลการเปลี่ยน
ChangeDate DATETIME วันที่เปลี่ยน
ChangedBy VARCHAR(50) ผู้ทำการเปลี่ยน
ApprovedBy VARCHAR(50) ผู้อนุมัติ

Table: PATIENT_NOTES (หมายเหตุผู้ป่วย)

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

Field Type Key Description
NoteID VARCHAR(20) PK รหัสหมายเหตุ
HN VARCHAR(10) FK รหัสผู้ป่วย
NoteType VARCHAR(20) ประเภทหมายเหตุ (WARNING/INFO/DOCUMENT)
NoteText NTEXT ข้อความหมายเหตุ
DisplayFrom DATETIME วันที่เริ่มแสดง
DisplayTo DATETIME วันที่หยุดแสดง
IsPopup BIT แสดงเป็น Popup
Priority VARCHAR(10) ระดับความสำคัญ (HIGH/MEDIUM/LOW)
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
IsActive BIT ใช้งานอยู่

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

8.2.2.1 การจัดการแฟ้มเวชระเบียน

Table: CHART_BORROWING (การยืม-คืนแฟ้มเวชระเบียน)

วัตถุประสงค์: บันทึกการยืมและคืนแฟ้มเวชระเบียนทั้งผู้ป่วยนอกและผู้ป่วยใน รองรับการติดตาม Real-time

Field Type Key Description
BorrowingID VARCHAR(20) PK รหัสการยืม
HN VARCHAR(10) FK รหัสผู้ป่วย
AN VARCHAR(15) FK รหัส Admission (สำหรับผู้ป่วยใน)
VisitID VARCHAR(20) FK รหัส Visit (สำหรับผู้ป่วยนอก)
ChartType VARCHAR(10) ประเภทแฟ้ม (OPD/IPD)
BorrowDate DATETIME วันที่ยืม
BorrowTime TIME เวลาที่ยืม
BorrowerID VARCHAR(50) FK รหัสผู้ยืม
BorrowDepartment NVARCHAR(50) แผนกที่ยืม
BorrowReason NVARCHAR(100) สาเหตุการยืม
BorrowerPhone VARCHAR(20) เบอร์โทรผู้ยืม
ReturnDate DATETIME วันที่คืน
ReturnTime TIME เวลาที่คืน
ReturnedBy VARCHAR(50) FK ผู้รับคืน
Status VARCHAR(20) สถานะ (BORROWED/RETURNED/OVERDUE/LOST)
BarcodeID VARCHAR(50) รหัส Barcode
IsAdvanceBorrow BIT ยืมล่วงหน้า (สำหรับนัดหมาย)
Location NVARCHAR(100) ตำแหน่งปัจจุบันของแฟ้ม

Table: CHART_LOCATION (ตำแหน่งแฟ้มเวชระเบียน)

วัตธุประสงค์: ติดตามตำแหน่งของแฟ้มเวชระเบียนแบบ Real-time

Field Type Key Description
LocationID VARCHAR(20) PK รหัสตำแหน่ง
HN VARCHAR(10) FK รหัสผู้ป่วย
CurrentLocation NVARCHAR(100) ตำแหน่งปัจจุบัน
LocationType VARCHAR(20) ประเภทตำแหน่ง (ROOM/DEPARTMENT/STORAGE)
UpdateDate DATETIME วันที่อัพเดท
UpdateBy VARCHAR(50) ผู้อัพเดท

8.2.2.2 การนัดหมาย

Table: APPOINTMENT (การนัดหมาย)

วัตถุประสงค์: จัดการการนัดหมายผู้ป่วยและการส่งตรวจล่วงหน้า

Field Type Key Description
AppointmentID VARCHAR(20) PK รหัสการนัดหมาย
HN VARCHAR(10) FK รหัสผู้ป่วย
AppointmentDate DATE วันที่นัด
AppointmentTime TIME เวลาที่นัด
DepartmentCode VARCHAR(10) FK รหัสแผนก (อ้างอิง DEPARTMENT)
RoomCode VARCHAR(10) FK รหัสห้อง (อ้างอิง ROOM)
DoctorID VARCHAR(20) FK รหัสแพทย์
AppointmentTypeCode VARCHAR(10) FK รหัสประเภทการนัด (อ้างอิง APPOINTMENT_TYPE)
Notes NTEXT หมายเหตุ
StatusCode VARCHAR(10) FK รหัสสถานะ (อ้างอิง APPOINTMENT_STATUS)
IsChartPrepared BIT เตรียมแฟ้มแล้ว
CreatedDate DATETIME วันที่สร้างนัด
CreatedBy VARCHAR(50) ผู้สร้างนัด
ConfirmedDate DATETIME วันที่ยืนยัน
CompletedDate DATETIME วันที่เสร็จสิ้น

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

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

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

Field Type Key Description
LogID VARCHAR(20) PK รหัส Log
TableName VARCHAR(50) ชื่อตาราง
RecordID VARCHAR(20) รหัสระเบียน
HN VARCHAR(10) รหัสผู้ป่วย (ถ้ามี)
Action VARCHAR(20) การกระทำ (INSERT/UPDATE/DELETE)
FieldName VARCHAR(50) ชื่อ Field ที่เปลี่ยน
OldValue NTEXT ค่าเดิม
NewValue NTEXT ค่าใหม่
ChangeDate DATETIME วันที่เปลี่ยน
UserID VARCHAR(50) ผู้ทำการเปลี่ยน
IPAddress VARCHAR(50) IP Address
Reason NTEXT เหตุผล

Table: SYSTEM_CONFIG (การตั้งค่าระบบ)

วัตถุประสงค์: เก็บการตั้งค่าต่างๆ ของระบบเวชระเบียน

Field Type Key Description
ConfigID VARCHAR(20) PK รหัสการตั้งค่า
ConfigCategory VARCHAR(50) หมวดการตั้งค่า
ConfigKey VARCHAR(100) คีย์การตั้งค่า
ConfigValue NTEXT ค่าการตั้งค่า
Description NTEXT คำอธิบาย
IsActive BIT ใช้งานอยู่
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไข

8.2.4 ตาราง Master Data (Master Data Tables)

8.2.4.1 ข้อมูลส่วนบุคคลและสังคม

Table: TITLE_NAME (คำนำหน้าชื่อ)

วัตถุประสงค์: เก็บข้อมูลคำนำหน้าชื่อทั้งภาษาไทยและอังกฤษ รองรับคำนำหน้าทางการแพทย์ ทหาร ตำรวจ และขุนนาง

Field Type Key Description
TitleID VARCHAR(10) PK รหัสคำนำหน้า
TitleCode VARCHAR(10) UK รหัสย่อ (MR, MRS, DR, etc.)
TitleNameTH NVARCHAR(50) ชื่อภาษาไทย
TitleNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
Gender CHAR(1) เพศที่ใช้ได้ (M/F/U)
Category VARCHAR(20) หมวดหมู่ (general/medical/army/police/royal/academic)
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: GENDER (เพศ)

วัตถุประสงค์: เก็บข้อมูลเพศมาตรฐาน

Field Type Key Description
GenderCode CHAR(1) PK รหัสเพศ (M/F/U/O)
GenderNameTH NVARCHAR(20) ชื่อภาษาไทย
GenderNameEN VARCHAR(20) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: BLOOD_GROUP (หมู่เลือด)

วัตถุประสงค์: เก็บข้อมูลหมู่เลือดและ Rh Factor

Field Type Key Description
BloodGroupID VARCHAR(5) PK รหัสหมู่เลือด
BloodGroup VARCHAR(3) หมู่เลือด (A, B, AB, O)
RhFactor VARCHAR(1) Rh Factor (+, -, U)
DisplayName VARCHAR(10) ชื่อแสดง (A+, B-, etc.)
NameTH NVARCHAR(20) ชื่อภาษาไทย
NameEN VARCHAR(20) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: MARITAL_STATUS (สถานภาพสมรส)

วัตถุประสงค์: เก็บข้อมูลสถานภาพสมรส

Field Type Key Description
MaritalStatusCode VARCHAR(5) PK รหัสสถานภาพ
MaritalStatusNameTH NVARCHAR(30) ชื่อภาษาไทย
MaritalStatusNameEN VARCHAR(30) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: RELIGION (ศาสนา)

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

Field Type Key Description
ReligionID VARCHAR(5) PK รหัสศาสนา
ReligionNameTH NVARCHAR(50) ชื่อภาษาไทย
ReligionNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: NATIONALITY (สัญชาติ)

วัตถุประสงค์: เก็บข้อมูลสัญชาติตามมาตรฐาน ISO

Field Type Key Description
NationalityCode VARCHAR(5) PK รหัสสัญชาติ
NationalityNameTH NVARCHAR(50) ชื่อภาษาไทย
NationalityNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
ISO3Code VARCHAR(3) รหัส ISO 3166-1 alpha-3
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: RACE (เชื้อชาติ)

วัตถุประสงค์: เก็บข้อมูลเชื้อชาติ

Field Type Key Description
RaceCode VARCHAR(5) PK รหัสเชื้อชาติ
RaceNameTH NVARCHAR(50) ชื่อภาษาไทย
RaceNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.2 ข้อมูลการศึกษาและอาชีพ

Table: EDUCATION_LEVEL (ระดับการศึกษา)

วัตถุประสงค์: เก็บข้อมูลระดับการศึกษา

Field Type Key Description
EducationLevelCode VARCHAR(5) PK รหัสระดับการศึกษา
EducationLevelNameTH NVARCHAR(100) ชื่อภาษาไทย
EducationLevelNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: OCCUPATION_GROUP (กลุ่มอาชีพ)

วัตถุประสงค์: เก็บข้อมูลกลุ่มอาชีพหลัก

Field Type Key Description
OccupationGroupCode VARCHAR(5) PK รหัสกลุ่มอาชีพ
OccupationGroupNameTH NVARCHAR(100) ชื่อภาษาไทย
OccupationGroupNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.3 ข้อมูลภูมิศาสตร์

Table: REGION (ภูมิภาค)

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

Field Type Key Description
RegionID VARCHAR(2) PK รหัสภูมิภาค
RegionNameTH NVARCHAR(50) ชื่อภาษาไทย
RegionNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: PROVINCE (จังหวัด)

วัตถุประสงค์: เก็บข้อมูลจังหวัดตามกรมการปกครอง

Field Type Key Description
ProvinceCode VARCHAR(5) PK รหัสจังหวัด
ProvinceNameTH NVARCHAR(100) ชื่อภาษาไทย
ProvinceNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
RegionID VARCHAR(2) FK รหัสภูมิภาค
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: DISTRICT (อำเภอ)

วัตถุประสงค์: เก็บข้อมูลอำเภอตามกรมการปกครอง

Field Type Key Description
DistrictCode VARCHAR(8) PK รหัสอำเภอ
DistrictNameTH NVARCHAR(100) ชื่อภาษาไทย
DistrictNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
ProvinceCode VARCHAR(5) FK รหัสจังหวัด
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: SUBDISTRICT (ตำบล)

วัตถุประสงค์: เก็บข้อมูลตำบลตามกรมการปกครอง

Field Type Key Description
SubdistrictCode VARCHAR(10) PK รหัสตำบล
SubdistrictNameTH NVARCHAR(100) ชื่อภาษาไทย
SubdistrictNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
DistrictCode VARCHAR(8) FK รหัสอำเภอ
PostalCode VARCHAR(5) รหัสไปรษณีย์
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.4 ข้อมูลระบบสุขภาพ

Table: PATIENT_TYPE (ประเภทผู้ป่วย)

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

Field Type Key Description
PatientTypeCode VARCHAR(10) PK รหัสประเภทผู้ป่วย
PatientTypeNameTH NVARCHAR(50) ชื่อภาษาไทย
PatientTypeNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: VISIT_TYPE (ประเภทการมา)

วัตถุประสงค์: เก็บข้อมูลประเภทการมารับการรักษา

Field Type Key Description
VisitTypeCode VARCHAR(10) PK รหัสประเภทการมา
VisitTypeNameTH NVARCHAR(50) ชื่อภาษาไทย
VisitTypeNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: URGENCY_LEVEL (ระดับความเร่งด่วน)

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

Field Type Key Description
UrgencyCode VARCHAR(10) PK รหัสความเร่งด่วน
UrgencyNameTH NVARCHAR(50) ชื่อภาษาไทย
UrgencyNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
Priority INT ลำดับความสำคัญ (1=สูงสุด)
ColorCode VARCHAR(7) รหัสสี (Hex)
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: PATIENT_CONDITION (สภาพผู้ป่วย)

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

Field Type Key Description
ConditionCode VARCHAR(10) PK รหัสสภาพผู้ป่วย
ConditionNameTH NVARCHAR(50) ชื่อภาษาไทย
ConditionNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.5 ข้อมูลความสัมพันธ์

Table: RELATIONSHIP (ความสัมพันธ์)

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

Field Type Key Description
RelationshipCode VARCHAR(10) PK รหัสความสัมพันธ์
RelationshipNameTH NVARCHAR(50) ชื่อภาษาไทย
RelationshipNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.6 ข้อมูลหน่วยงาน

Table: DEPARTMENT (แผนก)

วัตถุประสงค์: เก็บข้อมูลแผนกต่างๆ ในโรงพยาบาล

Field Type Key Description
DepartmentCode VARCHAR(10) PK รหัสแผนก
DepartmentNameTH NVARCHAR(100) ชื่อภาษาไทย
DepartmentNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
DepartmentType VARCHAR(10) ประเภทแผนก (OPD/IPD/SUPPORT)
ParentDepartmentCode VARCHAR(10) FK แผนกแม่
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: ROOM (ห้อง)

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

Field Type Key Description
RoomCode VARCHAR(10) PK รหัสห้อง
RoomNameTH NVARCHAR(100) ชื่อภาษาไทย
RoomNameEN VARCHAR(100) ชื่อภาษาอังกฤษ
DepartmentCode VARCHAR(10) FK รหัสแผนก
RoomType VARCHAR(20) ประเภทห้อง (EXAM/TREATMENT/WARD)
Capacity INT ความจุผู้ป่วย
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.4.7 ข้อมูลการนัดหมาย

Table: APPOINTMENT_TYPE (ประเภทการนัด)

วัตถุประสงค์: เก็บข้อมูลประเภทการนัดหมาย

Field Type Key Description
AppointmentTypeCode VARCHAR(10) PK รหัสประเภทการนัด
AppointmentTypeNameTH NVARCHAR(50) ชื่อภาษาไทย
AppointmentTypeNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
ColorCode VARCHAR(7) รหัสสี (Hex)
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

Table: APPOINTMENT_STATUS (สถานะการนัด)

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

Field Type Key Description
StatusCode VARCHAR(10) PK รหัสสถานะ
StatusNameTH NVARCHAR(50) ชื่อภาษาไทย
StatusNameEN VARCHAR(50) ชื่อภาษาอังกฤษ
ColorCode VARCHAR(7) รหัสสี (Hex)
DisplayOrder INT ลำดับการแสดงผล
IsActive BIT ใช้งานได้

8.2.5 Integration Schema (การเชื่อมโยงกับระบบอื่น)

หมายเหตุ: ส่วนนี้แสดง Schema สำหรับ API Integration กับระบบอื่นๆ เพื่อลดการซ้ำซ้อนและเพิ่มประสิทธิภาพ

Table: SYSTEM_INTEGRATION_LOG (บันทึกการเชื่อมต่อระบบ)

Field Type Key Description
LogID VARCHAR(20) PK รหัส Log
SystemCode VARCHAR(10) รหัสระบบปลายทาง (FINANCE/PHARMACY/EXAM/INSURANCE)
OperationType VARCHAR(20) ประเภทการทำงาน (SEND/RECEIVE/SYNC)
RequestData NTEXT ข้อมูลที่ส่ง
ResponseData NTEXT ข้อมูลที่ได้รับ
Status VARCHAR(20) สถานะ (SUCCESS/FAILED/PENDING)
ErrorMessage NTEXT ข้อความ Error
ProcessedDate DATETIME วันที่ประมวลผล
CreatedBy VARCHAR(50) ผู้ทำรายการ

Table: API_ENDPOINTS (จุดเชื่อมต่อ API)

Field Type Key Description
EndpointID VARCHAR(20) PK รหัส Endpoint
SystemCode VARCHAR(10) รหัสระบบ
EndpointURL VARCHAR(500) URL ของ API
Method VARCHAR(10) HTTP Method (GET/POST/PUT/DELETE)
AuthType VARCHAR(20) ประเภทการ Authentication
IsActive BIT ใช้งานได้
TimeoutSeconds INT Timeout ในหน่วยวินาที
RetryCount INT จำนวนครั้งที่ Retry

ระบบเวชระเบียนเป็นระบบหลักที่ระบบอื่นๆ จะอ้างอิงข้อมูลผู้ป่วยและการเข้ารับบริการ โดยมีการเชื่อมโยงดังนี้:

8.2.4.1 การเชื่อมโยงกับระบบการเงิน (1.2.14)

การอ้างอิงข้อมูลไปยังระบบการเงิน:

-- ระบบการเงินจะอ้างอิงข้อมูลจากระบบเวชระเบียน
FinancialSystem.BILLING (
    BillingID VARCHAR(20) PK,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    VisitID VARCHAR(20) FK  MedicalRecord.VISIT.VisitID,
    -- ข้อมูลการเงินอื่นๆ
)

8.2.4.2 การเชื่อมโยงกับระบบตรวจสอบสิทธิ (1.2.15)

การอ้างอิงข้อมูลไปยังระบบตรวจสอบสิทธิ:

-- ระบบตรวจสอบสิทธิจะอ้างอิงข้อมูลผู้ป่วยจากระบบเวชระเบียน
RightsSystem.PATIENTRIGHT (
    PatientRightID VARCHAR(20) PK,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    -- ข้อมูลสิทธิอื่นๆ
)

-- ระบบเวชระเบียนจะอ้างอิงประเภทสิทธิจากระบบตรวจสอบสิทธิ
MedicalRecord.VISIT_RIGHTS (
    RightTypeID VARCHAR(10) FK  RightsSystem.RIGHTTYPE.RightTypeID
)

8.2.4.3 การเชื่อมโยงกับระบบห้องตรวจแพทย์ (1.2.3)

การอ้างอิงข้อมูลไปยังระบบห้องตรวจ:

-- ระบบห้องตรวจจะอ้างอิงข้อมูลการส่งตรวจจากระบบเวชระเบียน
ExamRoomSystem.EXAMINATION (
    ExamID VARCHAR(20) PK,
    VisitID VARCHAR(20) FK  MedicalRecord.VISIT.VisitID,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    -- ข้อมูลการตรวจอื่นๆ
)

8.2.4.4 การเชื่อมโยงกับระบบเภสัชกรรม (1.2.13)

การอ้างอิงข้อมูลไปยังระบบเภสัชกรรม:

-- ระบบเภสัชกรรมจะอ้างอิงข้อมูลผู้ป่วยและการเข้ารับบริการ
PharmacySystem.PRESCRIPTION (
    PrescriptionID VARCHAR(20) PK,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    VisitID VARCHAR(20) FK  MedicalRecord.VISIT.VisitID,
    -- ข้อมูลใบสั่งยาอื่นๆ
)

8.2.4.5 การเชื่อมโยงกับระบบรังสีวิทยาและชันสูตร (1.2.7, 1.2.8)

การอ้างอิงข้อมูลไปยังระบบ Lab/X-Ray:

-- ระบบชันสูตรจะอ้างอิงข้อมูลผู้ป่วยและการเข้ารับบริการ
LabSystem.LAB_ORDER (
    LabOrderID VARCHAR(20) PK,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    VisitID VARCHAR(20) FK  MedicalRecord.VISIT.VisitID,
    -- ข้อมูล Lab Order อื่นๆ
)

-- ระบบรังสีวิทยาจะอ้างอิงข้อมูลผู้ป่วยและการเข้ารับบริการ
RadiologySystem.XRAY_ORDER (
    XrayOrderID VARCHAR(20) PK,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    VisitID VARCHAR(20) FK  MedicalRecord.VISIT.VisitID,
    -- ข้อมูล X-Ray Order อื่นๆ
)

8.2.4.6 การเชื่อมโยงกับระบบผู้ป่วยใน (1.2.17)

Table: ADMISSION (การรับเข้าผู้ป่วยใน)

วัตถุประสงค์: เก็บข้อมูลการรับผู้ป่วยเข้าพักรักษาใน รวมถึงการ Admit และ Discharge

Field Type Key Description
AN VARCHAR(15) PK Admission Number
HN VARCHAR(10) FK รหัสผู้ป่วย
VisitID VARCHAR(20) FK รหัส Visit ที่ทำการ Admit
AdmitDate DATETIME วันที่รับเข้า
AdmitWard NVARCHAR(50) หอผู้ป่วยที่รับเข้า
AdmitBed VARCHAR(10) เตียงที่รับเข้า
AdmitDoctor NVARCHAR(100) แพทย์ที่รับเข้า
AdmitDiagnosis NTEXT การวินิจฉัยเบื้องต้น
DischargeDate DATETIME วันที่จำหน่าย
DischargeType VARCHAR(20) ประเภทการจำหน่าย
Status VARCHAR(20) สถานะ (ADMITTED/DISCHARGED/TRANSFERRED)
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก

8.2.4.7 การเชื่อมโยงกับระบบนัดหมายและตารางเวรแพทย์ (1.2.6)

การอ้างอิงข้อมูลไปยังระบบนัดหมาย:

-- ระบบนัดหมายจะอ้างอิงข้อมูลผู้ป่วยและการนัดหมายจากระบบเวชระเบียน
ScheduleSystem.DOCTOR_APPOINTMENT (
    DoctorAppointmentID VARCHAR(20) PK,
    AppointmentID VARCHAR(20) FK  MedicalRecord.APPOINTMENT.AppointmentID,
    HN VARCHAR(10) FK  MedicalRecord.PATIENT.HN,
    DoctorScheduleID VARCHAR(20), -- อ้างอิงตารางเวรแพทย์
    -- ข้อมูลอื่นๆ
)

Integration Notes:

การแยกขอบเขตความรับผิดชอบ (Separation of Concerns):

  1. ระบบเวชระเบียน (1.2.1) = ระบบหลักที่เก็บข้อมูลผู้ป่วยและการเข้ารับบริการพื้นฐาน
  2. ระบบอื่นๆ = อ้างอิงข้อมูลจากระบบเวชระเบียนผ่าน Foreign Key HN และ VisitID

หลักการอ้างอิง: ระบบเวชระเบียนจะเป็น Master Data สำหรับข้อมูลผู้ป่วย (HN) และการเข้ารับบริการ (VisitID) ที่ระบบอื่นๆ จะอ้างอิงเป็นหลัก

ความสอดคล้องกับ TOR: ตาม TOR 1.2.1.2 ข้อ 11 "สามารถยืมแฟ้มเวชระเบียนอัตโนมัติเมื่อบันทึกส่งตรวจ" และข้อ 13 "สามารถส่งตรวจผู้ป่วยได้มากกว่า 1 แผนก" ระบบจะต้องสามารถเชื่อมโยงกับระบบอื่นๆ ได้อย่างราบรื่น

8.2.5 ความสัมพันธ์ระหว่างตาราง (Relationships)

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

  • 🔵 สีน้ำเงิน (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 - การเชื่อมโยงระบบ

📋 Entity Relationship Diagram (ERD)

สำหรับ ERD แบบละเอียดและแผนภาพความสัมพันธ์ระหว่างตารางทั้งหมด กรุณาดูไฟล์:

📁 ER Diagram.md

ไฟล์ดังกล่าวประกอบด้วย: - แผนภาพแบบง่าย (Simplified Diagram) - ERD แบบละเอียด (Detailed ERD) - Integration Architecture Diagram - Database Relationships Summary

สรุปความสัมพันธ์หลัก:

  1. PATIENT เป็นตารางหลักที่เชื่อมโยงกับตารางอื่นๆ ผ่าน HN
  2. VISIT เก็บข้อมูลการเข้ารับบริการ เชื่อมโยงกับ PATIENT ผ่าน HN
  3. Master Data Tables ให้ข้อมูลอ้างอิงสำหรับ dropdown และ validation
  4. Integration Tables จัดการการเชื่อมต่อกับระบบอื่นผ่าน API

🔗 ความสัมพันธ์การ Integration: - ระบบเวชระเบียนเป็น Master Data Source สำหรับ HN และ VisitID - ระบบอื่นๆ อ้างอิงข้อมูลผ่าน API Integration - การติดตาม API calls ผ่าน SYSTEM_INTEGRATION_LOG - การจัดการ endpoints ผ่าน API_ENDPOINTS

8.2.6 Index และ Constraints

Primary Keys (ตารางหลักของระบบเวชระเบียน): - PATIENT.HN (PK) - VISIT.VisitID (PK) - ADMISSION.AN (PK) - PATIENT_ADDRESS.AddressID (PK) - PATIENT_CONTACT.ContactID (PK) - CHART_BORROWING.BorrowingID (PK) - APPOINTMENT.AppointmentID (PK)

Foreign Keys (ความสัมพันธ์ภายในระบบ):

-- ความสัมพันธ์หลักของผู้ป่วย
ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_TITLE 
FOREIGN KEY (TitleID) REFERENCES TITLE_NAME(TitleID);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_GENDER 
FOREIGN KEY (GenderCode) REFERENCES GENDER(GenderCode);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_BLOODGROUP 
FOREIGN KEY (BloodGroupID) REFERENCES BLOOD_GROUP(BloodGroupID);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_MARITAL 
FOREIGN KEY (MaritalStatusCode) REFERENCES MARITAL_STATUS(MaritalStatusCode);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_RACE 
FOREIGN KEY (RaceCode) REFERENCES RACE(RaceCode);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_NATIONALITY 
FOREIGN KEY (NationalityCode) REFERENCES NATIONALITY(NationalityCode);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_OCCUPATION 
FOREIGN KEY (OccupationGroupCode) REFERENCES OCCUPATION_GROUP(OccupationGroupCode);

ALTER TABLE PATIENT 
ADD CONSTRAINT FK_PATIENT_RELIGION 
FOREIGN KEY (ReligionID) REFERENCES RELIGION(ReligionID);

-- ความสัมพันธ์ของที่อยู่
ALTER TABLE PATIENT_ADDRESS 
ADD CONSTRAINT FK_PATIENT_ADDRESS_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_ADDRESS 
ADD CONSTRAINT FK_PATIENT_ADDRESS_SUBDISTRICT 
FOREIGN KEY (SubdistrictCode) REFERENCES SUBDISTRICT(SubdistrictCode);

ALTER TABLE PATIENT_ADDRESS 
ADD CONSTRAINT FK_PATIENT_ADDRESS_DISTRICT 
FOREIGN KEY (DistrictCode) REFERENCES DISTRICT(DistrictCode);

ALTER TABLE PATIENT_ADDRESS 
ADD CONSTRAINT FK_PATIENT_ADDRESS_PROVINCE 
FOREIGN KEY (ProvinceCode) REFERENCES PROVINCE(ProvinceCode);

-- ความสัมพันธ์ของผู้ติดต่อ
ALTER TABLE PATIENT_CONTACT 
ADD CONSTRAINT FK_PATIENT_CONTACT_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_CONTACT 
ADD CONSTRAINT FK_PATIENT_CONTACT_RELATIONSHIP 
FOREIGN KEY (RelationshipCode) REFERENCES RELATIONSHIP(RelationshipCode);

-- ความสัมพันธ์ของข้อมูลครอบครัว
ALTER TABLE PATIENT_FAMILY_INFO 
ADD CONSTRAINT FK_PATIENT_FAMILY_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_FAMILY_INFO 
ADD CONSTRAINT FK_PATIENT_FAMILY_EDUCATION 
FOREIGN KEY (EducationLevelCode) REFERENCES EDUCATION_LEVEL(EducationLevelCode);

ALTER TABLE PATIENT_MEDICAL_HISTORY 
ADD CONSTRAINT FK_PATIENT_MEDICAL_HISTORY_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_OFFICER_INFO 
ADD CONSTRAINT FK_PATIENT_OFFICER_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_ALIEN_INFO 
ADD CONSTRAINT FK_PATIENT_ALIEN_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

-- ความสัมพันธ์ของการมารับบริการ
ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_TYPE 
FOREIGN KEY (VisitTypeCode) REFERENCES VISIT_TYPE(VisitTypeCode);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_PATIENT_TYPE 
FOREIGN KEY (PatientTypeCode) REFERENCES PATIENT_TYPE(PatientTypeCode);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_URGENCY 
FOREIGN KEY (UrgencyCode) REFERENCES URGENCY_LEVEL(UrgencyCode);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_CONDITION 
FOREIGN KEY (ConditionCode) REFERENCES PATIENT_CONDITION(ConditionCode);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_DEPARTMENT 
FOREIGN KEY (DepartmentCode) REFERENCES DEPARTMENT(DepartmentCode);

ALTER TABLE VISIT 
ADD CONSTRAINT FK_VISIT_ROOM 
FOREIGN KEY (RoomCode) REFERENCES ROOM(RoomCode);

ALTER TABLE ADMISSION 
ADD CONSTRAINT FK_ADMISSION_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE ADMISSION 
ADD CONSTRAINT FK_ADMISSION_VISIT 
FOREIGN KEY (VisitID) REFERENCES VISIT(VisitID);

-- ความสัมพันธ์ของการยืมแฟ้ม
ALTER TABLE CHART_BORROWING 
ADD CONSTRAINT FK_CHART_BORROWING_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE CHART_BORROWING 
ADD CONSTRAINT FK_CHART_BORROWING_VISIT 
FOREIGN KEY (VisitID) REFERENCES VISIT(VisitID);

ALTER TABLE CHART_BORROWING 
ADD CONSTRAINT FK_CHART_BORROWING_AN 
FOREIGN KEY (AN) REFERENCES ADMISSION(AN);

-- ความสัมพันธ์ของการนัดหมาย
ALTER TABLE APPOINTMENT 
ADD CONSTRAINT FK_APPOINTMENT_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

ALTER TABLE APPOINTMENT 
ADD CONSTRAINT FK_APPOINTMENT_DEPARTMENT 
FOREIGN KEY (DepartmentCode) REFERENCES DEPARTMENT(DepartmentCode);

ALTER TABLE APPOINTMENT 
ADD CONSTRAINT FK_APPOINTMENT_ROOM 
FOREIGN KEY (RoomCode) REFERENCES ROOM(RoomCode);

ALTER TABLE APPOINTMENT 
ADD CONSTRAINT FK_APPOINTMENT_TYPE 
FOREIGN KEY (AppointmentTypeCode) REFERENCES APPOINTMENT_TYPE(AppointmentTypeCode);

ALTER TABLE APPOINTMENT 
ADD CONSTRAINT FK_APPOINTMENT_STATUS 
FOREIGN KEY (StatusCode) REFERENCES APPOINTMENT_STATUS(StatusCode);

-- ความสัมพันธ์ของประวัติและหมายเหตุ
ALTER TABLE HN_HISTORY 
ADD CONSTRAINT FK_HN_HISTORY_CURRENT 
FOREIGN KEY (CurrentHN) REFERENCES PATIENT(HN);

ALTER TABLE PATIENT_NOTES 
ADD CONSTRAINT FK_PATIENT_NOTES_HN 
FOREIGN KEY (HN) REFERENCES PATIENT(HN);

-- ความสัมพันธ์ของ Master Data ภูมิศาสตร์
ALTER TABLE PROVINCE 
ADD CONSTRAINT FK_PROVINCE_REGION 
FOREIGN KEY (RegionID) REFERENCES REGION(RegionID);

ALTER TABLE DISTRICT 
ADD CONSTRAINT FK_DISTRICT_PROVINCE 
FOREIGN KEY (ProvinceCode) REFERENCES PROVINCE(ProvinceCode);

ALTER TABLE SUBDISTRICT 
ADD CONSTRAINT FK_SUBDISTRICT_DISTRICT 
FOREIGN KEY (DistrictCode) REFERENCES DISTRICT(DistrictCode);

-- ความสัมพันธ์ของแผนก/ห้อง
ALTER TABLE DEPARTMENT 
ADD CONSTRAINT FK_DEPARTMENT_PARENT 
FOREIGN KEY (ParentDepartmentCode) REFERENCES DEPARTMENT(DepartmentCode);

ALTER TABLE ROOM 
ADD CONSTRAINT FK_ROOM_DEPARTMENT 
FOREIGN KEY (DepartmentCode) REFERENCES DEPARTMENT(DepartmentCode);

Foreign Keys (การเชื่อมต่อกับระบบอื่น):

-- การอ้างอิงไปยังระบบตรวจสอบสิทธิ
ALTER TABLE VISIT_RIGHTS 
ADD CONSTRAINT FK_VISIT_RIGHTS_RIGHTTYPE 
FOREIGN KEY (RightTypeID) REFERENCES RightsSystem.RIGHTTYPE(RightTypeID);

Indexes (สำหรับประสิทธิภาพการค้นหา):

-- Indexes สำหรับการค้นหาผู้ป่วย (ตาม TOR 1.2.1.1 ข้อ 19 และ 1.2.1.2 ข้อ 1)
CREATE INDEX IX_PATIENT_CITIZENID ON PATIENT(CitizenID);
CREATE INDEX IX_PATIENT_FIRSTNAME ON PATIENT(FirstName);
CREATE INDEX IX_PATIENT_LASTNAME ON PATIENT(LastName);
CREATE INDEX IX_PATIENT_FULLNAME ON PATIENT(FirstName, LastName);
CREATE INDEX IX_PATIENT_PASSPORTNUMBER ON PATIENT(PassportNumber);
CREATE INDEX IX_PATIENT_ALIENID ON PATIENT(AlienID);
CREATE INDEX IX_PATIENT_TITLE ON PATIENT(TitleID);
CREATE INDEX IX_PATIENT_GENDER ON PATIENT(GenderCode);
CREATE INDEX IX_PATIENT_BLOODGROUP ON PATIENT(BloodGroupID);

-- Indexes สำหรับการใช้งานประจำ
CREATE INDEX IX_VISIT_DATE ON VISIT(VisitDate);
CREATE INDEX IX_VISIT_STATUS ON VISIT(Status);
CREATE INDEX IX_VISIT_DEPARTMENT ON VISIT(DepartmentCode);
CREATE INDEX IX_VISIT_HN_DATE ON VISIT(HN, VisitDate);
CREATE INDEX IX_VISIT_TYPE ON VISIT(VisitTypeCode);
CREATE INDEX IX_VISIT_URGENCY ON VISIT(UrgencyCode);

CREATE INDEX IX_ADMISSION_DATE ON ADMISSION(AdmitDate);
CREATE INDEX IX_ADMISSION_WARD ON ADMISSION(AdmitWard);
CREATE INDEX IX_ADMISSION_STATUS ON ADMISSION(Status);

CREATE INDEX IX_CHART_BORROWING_STATUS ON CHART_BORROWING(Status);
CREATE INDEX IX_CHART_BORROWING_DATE ON CHART_BORROWING(BorrowDate);
CREATE INDEX IX_CHART_BORROWING_BARCODE ON CHART_BORROWING(BarcodeID);

CREATE INDEX IX_APPOINTMENT_DATE ON APPOINTMENT(AppointmentDate);
CREATE INDEX IX_APPOINTMENT_STATUS ON APPOINTMENT(StatusCode);
CREATE INDEX IX_APPOINTMENT_DEPARTMENT ON APPOINTMENT(DepartmentCode);
CREATE INDEX IX_APPOINTMENT_TYPE ON APPOINTMENT(AppointmentTypeCode);

-- Indexes สำหรับ Master Data Lookup
CREATE INDEX IX_TITLE_NAME_CODE ON TITLE_NAME(TitleCode);
CREATE INDEX IX_TITLE_NAME_CATEGORY ON TITLE_NAME(Category);
CREATE INDEX IX_BLOODGROUP_GROUP ON BLOOD_GROUP(BloodGroup);
CREATE INDEX IX_PROVINCE_REGION ON PROVINCE(RegionID);
CREATE INDEX IX_DISTRICT_PROVINCE ON DISTRICT(ProvinceCode);
CREATE INDEX IX_SUBDISTRICT_DISTRICT ON SUBDISTRICT(DistrictCode);
CREATE INDEX IX_SUBDISTRICT_POSTAL ON SUBDISTRICT(PostalCode);
CREATE INDEX IX_DEPARTMENT_TYPE ON DEPARTMENT(DepartmentType);
CREATE INDEX IX_ROOM_DEPARTMENT ON ROOM(DepartmentCode);
CREATE INDEX IX_ROOM_TYPE ON ROOM(RoomType);

-- Indexes สำหรับ Address Lookup
CREATE INDEX IX_PATIENT_ADDRESS_SUBDISTRICT ON PATIENT_ADDRESS(SubdistrictCode);
CREATE INDEX IX_PATIENT_ADDRESS_DISTRICT ON PATIENT_ADDRESS(DistrictCode);
CREATE INDEX IX_PATIENT_ADDRESS_PROVINCE ON PATIENT_ADDRESS(ProvinceCode);
CREATE INDEX IX_PATIENT_ADDRESS_POSTAL ON PATIENT_ADDRESS(PostalCode);

-- Indexes สำหรับ Audit และ Security
CREATE INDEX IX_AUDIT_LOG_DATE ON AUDIT_LOG(ChangeDate);
CREATE INDEX IX_AUDIT_LOG_USER ON AUDIT_LOG(UserID);
CREATE INDEX IX_AUDIT_LOG_HN ON AUDIT_LOG(HN);

Unique Constraints:

-- ป้องกันข้อมูลซ้ำ (ตาม TOR 1.2.1.1 การป้องกันข้อมูลซ้ำซ้อน)
ALTER TABLE PATIENT 
ADD CONSTRAINT UQ_PATIENT_CITIZENID UNIQUE (CitizenID);

ALTER TABLE PATIENT 
ADD CONSTRAINT UQ_PATIENT_PASSPORTNUMBER UNIQUE (PassportNumber);

ALTER TABLE PATIENT 
ADD CONSTRAINT UQ_PATIENT_ALIENID UNIQUE (AlienID);

-- ป้องกันการยืมแฟ้มซ้ำ
ALTER TABLE CHART_BORROWING 
ADD CONSTRAINT UQ_CHART_BORROWING_ACTIVE 
UNIQUE (HN, Status) 
WHERE Status = 'BORROWED';

Check Constraints:

-- ตรวจสอบความถูกต้องของข้อมูล
ALTER TABLE PATIENT 
ADD CONSTRAINT CHK_PATIENT_GENDER 
CHECK (Gender IN ('M', 'F', 'O'));

ALTER TABLE PATIENT 
ADD CONSTRAINT CHK_PATIENT_AGE 
CHECK (Age >= 0 AND Age <= 150);

ALTER TABLE VISIT 
ADD CONSTRAINT CHK_VISIT_TYPE 
CHECK (VisitType IN ('OPD', 'IPD', 'ER', 'PCU', 'UNIT'));

ALTER TABLE VISIT 
ADD CONSTRAINT CHK_VISIT_URGENCY 
CHECK (Urgency IN ('HIGHEST', 'HIGH', 'NORMAL'));

ALTER TABLE CHART_BORROWING 
ADD CONSTRAINT CHK_CHART_STATUS 
CHECK (Status IN ('BORROWED', 'RETURNED', 'OVERDUE', 'LOST'));

ALTER TABLE APPOINTMENT 
ADD CONSTRAINT CHK_APPOINTMENT_STATUS 
CHECK (Status IN ('SCHEDULED', 'CONFIRMED', 'COMPLETED', 'CANCELLED', 'NOSHOW'));

8.2.7 Views สำหรับการใช้งาน

Views สำหรับการแสดงข้อมูลรวม:

-- View ข้อมูลผู้ป่วยพร้อมที่อยู่หลักและ Master Data
CREATE VIEW PatientWithAddressView AS
SELECT 
    p.HN, p.CitizenID, 
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS FullNameTH,
    t.TitleNameEN + p.FirstName + ' ' + p.LastName AS FullNameEN,
    g.GenderNameTH, g.GenderNameEN,
    p.DateOfBirth, p.Age, 
    bg.DisplayName AS BloodGroupDisplay, bg.NameTH AS BloodGroupTH,
    ms.MaritalStatusNameTH, ms.MaritalStatusNameEN,
    r.RaceNameTH, r.RaceNameEN,
    n.NationalityNameTH, n.NationalityNameEN,
    og.OccupationGroupNameTH, p.OccupationDetail,
    rel.ReligionNameTH, rel.ReligionNameEN,
    pa.HouseNumber, pa.VillageNumber, pa.Street, 
    sd.SubdistrictNameTH, d.DistrictNameTH, pr.ProvinceNameTH,
    pa.PostalCode, pa.PhoneNumber, pa.Email,
    p.IsDeceased, p.CreatedDate
FROM 
    PATIENT p
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
    LEFT JOIN GENDER g ON p.GenderCode = g.GenderCode
    LEFT JOIN BLOOD_GROUP bg ON p.BloodGroupID = bg.BloodGroupID
    LEFT JOIN MARITAL_STATUS ms ON p.MaritalStatusCode = ms.MaritalStatusCode
    LEFT JOIN RACE r ON p.RaceCode = r.RaceCode
    LEFT JOIN NATIONALITY n ON p.NationalityCode = n.NationalityCode
    LEFT JOIN OCCUPATION_GROUP og ON p.OccupationGroupCode = og.OccupationGroupCode
    LEFT JOIN RELIGION rel ON p.ReligionID = rel.ReligionID
    LEFT JOIN PATIENT_ADDRESS pa ON p.HN = pa.HN AND pa.IsDefault = 1
    LEFT JOIN SUBDISTRICT sd ON pa.SubdistrictCode = sd.SubdistrictCode
    LEFT JOIN DISTRICT d ON pa.DistrictCode = d.DistrictCode
    LEFT JOIN PROVINCE pr ON pa.ProvinceCode = pr.ProvinceCode;

-- View ข้อมูลการเข้ารับบริการพร้อม Master Data
CREATE VIEW PatientVisitView AS
SELECT 
    v.VisitID, v.HN, v.VisitDate, 
    vt.VisitTypeNameTH, vt.VisitTypeNameEN,
    pt.PatientTypeNameTH, pt.PatientTypeNameEN,
    ul.UrgencyNameTH, ul.UrgencyNameEN, ul.Priority, ul.ColorCode AS UrgencyColor,
    pc.ConditionNameTH, pc.ConditionNameEN,
    v.ChiefComplaint, v.QueueNumber, 
    d.DepartmentNameTH, d.DepartmentNameEN,
    rm.RoomNameTH, rm.RoomNameEN,
    v.Doctor, v.Status, v.IsAdvanceBooking,
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    p.CitizenID, p.Age,
    g.GenderNameTH, bg.DisplayName AS BloodGroup
FROM 
    VISIT v
    INNER JOIN PATIENT p ON v.HN = p.HN
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
    LEFT JOIN GENDER g ON p.GenderCode = g.GenderCode
    LEFT JOIN BLOOD_GROUP bg ON p.BloodGroupID = bg.BloodGroupID
    LEFT JOIN VISIT_TYPE vt ON v.VisitTypeCode = vt.VisitTypeCode
    LEFT JOIN PATIENT_TYPE pt ON v.PatientTypeCode = pt.PatientTypeCode
    LEFT JOIN URGENCY_LEVEL ul ON v.UrgencyCode = ul.UrgencyCode
    LEFT JOIN PATIENT_CONDITION pc ON v.ConditionCode = pc.ConditionCode
    LEFT JOIN DEPARTMENT d ON v.DepartmentCode = d.DepartmentCode
    LEFT JOIN ROOM rm ON v.RoomCode = rm.RoomCode;

-- View สถานะแฟ้มเวชระเบียน (ตาม TOR 1.2.1.4)
CREATE VIEW ChartStatusView AS
SELECT 
    p.HN, t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    cb.BorrowingID, cb.ChartType, cb.BorrowDate, cb.BorrowTime,
    cb.BorrowerID, cb.BorrowDepartment, cb.BorrowReason,
    cb.ReturnDate, cb.ReturnTime, cb.Status,
    cl.CurrentLocation, cl.LocationType,
    CASE 
        WHEN cb.Status = 'BORROWED' THEN 'ถูกยืม'
        WHEN cb.Status = 'RETURNED' THEN 'คืนแล้ว'
        WHEN cb.Status = 'OVERDUE' THEN 'เกินกำหนด'
        WHEN cb.Status = 'LOST' THEN 'สูญหาย'
        ELSE 'ไม่ระบุ'
    END AS StatusThai
FROM 
    PATIENT p
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
    LEFT JOIN CHART_BORROWING cb ON p.HN = cb.HN AND cb.Status IN ('BORROWED', 'OVERDUE')
    LEFT JOIN CHART_LOCATION cl ON p.HN = cl.HN;

-- View การนัดหมายพร้อม Master Data (ตาม TOR 1.2.1.5)
CREATE VIEW AppointmentView AS
SELECT 
    a.AppointmentID, a.HN, a.AppointmentDate, a.AppointmentTime,
    d.DepartmentNameTH, d.DepartmentNameEN,
    rm.RoomNameTH, rm.RoomNameEN,
    a.DoctorID,
    at.AppointmentTypeNameTH, at.AppointmentTypeNameEN, at.ColorCode AS TypeColor,
    ast.StatusNameTH, ast.StatusNameEN, ast.ColorCode AS StatusColor,
    a.IsChartPrepared, a.Notes,
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    p.CitizenID, p.Age, g.GenderNameTH,
    pa.PhoneNumber
FROM 
    APPOINTMENT a
    INNER JOIN PATIENT p ON a.HN = p.HN
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
    LEFT JOIN GENDER g ON p.GenderCode = g.GenderCode
    LEFT JOIN DEPARTMENT d ON a.DepartmentCode = d.DepartmentCode
    LEFT JOIN ROOM rm ON a.RoomCode = rm.RoomCode
    LEFT JOIN APPOINTMENT_TYPE at ON a.AppointmentTypeCode = at.AppointmentTypeCode
    LEFT JOIN APPOINTMENT_STATUS ast ON a.StatusCode = ast.StatusCode
    LEFT JOIN PATIENT_ADDRESS pa ON p.HN = pa.HN AND pa.IsDefault = 1;

-- View ประวัติการเปลี่ยน HN (ตาม TOR 1.2.1.6)
CREATE VIEW HNHistoryView AS
SELECT 
    hh.HNHistoryID, hh.CurrentHN, hh.OldHN, hh.ChangeType,
    hh.ChangeReason, hh.ChangeDate, hh.ChangedBy, hh.ApprovedBy,
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    p.CitizenID
FROM 
    HN_HISTORY hh
    LEFT JOIN PATIENT p ON hh.CurrentHN = p.HN
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID;

-- View รายงานการยืมแฟ้มค้างส่ง (ตาม TOR 1.2.1.4 ข้อ 2)
CREATE VIEW OverdueChartView AS
SELECT 
    cb.BorrowingID, cb.HN, cb.ChartType, cb.BorrowDate,
    cb.BorrowerID, cb.BorrowDepartment, cb.BorrowerPhone,
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    DATEDIFF(DAY, cb.BorrowDate, GETDATE()) AS DaysOverdue
FROM 
    CHART_BORROWING cb
    INNER JOIN PATIENT p ON cb.HN = p.HN
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
WHERE 
    cb.Status = 'BORROWED' 
    AND DATEDIFF(DAY, cb.BorrowDate, GETDATE()) > 7; -- เกิน 7 วันถือว่าค้าง

-- View ข้อมูลครอบครัวและการศึกษา
CREATE VIEW PatientFamilyEducationView AS
SELECT 
    pfi.HN,
    t.TitleNameTH + p.FirstName + ' ' + p.LastName AS PatientNameTH,
    pfi.FamilyStatus, pfi.PersonStatus, pfi.PersonType, pfi.CommunityPosition,
    el.EducationLevelNameTH, el.EducationLevelNameEN,
    og.OccupationGroupNameTH, p.OccupationDetail
FROM 
    PATIENT_FAMILY_INFO pfi
    INNER JOIN PATIENT p ON pfi.HN = p.HN
    LEFT JOIN TITLE_NAME t ON p.TitleID = t.TitleID
    LEFT JOIN EDUCATION_LEVEL el ON pfi.EducationLevelCode = el.EducationLevelCode
    LEFT JOIN OCCUPATION_GROUP og ON p.OccupationGroupCode = og.OccupationGroupCode;

8.2.8 Stored Procedures สำหรับฟังก์ชันพิเศษ

-- Procedure สำหรับการรวม HN (ตาม TOR 1.2.1.6 ข้อ 1)
CREATE PROCEDURE sp_MergeHN
    @SourceHN VARCHAR(10),
    @TargetHN VARCHAR(10),
    @UserID VARCHAR(50),
    @Reason NTEXT
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN TRANSACTION;

    TRY
        -- บันทึกประวัติการรวม HN
        INSERT INTO HN_HISTORY (HNHistoryID, CurrentHN, OldHN, ChangeType, ChangeReason, ChangeDate, ChangedBy)
        VALUES (NEWID(), @TargetHN, @SourceHN, 'MERGE', @Reason, GETDATE(), @UserID);

        -- ย้ายข้อมูล Visit
        UPDATE VISIT SET HN = @TargetHN WHERE HN = @SourceHN;

        -- ย้ายข้อมูล Chart Borrowing
        UPDATE CHART_BORROWING SET HN = @TargetHN WHERE HN = @SourceHN;

        -- ย้ายข้อมูลอื่นๆ
        UPDATE PATIENT_ADDRESS SET HN = @TargetHN WHERE HN = @SourceHN;
        UPDATE PATIENT_CONTACT SET HN = @TargetHN WHERE HN = @SourceHN;
        UPDATE PATIENT_MEDICAL_HISTORY SET HN = @TargetHN WHERE HN = @SourceHN;
        UPDATE APPOINTMENT SET HN = @TargetHN WHERE HN = @SourceHN;
        UPDATE PATIENT_NOTES SET HN = @TargetHN WHERE HN = @SourceHN;

        -- ลบ Patient เดิม
        DELETE FROM PATIENT WHERE HN = @SourceHN;

        COMMIT TRANSACTION;

        SELECT 'SUCCESS' AS Result, 'HN Merged Successfully' AS Message;

    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;

        SELECT 'ERROR' AS Result, ERROR_MESSAGE() AS Message;
    END CATCH
END;

-- Procedure สำหรับการคำนวณอายุ (ตาม TOR 1.2.1.1 ข้อ 9, 10)
CREATE PROCEDURE sp_CalculateAge
    @DateOfBirth DATE,
    @Age INT OUTPUT,
    @AgeInDays INT OUTPUT
AS
BEGIN
    SET @Age = DATEDIFF(YEAR, @DateOfBirth, GETDATE()) - 
               CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, @DateOfBirth, GETDATE()), @DateOfBirth) > GETDATE() 
                    THEN 1 ELSE 0 END;

    SET @AgeInDays = DATEDIFF(DAY, @DateOfBirth, GETDATE());
END;


การแยกฟีเจอร์เพื่อลดการซ้ำซ้อน (Feature Separation)

ฟีเจอร์ที่ย้ายไประบบอื่น

🔄 ย้ายไประบบซักประวัติ (1.2.2)

  • การจัดการประวัติการแพ้ยารายละเอียด (Drug Allergy Management)
  • การบันทึก Chief Complaint และ History Taking
  • การจัดการ Vital Signs และ Physical Examination
  • การบันทึกการสั่ง Lab/X-Ray รายละเอียด

💊 ย้ายไประบบเภสัชกรรม (1.2.13)

  • การสั่งจ่ายยาและเวชภัณฑ์
  • การตรวจสอบ Drug Interaction
  • การจัดการ Prescription Template
  • การพิมพ์ใบสั่งยา

🏥 ย้ายไประบบห้องตรวจแพทย์ (1.2.3)

  • การจัดการคิวผู้ป่วยรายละเอียด
  • การเรียกผู้ป่วยเข้าตรวจ
  • การบันทึกผลการตรวจ

🔐 ย้ายไประบบตรวจสอบสิทธิ (1.2.15)

  • การตรวจสอบสิทธิออนไลน์
  • การยืนยันสิทธิกับหน่วยงานภายนอก
  • การจัดการข้อมูลสิทธิรายละเอียด

API Integration Points

// Medical Record API Interface
interface MedicalRecordAPI {
  // การส่งข้อมูลไประบบอื่น
  sendToInsurance(patientData: PatientVisit): Promise<InsuranceResponse>
  sendToFinance(visitData: VisitBilling): Promise<BillCalculation>
  sendToPharmacy(visitId: string): Promise<PrescriptionStatus>
  sendToExamRoom(queueData: ExamQueue): Promise<QueueStatus>

  // การรับข้อมูลจากระบบอื่น
  getInsuranceRights(patientId: string): Promise<RightsList>
  getExamResults(visitId: string): Promise<ExamSummary>
  getPrescriptionStatus(visitId: string): Promise<DrugOrderStatus>
  getBillingStatus(visitId: string): Promise<PaymentStatus>
}

สรุปการปรับปรุง Schema ให้สอดคล้องกับ Master Data

การเปลี่ยนแปลงหลัก

1. เพิ่ม Master Data Tables ใหม่

  • ตารางข้อมูลส่วนบุคคล: TITLE_NAME, GENDER, BLOOD_GROUP, MARITAL_STATUS, RACE, NATIONALITY, RELIGION
  • ตารางการศึกษาและอาชีพ: EDUCATION_LEVEL, OCCUPATION_GROUP
  • ตารางภูมิศาสตร์: REGION, PROVINCE, DISTRICT, SUBDISTRICT
  • ตารางระบบสุขภาพ: PATIENT_TYPE, VISIT_TYPE, URGENCY_LEVEL, PATIENT_CONDITION
  • ตารางความสัมพันธ์: RELATIONSHIP
  • ตารางหน่วยงาน: DEPARTMENT, ROOM
  • ตารางการนัดหมาย: APPOINTMENT_TYPE, APPOINTMENT_STATUS

2. ปรับปรุงตาราง PATIENT เป็น Normalized Form

เปลี่ยนจาก direct text values เป็น Foreign Keys: - TitleNameTitleID (FK to TITLE_NAME) - GenderGenderCode (FK to GENDER) - BloodGroupBloodGroupID (FK to BLOOD_GROUP) - MaritalStatusMaritalStatusCode (FK to MARITAL_STATUS) - RaceRaceCode (FK to RACE) - NationalityNationalityCode (FK to NATIONALITY) - OccupationOccupationGroupCode (FK to OCCUPATION_GROUP) + OccupationDetail - ReligionReligionID (FK to RELIGION)

3. ปรับปรุงตาราง PATIENT_ADDRESS

  • SubdistrictSubdistrictCode (FK to SUBDISTRICT)
  • DistrictDistrictCode (FK to DISTRICT)
  • ProvinceProvinceCode (FK to PROVINCE)
  • CountryCountryCode

4. ปรับปรุงตาราง VISIT

  • VisitTypeVisitTypeCode (FK to VISIT_TYPE)
  • PatientTypePatientTypeCode (FK to PATIENT_TYPE)
  • UrgencyUrgencyCode (FK to URGENCY_LEVEL)
  • PatientConditionConditionCode (FK to PATIENT_CONDITION)
  • DepartmentDepartmentCode (FK to DEPARTMENT)
  • RoomRoomCode (FK to ROOM)

5. ปรับปรุงตาราง APPOINTMENT

  • DepartmentDepartmentCode (FK to DEPARTMENT)
  • AppointmentTypeAppointmentTypeCode (FK to APPOINTMENT_TYPE)
  • StatusStatusCode (FK to APPOINTMENT_STATUS)

ประโยชน์ที่ได้รับ

  1. Data Consistency: ข้อมูลมีความสอดคล้องและไม่ซ้ำซ้อน
  2. Data Integrity: ป้องกันข้อผิดพลาดจากการพิมพ์ผิด
  3. Multi-language Support: รองรับการแสดงผลภาษาไทยและอังกฤษ
  4. Easy Maintenance: แก้ไขข้อมูลได้จากที่เดียว
  5. Better Performance: ลดขนาดฐานข้อมูลและเพิ่มความเร็วในการค้นหา
  6. Standardization: สอดคล้องกับมาตรฐานของ Check List Master Data
  7. Integration Ready: พร้อมสำหรับการเชื่อมต่อกับระบบภายนอก

Compliance กับ TOR และ SRS

Schema ที่ปรับปรุงแล้วยังคงสอดคล้องกับ TOR และ SRS ของระบบเวชระเบียน: - ✅ รองรับการลงทะเบียนผู้ป่วยใหม่ตาม TOR 1.2.1.1 - ✅ รองรับการส่งตรวจผู้ป่วยตาม TOR 1.2.1.2
- ✅ รองรับการจัดการแฟ้มเวชระเบียนตาม TOR 1.2.1.4 - ✅ รองรับการนัดหมายตาม TOR 1.2.1.5 - ✅ เพิ่มประสิทธิภาพในการค้นหาและรายงาน - ✅ รองรับ Multi-language Interface - ✅ เตรียมพร้อมสำหรับการ Integration กับระบบอื่น

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