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

Database Schema Design

ระบบนัดหมายและตารางเวรแพทย์ (Appointment & Doctor Schedule System)

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


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


Database Schema Design

ER Diagram: รายละเอียด Entity-Relationship Diagram และความสัมพันธ์ระหว่างตารางแบบละเอียด ดูได้ในไฟล์ ER Diagram.md

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

  • ระบบเวชระเบียน (1.2.1): ข้อมูลผู้ป่วยหลักและ Visit
  • ระบบซักประวัติ (1.2.2): การนัดติดตามผลการรักษา
  • ระบบห้องตรวจแพทย์ (1.2.3): การนัดหลังการตรวจรักษา
  • ระบบงานชันสูตร (1.2.7): การสั่ง Lab ล่วงหน้าตามนัด
  • ระบบรังสีวิทยา (1.2.8): การสั่ง X-Ray ล่วงหน้าตามนัด
  • ระบบตรวจสอบสิทธิ (1.2.15): การตรวจสอบสิทธิสำหรับการนัด
  • ระบบจัดการคิว (Queue Management): การเรียกคิวตามนัดหมาย
  • ระบบผู้ดูแลระบบ (1.2.21): การจัดการข้อมูลพื้นฐานและตั้งค่า

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

หมายเหตุ: ตาราง PATIENT, VISIT จะอยู่ในระบบเวชระเบียน (1.2.1) ระบบนัดหมายจะอ้างอิงผ่าน Foreign Key เท่านั้น

8.2.1.1 ข้อมูลพื้นฐาน (Master Data)

Table: DOCTOR_QUOTA (โควต้าแพทย์)

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

Field Type Key Description
QuotaID VARCHAR(20) PK รหัสโควต้า
DoctorID VARCHAR(20) FK รหัสแพทย์
DoctorName NVARCHAR(100) ชื่อแพทย์
ClinicCode VARCHAR(10) FK รหัสคลินิก
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
DayOfWeek TINYINT วันในสัปดาห์ (1=จันทร์, 7=อาทิตย์)
EffectiveDate DATE วันที่เริ่มใช้งาน
ExpiryDate DATE วันที่สิ้นสุด
MaxPatients INT จำนวนผู้ป่วยสูงสุดต่อวัน
WalkInQuota INT โควต้าสำหรับ Walk-in
AppointmentQuota INT โควต้าสำหรับการนัดหมาย
EmergencyReserve INT โควต้าสำรองฉุกเฉิน
SpecialQuota INT โควต้าพิเศษ (วันหยุด/กรณีพิเศษ)
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด

Table: HOLIDAY_CALENDAR (ปฏิทินวันหยุด)

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

Field Type Key Description
HolidayID VARCHAR(20) PK รหัสวันหยุด
HolidayDate DATE วันที่หยุด
HolidayName NVARCHAR(100) ชื่อวันหยุด
HolidayType VARCHAR(20) ประเภทวันหยุด (PUBLIC/RELIGIOUS/SPECIAL/DOCTOR_PERSONAL)
DoctorID VARCHAR(20) FK รหัสแพทย์ (สำหรับวันหยุดส่วนตัว)
IsRecurring BIT เป็นวันหยุดประจำปี
RecurringPattern VARCHAR(50) รูปแบบการซ้ำ (ANNUAL/WEEKLY)
Description NTEXT รายละเอียดวันหยุด
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: PATIENT_PREPARATION (การปฏิบัติก่อนพบแพทย์)

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

Field Type Key Description
PreparationID VARCHAR(20) PK รหัสการเตรียมตัว
PreparationName NVARCHAR(100) ชื่อการเตรียมตัว
Instructions NTEXT คำแนะนำการปฏิบัติ
FastingRequired BIT ต้องงดอาหาร
FastingHours INT จำนวนชั่วโมงงดอาหาร
WaterRestriction BIT ต้องงดน้ำ
MedicationInstructions NTEXT คำแนะนำเรื่องยา
SpecialRequirements NTEXT ข้อกำหนดพิเศษ
RequiredDocuments NTEXT เอกสารที่ต้องนำมา
EstimatedTime INT เวลาโดยประมาณ (นาที)
ClinicCode VARCHAR(10) FK รหัสคลินิกที่เกี่ยวข้อง
DepartmentCode VARCHAR(10) FK รหัสแผนกที่เกี่ยวข้อง
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

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

