Vòng đời một case từ A đến Z

Đây là luồng xương sống của DentIQ Lab: một work order đi từ lúc phòng khám đặt đến tận bảo hành, trên một bản ghi case duy nhất mà cả phòng khám lẫn labo cùng đọc realtime. Trang này kể toàn bộ hành trình theo máy trạng thái, để bạn hình dung mỗi bước ai làm gì và điều gì gác không cho nhảy bước.

Bảng case của labo hiển thị các case theo trạng thái, mức ưu tiên và người phụ trách
Bảng case của labo: mỗi case mang một trạng thái trong vòng đời; điều phối theo dõi tiến độ và cảnh báo trễ hạn từ đây.

Bối cảnh

Phòng khám A đặt một mão zirconia răng 36 cho một bệnh nhân, gửi labo B. Đơn số tới trước, mẫu vật lý (dấu silicone) ship riêng và tới sau. Ta theo case này chạy hết một vòng đời "sạch": đặt → sản xuất → QC pass → giao → phòng khám nhận, rồi điểm qua các nhánh phát sinh (redo, bảo hành) có thể rẽ ra sau khi giao.

Diễn viên & quyền cần

Vai tròQuyền/điều kiệnHành động
Nha sĩ / lễ tân (clinic)Clinic-side của cạnh clinic↔laboĐặt đơn (submitted), xác nhận đã nhận (delivered), báo lỗi (redo/warranty)
Điều phối (labo)Lab-side; vai điều phốiTiếp nhận (accepted), phân technician, ghi nhận mẫu vật lý, đẩy vào sản xuất
Technician (labo)Được phân caseChạy các công đoạn sản xuất (in_production)
QC (labo)Vai QCChấm cổng QC: pass → ready_to_ship, trượt → về in_production
Giao nhận (labo)Vai giao nhậnTạo chuyến giao (shippeddelivered)
Kế toán (labo)Vai kế toánGhi công nợ / thanh toán, đóng case (closed)

Quy trình từng bước

  1. Đặt — submitted. Phòng khám gửi work order (qua quét QR, không cài app). Cờ sampleReceived=false mặc định vì mẫu vật lý còn trên đường.
  2. Tiếp nhận — accepted. Điều phối nhận đơn, xác nhận giá + hạn. Có thể accept trước khi mẫu tới (nhận về mặt giấy tờ), nhưng chưa được vào sản xuất. Thiếu thông tin → rejected → phòng khám sửa và gửi lại.
  3. Nhận mẫu vật lý. Khi mẫu tới labo, điều phối xác nhận → sampleReceived=true + ghi sampleReceivedAt (mốc tính SLA). Đây là cờ song song, không phải một state riêng — nhưng nó gác cạnh vào sản xuất.
  4. Sản xuất — in_production. Chỉ vào được khi có technician được phân sampleReceived=true (hoặc case STL-only). Case chạy qua các công đoạn design → milling → sinter → polish/glaze. Có thể tạm dừng on_hold hoặc gửi thử try_in cho ca phức tạp.
  5. Kiểm định — qc. Xong công đoạn → vào cổng QC. QC chấm checklist 6 hạng mục. Passready_to_ship; trượt → quay lại in_production đúng công đoạn lỗi.
  6. Chờ giao & giao — ready_to_shipshipped. Đạt QC, giao nhận tạo chuyến giao, chọn phương thức (tự giao / shipper / Grab-xe ôm / đối tác / relay bến xe), ghi bằng chứng.
  7. Đã nhận — delivered. Phòng khám xác nhận đã nhận (hoặc labo ghi nhận thay mặt, có ghi rõ ai/lúc nào). Không case nào vào delivered nếu chưa từng qua một lần QC pass.
  8. Nhánh phát sinh (nếu có). Sau giao có thể rẽ: redo (lỗi phát hiện lúc/ngay sau giao — ghi lý do + bên chịu trách nhiệm, quay lại in_production) hoặc warranty (hỏng sau giao, còn hạn bảo hành). Mọi vòng lặp đều đi lại qua QC.
  9. Đóng — closed. Đã giao + đã thanh toán/ghi công nợ, hết phát sinh → kế toán đóng case. Mọi nhánh cuối cùng hội tụ về closed.

Huỷ đơn, sửa đơn giữa chừng, mẫu hỏng

