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