วัตถุประสงค์: เก็บ Template การนัดหมายสำหรับแต่ละประเภทการรักษา ตาม SRS FR-4.3.9, FR-4.3.10

Field Type Key Description
TemplateID VARCHAR(20) PK รหัส Template
TemplateName NVARCHAR(100) ชื่อ Template
ClinicCode VARCHAR(10) FK รหัสคลินิก
AppointmentReason NTEXT สาเหตุการนัด
PreparationInstructions NTEXT คำแนะนำการเตรียมตัว
DefaultDuration INT ระยะเวลาเริ่มต้น (นาที)
RequiredPreparationID VARCHAR(20) FK รหัสการเตรียมตัวที่ต้องการ
LabTestRequired BIT ต้องตรวจ Lab
XRayRequired BIT ต้องตรวจ X-Ray
IsFollowUp BIT เป็นการนัดติดตาม
FollowUpDays INT จำนวนวันนัดติดตาม
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: DOCTOR_SCHEDULE (ตารางเวรแพทย์)

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

Field Type Key Description
ScheduleID VARCHAR(20) PK รหัสตารางเวร
DoctorID VARCHAR(20) FK รหัสแพทย์
DoctorName NVARCHAR(100) ชื่อแพทย์
WorkDate DATE วันที่ทำงาน
DayOfWeek TINYINT วันในสัปดาห์ (1=จันทร์, 7=อาทิตย์)
StartTime TIME เวลาเริ่มงาน
EndTime TIME เวลาเลิกงาน
BreakStartTime TIME เวลาเริ่มพัก
BreakEndTime TIME เวลาเลิกพัก
RoomCode VARCHAR(10) FK รหัสห้องตรวจ
ClinicCode VARCHAR(10) FK รหัสคลินิก
DepartmentCode VARCHAR(10) FK รหัสแผนก
ShiftType VARCHAR(20) ประเภทเวร (REGULAR/SPECIAL/OVERTIME/ON_CALL)
IsRecurring BIT เป็นตารางประจำ
RecurringPattern VARCHAR(50) รูปแบบการทำซ้ำ (WEEKLY/MONTHLY)
EffectiveDate DATE วันที่เริ่มใช้งาน
ExpiryDate DATE วันที่สิ้นสุด
MaxPatients INT จำนวนผู้ป่วยสูงสุดในเวรนี้
IsAvailable BIT พร้อมรับการนัด
UnavailableReason NVARCHAR(200) เหตุผลที่ไม่พร้อม
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
ApprovedBy VARCHAR(50) ผู้อนุมัติตารางเวร
ApprovedDate DATETIME วันที่อนุมัติ
Notes NTEXT หมายเหตุ

Table: DOCTOR_SCHEDULE_EXCEPTION (ข้อยกเว้นตารางเวรแพทย์)

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

Field Type Key Description
ExceptionID VARCHAR(20) PK รหัสข้อยกเว้น
DoctorID VARCHAR(20) FK รหัสแพทย์
ExceptionDate DATE วันที่มีข้อยกเว้น
ExceptionType VARCHAR(20) ประเภทข้อยกเว้น (LEAVE/SICK/TRAINING/EMERGENCY)
OriginalScheduleID VARCHAR(20) FK รหัสตารางเวรปกติ
IsWorking BIT ทำงานหรือไม่ในวันนี้
ModifiedStartTime TIME เวลาเริ่มงานที่เปลี่ยน
ModifiedEndTime TIME เวลาเลิกงานที่เปลี่ยน
ModifiedRoomCode VARCHAR(10) FK ห้องตรวจที่เปลี่ยน
ReplacementDoctorID VARCHAR(20) FK รหัสแพทย์ที่เข้าแทน
Reason NTEXT เหตุผล
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
ApprovedBy VARCHAR(50) ผู้อนุมัติ
ApprovedDate DATETIME วันที่อนุมัติ

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

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

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

