Chuyển đến nội dung chính

Bài 6: Kiosk tự phục vụ & QMS — xếp hàng thông minh

Thiết kế Kiosk check-in, sinh số tự động, hàng đợi đa tiêu chí, gọi loa, màn hình LED — giảm tải cho quầy tiếp nhận và rút ngắn thời gian chờ.

Kiosk tự phục vụ & Queue Management

Mục tiêu

Check-in QR và bảng số thứ tự điện tử

Kiosk + QMS là "lớp trải nghiệm" lớn nhất của HIS — đây là những điểm tiếp xúc đầu tiên và cuối cùng với BN trong viện. Một kiosk tốt + QMS thông minh có thể giảm 50–70 % tải quầy lễ tân, giảm thời gian chờ từ 90 phút xuống < 30 phút, và tăng điểm hài lòng BN (PSI) thêm 15–20 điểm.

Mục tiêu bài:

  • Hiểu luồng kiosk (CCCD chip / QR appointment / sinh trắc / VNeID), bao gồm fallback khi BN không dùng được kiosk.
  • Nắm thiết kế multi-queue với ưu tiên theo TT 14/2014 + JCI; state machine số gọi.
  • Biết kiến trúc realtime (LED + TTS + display server).
  • Thiết kế degraded mode (kiosk down → quầy; QMS down → gọi miệng) để không đứt nghiệp vụ.
  • Nắm KPI + UAT cho vận hành.

Bối cảnh: thực tế vận hành kiosk ở BV Việt Nam

  • 60–70 % BN có smartphone, nhưng người > 60 tuổi (chiếm ~35 % lượt khám mạn tính) thường ngại kiosk → cần volunteer hướng dẫn.
  • Một kiosk hỗ trợ ~150–250 BN/ngày; BV đổ về 100–1000 lượt/ngày thường đặt 4–10 kiosk.
  • Màn hình cảm ứng phải chịu được mồ hôi, xương sống (nếu BN dùng bút) và cồn sát khuẩn.
  • Có BV đặt kiosk ngoài trời hoặc cứu cánh sau giờ hành chính → cần IP65, anti-glare.
  • BHYT: kiosk không được thay con người verify thẻ — gọi cổng BHXH realtime; nếu cổng chậm → fallback quầy.

Case study: BV ĐK khu vực W đặt 6 kiosk ở cửa chính nhưng đặt cách nhau 30cm → BN đứng không đủ chỗ → chen lấn. Sau khi rời bố trí (làn riêng, mỗi kiosk + 1m), quét CCCD từ 45 giây → 25 giây. Bài học: design vật lý quan trọng ngang đồ hoạ UI.

Các loại kiosk

LoạiVai tròCấu phần cứng
Check-in kioskQuét CCCD/BHYT/QR → sinh số + in phiếuTúi màn cảm ứng + đầu đọc NFC + máy in nhiệt
Payment kioskTạm ứng / thanh toán cuối+ đầu đọc thẻ POS / QR scanner / cash recycler
Wayfinding kioskTra phòng / bản đồ / lịch hẹnMàn hình đứng hoặc ghép
Self-service reportIn phiếu KQ XN, giấy nhập viện+ đầu đọc QR + máy in A4
OPD nurse stationCho điều dưỡng gọi BN tiếp theoTFT + nút call next
Survey kioskĐo hài lòng (bài 43)Màn hình nhỏ 7"

Luồng check-in qua kiosk

[BN đến viện]
     │
     ▼
[Kiosk - Welcome screen]
     │
     ├──► Tôi có lịch hẹn → quét QR → verify slot → sinh số (giữ thứ hạng theo giờ hẹn)
     ├──► Tôi chưa có lịch → quét CCCD chip → tra MPI → chọn chuyên khoa → sinh số
     ├──► Tôi đã KCB lần trước (tái khám) → nhập số phiếu cũ → tự động tiếp tục
     └──► Tôi cấp cứu → redirect ngay đến ER (không kiosk)
           │
           ▼
     [Nếu BHYT → gọi cổng BHXH verify]
           │
           ▼
     [In phiếu khám có QR + số TT + phòng + bản đồ]
           │
           ▼
     [Đồng bộ sang QMS → hiện lên LED phòng khám]