Ngoài đường "sạch" ở trên, case còn ba tình huống hằng ngày không đi theo tuyến tính:

  • Huỷ đơn (cancel) — bệnh nhân no-show, phòng khám gọi huỷ. Huỷ được từ mọi trạng thái trước khi giao (submitted đến ready_to_ship) sang cancelled — trạng thái terminal, không rẽ tiếp. Bắt buộc ghi lý do. Không huỷ được từ shipped trở đi (đang trên đường) hay sau delivered — những trường hợp đó đi đường redo/bảo hành. Nếu case có cọc trước-giao, huỷ phải kèm depositDisposition: refund (trả lại cọc) hoặc forfeit (labo giữ làm phí huỷ) — cả hai không chạm vào sổ công nợ, vì ghi nợ chỉ phát sinh lúc delivered.
  • Sửa đơn (amendment) — phòng khám gọi điện đổi shade/material/răng giữa chừng. Ghi nhận qua thao tác sửa đơn khi case đang ở accepted/in_production/on_hold/try_in; hệ thống cập nhật Rx và báo giá lại (khoá giá mới, giữ giá cũ trong lịch sử để truy vết) — không đổi trạng thái case. Sau khi vào qc thì không sửa được nữa — quá muộn để đổi ý.
  • Mẫu hỏng — chờ mẫu lại (sample reject). Mẫu rách/thiếu chi tiết/sai khớp cắn là chuyện hàng ngày. Khi điều phối phát hiện mẫu hỏng lúc nhận (case đang ở accepted) → đặt lại sampleReceived=false, ghi lý do, và báo phòng khám gửi mẫu lại qua Zalo. Khi mẫu mới tới, mốc sampleReceivedAt được ghi lại từ đầu — nghĩa là SLA tự động tạm dừng trong lúc chờ mẫu, labo không bị tính trễ oan. Không thêm state riêng cho vòng này.

Kết quả mong đợi

  • Case đi đúng đường submitted → accepted → in_production → qc → ready_to_ship → shipped → delivered → closed.
  • SLA/trễ hạn được tính từ sampleReceivedAt, không phải từ lúc gửi đơn số.
  • Không case nào vào delivered mà chưa từng đạt QC pass (bất biến BR-W2).
  • Mọi redo/warranty đều ghi lý do + bên chịu trách nhiệm; case giữ bản ghi truy được (ai chỉ định shade/material, phôi/lô nào thực dùng).
  • Cả phòng khám và labo thấy cùng một trạng thái realtime.

Khi nào hỏng & cách xử lý

Triệu chứngNguyên nhânKhắc phục
Không đẩy được case sang in_productionMẫu vật lý chưa tới (sampleReceived=false) hoặc chưa phân technicianGhi nhận mẫu vào (đóng leg inbound) + phân technician; case STL-only thì coi như đã nhận mẫu ngay
Case treo ở submitted nhưng mẫu quá hạn dự kiến chưa tớiSự cố mẫu vào (thất lạc trên đường ship)Mở trạng thái sự cố mẫu vào, cảnh báo hai phía qua Zalo, yêu cầu gửi lại / lấy dấu lại; sản xuất vẫn bị gác
Cố chuyển thẳng sang delivered mà chưa qua QCBỏ qua cổng QCBất khả thi theo máy trạng thái — phải qua qc → ready_to_ship bằng một lần QC pass (BR-W2)
Trễ due dateSLA chạy từ khi nhận mẫu; công đoạn kéo dàiCảnh báo trễ nổi ở labo board + đẩy Zalo cho clinic; ghi lý do trễ
Thao tác chuyển trạng thái bị từ chốiSai cạnh clinic↔labo hoặc sai vai (mặc định từ chối)Chỉ đúng actor trong đúng cạnh mới trigger được transition (BR-W4); kiểm lại vai và quyền
Không huỷ được caseCase đã shipped trở đi (đang trên đường hoặc đã giao)Huỷ chỉ áp dụng cho trạng thái trước-giao; case đã giao đi đường redo/bảo hành thay vì huỷ
Không sửa được shade/material/răng giữa chừngCase đã qua qcSau QC là quá muộn để sửa; nếu phát hiện sai sau giao, dùng redo thay vì amendment
SLA không tính trễ dù mẫu tới muộnCase vừa qua vòng mẫu hỏng (sample-reject) — mốc sampleReceivedAt đã reset theo mẫu mớiĐúng hành vi: thời gian chờ mẫu lại không tính vào SLA của labo
Lưu ý

sampleReceived là một cờ trên case (chân vật lý), không phải một state — nó gác cạnh accepted → in_production. Case full-digital (STL-only) coi như sampleReceived=true ngay khi submitted. Vòng in_production ↔ try_in có thể lặp nhiều lần cho ca phức tạp (răng trước/cầu).