การอัพเดทสถานนะการนัดหมาย
flowchart TD
%% --- กำหนด Style ---
classDef status fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,color:black;
classDef process fill:#e1f5fe,stroke:#0277bd,stroke-width:2px,color:black;
classDef decision fill:#ffccbc,stroke:#d84315,stroke-width:2px,color:black;
classDef database fill:#e0e0e0,stroke:#616161,stroke-width:2px,stroke-dasharray: 5 5,color:black;
classDef terminator fill:#ffcdd2,stroke:#c62828,stroke-width:2px,color:black;
%% --- จุดเริ่มต้น ---
Start((เริ่ม)) --> SearchPt[ค้นหาผู้ป่วย<br/>HN / CID / ชื่อ-สกุล]
SearchPt --> SelectDate[เลือกแพทย์/คลินิก/วันเวลา]
%% --- 1. กระบวนการลงทะเบียนนัด ---
subgraph Booking_Process ["1. ลงทะเบียนนัดหมาย (TOR 1.2.6.3)"]
SelectDate --> CheckCond{ตรวจสอบเงื่อนไข<br/>TOR 1.2.6.1}:::decision
CheckCond -- "ติดวันหยุด/คิวเต็ม" --> Alert[แจ้งเตือนผู้ใช้งาน]
Alert --> SelectDate
CheckCond -- "ผ่าน" --> InputDetail["บันทึกข้อมูลนัด<br/>- สาเหตุการนัด (APDIAG)<br/>- ประเภทนัด (APTYPE)<br/>- สั่ง Lab/X-Ray ล่วงหน้า"]
InputDetail --> SaveAppt[บันทึกข้อมูลลงฐานข้อมูล]
SaveAppt --> DB_Appt[("แฟ้ม 28: APPOINTMENT")]:::database
SaveAppt --> StateScheduled("สถานะ: Scheduled<br/>นัดหมายแล้ว"):::status
StateScheduled --> PrintCard["พิมพ์ใบนัด / บัตรคิว<br/>(TOR 1.2.6.3 ข้อ 8)"]:::process
end
%% --- การแก้ไข/ยกเลิก ---
subgraph Modification ["การจัดการ/แก้ไข (TOR 1.2.6.3)"]
StateScheduled --> DecisionMod{ต้องการแก้ไข?}:::decision
DecisionMod -- "ยกเลิกนัด" --> CancelAction[ระบุสาเหตุการยกเลิก]
CancelAction --> StateCancelled("สถานะ: Cancelled<br/>ยกเลิกนัด"):::terminator
DecisionMod -- "เลื่อนนัด" --> PostponeAction["ระบุสาเหตุการเลื่อน<br/>เก็บประวัติผู้แก้ไข"]
PostponeAction --> StateRescheduled("สถานะ: Rescheduled<br/>เลื่อนนัด"):::status
StateRescheduled --> SelectDate
end
%% --- 2. วันนัดหมาย ---
subgraph Appointment_Day ["2. วันนัดหมาย & ตรวจสอบสิทธิ (TOR 1.2.6.2)"]
DayArrive((วันนัดหมาย)) --> PatientArrive[ผู้ป่วยมาถึง รพ.]
PatientArrive --> SearchApptDay["ค้นหารายการนัดวันนี้<br/>(TOR 1.2.6.2)"]
SearchApptDay --> CheckInAction{ผู้ป่วย Check-in?}:::decision
CheckInAction -- "ใช่ (มาตามนัด)" --> ConfirmArr[ยืนยันการมาถึง]:::process
ConfirmArr --> StateArrived("สถานะ: Confirmed/Arrived<br/>มาถึงแล้ว"):::status
StateArrived --> GenVisit["ระบบออก Visit อัตโนมัติ<br/>ส่งผู้ป่วยเข้าคิวตรวจ<br/>(TOR 1.2.6.4 ข้อ 1)"]:::process
StateArrived --> GenOrder["ยืนยันคำสั่ง Lab/X-Ray ล่วงหน้า<br/>(TOR 1.2.6.4 ข้อ 2)"]:::process
GenVisit --> ServiceProcess[เข้าสู่กระบวนการตรวจรักษา]
ServiceProcess --> CloseVisit[แพทย์ปิดการตรวจ]
CloseVisit --> StateCompleted("สถานะ: Completed<br/>เสร็จสิ้น"):::status
end
%% --- 3. จบวัน ---
subgraph End_Day_Process ["3. ประมวลผลสิ้นวัน"]
CheckInAction -- "ไม่มา (สิ้นสุดวัน)" --> AutoProcess[ระบบประมวลผลอัตโนมัติ]
AutoProcess --> StateNoShow("สถานะ: No-Show<br/>ไม่มาตามนัด"):::terminator
StateNoShow --> ReportNoShow["รายงานผู้ป่วยผิดนัด<br/>(TOR 1.2.6.3 ข้อ 11)"]:::database
end