Lưu ý UX:

  • Màn welcome chỉ 4 nút lớn (≥ 200x150 px), ngôn ngữ đơn giản.
  • Có nút "Hướng dẫn bằng video" cho người công không quen.
  • Tự timeout 30 giây → trở về home.
  • Có chế độ "trợ giúp" → gọi volunteer tới.

Kiến trúc QMS

[Kiosk] ────────┐
[Quầy lễ tân] ──┼──► [QMS Service (in-mem queue + persist Redis/SQL)]
[Appointment]───┘
                          │
                          ├──► [Display Server] ──► LED phòng khám / sảnh
                          ├──► [TTS Engine offline] ──► Loa khu vực
                          ├──► [Doctor Console] → nút "Gọi tiếp / Skip / Recall"
                          └──► [BN App] → push notif "đến lượt" + ETA
  • QMS dùng pattern Pub/Sub (Redis Streams / Kafka topic-per-room) để LED + loa + app nắm realtime.
  • Mỗi phòng khám = 1 partition; horizontal scale dễ.
  • Có fallback polling 2s nếu WebSocket mất.

Mô hình hàng đợi (multi-queue + priority)

HàngMô tảƯu tiên (lớn = cao hơn)Nguồn
ER → OPDTừ cấp cứu chuyển sang khoa100bài 10
VIP / Bảo trợ ngành y tếlãnh đạo, người có công đặc biệt90quy chế BV
Người có công (TT 14/2014)thương binh, bệnh binh80TT 14/2014/TT-BYT
> 80 tuổi / < 6 tuổi / phụ nữ có thainhóm ưu tiên70TT 14/2014
Có lịch hẹnxếp theo giờ hẹn60 (within ±15 phút slot)bài 5
Walk-in BHYTthông tuyến / đúng tuyến50bài 3
Walk-in dịch vụtự nguyện40
Tái khám trong ngày (sau XN)quay lại phòng khám65flag recheck=true

Thuật toán "Gọi tiếp" đơn giản (Python pseudo):

def call_next(room):
    candidates = qms.list(status=ISSUED, room=room)
    candidates.sort(key=lambda c: (
        -c.priority,            # ưu tiên cao trước
        c.appointment_time or c.issued_at  # FIFO trong cùng ưu tiên
    ))
    return candidates[0] if candidates else None

Bảo vệ fairness: không cho ưu tiên cao kéo dài quá 3 ca liên tiếp → đan xen với thường (anti-starvation).

State machine số gọi

[ISSUED] ──► [CALLED] ──► [IN_EXAM] ──► [COMPLETED]
   │           │ (gọi 3 lần / 2 phút)
   │           └──► [MISSED] ──► [REOPEN within 60 phút] ──► [ISSUED again]
   │                       └──► [ARCHIVED]
   ├──► [DEFERRED] (BN xin hoãn 1 lượt → tụt 5 ca)
   └──► [CANCELED] (BN bỏ về)

Quy tắc:

  • CALLED → MISSED sau 3 lần gọi (TTS + LED) mỗi 40s, tổng 2 phút.
  • REOPEN chỉ trong 60 phút, ghép vào sau số đang gọi, không cho cắt hàng.
  • DEFERRED chỉ cho 1 lần / lượt (tránh BN xin hoãn liên tục).
  • IN_EXAM → COMPLETED: tự động khi BS lưu kết thúc khám (bài 7).

Hiển thị màn hình LED

