ไอเดีย #48: ระบบคิวโรงพยาบาลบนมือถือ
ไปโรงพยาบาลรัฐทีไรก็ต้องเผื่อเวลาทั้งวัน ยื่นบัตรแล้วนั่งรอซักประวัติ รอหน้าห้องตรวจ รอเจาะเลือด รอการเงิน รอรับยา แต่ละจุดมีเลขคิวคนละชุด ไม่กล้าลุกไปไหนเพราะกลัวพลาดเรียก ผู้สูงอายุนั่งรอบนเก้าอี้แข็งหลายชั่วโมง ส่วนเจ้าหน้าที่ก็ต้องตะโกนเรียกชื่อซ้ำ ๆ ถ้าคนไข้รู้ว่าคิวตัวเองอยู่ตรงไหนผ่านมือถือ บรรยากาศหน้าห้องตรวจจะต่างไปมาก
ใครจะใช้
- ผู้ป่วยและญาติ — ดูสถานะคิวทุกจุดบนมือถือ และรับแจ้งเตือนเมื่อใกล้ถึง
- เจ้าหน้าที่แต่ละจุดบริการ — เรียกคิว ข้ามคิว พักคิว และส่งต่อไปจุดถัดไป
- หัวหน้างาน/ผู้บริหาร — ดูเวลารอเฉลี่ยและจุดที่เป็นคอขวด
ฟีเจอร์ขั้นต่ำ (MVP)
- ออกคิวที่จุดคัดกรอง ได้ใบคิวพร้อม QR สำหรับติดตามสถานะบนมือถือโดยไม่ต้องติดตั้งแอป
- รองรับคิวหลายจุดต่อเนื่อง เช่น ซักประวัติ ห้องตรวจ แล็บ การเงิน ห้องยา ในการมาครั้งเดียว
- หน้าจอเจ้าหน้าที่ กดเรียกคิวถัดไป เรียกซ้ำ ข้าม หรือส่งต่อ
- หน้าจอแสดงผลหน้าห้อง (display board) อัปเดตแบบเรียลไทม์ พร้อมเสียงเรียกภาษาไทย
- แจ้งเตือนเมื่อเหลือก่อนถึงคิวอีกไม่กี่คิว ผ่านหน้าเว็บหรือ LINE
- คิวพิเศษ เช่น ผู้สูงอายุ ผู้พิการ หรือเร่งด่วน แทรกได้ตามกฎที่ตั้งไว้
- รายงานเวลารอแต่ละจุด แยกตามช่วงเวลาและวัน
ต่อยอดได้อีก
- จองคิวล่วงหน้าสำหรับผู้ป่วยนัด เพื่อลดคนแออัดช่วงเช้า
- ประเมินเวลารอที่เหลือจากสถิติย้อนหลัง
- เชื่อมกับระบบ HIS ของโรงพยาบาลผ่าน API เพื่อไม่ต้องคีย์ซ้ำ
- ประกาศเสียงหลายภาษาสำหรับแรงงานต่างชาติ
โครงข้อมูลตั้งต้น
service_points— id, code, name, prefix, department, activevisits— id, visit_date, hn_ref, priority, track_token, created_atqueue_tickets— id, visit_id, service_point_id, queue_no, status, called_at, served_at, finished_atcounters— id, service_point_id, name, staff_idqueue_events— id, ticket_id, action, counter_id, staff_id, created_at
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ท้าทาย เพราะต้องเรียลไทม์ ทนโหลด และต้องไม่ล่มกลางวัน ฝั่ง backend ใช้ Yii2 หรือ Laravel + PostgreSQL ร่วมกับ Redis และ WebSocket สิ่งที่จะได้เรียนรู้:
- ออกเลขคิวแบบไม่ซ้ำเมื่อมีหลายเครื่องกดพร้อมกัน ด้วย sequence หรือ atomic counter
- ทำ pub/sub ให้หน้าจอหลายสิบจออัปเดตพร้อมกัน
- สร้างเสียงเรียกคิวภาษาไทยจากไฟล์เสียงตัวเลขที่ต่อกัน
- ออกแบบ state ของคิวและรายงานจาก event log
ข้อควรระวัง
- หน้าจอสาธารณะและหน้าติดตามคิวไม่ควรแสดงชื่อเต็ม HN หรือชื่อแผนก ที่บอกโรคได้ เพราะเป็นข้อมูลสุขภาพตาม PDPA ใช้เลขคิวหรือชื่อแบบปิดบางส่วน
- ถ้าระบบล่มต้องมีแผนสำรอง เช่น พิมพ์บัตรคิวแบบออฟไลน์ และเรียกต่อได้เมื่อระบบกลับมา
- สองเจ้าหน้าที่กดเรียกพร้อมกันอาจได้คิวเดียวกัน ต้องใช้ lock หรือ UPDATE แบบมีเงื่อนไขสถานะ
มีใครเคยทำระบบคิวให้โรงพยาบาลหรือหน่วยงานราชการบ้างครับ ใช้ WebSocket หรือแค่ polling แล้วรอดไหมตอนคนเยอะช่วงเช้า ถ้าเป็นคุณจะจัดการคิวพิเศษแบบไหนให้ยุติธรรม มาเล่าหรือโชว์ระบบไว้ในกระทู้นี้ได้เลย