Flowchart: กระบวนการจัดการผู้ป่วยผิดนัดหมาย
Flow การทำงานที่รองรับทั้งกรณี เปลี่ยนแพทย์/เปลี่ยนโรค (Walk-in Visit) และกรณี เลื่อนนัด (Reschedule)
flowchart TD
Start(["ผู้ป่วยมาติดต่อ<br/>(ผิดนัด/มาช้ากว่ากำหนด)"]) --> Registration["จุดลงทะเบียน/เวชระเบียน"]
Registration --> CheckStatus{"ตรวจสอบสถานะ<br/>แพทย์เจ้าของไข้เดิม"}
CheckStatus -- "แพทย์ยังออกตรวจ" --> SendToOriginal["ส่งตรวจแพทย์เดิม<br/>(ออกใบนำทาง)"]
CheckStatus -- "แพทย์กลับแล้ว/ไม่อยู่" --> AssessCondition["ประเมินความจำเป็น"]
AssessCondition -- "ไม่ด่วน/รอได้" --> OptionReschedule{"ต้องการเลื่อนนัด<br/>เป็นวันอื่นหรือไม่?"}
AssessCondition -- "จำเป็นต้องตรวจวันนี้" --> CheckOtherDoc{"หาแพทย์ท่านอื่น<br/>หรือคลินิกโรคทั่วไป"}
CheckOtherDoc -- "มีแพทย์รับเคส" --> ChangeDoctor["**เวชระเบียน**<br/>เปลี่ยนชื่อแพทย์/คลินิกใน Visit"]
ChangeDoctor --> GenVisit["ออกใบนำทางใหม่"]
CheckOtherDoc -- "ไม่มีแพทย์/คิวเต็ม" --> OptionReschedule
OptionReschedule -- "เลื่อนนัด (Reschedule)" --> RescheduleProcess["**เวชระเบียน/พยาบาล**<br/>ทำการเลื่อนนัดในระบบ"]
RescheduleProcess --> CancelOldApp["ยกเลิกนัดเดิม<br/>(ระบบระบุสาเหตุ: มาผิดนัด)"]
CancelOldApp --> NewApp["ออกใบนัดใหม่"]
OptionReschedule -- "ไม่เลื่อน (ยืนยันจะตรวจ)" --> ER["ส่งเข้าห้องฉุกเฉิน/เวรบ่าย<br/>(กรณีจำเป็นจริงๆ)"]
SendToOriginal --> Screening["จุดซักประวัติ"]
GenVisit --> Screening
Screening --> End(["เข้าสู่กระบวนการตรวจรักษา"])
NewApp --> EndProcess(["จบกระบวนการ"])
Revised Workflow: เมื่อพยาบาลซักประวัติเป็นผู้จัดการคิว (Nurse-Driven Flow)
flowchart TD
Start(["ผู้ป่วยมาติดต่อ<br/>(ผิดนัด/มาช้ากว่ากำหนด)"]) --> Registration["**1. จุดลงทะเบียน/เวชระเบียน**<br/>(ตรวจสอบสิทธิ์ / เปิด Visit)"]
Registration --> SendToScreening["ส่งผู้ป่วยไปจุดซักประวัติ<br/>(ตามคลินิกที่ระบุในนัดเดิม)"]
SendToScreening --> Screening["**2. จุดซักประวัติ**<br/>(พยาบาลเรียกซักอาการ)"]
Screening --> CheckDocRealtime{"**พยาบาลตรวจสอบ**<br/>แพทย์เจ้าของไข้อยู่หรือไม่?"}
CheckDocRealtime -- "แพทย์อยู่/ยังตรวจไม่เสร็จ" --> VitalSign["วัดสัญญาณชีพ / ซักประวัติ"]
VitalSign --> SendToDoc["ส่งเข้าห้องตรวจแพทย์เดิม"]
CheckDocRealtime -- "แพทย์กลับแล้ว/ไม่อยู่" --> ConsultPatient["แจ้งผู้ป่วย & ประเมินอาการ"]
ConsultPatient --> PatientChoice{"ผู้ป่วยเลือกทางไหน?"}
PatientChoice -- "ตรวจกับหมอท่านอื่นได้" --> CheckSwap{"มีแพทย์ท่านอื่น<br/>รับเคสแทนหรือไม่?"}
CheckSwap -- "มีแพทย์รับ" --> ChangeDocProcess["**พยาบาล** ทำการ<br/>เปลี่ยนแพทย์/โอนย้ายห้องตรวจ"]
ChangeDocProcess --> SendToNewDoc["ส่งเข้าห้องตรวจแพทย์ท่านใหม่"]
CheckSwap -- "ไม่มีแพทย์รับ" --> ForceReschedule["จำเป็นต้องเลื่อนนัด"]
PatientChoice -- "ต้องการรอตรวจกับหมอเดิม" --> ForceReschedule
ForceReschedule --> RescheduleAction["**พยาบาล** ทำการเลื่อนนัด<br/>ในระบบนัดหมาย"]
RescheduleAction --> ManagePreOrder{"จัดการใบสั่ง Lab/X-ray<br/>ที่สั่งไว้ล่วงหน้า"}
ManagePreOrder -- "เก็บไว้ทำครั้งหน้า" --> UpdateOrderDate["เลื่อนวันที่ใบสั่งตรวจ"]
ManagePreOrder -- "ยกเลิก" --> CancelOrder["ยกเลิกใบสั่งตรวจ"]
UpdateOrderDate --> PrintNewApp["ออกใบนัดใหม่ให้ผู้ป่วย"]
CancelOrder --> PrintNewApp
SendToDoc --> DoctorRoom["ห้องตรวจแพทย์"]
SendToNewDoc --> DoctorRoom
PrintNewApp --> EndNode(["ผู้ป่วยกลับบ้าน"])
DoctorRoom --> EndNode