Field Type Key Description
AppointmentID VARCHAR(20) PK รหัสการนัดหมาย
HN VARCHAR(10) FK รหัสผู้ป่วย (อ้างอิงจาก ระบบเวชระเบียน 1.2.1)
VisitID VARCHAR(20) FK รหัส Visit ที่เกี่ยวข้อง
AppointmentNumber VARCHAR(20) UK เลขที่การนัดหมาย (Auto Generate)
AppointmentDate DATE วันที่นัด
AppointmentTime TIME เวลาที่นัด
EstimatedDuration INT ระยะเวลาโดยประมาณ (นาที)
ClinicCode VARCHAR(10) FK รหัสคลินิกที่นัด
DepartmentCode VARCHAR(10) FK รหัสแผนกที่นัด
RoomCode VARCHAR(10) FK รหัสห้องตรวจที่นัด
DoctorID VARCHAR(20) FK รหัสแพทย์ผู้นัด
DoctorName NVARCHAR(100) ชื่อแพทย์ผู้นัด
AppointmentReason NTEXT สาเหตุการนัด
AppointmentType VARCHAR(20) ประเภทการนัด (NEW/FOLLOW_UP/EMERGENCY/CHECK_UP)
Priority VARCHAR(20) ระดับความสำคัญ (NORMAL/URGENT/EMERGENCY)
IsMultipleUnit BIT นัดหลายหน่วยตรวจ
MainAppointmentID VARCHAR(20) FK รหัสการนัดหลัก (สำหรับการนัดหลายหน่วย)
SequenceOrder INT ลำดับการนัด (สำหรับการนัดหลายหน่วย)
Status VARCHAR(20) สถานะการนัด (SCHEDULED/CONFIRMED/CANCELLED/COMPLETED/NO_SHOW)
CancelReason NTEXT สาเหตุการยกเลิก
IsFromTemplate BIT มาจาก Template
TemplateID VARCHAR(20) FK รหัส Template ที่ใช้
CreatedDate DATETIME วันที่บันทึก
CreatedBy VARCHAR(50) ผู้บันทึก
ConfirmedDate DATETIME วันที่ยืนยันการนัด
ConfirmedBy VARCHAR(50) ผู้ยืนยันการนัด
CompletedDate DATETIME วันที่เสร็จสิ้นการนัด
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
Notes NTEXT หมายเหตุเพิ่มเติม

Table: APPOINTMENT_PREPARATION (การเตรียมตัวสำหรับการนัด)

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

Field Type Key Description
AppointmentPrepID VARCHAR(20) PK รหัสการเตรียมตัว
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
PreparationID VARCHAR(20) FK รหัสการเตรียมตัว (อ้างอิง PATIENT_PREPARATION)
CustomInstructions NTEXT คำแนะนำเพิ่มเติม
IsRequired BIT จำเป็นต้องปฏิบัติ
IsPrinted BIT พิมพ์ในใบนัดแล้ว
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: APPOINTMENT_STATUS_HISTORY (ประวัติการเปลี่ยนสถานะ)

วัตถุประสงค์: เก็บประวัติการเปลี่ยนแปลงสถานะของการนัดหมาย ตาม SRS FR-4.3.12, FR-4.3.13

Field Type Key Description
StatusHistoryID VARCHAR(20) PK รหัสประวัติสถานะ
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
OldStatus VARCHAR(20) สถานะเดิม
NewStatus VARCHAR(20) สถานะใหม่
ChangeReason NTEXT เหตุผลการเปลี่ยน
OldAppointmentDate DATE วันที่นัดเดิม (กรณีเลื่อนนัด)
OldAppointmentTime TIME เวลานัดเดิม (กรณีเลื่อนนัด)
NewAppointmentDate DATE วันที่นัดใหม่ (กรณีเลื่อนนัด)
NewAppointmentTime TIME เวลานัดใหม่ (กรณีเลื่อนนัด)
ChangeDate DATETIME วันที่เปลี่ยน
ChangedBy VARCHAR(50) ผู้ทำการเปลี่ยน
ApprovedBy VARCHAR(50) ผู้อนุมัติ
Notes NTEXT หมายเหตุ

Table: APPOINTMENT_ATTENDANCE (การมาตามนัด)

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

Field Type Key Description
AttendanceID VARCHAR(20) PK รหัสการมาตามนัด
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
HN VARCHAR(10) FK รหัสผู้ป่วย
AttendanceStatus VARCHAR(20) สถานะการมา (SHOW/NO_SHOW/LATE/CANCELLED)
ActualArrivalTime DATETIME เวลาที่มาจริง
ActualStartTime DATETIME เวลาที่เริ่มตรวจจริง
ActualEndTime DATETIME เวลาที่เสร็จสิ้นการตรวจ
WaitingTime INT เวลารอคิว (นาที)
ServiceTime INT เวลาการตรวจ (นาที)
NoShowReason NTEXT เหตุผลไม่มาตามนัด
LateReason NTEXT เหตุผลมาสาย
IsFollowUpRequired BIT ต้องนัดติดตาม
NextAppointmentDate DATE วันที่นัดครั้งต่อไป
RecordedDate DATETIME วันที่บันทึก
RecordedBy VARCHAR(50) ผู้บันทึก
Notes NTEXT หมายเหตุ

