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.

Giao diện modal đặt lịch hẹn
Luồng lịch hẹn: đặt lịch → confirm 24h → check-in → khám → kết thúc → thanh toán → e-invoice

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ềnHành động
Lễ tânappointment.manage, reception.manage, payment.manage, document.printTạo/sửa lịch, check-in, ghi thanh toán, in phiếu
Bác sĩappointment.self_manage, visit.manage, diagnosis.manageCheck-in/no-show lịch giao, khám, ghi diagnosis
Kế toán (tuỳ chọn)payment.manage, document.exportXem lịch sử, xuất report, e-invoice management
Customer Care (tuỳ chọn)appointment.read, customer_care.manageGửi xác nhận, handle no-show task

Quy trình từng bước

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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ứngNguyên nhânKhôi phục
Appointment không xuất hiện trên scheduler ngày hẹnAppointment tạo sai branch hoặc sai bác sĩ scopeKiể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 queueAppointment gán bác sĩ khác hoặc doctor workspace filter saiKiể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 đếnLễ 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.

Chi nhánh từ appointment (CI-01, CI-03)

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.

Permission & read-only mode (CI-08)

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".