Entity Relationship Diagram (ERD)
ระบบนัดหมายและตารางเวรแพทย์ (Appointment and Doctor Schedule System)
โรงพยาบาลค่ายธนรัชน์
เอกสารเลขที่: SRS-1.2.6-ERD
เวอร์ชัน: 1.0
วันที่: 9 ตุลาคม 2568
ผู้จัดทำ: ทีมพัฒนาระบบ
ผู้อนุมัติ: ผู้อำนวยการโรงพยาบาลค่ายธนรัชน์
ภาพรวม Entity Relationship Diagram
เอกสารนี้แสดง ERD สำหรับระบบนัดหมายและตารางเวรแพทย์ที่ออกแบบให้ทำงานร่วมกับระบบอื่นๆ ผ่าน API Integration โดยเน้นการจัดการนัดหมายผู้ป่วย การกำหนดตารางเวรแพทย์ และการควบคุมโควต้าการนัดหมาย เพื่อรองรับการทำงานของโรงพยาบาลได้อย่างมีประสิทธิภาพ
การจัดกลุ่มตาราง (Table Categories)
🎨 คำอธิบายสีในแผนภาพ:
- 🟢 สีเขียว (Core Tables): ตารางหลักเฉพาะระบบนัดหมายและตารางเวรแพทย์
APPOINTMENT- ข้อมูลการนัดหมายหลักDOCTOR_SCHEDULE- ตารางเวรแพทย์APPOINTMENT_QUOTA- โควต้าการนัดหมาย-
APPOINTMENT_TIME_SLOT- ช่วงเวลานัดหมาย -
🔵 สีน้ำเงิน (Support Tables): ตารางสนับสนุนการทำงาน
APPOINTMENT_CANCELLATION- การยกเลิกนัดหมายAPPOINTMENT_RESCHEDULE- การเลื่อนนัดหมายAPPOINTMENT_PREPARATION- การเตรียมตัวก่อนนัดAPPOINTMENT_CERTIFICATE- ใบนัดหมายDOCTOR_LEAVE- วันหยุดแพทย์-
VISIT_PREORDER- การส่งตรวจล่วงหน้า -
🟠 สีส้ม (System Tables): ตารางจัดการระบบและการตรวจสอบ
APPOINTMENT_NOTIFICATION- การแจ้งเตือนนัดหมายAPPOINTMENT_AUDIT_LOG- บันทึกการเปลี่ยนแปลงSYSTEM_INTEGRATION_LOG- บันทึกการเชื่อมโยงระบบTEMPLATE_APPOINTMENT- Template การนัดหมาย-
SYSTEM_CONFIG- การตั้งค่าระบบ -
🟡 สีเหลือง (Master Data - Appointment): ข้อมูลพื้นฐานการนัดหมาย
APPOINTMENT_TYPE- ประเภทการนัดหมายAPPOINTMENT_STATUS- สถานะการนัดหมายAPPOINTMENT_REASON- สาเหตุการนัดหมายCLINIC- คลินิก-
PREPARATION_TYPE- ประเภทการเตรียมตัว -
🟣 สีม่วง (Master Data - Schedule): ข้อมูลพื้นฐานตารางเวร
WORK_SHIFT- กะการทำงานHOLIDAY_CALENDAR- ปฏิทินวันหยุดLEAVE_TYPE- ประเภทการลา-
TIME_SLOT- ช่วงเวลามาตรฐาน -
🔴 สีแดง (Integration Points): จุดเชื่อมโยงกับระบบอื่น
- การเชื่อมโยงกับระบบเวชระเบียน (1.2.1)
- การเชื่อมโยงกับระบบซักประวัติ (1.2.2)
- การเชื่อมโยงกับระบบห้องตรวจแพทย์ (1.2.3)
- การเชื่อมโยงกับระบบงานชันสูตร (1.2.7)
- การเชื่อมโยงกับระบบรังสีวิทยา (1.2.8)
- การเชื่อมโยงกับระบบจัดการคิว (Queue Management System)
🔑 คุณสมบัติเด่นของระบบ
- การจัดการโควต้า: ระบุจำนวนผู้ป่วยที่สามารถนัดได้ต่อแพทย์ต่อวัน
- ตารางเวรแพทย์: จัดการตารางการทำงานและวันหยุดของแพทย์
- การเตรียมตัวก่อนนัด: กำหนดขั้นตอนการเตรียมตัวและการสั่งตรวจล่วงหน้า
- การติดตาม: ตรวจสอบผู้ป่วยที่มาและไม่มาตามนัด
- การยกเลิกและเลื่อนนัด: จัดการการเปลี่ยนแปลงนัดหมายอย่างเป็นระบบ
- ใบนัดหมาย: พิมพ์ใบนัดหมายที่ปรับแต่งได้ตามหน่วยงาน
- การส่งตรวจล่วงหน้า: ออก Visit และสั่งตรวจ Lab/X-Ray ล่วงหน้า
📝 กลไกการอ้างอิงข้อมูล
ระบบใช้ Foreign Key หลัก:
- HN: รหัสผู้ป่วยจากระบบเวชระเบียน (1.2.1)
- DoctorID: รหัสแพทย์
- ClinicCode: รหัสคลินิก
- RoomCode: รหัสห้องตรวจ
- HistoryID: รหัสการซักประวัติจากระบบซักประวัติ (1.2.2)
1. แผนภาพแบบง่าย (Simplified Diagram)
แผนภาพนี้แสดงความสัมพันธ์ระหว่างกลุ่มตารางหลักๆ และการเชื่อมโยงกับระบบอื่น
graph TB
subgraph "🔴 External Systems"
PATIENT_SYS["📋 ระบบเวชระเบียน<br/>(1.2.1)"]
HISTORY_SYS["📋 ระบบซักประวัติ<br/>(1.2.2)"]
EXAM_SYS["🩺 ระบบห้องตรวจแพทย์<br/>(1.2.3)"]
LAB_SYS["🧪 ระบบงานชันสูตร<br/>(1.2.7)"]
XRAY_SYS["🏥 ระบบรังสีวิทยา<br/>(1.2.8)"]
QUEUE_SYS["📋 ระบบจัดการคิว<br/>(Queue Management)"]
end
subgraph "🟢 Core Appointment System"
APPT["📅 การนัดหมายหลัก<br/>APPOINTMENT"]
SCHEDULE["🕐 ตารางเวรแพทย์<br/>DOCTOR_SCHEDULE"]
QUOTA["📊 โควต้าการนัดหมาย<br/>APPOINTMENT_QUOTA"]
TIMESLOT["⏰ ช่วงเวลานัดหมาย<br/>APPOINTMENT_TIME_SLOT"]
end
subgraph "🔵 Support Functions"
CANCEL["❌ การยกเลิกนัด<br/>APPOINTMENT_CANCELLATION"]
RESCHEDULE["🔄 การเลื่อนนัด<br/>APPOINTMENT_RESCHEDULE"]
PREP["📋 การเตรียมตัว<br/>APPOINTMENT_PREPARATION"]
CERT["📄 ใบนัดหมาย<br/>APPOINTMENT_CERTIFICATE"]
LEAVE["🏖️ วันหยุดแพทย์<br/>DOCTOR_LEAVE"]
PREORDER["🔬 การส่งตรวจล่วงหน้า<br/>VISIT_PREORDER"]
end
subgraph "🟠 System Management"
NOTIFY["🔔 การแจ้งเตือน<br/>APPOINTMENT_NOTIFICATION"]
AUDIT["📊 บันทึกการเปลี่ยนแปลง<br/>APPOINTMENT_AUDIT_LOG"]
TEMPLATE["📋 Template การนัด<br/>TEMPLATE_APPOINTMENT"]
CONFIG["⚙️ การตั้งค่าระบบ<br/>SYSTEM_CONFIG"]
end
subgraph "🟡 Master Data - Appointment"
APPT_TYPE["📋 ประเภทการนัด<br/>APPOINTMENT_TYPE"]
APPT_STATUS["📊 สถานะการนัด<br/>APPOINTMENT_STATUS"]
APPT_REASON["📝 สาเหตุการนัด<br/>APPOINTMENT_REASON"]
CLINIC["🏥 คลินิก<br/>CLINIC"]
PREP_TYPE["📋 ประเภทการเตรียมตัว<br/>PREPARATION_TYPE"]
end
subgraph "🟣 Master Data - Schedule"
SHIFT["🕐 กะการทำงาน<br/>WORK_SHIFT"]
HOLIDAY["📅 ปฏิทินวันหยุด<br/>HOLIDAY_CALENDAR"]
LEAVE_TYPE["🏖️ ประเภทการลา<br/>LEAVE_TYPE"]
TIME_STANDARD["⏰ ช่วงเวลามาตรฐาน<br/>TIME_SLOT"]
end
%% External connections
PATIENT_SYS -->|HN, VisitID| APPT
HISTORY_SYS -->|HistoryID| APPT
EXAM_SYS -->|ExaminationID| APPT
LAB_SYS -->|LabOrderID| PREORDER
XRAY_SYS -->|XRayOrderID| PREORDER
QUEUE_SYS <-->|AppointmentID| APPT
%% Core relationships
APPT --> SCHEDULE
APPT --> QUOTA
APPT --> TIMESLOT
SCHEDULE --> QUOTA
TIMESLOT --> QUOTA
%% Support functions
APPT --> CANCEL
APPT --> RESCHEDULE
APPT --> PREP
APPT --> CERT
APPT --> PREORDER
SCHEDULE --> LEAVE
%% System management
APPT --> NOTIFY
APPT --> AUDIT
SCHEDULE --> AUDIT
TEMPLATE --> APPT
CONFIG --> APPT
%% Master Data relationships
APPT -.-> APPT_TYPE
APPT -.-> APPT_STATUS
APPT -.-> APPT_REASON
APPT -.-> CLINIC
PREP -.-> PREP_TYPE
SCHEDULE -.-> SHIFT
SCHEDULE -.-> HOLIDAY
LEAVE -.-> LEAVE_TYPE
TIMESLOT -.-> TIME_STANDARD
%% Styling
classDef external fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef core fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
classDef support fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef system fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
classDef masterAppt fill:#fffde7,stroke:#f57f17,stroke-width:2px
classDef masterSchedule fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
class PATIENT_SYS,HISTORY_SYS,EXAM_SYS,LAB_SYS,XRAY_SYS,QUEUE_SYS external
class APPT,SCHEDULE,QUOTA,TIMESLOT core
class CANCEL,RESCHEDULE,PREP,CERT,LEAVE,PREORDER support
class NOTIFY,AUDIT,TEMPLATE,CONFIG system
class APPT_TYPE,APPT_STATUS,APPT_REASON,CLINIC,PREP_TYPE masterAppt
class SHIFT,HOLIDAY,LEAVE_TYPE,TIME_STANDARD masterSchedule
2. แผนภาพรายละเอียด (Detailed ERD)
แผนภาพนี้แสดงโครงสร้างตารางและความสัมพันธ์แบบละเอียดทั้งหมด
2.1 ตารางหลัก (Core Tables)
erDiagram
APPOINTMENT {
varchar AppointmentID PK "รหัสการนัดหมาย"
varchar HN FK "รหัสผู้ป่วย (จาก 1.2.1)"
varchar VisitID FK "รหัสการเข้ารับบริการ (จาก 1.2.1)"
varchar HistoryID FK "รหัสการซักประวัติ (จาก 1.2.2)"
varchar ExaminationID FK "รหัสการตรวจรักษา (จาก 1.2.3)"
varchar DoctorID FK "รหัสแพทย์ผู้นัดหมาย"
varchar ClinicCode FK "รหัสคลินิกที่นัดหมาย"
varchar RoomCode FK "รหัสห้องตรวจที่นัดหมาย"
varchar AppointmentTypeCode FK "ประเภทการนัดหมาย"
varchar AppointmentReasonCode FK "สาเหตุการนัดหมาย"
datetime AppointmentDate "วันที่นัดหมาย"
time AppointmentTimeStart "เวลาเริ่มนัด"
time AppointmentTimeEnd "เวลาสิ้นสุดนัด"
varchar TimeSlotID FK "ช่วงเวลานัดหมาย"
varchar AppointmentStatusCode FK "สถานะการนัดหมาย"
ntext AppointmentNote "หมายเหตุการนัดหมาย"
varchar TemplateID FK "Template การนัดหมาย"
bit IsWalkIn "การนัดแบบ Walk-in"
bit IsUrgent "การนัดเร่งด่วน"
int SequenceNo "ลำดับการนัด"
varchar QueueNumber "หมายเลขคิว"
datetime CreatedDate "วันที่บันทึกการนัด"
varchar CreatedBy "ผู้บันทึกการนัด"
datetime LastModified "วันที่แก้ไขล่าสุด"
varchar LastModifiedBy "ผู้แก้ไขล่าสุด"
bit IsActive "ใช้งานอยู่"
}
DOCTOR_SCHEDULE {
varchar ScheduleID PK "รหัสตารางเวร"
varchar DoctorID FK "รหัสแพทย์"
varchar ClinicCode FK "รหัสคลินิก"
varchar RoomCode FK "รหัสห้องตรวจ"
varchar WorkShiftCode FK "รหัสกะการทำงาน"
date ScheduleDate "วันที่ทำงาน"
time WorkStartTime "เวลาเริ่มงาน"
time WorkEndTime "เวลาสิ้นสุดงาน"
time BreakStartTime "เวลาเริ่มพัก"
time BreakEndTime "เวลาสิ้นสุดพัก"
int MaxPatients "จำนวนผู้ป่วยสูงสุดต่อวัน"
int MaxPatientsPerSlot "จำนวนผู้ป่วยสูงสุดต่อช่วงเวลา"
int SlotDurationMinutes "ระยะเวลาต่อช่วงเวลา (นาที)"
bit IsAvailable "พร้อมให้บริการ"
bit IsHoliday "วันหยุด"
ntext ScheduleNote "หมายเหตุตารางเวร"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
datetime LastModified "วันที่แก้ไขล่าสุด"
varchar LastModifiedBy "ผู้แก้ไขล่าสุด"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_QUOTA {
varchar QuotaID PK "รหัสโควต้า"
varchar DoctorID FK "รหัสแพทย์"
varchar ClinicCode FK "รหัสคลินิก"
varchar RoomCode FK "รหัสห้องตรวจ"
date QuotaDate "วันที่กำหนดโควต้า"
varchar TimeSlotID FK "ช่วงเวลา"
int MaxAppointments "จำนวนการนัดสูงสุด"
int CurrentAppointments "จำนวนการนัดปัจจุบัน"
int AvailableSlots "ช่วงเวลาว่าง"
bit IsOverbook "อนุญาตการ Overbook"
int OverbookLimit "จำนวน Overbook สูงสุด"
varchar QuotaStatusCode FK "สถานะโควต้า"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
datetime LastModified "วันที่แก้ไขล่าสุด"
varchar LastModifiedBy "ผู้แก้ไขล่าสุด"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_TIME_SLOT {
varchar TimeSlotID PK "รหัสช่วงเวลา"
varchar ScheduleID FK "รหัสตารางเวร"
time SlotStartTime "เวลาเริ่มช่วงเวลา"
time SlotEndTime "เวลาสิ้นสุดช่วงเวลา"
int DurationMinutes "ระยะเวลา (นาที)"
int MaxPatients "จำนวนผู้ป่วยสูงสุด"
int CurrentPatients "จำนวนผู้ป่วยปัจจุบัน"
bit IsAvailable "ว่างให้นัด"
bit IsBlocked "ถูกบล็อค"
varchar BlockReason "เหตุผลการบล็อค"
varchar SlotStatusCode FK "สถานะช่วงเวลา"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
bit IsActive "ใช้งานอยู่"
}
%% Relationships
APPOINTMENT ||--o{ DOCTOR_SCHEDULE : "DoctorID, AppointmentDate"
APPOINTMENT ||--o{ APPOINTMENT_QUOTA : "DoctorID, AppointmentDate"
APPOINTMENT ||--o{ APPOINTMENT_TIME_SLOT : "TimeSlotID"
DOCTOR_SCHEDULE ||--o{ APPOINTMENT_QUOTA : "DoctorID, ScheduleDate"
DOCTOR_SCHEDULE ||--o{ APPOINTMENT_TIME_SLOT : "ScheduleID"
APPOINTMENT_QUOTA ||--o{ APPOINTMENT_TIME_SLOT : "QuotaDate, TimeSlotID"
2.2 ตารางสนับสนุนการทำงาน (Support Tables)
erDiagram
APPOINTMENT_CANCELLATION {
varchar CancellationID PK "รหัสการยกเลิก"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar CancellationReasonCode FK "สาเหตุการยกเลิก"
ntext CancellationNote "หมายเหตุการยกเลิก"
datetime CancellationDate "วันที่ยกเลิก"
varchar CancelledBy "ผู้ยกเลิก"
bit IsByPatient "ยกเลิกโดยผู้ป่วย"
bit IsByHospital "ยกเลิกโดยโรงพยาบาล"
bit IsRefundable "สามารถขอคืนเงินได้"
varchar RefundReferenceID "รหัสอ้างอิงการคืนเงิน"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_RESCHEDULE {
varchar RescheduleID PK "รหัสการเลื่อนนัด"
varchar AppointmentID FK "รหัสการนัดหมายเดิม"
varchar NewAppointmentID FK "รหัสการนัดหมายใหม่"
varchar RescheduleReasonCode FK "สาเหตุการเลื่อนนัด"
ntext RescheduleNote "หมายเหตุการเลื่อนนัด"
datetime OriginalAppointmentDate "วันที่นัดเดิม"
time OriginalAppointmentTime "เวลานัดเดิม"
datetime NewAppointmentDate "วันที่นัดใหม่"
time NewAppointmentTime "เวลานัดใหม่"
varchar RescheduledBy "ผู้เลื่อนนัด"
datetime RescheduleDate "วันที่ทำการเลื่อนนัด"
int RescheduleCount "จำนวนครั้งที่เลื่อน"
bit IsApprovalRequired "ต้องการอนุมัติ"
varchar ApprovedBy "ผู้อนุมัติ"
datetime ApprovalDate "วันที่อนุมัติ"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_PREPARATION {
varchar PreparationID PK "รหัสการเตรียมตัว"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar PreparationTypeCode FK "ประเภทการเตรียมตัว"
ntext PreparationInstruction "คำแนะนำการเตรียมตัว"
int PreparationDaysBefore "จำนวนวันก่อนนัดที่ต้องเตรียม"
time PreparationTime "เวลาที่ต้องมาเตรียมตัว"
bit IsFasting "ต้องงดอาหาร"
int FastingHours "จำนวนชั่วโมงการงดอาหาร"
bit IsSpecialPreparation "การเตรียมตัวพิเศษ"
ntext SpecialInstruction "คำแนะนำพิเศษ"
bit IsPrintOnCertificate "พิมพ์ในใบนัด"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_CERTIFICATE {
varchar CertificateID PK "รหัสใบนัดหมาย"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar CertificateTemplateCode FK "รหัส Template ใบนัด"
varchar CertificateNumber "เลขที่ใบนัดหมาย"
datetime PrintDate "วันที่พิมพ์"
varchar PrintedBy "ผู้พิมพ์"
int PrintCount "จำนวนครั้งที่พิมพ์"
varchar CertificateFormat "รูปแบบใบนัด (PDF, WORD)"
varchar LanguageCode "รหัสภาษา (TH, EN)"
ntext CustomHeader "หัวใบนัดแบบกำหนดเอง"
ntext CustomFooter "ท้ายใบนัดแบบกำหนดเอง"
bit IncludePreparation "รวมคำแนะนำการเตรียมตัว"
bit IncludeLabOrders "รวมรายการสั่ง Lab"
bit IncludeXRayOrders "รวมรายการสั่ง X-Ray"
varchar FilePath "ที่อยู่ไฟล์"
datetime CreatedDate "วันที่สร้าง"
bit IsActive "ใช้งานอยู่"
}
DOCTOR_LEAVE {
varchar LeaveID PK "รหัสการลา"
varchar DoctorID FK "รหัสแพทย์"
varchar LeaveTypeCode FK "ประเภทการลา"
date LeaveStartDate "วันเริ่มลา"
date LeaveEndDate "วันสิ้นสุดลา"
int LeaveDays "จำนวนวันลา"
ntext LeaveReason "เหตุผลการลา"
varchar LeaveStatusCode FK "สถานะการลา"
varchar RequestedBy "ผู้ขออนุมัติ"
datetime RequestDate "วันที่ขออนุมัติ"
varchar ApprovedBy "ผู้อนุมัติ"
datetime ApprovalDate "วันที่อนุมัติ"
varchar SubstituteDoctorID FK "แพทย์ที่ทำหน้าที่แทน"
bit IsAffectSchedule "กระทบตารางเวร"
bit IsEmergencyLeave "การลาฉุกเฉิน"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
bit IsActive "ใช้งานอยู่"
}
VISIT_PREORDER {
varchar PreorderID PK "รหัสการส่งตรวจล่วงหน้า"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar PreorderType "ประเภทการส่งตรวจ (VISIT, LAB, XRAY)"
varchar VisitID FK "รหัส Visit ล่วงหน้า"
varchar LabOrderID FK "รหัสการสั่ง Lab ล่วงหน้า"
varchar XRayOrderID FK "รหัสการสั่ง X-Ray ล่วงหน้า"
datetime PreorderDate "วันที่ส่งตรวจล่วงหน้า"
varchar PreorderStatusCode FK "สถานะการส่งตรวจ"
bit IsConfirmed "ยืนยันการสั่งแล้ว"
datetime ConfirmDate "วันที่ยืนยัน"
varchar ConfirmedBy "ผู้ยืนยัน"
ntext PreorderNote "หมายเหตุการส่งตรวจล่วงหน้า"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
bit IsActive "ใช้งานอยู่"
}
%% Relationships
APPOINTMENT ||--o{ APPOINTMENT_CANCELLATION : "AppointmentID"
APPOINTMENT ||--o{ APPOINTMENT_RESCHEDULE : "AppointmentID"
APPOINTMENT ||--o{ APPOINTMENT_PREPARATION : "AppointmentID"
APPOINTMENT ||--o{ APPOINTMENT_CERTIFICATE : "AppointmentID"
DOCTOR_SCHEDULE ||--o{ DOCTOR_LEAVE : "DoctorID"
APPOINTMENT ||--o{ VISIT_PREORDER : "AppointmentID"
2.3 ตารางจัดการระบบ (System Management Tables)
erDiagram
APPOINTMENT_NOTIFICATION {
varchar NotificationID PK "รหัสการแจ้งเตือน"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar NotificationTypeCode FK "ประเภทการแจ้งเตือน"
varchar RecipientType "ประเภทผู้รับ (PATIENT, DOCTOR, STAFF)"
varchar RecipientID "รหัสผู้รับ"
varchar NotificationMethod "วิธีการแจ้งเตือน (SMS, EMAIL, LINE)"
varchar ContactInfo "ข้อมูลติดต่อ"
ntext NotificationMessage "ข้อความแจ้งเตือน"
datetime ScheduledSendDate "วันที่กำหนดส่ง"
datetime ActualSendDate "วันที่ส่งจริง"
varchar SendStatus "สถานะการส่ง (PENDING, SENT, FAILED)"
varchar DeliveryStatus "สถานะการส่ง (DELIVERED, READ)"
int RetryCount "จำนวนครั้งที่ลองส่งใหม่"
ntext ErrorMessage "ข้อความข้อผิดพลาด"
datetime CreatedDate "วันที่สร้าง"
bit IsActive "ใช้งานอยู่"
}
APPOINTMENT_AUDIT_LOG {
varchar AuditID PK "รหัสการ Audit"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar TableName "ชื่อตาราง"
varchar ActionType "ประเภทการกระทำ (INSERT, UPDATE, DELETE)"
ntext OldValue "ค่าเดิม (JSON)"
ntext NewValue "ค่าใหม่ (JSON)"
varchar ChangedFields "ฟิลด์ที่เปลี่ยนแปลง"
varchar UserID "รหัสผู้ใช้งาน"
varchar UserRole "บทบาทผู้ใช้งาน"
varchar IPAddress "IP Address"
varchar UserAgent "User Agent"
varchar SessionID "Session ID"
datetime ActionDateTime "วันที่เวลาที่กระทำ"
varchar ReasonCode "รหัสเหตุผล"
ntext ActionReason "เหตุผลการกระทำ"
bit IsSuccessful "สำเร็จ"
ntext ErrorMessage "ข้อความข้อผิดพลาด"
}
SYSTEM_INTEGRATION_LOG {
varchar IntegrationLogID PK "รหัสบันทึกการเชื่อมโยง"
varchar AppointmentID FK "รหัสการนัดหมาย"
varchar IntegrationType "ประเภทการเชื่อมโยง"
varchar TargetSystem "ระบบเป้าหมาย"
varchar APIEndpoint "API Endpoint"
varchar RequestMethod "วิธีการ Request (GET, POST, PUT)"
ntext RequestData "ข้อมูล Request (JSON)"
ntext ResponseData "ข้อมูล Response (JSON)"
varchar ResponseStatus "สถานะการตอบกลับ"
varchar HTTPStatusCode "HTTP Status Code"
datetime RequestDateTime "วันที่เวลา Request"
datetime ResponseDateTime "วันที่เวลา Response"
int ResponseTimeMs "เวลาตอบสนอง (มิลลิวินาที)"
bit IsSuccessful "สำเร็จ"
ntext ErrorMessage "ข้อความข้อผิดพลาด"
int RetryCount "จำนวนครั้งที่ลองใหม่"
varchar CreatedBy "ผู้สร้าง"
}
TEMPLATE_APPOINTMENT {
varchar TemplateID PK "รหัส Template"
varchar TemplateName "ชื่อ Template"
varchar TemplateCategory "หมวดหมู่ Template"
varchar ClinicCode FK "รหัสคลินิก"
varchar DoctorID FK "รหัสแพทย์ (ถ้าเฉพาะเจาะจง)"
varchar AppointmentTypeCode FK "ประเภทการนัดหมาย"
varchar AppointmentReasonCode FK "สาเหตุการนัดหมาย"
int DefaultDurationMinutes "ระยะเวลาการนัดมาตรฐาน"
ntext DefaultPreparationInstructions "คำแนะนำการเตรียมตัวมาตรฐาน"
ntext DefaultLabOrders "รายการ Lab มาตรฐาน (JSON)"
ntext DefaultXRayOrders "รายการ X-Ray มาตรฐาน (JSON)"
bit IsRequirePreOrder "ต้องส่งตรวจล่วงหน้า"
int PreOrderDaysBefore "จำนวนวันก่อนส่งตรวจล่วงหน้า"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
datetime LastModified "วันที่แก้ไขล่าสุด"
varchar LastModifiedBy "ผู้แก้ไขล่าสุด"
}
SYSTEM_CONFIG {
varchar ConfigID PK "รหัสการตั้งค่า"
varchar ConfigCategory "หมวดหมู่การตั้งค่า"
varchar ConfigKey "คีย์การตั้งค่า"
varchar ConfigValue "ค่าการตั้งค่า"
varchar DataType "ประเภทข้อมูล (STRING, INT, BOOL, JSON)"
ntext ConfigDescription "คำอธิบายการตั้งค่า"
bit IsSystemConfig "การตั้งค่าระบบ"
bit IsUserEditable "ผู้ใช้สามารถแก้ไขได้"
varchar DefaultValue "ค่าเริ่มต้น"
varchar ValidValues "ค่าที่ใช้ได้ (JSON Array)"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
datetime LastModified "วันที่แก้ไขล่าสุด"
varchar LastModifiedBy "ผู้แก้ไขล่าสุด"
}
%% Relationships
APPOINTMENT ||--o{ APPOINTMENT_NOTIFICATION : "AppointmentID"
APPOINTMENT ||--o{ APPOINTMENT_AUDIT_LOG : "AppointmentID"
APPOINTMENT ||--o{ SYSTEM_INTEGRATION_LOG : "AppointmentID"
TEMPLATE_APPOINTMENT ||--o{ APPOINTMENT : "TemplateID"
3. ตาราง Master Data และการเชื่อมโยง
3.1 ตาราง Master Data การนัดหมาย
erDiagram
APPOINTMENT_TYPE {
varchar AppointmentTypeCode PK "รหัสประเภทการนัด"
varchar AppointmentTypeName "ชื่อประเภทการนัด"
ntext AppointmentTypeDescription "คำอธิบายประเภทการนัด"
int DefaultDurationMinutes "ระยะเวลาการนัดมาตรฐาน"
varchar AppointmentColor "สีแสดงในปฏิทิน"
int Priority "ลำดับความสำคัญ"
bit IsWalkInAllowed "อนุญาต Walk-in"
bit IsAdvanceBookingRequired "ต้องจองล่วงหน้า"
int MaxAdvanceBookingDays "จำนวนวันสูงสุดที่จองล่วงหน้าได้"
int MinAdvanceBookingDays "จำนวนวันขั้นต่ำที่ต้องจองล่วงหน้า"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
APPOINTMENT_STATUS {
varchar AppointmentStatusCode PK "รหัสสถานะการนัด"
varchar AppointmentStatusName "ชื่อสถานะการนัด"
ntext AppointmentStatusDescription "คำอธิบายสถานะ"
varchar StatusColor "สีแสดงสถานะ"
varchar StatusGroup "กลุ่มสถานะ (ACTIVE, CANCELLED, COMPLETED)"
bit IsFinalStatus "สถานะสุดท้าย"
bit IsSystemStatus "สถานะระบบ"
bit IsUserVisible "แสดงให้ผู้ใช้เห็น"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
APPOINTMENT_REASON {
varchar AppointmentReasonCode PK "รหัสสาเหตุการนัด"
varchar AppointmentReasonName "ชื่อสาเหตุการนัด"
ntext AppointmentReasonDescription "คำอธิบายสาเหตุ"
varchar ReasonCategory "หมวดหมู่สาเหตุ"
bit IsFollowUp "การติดตาม"
bit IsRoutineCheckup "ตรวจสุขภาพประจำ"
bit IsEmergency "เร่งด่วน"
int DefaultFollowUpDays "จำนวนวันการติดตามมาตรฐาน"
bit IsPreparationRequired "ต้องเตรียมตัว"
bit IsLabRequired "ต้องตรวจ Lab"
bit IsXRayRequired "ต้องตรวจ X-Ray"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
CLINIC {
varchar ClinicCode PK "รหัสคลินิก"
varchar ClinicName "ชื่อคลินิก"
ntext ClinicDescription "คำอธิบายคลินิก"
varchar DepartmentCode FK "รหัสแผนก"
varchar ClinicLocation "ที่ตั้งคลินิก"
varchar ClinicPhone "เบอร์โทรคลินิก"
varchar ClinicEmail "อีเมลคลินิก"
time OpenTime "เวลาเปิด"
time CloseTime "เวลาปิด"
varchar OperatingDays "วันที่เปิดให้บริการ (JSON)"
int MaxPatientsPerDay "จำนวนผู้ป่วยสูงสุดต่อวัน"
int AppointmentSlotDurationMinutes "ระยะเวลาช่วงเวลานัดมาตรฐาน"
bit IsAppointmentRequired "ต้องนัดหมาย"
bit IsWalkInAllowed "อนุญาต Walk-in"
varchar ClinicManagerID FK "รหัสผู้จัดการคลินิก"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
PREPARATION_TYPE {
varchar PreparationTypeCode PK "รหัสประเภทการเตรียมตัว"
varchar PreparationTypeName "ชื่อประเภทการเตรียมตัว"
ntext PreparationTypeDescription "คำอธิบายการเตรียมตัว"
ntext StandardInstructions "คำแนะนำมาตรฐาน"
int PreparationHours "จำนวนชั่วโมงการเตรียมตัว"
bit IsFastingRequired "ต้องงดอาหาร"
int FastingHours "จำนวนชั่วโมงงดอาหาร"
bit IsMedicationRestriction "จำกัดยา"
ntext MedicationInstructions "คำแนะนำเรื่องยา"
bit IsPrintOnCertificate "พิมพ์ในใบนัด"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
3.2 ตาราง Master Data ตารางเวร
erDiagram
WORK_SHIFT {
varchar WorkShiftCode PK "รหัสกะการทำงาน"
varchar WorkShiftName "ชื่อกะการทำงาน"
ntext WorkShiftDescription "คำอธิบายกะการทำงาน"
time ShiftStartTime "เวลาเริ่มกะ"
time ShiftEndTime "เวลาสิ้นสุดกะ"
int ShiftDurationHours "ระยะเวลากะ (ชั่วโมง)"
time BreakStartTime "เวลาเริ่มพัก"
time BreakEndTime "เวลาสิ้นสุดพัก"
int BreakDurationMinutes "ระยะเวลาพัก (นาที)"
varchar ShiftType "ประเภทกะ (MORNING, AFTERNOON, EVENING, NIGHT)"
varchar ShiftColor "สีแสดงกะ"
int MaxDoctorsPerShift "จำนวนแพทย์สูงสุดต่อกะ"
bit IsOvertimeAllowed "อนุญาตล่วงเวลา"
int MaxOvertimeHours "จำนวนชั่วโมงล่วงเวลาสูงสุด"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
HOLIDAY_CALENDAR {
varchar HolidayID PK "รหัสวันหยุด"
varchar HolidayName "ชื่อวันหยุด"
ntext HolidayDescription "คำอธิบายวันหยุด"
date HolidayDate "วันที่หยุด"
varchar HolidayType "ประเภทวันหยุด (NATIONAL, RELIGIOUS, HOSPITAL)"
bit IsRecurring "เกิดขึ้นประจำ"
varchar RecurringPattern "รูปแบบการเกิดขึ้นประจำ"
bit IsAffectSchedule "กระทบตารางเวร"
bit IsCompensationRequired "ต้องชดเชยวันทำงาน"
varchar CompensationDate "วันชดเชย"
bit IsActive "ใช้งานอยู่"
int Year "ปี"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
LEAVE_TYPE {
varchar LeaveTypeCode PK "รหัสประเภทการลา"
varchar LeaveTypeName "ชื่อประเภทการลา"
ntext LeaveTypeDescription "คำอธิบายประเภทการลา"
int MaxLeaveDaysPerYear "จำนวนวันลาสูงสุดต่อปี"
int MinAdvanceNoticeDays "จำนวนวันขั้นต่ำที่ต้องแจ้งล่วงหน้า"
bit IsApprovalRequired "ต้องการอนุมัติ"
varchar ApprovalLevel "ระดับการอนุมัติ"
bit IsDocumentRequired "ต้องมีเอกสารประกอบ"
ntext RequiredDocuments "เอกสารที่ต้องใช้"
bit IsAffectSalary "กระทบเงินเดือน"
varchar SalaryCalculationMethod "วิธีคำนวณเงินเดือน"
varchar LeaveColor "สีแสดงการลา"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
TIME_SLOT {
varchar TimeSlotCode PK "รหัสช่วงเวลามาตรฐาน"
varchar TimeSlotName "ชื่อช่วงเวลา"
ntext TimeSlotDescription "คำอธิบายช่วงเวลา"
time SlotStartTime "เวลาเริ่ม"
time SlotEndTime "เวลาสิ้นสุด"
int DurationMinutes "ระยะเวลา (นาที)"
varchar SlotType "ประเภทช่วงเวลา (MORNING, AFTERNOON, EVENING)"
int DefaultMaxPatients "จำนวนผู้ป่วยสูงสุดมาตรฐาน"
bit IsStandardSlot "ช่วงเวลามาตรฐาน"
varchar SlotColor "สีแสดงช่วงเวลา"
int DisplayOrder "ลำดับการแสดง"
bit IsActive "ใช้งานอยู่"
datetime CreatedDate "วันที่สร้าง"
varchar CreatedBy "ผู้สร้าง"
}
4. Integration Architecture Diagram
แผนภาพแสดงการเชื่อมโยงกับระบบอื่นๆ ผ่าน API
graph TB
subgraph "Core Appointment System 🟢"
APPT_CORE["📅 APPOINTMENT<br/>ข้อมูลการนัดหมายหลัก"]
SCHEDULE_CORE["🕐 DOCTOR_SCHEDULE<br/>ตารางเวรแพทย์"]
QUOTA_CORE["📊 APPOINTMENT_QUOTA<br/>โควต้าการนัดหมาย"]
PREORDER_CORE["🔬 VISIT_PREORDER<br/>การส่งตรวจล่วงหน้า"]
end
subgraph "External Integration APIs 🔴"
PATIENT_API["👤 Patient API<br/>ระบบเวชระเบียน (1.2.1)<br/>GET /patient/{HN}<br/>GET /visit/{VisitID}"]
HISTORY_API["📋 History API<br/>ระบบซักประวัติ (1.2.2)<br/>POST /history/{HistoryID}/appointment<br/>GET /history/{HistoryID}"]
EXAM_API["🩺 Examination API<br/>ระบบห้องตรวจแพทย์ (1.2.3)<br/>POST /examination/{ExamID}/appointment<br/>GET /examination/{ExamID}"]
LAB_API["🧪 Laboratory API<br/>ระบบงานชันสูตร (1.2.7)<br/>POST /lab/preorder<br/>GET /lab/result/{OrderID}"]
XRAY_API["🏥 Radiology API<br/>ระบบรังสีวิทยา (1.2.8)<br/>POST /radiology/preorder<br/>GET /radiology/result/{OrderID}"]
QUEUE_API["📋 Queue API<br/>ระบบจัดการคิว<br/>POST /queue/appointment<br/>PUT /queue/{QueueID}/status"]
NOTIFY_API["🔔 Notification API<br/>ระบบแจ้งเตือน<br/>POST /notification/sms<br/>POST /notification/email"]
end
subgraph "Master Data References 🟡"
DOCTOR_REF["👨⚕️ Doctor Master<br/>จากระบบบุคลากร"]
CLINIC_REF["🏥 Clinic Master<br/>จากระบบโครงสร้าง"]
ROOM_REF["🚪 Room Master<br/>จากระบบโครงสร้าง"]
DEPT_REF["🏢 Department Master<br/>จากระบบโครงสร้าง"]
end
%% API Integration flows
APPT_CORE <-->|"HN, VisitID"| PATIENT_API
APPT_CORE <-->|"HistoryID"| HISTORY_API
APPT_CORE <-->|"ExaminationID"| EXAM_API
PREORDER_CORE -->|"Lab Orders"| LAB_API
PREORDER_CORE -->|"X-Ray Orders"| XRAY_API
APPT_CORE <-->|"Queue Management"| QUEUE_API
APPT_CORE -->|"Notifications"| NOTIFY_API
%% Master Data references
SCHEDULE_CORE -.->|"DoctorID"| DOCTOR_REF
APPT_CORE -.->|"ClinicCode"| CLINIC_REF
APPT_CORE -.->|"RoomCode"| ROOM_REF
CLINIC_REF -.->|"DepartmentCode"| DEPT_REF
%% Styling
classDef coreSystem fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
classDef externalAPI fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef masterData fill:#fffde7,stroke:#f57f17,stroke-width:2px
class APPT_CORE,SCHEDULE_CORE,QUOTA_CORE,PREORDER_CORE coreSystem
class PATIENT_API,HISTORY_API,EXAM_API,LAB_API,XRAY_API,QUEUE_API,NOTIFY_API externalAPI
class DOCTOR_REF,CLINIC_REF,ROOM_REF,DEPT_REF masterData
5. Database Relationships Summary
Primary Relationships (ความสัมพันธ์หลัก)
- APPOINTMENT เป็นศูนย์กลางของระบบ เชื่อมโยงกับ:
- DOCTOR_SCHEDULE (N:1) - ตารางเวรแพทย์
- APPOINTMENT_QUOTA (N:1) - โควต้าการนัดหมาย
- APPOINTMENT_TIME_SLOT (N:1) - ช่วงเวลานัดหมาย
- APPOINTMENT_CANCELLATION (1:N) - การยกเลิกนัดหมาย
- APPOINTMENT_RESCHEDULE (1:N) - การเลื่อนนัดหมาย
- APPOINTMENT_PREPARATION (1:N) - การเตรียมตัวก่อนนัด
- APPOINTMENT_CERTIFICATE (1:N) - ใบนัดหมาย
-
VISIT_PREORDER (1:N) - การส่งตรวจล่วงหน้า
-
DOCTOR_SCHEDULE จัดการตารางเวรแพทย์:
- APPOINTMENT_QUOTA (1:N) - โควต้าในแต่ละวัน
- APPOINTMENT_TIME_SLOT (1:N) - ช่วงเวลาในแต่ละวัน
-
DOCTOR_LEAVE (1:N) - วันหยุดแพทย์
-
Master Data ให้ข้อมูลอ้างอิง:
- Appointment: APPOINTMENT_TYPE, APPOINTMENT_STATUS, APPOINTMENT_REASON, CLINIC, PREPARATION_TYPE
- Schedule: WORK_SHIFT, HOLIDAY_CALENDAR, LEAVE_TYPE, TIME_SLOT
Integration Points (จุดเชื่อมโยง)
- External Systems: HN (1.2.1), HistoryID (1.2.2), ExaminationID (1.2.3)
- API Endpoints: LabOrderID (1.2.7), XRayOrderID (1.2.8), QueueID (Queue System)
- Notification: SMS, Email, LINE integration
- Audit Trail: SYSTEM_INTEGRATION_LOG, APPOINTMENT_AUDIT_LOG
6. ข้อมูลสำคัญและข้อจำกัด
6.1 ข้อมูลสำคัญ
- ✅ การจัดการโควต้า: ระบุจำนวนผู้ป่วยต่อแพทย์ต่อวัน ตาม TOR ข้อ 1.2.6.1.1 และ 1.2.6.3.13
- ✅ ตารางเวรแพทย์: กำหนดและตรวจสอบวันทำงานของแพทย์ ตาม TOR ข้อ 1.2.6.1.4 และ 1.2.6.2.3
- ✅ การเตรียมตัวก่อนนัด: กำหนดคำแนะนำและการสั่งตรวจล่วงหน้า ตาม TOR ข้อ 1.2.6.1.2 และ 1.2.6.3.3
- ✅ การตรวจสอบการนัดหมาย: แสดงข้อมูลผู้ป่วยที่นัดและติดตาม ตาม TOR ข้อ 1.2.6.2.1-2
- ✅ การยกเลิกและเลื่อนนัด: จัดการการเปลี่ยนแปลงนัดหมาย ตาม TOR ข้อ 1.2.6.3.6-7 และ 1.2.6.3.12
- ✅ ใบนัดหมาย: พิมพ์ใบนัดที่ปรับแต่งได้ตามหน่วยงาน ตาม TOR ข้อ 1.2.6.3.8
- ✅ การส่งตรวจล่วงหน้า: ออก Visit และสั่งตรวจ Lab/X-Ray ล่วงหน้า ตาม TOR ข้อ 1.2.6.4.1-2
- ✅ การแจ้งเตือน: ระบบแจ้งเตือนการนัดหมายหลายช่องทาง
- ✅ การ Audit และ Log: บันทึกการเปลี่ยนแปลงและการเชื่อมโยงระบบ
6.2 ข้อจำกัดและหมายเหตุ
- 🔸 Foreign Key Constraints: ตาราง Master Data จากระบบอื่นเป็น Reference เท่านั้น
- 🔸 Data Synchronization: ต้องมีกลไกซิงค์ข้อมูลกับระบบอื่นๆ เป็นระยะ
- 🔸 Quota Management: ต้องมีกลไกป้องกันการ Overbooking
- 🔸 Schedule Conflict: ต้องตรวจสอบความขัดแย้งของตารางเวรแพทย์
- 🔸 Notification Delivery: ต้องมีการติดตามสถานะการส่งข้อความแจ้งเตือน
- 🔸 Template Management: Template ต้องได้รับการอนุมัติก่อนนำไปใช้งาน
6.3 Performance Considerations
- สร้าง Index บน AppointmentID, HN, DoctorID, AppointmentDate
- Partition ตาราง APPOINTMENT และ APPOINTMENT_AUDIT_LOG ตามวันที่
- Archive ข้อมูลการนัดหมายเก่าเป็น periodic
- Cache Master Data ที่ใช้บ่อย เช่น CLINIC, APPOINTMENT_TYPE
6.4 Security Considerations
- Encrypt ข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลส่วนตัวผู้ป่วย
- Audit Log ทุกการเข้าถึงข้อมูลการนัดหมาย
- API Authentication ด้วย JWT Tokens
- Role-based Access Control สำหรับแพทย์และเจ้าหน้าที่
6.5 Integration Best Practices
- ใช้ Asynchronous API calls สำหรับ non-critical operations
- Implement Circuit Breaker pattern สำหรับ external API calls
- Monitor API performance ผ่าน SYSTEM_INTEGRATION_LOG
- Retry mechanism สำหรับ failed API calls
- Real-time notification สำหรับการเปลี่ยนแปลงการนัดหมาย
7. สรุปความสอดคล้องกับ TOR และ SRS
7.1 ความสอดคล้องกับ TOR
| TOR ข้อ | คำอธิบาย | ตารางที่รองรับ |
|---|---|---|
| 1.2.6.1.1 | กำหนดจำนวนคนไข้นัดหมายของแพทย์ต่อวัน | APPOINTMENT_QUOTA, DOCTOR_SCHEDULE |
| 1.2.6.1.2 | กำหนดข้อมูลการปฏิบัติก่อนพบแพทย์และรายการตรวจ | APPOINTMENT_PREPARATION, VISIT_PREORDER |
| 1.2.6.1.3 | กำหนดข้อมูลวันหยุดต่างๆ | HOLIDAY_CALENDAR, DOCTOR_LEAVE |
| 1.2.6.1.4 | กำหนดตารางการทำงานของแพทย์ | DOCTOR_SCHEDULE, WORK_SHIFT |
| 1.2.6.2.1 | แสดงข้อมูลผู้ป่วยที่นัดหมาย | APPOINTMENT + API Integration |
| 1.2.6.2.2 | ตรวจสอบผู้ป่วยที่มาและไม่มาตามนัด | APPOINTMENT + Queue Integration |
| 1.2.6.2.3 | ตรวจสอบวันทำงานของแพทย์ในรูปแบบปฏิทิน | DOCTOR_SCHEDULE, HOLIDAY_CALENDAR |
| 1.2.6.3.1 | จัดเก็บข้อมูลรายการนัดตามรายละเอียด | APPOINTMENT + related tables |
| 1.2.6.3.2 | แสดงข้อความแจ้งจำนวนผู้ป่วยและตรวจสอบซ้ำ | APPOINTMENT_QUOTA, APPOINTMENT_TIME_SLOT |
| 1.2.6.3.3 | บอกสาเหตุและการเตรียมตัวก่อนพบแพทย์ | APPOINTMENT_REASON, APPOINTMENT_PREPARATION |
| 1.2.6.3.4 | นัดหมายจากหลายหน่วยตรวจในวันเดียว | APPOINTMENT (multiple records) |
| 1.2.6.3.5 | ตรวจสอบข้อมูลการนัดหมายของผู้ป่วย | APPOINTMENT + Patient API |
| 1.2.6.3.6 | ยกเลิกนัดและระบุสาเหตุ | APPOINTMENT_CANCELLATION |
| 1.2.6.3.7 | เลื่อนนัดของผู้ป่วย | APPOINTMENT_RESCHEDULE |
| 1.2.6.3.8 | พิมพ์ใบนัดที่ปรับแต่งได้ | APPOINTMENT_CERTIFICATE |
| 1.2.6.3.9 | ตรวจสอบรายชื่อผู้ป่วยในรูปแบบปฏิทิน | APPOINTMENT + Calendar View |
| 1.2.6.3.10 | ตรวจสอบช่วงเวลานัดในรูปแบบตารางเวลา | APPOINTMENT_TIME_SLOT |
| 1.2.6.3.11 | ตรวจสอบผู้ป่วยที่ไม่มาตามนัด | APPOINTMENT + Queue Status |
| 1.2.6.3.12 | เลื่อนนัดและเก็บข้อมูลการเลื่อน | APPOINTMENT_RESCHEDULE |
| 1.2.6.3.13 | จำกัดจำนวนผู้ป่วยต่อแพทย์ | APPOINTMENT_QUOTA |
| 1.2.6.4.1 | ส่งตรวจผู้ป่วยล่วงหน้า (ออก Visit) | VISIT_PREORDER |
| 1.2.6.4.2 | ส่งตรวจ Lab/X-Ray ล่วงหน้า | VISIT_PREORDER + Lab/X-Ray API |
7.2 การครอบคลุม SRS
- ✅ Functional Requirements: ครอบคลุมทุกฟีเจอร์ที่ระบุใน SRS
- ✅ Non-Functional Requirements: รองรับ Performance, Security, Integration
- ✅ Data Requirements: ครอบคลุมข้อมูลที่จำเป็นทั้งหมด
- ✅ Interface Requirements: รองรับ API Integration ครบถ้วน
- ✅ Business Rules: รองรับกฎธุรกิจการนัดหมายและตารางเวรแพทย์
เอกสารนี้จัดทำขึ้นเพื่อใช้ในการพัฒนาระบบนัดหมายและตารางเวรแพทย์สำหรับโรงพยาบาลค่ายธนรัชน์ และต้องได้รับการอนุมัติจากผู้มีอำนาจก่อนนำไปใช้ในการพัฒนาระบบ