8.2.1.3 ข้อมูลตารางเวรแพทย์

Table: DOCTOR_SCHEDULE (ตารางเวรแพทย์หลัก)

วัตถุประสงค์: เก็บข้อมูลตารางการทำงานของแพทย์แต่ละท่าน ตาม TOR ข้อ 1.2.6.1.4, 1.2.6.2.3

Field Type Key Description
ScheduleID VARCHAR(20) PK รหัสตารางเวร
DoctorID VARCHAR(20) FK รหัสแพทย์
DoctorName NVARCHAR(100) ชื่อแพทย์
ScheduleDate DATE วันที่ทำงาน
DayOfWeek TINYINT วันในสัปดาห์ (1=จันทร์, 7=อาทิตย์)
ShiftType VARCHAR(20) ประเภทเวร (MORNING/AFTERNOON/EVENING/NIGHT/FULL_DAY)
StartTime TIME เวลาเริ่มทำงาน
EndTime TIME เวลาเลิกทำงาน
BreakStartTime TIME เวลาเริ่มพัก
BreakEndTime TIME เวลาเลิกพัก
ClinicCode VARCHAR(10) FK รหัสคลินิกที่รับผิดชอบ
DepartmentCode VARCHAR(10) FK รหัสแผนกที่รับผิดชอบ
RoomCode VARCHAR(10) FK รหัสห้องตรวจที่รับผิดชอบ
MaxPatients INT จำนวนผู้ป่วยสูงสุดต่อเวร
CurrentPatients INT จำนวนผู้ป่วยปัจจุบัน
Status VARCHAR(20) สถานะการทำงาน (SCHEDULED/ON_DUTY/OFF_DUTY/LEAVE/SICK_LEAVE)
LeaveType VARCHAR(20) ประเภทการลา (ANNUAL/SICK/PERSONAL/EMERGENCY)
LeaveReason NTEXT เหตุผลการลา
IsRecurring BIT เป็นตารางประจำ
RecurringPattern VARCHAR(50) รูปแบบการซ้ำ (WEEKLY/MONTHLY)
EffectiveStartDate DATE วันที่เริ่มใช้ตารางนี้
EffectiveEndDate DATE วันที่สิ้นสุดตารางนี้
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
LastModified DATETIME วันที่แก้ไขล่าสุด
ModifiedBy VARCHAR(50) ผู้แก้ไขล่าสุด
ApprovedBy VARCHAR(50) ผู้อนุมัติตารางเวร
Notes NTEXT หมายเหตุ

Table: DOCTOR_AVAILABILITY (ความพร้อมของแพทย์)

วัตถุประสงค์: เก็บข้อมูลความพร้อมของแพทย์ในการรับผู้ป่วยเพิ่มเติม ตาม SRS FR-4.1.1, FR-4.1.2

Field Type Key Description
AvailabilityID VARCHAR(20) PK รหัสความพร้อม
DoctorID VARCHAR(20) FK รหัสแพทย์
AvailabilityDate DATE วันที่
TimeSlot VARCHAR(20) ช่วงเวลา (MORNING/AFTERNOON/EVENING)
StartTime TIME เวลาเริ่ม
EndTime TIME เวลาสิ้นสุด
TotalSlots INT จำนวน Slot ทั้งหมด
BookedSlots INT จำนวน Slot ที่จองแล้ว
AvailableSlots INT จำนวน Slot ที่ว่าง
SlotDuration INT ระยะเวลาแต่ละ Slot (นาที)
IsAvailable BIT พร้อมรับผู้ป่วย
UnavailableReason NTEXT เหตุผลไม่พร้อม
LastUpdated DATETIME วันที่อัพเดทล่าสุด
UpdatedBy VARCHAR(50) ผู้อัพเดท

Table: DOCTOR_SHIFT_COVERAGE (การครอบคลุมเวรแพทย์)