Mỗi phòng khám / dãy phòng có 1 LED:

  • Số đang gọi (font ≥ 200pt, contrast cao).
  • 3–5 số tiếp theo + tên gọn (mask: "NG. V. A***") theo NĐ 13/2023.
  • Tên BS, ETA chờ (tính = avg_time_per_case × ahead_count).
  • Thông báo chạy chữ (hết thuốc, đổi phòng, lịch nghỉ, cảnh báo trộm cắp).
  • Realtime: WebSocket; nếu mất kết nối → hiện dải đỏ "OFFLINE — liên hệ NV".

Loa gọi TTS

  • TTS engine offline (FPT.AI, VBee, Viettel AI): tránh phụ thuộc internet; ngưỡng độ trễ < 500ms.
  • Nội dung gọi (template): "Mời bệnh nhân số 25, ông Nguyễn Văn A***, vào phòng 102."
  • Không đọc ngày sinh / chẩn đoán / mã BHYT — vi phạm PHI (NĐ 13/2023).
  • Tỷ lệ gọi: cách nhau tối thiểu 8–10 giây để không bị ồn.
  • Phân vùng loa: chỉ loa khu vực có phòng khám đó nghe được (DSP zone).

Data model QMS

QUEUE_TICKET
├── ticket_id (PK)
├── encounter_id (FK)
├── room_id, queue_code (vd. "NOI-A")
├── number (số hiển thị, theo ngày + phòng)
├── priority (int 0–100)
├── appointment_time (nếu có hẹn)
├── status (ISSUED | CALLED | IN_EXAM | COMPLETED | MISSED | DEFERRED | CANCELED | ARCHIVED)
├── issued_at, called_at, in_exam_at, completed_at
├── call_count, last_call_at
└── source (KIOSK | COUNTER | APP | APPOINTMENT | ER_TRANSFER)

ROOM_STATE
├── room_id, current_ticket_id, doctor_id
├── status (OPEN | LUNCH | CLOSED | EMERGENCY_PAUSE)
└── avg_time_per_case (rolling 7 days)

KIOSK_DEVICE
├── kiosk_id, location, status (ONLINE | OFFLINE | MAINTENANCE)
├── last_heartbeat_at, version, ip
└── features[] (NFC | QR | POS | BIOMETRIC)

Integration patterns

1) NFC CCCD reader → kiosk

  • Tích hợp qua PC/SC hoặc HID API; đọc thẻ chip CCCD theo chuẩn ICAO 9303 + đặc tả BCA (TT 06/2021).
  • Chỉ đọc data nhóm 1, 2 (demographics + photo); không đọc vân tay trừ khi BN đặt ngón + cho phép (consent lồng vào màn hình).
  • Sign verify chữ ký CA của BCA để chống giả.

2) VNeID mini-app

  • BN được push QR động trong app VNeID; kiosk quét → verify token với backend VNeID mức 2.
  • Lợi ích: không cần cầm thẻ vật lý.

3) HL7 v2 / FHIR notification

  • Khi CALLED → bắn message MFN^M01 vào bảng "display" cho LED (một số đơn vị tự viết API).
  • Pattern hiện đại: dùng FHIR Subscription / WebSocket.

4) Push notification cho app BN

Khi còn 3 số nữa đến lượt → push: "Còn ~10 phút sẽ đến số của bạn. Hãy về phòng 102." → BN có thể đi toilet, căng-tin mà không bị missed.

Edge case

  • Kiosk down → fallback quầy; QMS vẫn chạy; nhân viên quầy dùng PC nhập tay sinh số.
  • QMS service down (khá nguy hiểm) → chế độ "manual paper": in số bằng máy in nhiệt local + gọi miệng; sau khi up lại → nhập truy hồi.
  • BN quét nhầm số phụ huynh → detect = encounter gắn sai patient → cho huỷ trong 5 phút.
  • 2 BN quét cùng QR (chia sẻ): QR appointment chỉ valid 1 lần; lần 2 bị từ chối.
  • Lệch đồng hồ kiosk vs server → sai timestamp → sai thứ tự gọi; bắt buộc NTP mỗi 5 phút.
  • Cổng BHYT timeout → kiosk hiển thị "vui lòng đến quầy" thay vì im lặng.
  • Côn trùng / bụi: kiosk dưới hầm bệnh viện có thể bị ẩm → cần tủ IP54 + lọc quạt.

