Finance — Common cases
Invoice missing or wrong in the manager
Check in order: the original invoice is active, lock/processing is not blocking, the projection has refreshed, and the search key/booking number sync is not stale.
Real-world example: An accountant searches the invoice by booking number but it does not show in the manager → isolate whether it is data or an unrefreshed projection → the original record is correct but the projection is stale → run reconcile instead of editing the invoice.
Editing a confirmed booking changes money
Preview diff first, confirm persists the real invoice/credit-note. Preview does not create schedulers, finance logs, or real credit notes.
Real-world example: Admin adds 2 sessions to a confirmed booking → the preview shows the diff (no ledger writes) → only Confirm creates the real invoice/credit-note.
Credit note does not match invoice
Cross-check the original invoice link, allocation, attendee/header sync, and booking number. If the projection is wrong but the original record is correct → refresh/reconcile the projection.
Real-world example: Cancelling a booking → the credit note shows an amount different from the original invoice → determine whether the mismatch is real or only in the projection → allocation + original invoice link match → reconcile the projection, do not manually edit the credit note.
Payment collected but invoice not updated
Distinguish Payment from Finance: the provider transaction may be paid, but the invoice/projection needs a job/event to update state. Read the payment record, invoice status, scheduler/error.
Real-world example: A parent paid via PayNow and the receipt said success, but the invoice still shows "unpaid" → money received (Payment) but the ledger not yet updated (Finance) → provider paid but the event/job has not run → check scheduler/error, do not charge again.
Xero sync fails
The error can be in provider configuration, account/tax mapping, invoice/credit-note data, or retry state. Do not edit the original invoice just to "make Xero pass" when the AIMY document is correct.
Real-world example: An invoice cannot push to Xero because a tax code is not mapped → fix the mapping instead of distorting the document → map account/tax correctly then retry sync, keep the original AIMY invoice unchanged.
Invoice email not sent or no PDF
Check the site's template/channel setting, invoice status (Approved/Paid), and permission. Invoice emails always send without PDF; customers must use the auth-protected View/Download link (INV-INVOICE-EMAIL-003/005).
Real-world example: A customer reports "I received the invoice email but no PDF file" → this is correct behavior: the email has no attachment → guide the customer to open the
link; the system requires login before showing/Downloading the PDF.
Reminder not sent for an owing invoice
Cross-check eligibility at run time: active + AmountDue > 0 but excluded if in the DD collection flow, has LockTypeId != null, or the site disables the email channel/template. Every case has a skip reason; skip does not set Invoice.Sent (INV-INVOICE-REMINDER-003).
Real-world example: Invoice AIN-0031 still owes but did not receive the reminder on due+7 → check the skip reason → the invoice is in the DD collection flow so it is excluded by the rule; not a send error.
Invoice emailed but no Viewed tag
Viewed is only set when an authenticated customer successfully opens View/Download PDF; admin opening details, resending email, or unauthorized requests do not set it (INV-INVOICE-VIEW-002). The tag only reflects real customer access.
Real-world example: An admin asks why an invoice emailed yesterday still has no
Viewedtag → email does not count as viewed → the customer clicks the link and logs in successfully → refresh shows theViewedtag.
Invoice Processing — cannot access Add Payment/Apply Credit
LockTypeId != null → the list shows the Processing tag, details show Payment in processing, Add Payment/Apply Credit disabled but still visible (INV-INV-MGR-LOCK-005). Not a bug — wait for the payment flow to finish.
Real-world example: An accountant wants to add another payment to invoice AIN-0090 but the button is grey → the list shows the Processing tag → a payment is processing so manual actions are locked by the rule; wait until the lock clears.
Empty Booking ID but the invoice still has a booking
Empty FinanceTransaction.BookingNumbers does not prove the invoice has no association — it may be an integrity gap (TermBookingInvoiceLog missing InvoiceId, projection not synced). Cross-check the source active TermBookingInvoiceLog; empty BookingNumbers shows - in the Booking ID column (invoice-manager-booking-id-integrity).
Real-world example: Invoice AIN-0163 shows Booking ID
-even though it still has a real booking → look up the source association and find an activeTermBookingInvoiceLogbut an empty projection → run projection repair/backfill, do not manually edit the invoice.
Invoice_Fully_Paid notification not sent
Not sending is correct when: the invoice is marked Paid with TotalAmount = 0, the invoice is imported/synced already Paid, the site disables the email channel, or the account lacks a primary contact email (INV-INVOICE-PAID-NOTIF-001/003/004).
Real-world example: A parent pays in full but does not receive the confirmation email → check whether the invoice is zero-total or email is disabled at the site → account lacks a primary contact → the system does not throw, records the reason "no recipient"; not a payment error.