วัตถุประสงค์: เก็บข้อมูลการครอบคลุมเวรเมื่อแพทย์ลาหรือไม่พร้อม ตาม SRS FR-4.1.3

Field Type Key Description
CoverageID VARCHAR(20) PK รหัสการครอบคลุมเวร
OriginalDoctorID VARCHAR(20) FK รหัสแพทย์เดิม
CoveringDoctorID VARCHAR(20) FK รหัสแพทย์ที่มาครอบคลุม
CoverageDate DATE วันที่ครอบคลุม
StartTime TIME เวลาเริ่ม
EndTime TIME เวลาสิ้นสุด
CoverageReason NTEXT เหตุผลการครอบคลุม
CoverageType VARCHAR(20) ประเภทการครอบคลุม (FULL/PARTIAL/EMERGENCY)
IsApproved BIT ได้รับการอนุมัติ
ApprovedBy VARCHAR(50) ผู้อนุมัติ
ApprovedDate DATETIME วันที่อนุมัติ
CreatedDate DATETIME วันที่สร้าง
Notes NTEXT หมายเหตุ

8.2.1.4 ข้อมูลการส่งตรวจล่วงหน้า

Table: PRE_VISIT (การส่งตรวจล่วงหน้า)

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

Field Type Key Description
PreVisitID VARCHAR(20) PK รหัสการส่งตรวจล่วงหน้า
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
HN VARCHAR(10) FK รหัสผู้ป่วย
PreVisitDate DATE วันที่ส่งตรวจล่วงหน้า
AppointmentDate DATE วันที่นัดหมาย
TargetDepartment VARCHAR(10) FK หน่วยงานปลายทาง
TargetClinic VARCHAR(10) FK คลินิกปลายทาง
VisitID VARCHAR(20) FK รหัส Visit ที่ออกล่วงหน้า (อ้างอิงจาก ระบบเวชระเบียน 1.2.1)
PreVisitType VARCHAR(20) ประเภทการส่งล่วงหน้า (LAB/XRAY/BOTH/PREPARATION)
Instructions NTEXT คำแนะนำการส่งตรวจ
Status VARCHAR(20) สถานะ (PENDING/CONFIRMED/COMPLETED/CANCELLED)
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง
ConfirmedDate DATETIME วันที่ยืนยัน
ConfirmedBy VARCHAR(50) ผู้ยืนยัน
CompletedDate DATETIME วันที่เสร็จสิ้น
Notes NTEXT หมายเหตุ

Table: LAB_XRAY_ADVANCE_ORDER (การสั่ง Lab/X-Ray ล่วงหน้า)

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

Field Type Key Description
AdvanceOrderID VARCHAR(20) PK รหัสการสั่งตรวจล่วงหน้า
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
PreVisitID VARCHAR(20) FK รหัสการส่งตรวจล่วงหน้า
HN VARCHAR(10) FK รหัสผู้ป่วย
OrderType VARCHAR(20) ประเภทการสั่ง (LAB/XRAY/ULTRASOUND)
TestCode VARCHAR(20) รหัสการตรวจ
TestName NVARCHAR(200) ชื่อการตรวจ
TargetSystem VARCHAR(20) ระบบปลายทาง (LAB_SYSTEM/XRAY_SYSTEM)
OrderingDoctorID VARCHAR(20) FK รหัสแพทย์ผู้สั่ง
OrderingDoctorName NVARCHAR(100) ชื่อแพทย์ผู้สั่ง
OrderDate DATETIME วันที่สั่ง
RequiredDate DATE วันที่ต้องการผล
Priority VARCHAR(20) ระดับความเร่งด่วน (NORMAL/URGENT/STAT)
ClinicalIndication NTEXT ข้อบ่งชี้ทางคลินิก
SpecialInstructions NTEXT คำแนะนำพิเศษ
PreparationRequired BIT ต้องเตรียมตัว
PreparationInstructions NTEXT คำแนะนำการเตรียมตัว
Status VARCHAR(20) สถานะ (ORDERED/CONFIRMED/IN_PROGRESS/COMPLETED/CANCELLED)
ExternalOrderID VARCHAR(50) รหัสการสั่งในระบบปลายทาง
ResultsAvailable BIT ผลตรวจพร้อมแล้ว
ResultsDate DATETIME วันที่ได้ผล
IsVerified BIT ยืนยันการสั่งแล้ว
VerifiedBy VARCHAR(50) ผู้ยืนยัน
VerifiedDate DATETIME วันที่ยืนยัน
CreatedDate DATETIME วันที่สร้าง
Notes NTEXT หมายเหตุ