Sai lầm thường gặp

  • Màn welcome quá nhiều nút → BN già bấm sai.
  • Không có volunteer trong tuần đầu → BN gặp lỗi → lần sau từ chối dùng kiosk.
  • TTS đọc đầy đủ tên + ngày sinh → vi phạm PHI.
  • LED đặt ở vị trí BN ngồi không nhìn thấy → mất ý nghĩa.
  • QMS không có anti-starvation → BN thường bị xếp sau ưu tiên liên tục → chờ 4 tiếng.
  • Không log call_count → kiện cáo "BV không gọi tôi".
  • Kiosk có thanh toán nhưng không có camera giám sát → rủi ro trộm thẻ.
  • Không tích hợp sang QMS phòng XN/CĐHA → BN xong khám phòng bác sĩ nhưng vẫn phải xếp tay lấy phiếu ở labo.

Output / Chứng từ

Chứng từKhi nàoGhi chú
Phiếu khám + số TT (in từ kiosk)sau check-incó QR encounter, bản đồ phòng
Phiếu thu tạm (nếu thanh toán kiosk)sau PAIDchỉ tạm, không là HĐĐT
Audit log call/skip/recalltự độnglưu trong QMS
Báo cáo chờ / call cuối ngàyEOD jobphục vụ KPI

Checklist UAT

  • Quét CCCD chip qua NFC → ra đúng demographic.
  • Quét QR appointment → verify slot đúng khung giờ.
  • Quét QR appointment quá hạn / 2 lần → bị từ chối.
  • BHYT verify realtime; nếu cổng down → hiển thị "đến quầy".
  • In phiếu khám có QR + số TT đúng.
  • Gọi 3 lần không lên → MISSED.
  • BN xin REOPEN trong 60 phút → gắn vào sau số đang gọi.
  • BN xin DEFERRED → tụt 5 số.
  • Anti-starvation: ưu tiên cao 3 ca liên tục → tự động cho thường 1 ca.
  • LED + TTS realtime sync (≤ 1s).
  • Kiosk down → quay về trang welcome trong 5 giây; có alert sang quầy.
  • QMS down → paper fallback có in số.
  • LED hiển thị tên masked theo PHI.
  • Push notif cho app BN khi còn 3 số nữa.

KPI vận hành

KPICông thứcMục tiêu
Avg wait time (BN walk-in)Σ(call - issue) / N< 30 phút
Avg wait time (BN có hẹn)< 15 phút sau giờ hẹn
Throughputca / giờ / phòng≥ 6
MISSED rateMISSED / ISSUED< 3 %
Self-service ratiokiosk / total check-in> 60 %
Kiosk uptime(24h - downtime) / 24h> 99.5 %
% tiếp nhận bằng CCCD chip NFC> 70 %Đề án 06 mục tiêu
LED/TTS sync latencyp99 < 1.5 smonitoring

Cơ sở pháp lý áp dụng (2026)

  • Luật KCB 15/2023/QH15 — quyền tiếp cận hồ sơ.
  • TT 14/2014/TT-BYT — ưu tiên KCB.
  • NĐ 13/2023/NĐ-CP — PHI / display masking.
  • QĐ 06/QĐ-TTg 2022 — Đề án 06 (CCCD chip).
  • TT 06/2021/TT-BCA — cấu trúc CCCD.
  • TT 39/2024/TT-BYT — bảng giá DV (cho payment kiosk).

Bài tiếp theo: Khám ngoại trú (OPD) — luồng nghiệp vụ tại phòng khám.