BN có hẹn — Quy trình lịch hẹn đầy đủ
Bệnh nhân đặt lịch hẹn trước. Lễ tân xác nhận 24h trước qua Zalo/SMS. Ngày hẹn, BN check-in, bác sĩ khám, ghi diagnosis, kết thúc visit, thanh toán, in receipt, phát e-invoice nếu cần. Bao gồm cả trường hợp BN đến muộn hoặc không đến.
Bối cảnh
Thứ Ba tuần trước, BN gọi đặt lịch khám chảy máu nướu cho thứ Năm (sau 2 ngày). Lễ tân tạo appointment cho 10:00 với bác sĩ Minh ở chi nhánh Q1. Ngày thứ Tư, hệ thống gửi SMS/Zalo xác nhận lịch cho BN. Thứ Năm sáng, BN tới đúng giờ (hoặc muộn vài phút). Lễ tân check-in từ reception board. Visit tạo. Bác sĩ khám, ghi diagnosis. Lễ tân ghi thanh toán ngay. Hơn nữa, nếu BN yêu cầu, phát hành e-invoice. BN rời đi với receipt và link hóa đơn điện tử.
Diễn viên & quyền cần
| Vai trò | Quyền | Hành động |
|---|---|---|
| Lễ tân | appointment.manage, reception.manage, payment.manage, document.print | Tạo/sửa lịch, check-in, ghi thanh toán, in phiếu |
| Bác sĩ | appointment.self_manage, visit.manage, diagnosis.manage | Check-in/no-show lịch giao, khám, ghi diagnosis |
| Kế toán (tuỳ chọn) | payment.manage, document.export | Xem lịch sử, xuất report, e-invoice management |
| Customer Care (tuỳ chọn) | appointment.read, customer_care.manage | Gửi xác nhận, handle no-show task |
Quy trình từng bước
- Tạo appointment. Lễ tân hoặc khách hàng vào /scheduler → click ngày/giờ rảnh → form appointment. Chọn: bệnh nhân, dịch vụ, bác sĩ, ngày/giờ, chi nhánh. Hệ thống kiểm tra overlap (bác sĩ không bị trùng giờ). Lưu → appointment xuất hiện trên calendar.
- Xác nhận 24h trước. Hệ thống (nếu bật tính năng) tự động gửi SMS/Zalo cho BN ngày hôm trước: "Bác sĩ Minh sẽ khám vào 10:00 thứ Năm. Bạn vui lòng xác nhận?". BN trả lời hoặc lệ tân confirm thủ công. Status appointment vẫn là Scheduled.
- Ngày hẹn — Check-in. BN tới quầy lúc 10:00 (hoặc đến muộn). Lễ tân quét QR appointment hoặc tìm BN theo tên → click "Check-in". Appointment status →
ARRIVED. Visit được tạo tự động. - Bác sĩ khám. Bác sĩ mở Doctor Workspace hoặc Reception queue → thấy BN ở lane "Arrived" → click "Bắt đầu khám". Appointment status →
IN_CONSULTATION, visit status →IN_PROGRESS. Bác sĩ khám, ghi diagnosis, tooth chart. - Kết thúc khám. Bác sĩ nhấn "Hoàn tất khám" hoặc lễ tân nhấn từ lane "In Consultation" → appointment + visit status →
COMPLETED. - Ghi nhận thanh toán. Lễ tân (hoặc BN) mở Patient 360 → "Ghi nhận thanh toán", nhập số tiền + phương thức (cash/card/Momo). Phiếu thu tạo tự động. Nếu appointment có charge sẵn, số tiền mặc định là charge total.
- In receipt & e-invoice. Lễ tân nhấn "In phiếu thu". Nếu phòng khám bật e-invoice, click "Phát hành e-invoice", chọn provider (VNPT/Viettel/MISA), confirm. BN nhận email + SMS với số HĐ và link tra cứu công cộng.
Variant: BN đến muộn (late show)
BN tới lúc 10:15 (15 phút muộn). Lễ tân vẫn check-in bình thường → visit tạo, khám như mọi khi. Nếu quy định clinic muộn hơn 30 phút sẽ dời lịch, lễ tân có thể reschedule appointment sang khung giờ khác. Nếu không, khám vẫn diễn ra hình ảnh và thanh toán bình thường. Appointment status status ARRIVED nhưng có ghi chú "arrived late".
Variant: BN không đến (no-show)
BN hẹn 10:00 nhưng không tới. Lễ tân đợi → sau 20 phút, nhấn "Không đến" (NO_SHOW) trên appointment card ở lane "Scheduled". Dialog xác nhận: "Bạn chắc BN không đến?". Confirm → appointment status → NO_SHOW. Hệ thống tự động tạo task cho Customer Care: "Follow-up no-show appointment" với link vào appointment. Lễ tân không ghi visit hay payment.
Kết quả mong đợi
- Appointment status: SCHEDULED → ARRIVED → IN_CONSULTATION → COMPLETED (hoặc NO_SHOW nếu bệnh nhân vắng).
- Visit: Tạo từ check-in, status ARRIVED → IN_PROGRESS → COMPLETED.
- Diagnosis: Ghi trong visit context, liên kết với visit này rõ ràng.
- Payment: Ghi sau khám, phiếu thu in ra hoặc gửi qua Zalo.
- E-invoice: (nếu phát hành) Số HĐ được cấp tự động, BN nhận link tra cứu.
- Patient 360 timeline: Hiển thị: "Khám ngày [date] - Bác sĩ Minh" → "Thanh toán 500.000 ₫" → "E-invoice #00001".
Khi nào hỏng & cách xử lý
| Triệu chứng | Nguyên nhân | Khôi phục |
|---|---|---|
| Appointment không xuất hiện trên scheduler ngày hẹn | Appointment tạo sai branch hoặc sai bác sĩ scope | Kiểm tra active branch + bác sĩ trong filter. Hoặc lệ tân refresh scheduler. Appointment vẫn tồn tại, chỉ cần filter đúng. |
| BN check-in nhưng visit không tạo (error) | Hệ thống lỗi khi create visit, hoặc active branch không hợp lệ | Thử check-in lại. Nếu lỗi vẫn, lễ tân tạo visit thủ công từ "Create walk-in", gán appointment vào visit đó. Audit ghi "manual link". |
| Bác sĩ không thấy appointment trong queue | Appointment gán bác sĩ khác hoặc doctor workspace filter sai | Kiểm tra "Assigned doctor" của appointment. Lễ tân gán đúng bác sĩ nếu cần. Bác sĩ refresh queue. |
| Reschedule lịch hẹn không được (overlap error) | Bác sĩ target bị trùng giờ hoặc thời gian quá khứ | Chọn giờ khác hoặc bác sĩ khác. Hệ thống phải validate giờ ≥ hiện tại (clinic timezone UTC+7). |
| Cancel appointment không thành (lỗi confirm) | Dialog cancel bị stuck hoặc hệ thống không phản ứng | Đóng dialog, refresh. Appointment vẫn tồn tại. Thử cancel lại từ appointment detail card. |
| BN not-show nhưng visit vẫn tạo (nhầm) | Lễ tân nhấn check-in trước khi biết BN không đến | Lễ tân nhấn "Hủy visit" trên visit card, status → CANCELED. Appointment vẫn NO_SHOW. Ghi audit "canceled due to no-show". |
Dấu vết để lại (audit & branch ownership)
Audit log ghi: "Appointment created", "Appointment confirmed", "Patient checked in (ARRIVED)", "Consultation started (IN_CONSULTATION)", "Appointment completed", "Payment recorded", "E-invoice issued". Mỗi action có timestamp, user, chi nhánh.
Appointment có branch ownership từ lúc tạo (chi nhánh bác sĩ được gán). Nếu lễ tân chuyển active branch sau check-in, appointment vẫn thuộc chi nhánh gốc — không đổi. Active branch chip chỉ là filter view, không mutate ownership.
Bác sĩ có appointment.self_manage chỉ được check-in/cancel/no-show appointment gán cho mình. Nếu thiếu quyền, button disable + tooltip: "Không có quyền quản lý lịch hẹn".