8.2.2 ตารางอ้างอิง (Reference Tables)

8.2.2.1 ข้อมูลคลินิกและแผนก

Table: CLINIC (คลินิก)

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

Field Type Key Description
ClinicCode VARCHAR(10) PK รหัสคลินิก
ClinicName NVARCHAR(100) ชื่อคลินิก
ClinicNameEng VARCHAR(100) ชื่อคลินิกภาษาอังกฤษ
DepartmentCode VARCHAR(10) FK รหัสแผนกที่สังกัด
DefaultSlotDuration INT ระยะเวลา Slot เริ่มต้น (นาที)
MaxAdvanceBookingDays INT จำนวนวันสูงสุดที่สามารถนัดล่วงหน้า
RequiresPreparation BIT ต้องมีการเตรียมตัว
AllowWalkIn BIT รับ Walk-in
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: DEPARTMENT (แผนก)

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

Field Type Key Description
DepartmentCode VARCHAR(10) PK รหัสแผนก
DepartmentName NVARCHAR(100) ชื่อแผนก
DepartmentNameEng VARCHAR(100) ชื่อแผนกภาษาอังกฤษ
DepartmentType VARCHAR(20) ประเภทแผนก (CLINICAL/SUPPORT/ADMINISTRATIVE)
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: ROOM (ห้องตรวจ)

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

Field Type Key Description
RoomCode VARCHAR(10) PK รหัสห้องตรวจ
RoomName NVARCHAR(100) ชื่อห้องตรวจ
DepartmentCode VARCHAR(10) FK รหัสแผนกที่สังกัด
ClinicCode VARCHAR(10) FK รหัสคลินิกที่ใช้งาน
Building NVARCHAR(50) อาคาร
Floor VARCHAR(10) ชั้น
Capacity INT ความจุ (จำนวนผู้ป่วยต่อชั่วโมง)
Equipment NTEXT เครื่องมือที่มี
IsAvailable BIT พร้อมใช้งาน
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.2.2 ข้อมูลประเภทการนัดและสถานะ

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

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

Field Type Key Description
AppointmentTypeCode VARCHAR(20) PK รหัสประเภทการนัด
AppointmentTypeName NVARCHAR(100) ชื่อประเภทการนัด
Description NTEXT รายละเอียด
DefaultDuration INT ระยะเวลาเริ่มต้น (นาที)
RequiresApproval BIT ต้องการการอนุมัติ
AllowAdvanceBooking BIT อนุญาตนัดล่วงหน้า
MaxAdvanceDays INT จำนวนวันสูงสุดที่นัดล่วงหน้าได้
Color VARCHAR(7) สีแสดงในปฏิทิน (Hex Code)
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

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

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

Field Type Key Description
StatusCode VARCHAR(20) PK รหัสสถานะ
StatusName NVARCHAR(50) ชื่อสถานะ
StatusDescription NTEXT รายละเอียดสถานะ
StatusCategory VARCHAR(20) หมวดหมู่สถานะ (ACTIVE/CANCELLED/COMPLETED)
AllowModification BIT อนุญาตให้แก้ไขได้
IsDefault BIT เป็นสถานะเริ่มต้น
SortOrder INT ลำดับการแสดง
Color VARCHAR(7) สีแสดง (Hex Code)
IsActive BIT ใช้งานอยู่
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

8.2.2.3 ข้อมูลการพิมพ์และรายงาน

Table: APPOINTMENT_PRINT_LOG (ประวัติการพิมพ์ใบนัด)

วัตถุประสงค์: เก็บประวัติการพิมพ์ใบนัดหมาย ตาม TOR ข้อ 1.2.6.3.8

Field Type Key Description
PrintLogID VARCHAR(20) PK รหัสประวัติการพิมพ์
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
PrintDate DATETIME วันที่พิมพ์
PrintedBy VARCHAR(50) ผู้พิมพ์
PrintTemplate VARCHAR(50) Template ที่ใช้พิมพ์
CopiesPrinted INT จำนวนสำเนาที่พิมพ์
PrinterName VARCHAR(100) ชื่อเครื่องพิมพ์
PrintStatus VARCHAR(20) สถานะการพิมพ์ (SUCCESS/FAILED)
ErrorMessage NTEXT ข้อความข้อผิดพลาด
FileGenerated VARCHAR(255) ไฟล์ที่สร้าง

