Finance — Case thường gặp
Invoice không hiện đúng trong manager
Kiểm tra theo thứ tự: invoice gốc active, lock/processing không chặn, projection đã refresh, search key/booking number sync không stale.
Ví dụ thực tế: Kế toán tìm hóa đơn theo booking number nhưng manager không hiện → khoanh vùng do dữ liệu hay projection chưa refresh → record gốc đúng nhưng projection stale → chạy reconcile, không sửa invoice.
Edit booking đã confirm làm thay đổi tiền
Preview diff trước, confirm mới persist invoice/credit-note thật. Preview không tạo scheduler, finance log hay credit note thật.
Ví dụ thực tế: Admin thêm 2 buổi vào booking đã confirm → preview hiện diff (không ghi sổ) → chỉ Confirm mới tạo invoice/credit-note thật.
Credit note không match invoice
Đối chiếu original invoice link, allocation, attendee/header sync và booking number. Projection sai nhưng record gốc đúng → refresh/reconcile projection.
Ví dụ thực tế: Hủy booking → credit note lệch số tiền invoice gốc → xác định lệch thật hay chỉ projection → allocation + original invoice link khớp → reconcile projection, không chỉnh tay credit note.
Payment đã thu nhưng invoice chưa cập nhật
Phân biệt Payment với Finance: provider transaction có thể paid, nhưng invoice/projection cần job/event cập nhật trạng thái. Đọc payment record, invoice status, scheduler/error.
Ví dụ thực tế: Phụ huynh trả PayNow, biên lai thành công, nhưng invoice vẫn "unpaid" → tiền đã vào (Payment) nhưng sổ chưa cập nhật (Finance) → provider paid nhưng event/job chưa chạy → kiểm tra scheduler/error, không thu lại tiền.
Xero sync lỗi
Lỗi có thể ở cấu hình provider, mapping account/tax, dữ liệu invoice/credit-note, retry state. Không sửa invoice gốc chỉ để "làm Xero pass" khi chứng từ AIMY đúng.
Ví dụ thực tế: Invoice không đẩy được sang Xero do tax code chưa map → sửa mapping, không bóp méo chứng từ → map account/tax đúng rồi retry sync, giữ nguyên invoice gốc.
Invoice email không gửi hoặc không có PDF
Kiểm tra template/channel setting theo site, trạng thái invoice (Approved/Paid) và permission. Email invoice luôn gửi không PDF; customer muốn xem phải dùng link View/Download có auth (INV-INVOICE-EMAIL-003/005).
Ví dụ thực tế: Khách báo "nhận email invoice nhưng không có file PDF" → đây là hành vi đúng: email không đính kèm → hướng dẫn khách mở link
; hệ thống yêu cầu đăng nhập rồi mới hiển thị/Download PDF.
Reminder không gửi cho hóa đơn còn nợ
Đối chiếu eligibility lúc chạy: active + AmountDue > 0 nhưng bị loại nếu trong DD collection flow, LockTypeId != null, hoặc site disable kênh email/template. Mỗi trường hợp có skip reason; skip không set Invoice.Sent (INV-INVOICE-REMINDER-003).
Ví dụ thực tế: Invoice AIN-0031 còn nợ nhưng không nhận reminder ngày due+7 → kiểm tra skip reason → hóa đơn trong DD collection flow nên bị loại đúng rule; không phải lỗi gửi.
Invoice đã gửi email nhưng không hiện tag Viewed
Viewed chỉ set khi customer authenticated mở View/Download PDF thành công; admin mở details, resend email, hay request unauthorized không set (INV-INVOICE-VIEW-002). Tag chỉ phản ánh customer access thật.
Ví dụ thực tế: Admin hỏi vì sao invoice đã Email hôm qua vẫn không có tag
Viewed→ email không tính là viewed → khách bấm link, đăng nhập mở thành công → refresh thấy tagViewed.
Invoice đang Processing — không vào được Add Payment/Apply Credit
LockTypeId != null → list hiện tag Processing, details hiện Payment in processing, Add Payment/Apply Credit bị disable nhưng vẫn hiển thị (INV-INV-MGR-LOCK-005). Không phải lỗi — đợi luồng payment xử lý xong.
Ví dụ thực tế: Kế toán muốn nhập thêm payment cho invoice AIN-0090 nhưng nút xám → list có tag Processing → payment đang xử lý nên hành động manual bị khóa đúng luật; chờ lock hết rồi mới thao tác.
Booking ID trống nhưng invoice vẫn có booking
FinanceTransaction.BookingNumbers trống không chứng minh invoice không có association — có thể là gap integrity (TermBookingInvoiceLog thiếu InvoiceId, projection chưa sync). Đối chiếu source TermBookingInvoiceLog active; empty BookingNumbers hiển thị - ở Booking ID column (invoice-manager-booking-id-integrity).
Ví dụ thực tế: Invoice AIN-0163 hiển thị Booking ID
-dù vẫn có booking thật → tra source association thấyTermBookingInvoiceLogactive nhưng projection trống → chạy repair/backfill projection, không chỉnh tay invoice.
Invoice_Fully_Paid notification không gửi
Không gửi là đúng khi: invoice TotalAmount = 0 đánh Paid, invoice import/sync sẵn Paid, site disable kênh email, hoặc account thiếu primary contact email (INV-INVOICE-PAID-NOTIF-001/003/004).
Ví dụ thực tế: Phụ huynh trả hết tiền nhưng không nhận email xác nhận → kiểm tra invoice zero-total hay site tắt email → account thiếu primary contact → hệ thống không throw, ghi lý do "no recipient"; không phải lỗi thanh toán.