8.2.3 ความสัมพันธ์กับระบบอื่น (Integration Tables)

8.2.3.1 การเชื่อมโยงระบบภายนอก

Table: APPOINTMENT_INTEGRATION_LOG (ประวัติการเชื่อมโยงระบบ)

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

Field Type Key Description
IntegrationLogID VARCHAR(20) PK รหัสประวัติการเชื่อมโยง
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
TargetSystem VARCHAR(50) ระบบปลายทาง
IntegrationType VARCHAR(20) ประเภทการเชื่อมโยง (SEND/RECEIVE/SYNC)
RequestData NTEXT ข้อมูลที่ส่ง
ResponseData NTEXT ข้อมูลที่ได้รับ
Status VARCHAR(20) สถานะ (SUCCESS/FAILED/PENDING)
ErrorMessage NTEXT ข้อความข้อผิดพลาด
ProcessedDate DATETIME วันที่ประมวลผล
RetryCount INT จำนวนครั้งที่ลองใหม่
LastRetryDate DATETIME วันที่ลองล่าสุด
CreatedDate DATETIME วันที่สร้าง
CreatedBy VARCHAR(50) ผู้สร้าง

Table: QUEUE_INTEGRATION (การเชื่อมโยงระบบคิว)

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

Field Type Key Description
QueueIntegrationID VARCHAR(20) PK รหัสการเชื่อมโยงคิว
AppointmentID VARCHAR(20) FK รหัสการนัดหมาย
QueueNumber VARCHAR(20) หมายเลขคิว
QueueSystemID VARCHAR(50) รหัสในระบบคิว
QueueStatus VARCHAR(20) สถานะคิว (WAITING/CALLED/SERVING/COMPLETED)
CallTime DATETIME เวลาเรียกคิว
ServeTime DATETIME เวลาเริ่มให้บริการ
CompleteTime DATETIME เวลาเสร็จสิ้น
IsNoShow BIT ไม่มาตามนัด
SyncDate DATETIME วันที่ Sync ข้อมูล
LastUpdated DATETIME วันที่อัพเดทล่าสุด

8.3 ดัชนี (Indexes)

8.3.1 ดัชนีหลัก (Primary Indexes)

-- APPOINTMENT table indexes
CREATE INDEX IX_APPOINTMENT_HN ON APPOINTMENT(HN);
CREATE INDEX IX_APPOINTMENT_DATE_DOCTOR ON APPOINTMENT(AppointmentDate, DoctorID);
CREATE INDEX IX_APPOINTMENT_CLINIC_DATE ON APPOINTMENT(ClinicCode, AppointmentDate);
CREATE INDEX IX_APPOINTMENT_STATUS ON APPOINTMENT(Status);

-- DOCTOR_SCHEDULE table indexes  
CREATE INDEX IX_DOCTOR_SCHEDULE_DOCTOR_DATE ON DOCTOR_SCHEDULE(DoctorID, ScheduleDate);
CREATE INDEX IX_DOCTOR_SCHEDULE_CLINIC_DATE ON DOCTOR_SCHEDULE(ClinicCode, ScheduleDate);

-- APPOINTMENT_ATTENDANCE table indexes
CREATE INDEX IX_ATTENDANCE_APPOINTMENT ON APPOINTMENT_ATTENDANCE(AppointmentID);
CREATE INDEX IX_ATTENDANCE_HN_DATE ON APPOINTMENT_ATTENDANCE(HN, AttendanceStatus);

8.3.2 ดัชนีเพื่อประสิทธิภาพ (Performance Indexes)

-- รองรับการค้นหาการนัดหมายรายวัน
CREATE INDEX IX_APPOINTMENT_DAILY_LOOKUP ON APPOINTMENT(AppointmentDate, ClinicCode, DoctorID, Status);

-- รองรับการตรวจสอบโควต้า
CREATE INDEX IX_DOCTOR_QUOTA_LOOKUP ON DOCTOR_QUOTA(DoctorID, DayOfWeek, EffectiveDate, ExpiryDate);

-- รองรับการค้นหาประวัติการมาตามนัด
CREATE INDEX IX_ATTENDANCE_HISTORY ON APPOINTMENT_ATTENDANCE(HN, AttendanceStatus, AttendanceID DESC);

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