TC-BIL-008: Total Parity & Payment Reconciliation
🆕 New on stage — 2026-06-25 → 2026-06-29. This TC covers the canonical money-parity and payment-reconciliation features shipped after the prior guide freeze: the
projectInvoiceTotals canonical projector (#443/#450) feeding detail/listing/exports/finance-summary identically, multi-invoice payment initiation (#149), the payment-confirmation reconcile job (#118), and rejected manual payments reverting the invoice to full balance while staying listed (#469). See the Test Plan banners and the Jun 25 / Jun 29 release notes.
Module: Billing & Invoicing — Totals / Payments
Primary Test User: treasurer@demo.membervu.com / Treasurer123! (Finance Manager); testmember@rcme.membervu.com / Member123! for the member-side multi-invoice pay
Priority: P1 (money parity + payment-confirmation durability are core billing-trust assertions)
Objectives
- Pick ONE invoice that has discounts + line items + credits/allocations, and confirm its total is byte-identical across detail view, the invoice listing, a reporting export, and the finance summary.
- Select several outstanding invoices and initiate ONE multi-invoice payment; confirm the resulting allocation lands correctly on each invoice.
- Complete a dues payment and confirm the confirmation email arrives — allowing the ~10 minute reconcile-job window before treating a missing email as a bug.
- Reject a manual payment and confirm the invoice stays visible in the list and its balance is restored to the full pre-payment amount (not a stale partial).
Scenario summary
| ID | Scenario | Key data assertion |
|---|---|---|
| BIL8-01 | Total parity — detail vs. listing | Invoice detail's amountCents/balanceCents (as computed) equals the same invoice's row in the admin invoice list, to the cent. |
| BIL8-02 | Total parity — reporting export | The same invoice's total in a CSV/reporting export matches detail/listing exactly — no rounding or stale-cache drift. |
| BIL8-03 | Total parity — finance summary | The finance dashboard's aggregate figures are consistent with (not double-counting or omitting) this invoice's contribution. |
| BIL8-04 | Multi-invoice payment initiation | POST /api/billing/member/invoices/bulk-pay/paynamics (GCash/Maya only) accepts multiple invoiceIds in one request; each invoice receives its own Allocation record with the correct amount — no invoice under- or over-allocated. |
| BIL8-05 | Payment-confirmation email reconcile window | A dues payment's confirmation email appears in MailHog either immediately or within ~10 minutes via the reconcile job (Payment.confirmationEmailSentAt gets set); do not fail the case before the window elapses. |
| BIL8-06 | Rejected manual payment reverts balance | After admin rejects a manual payment, the invoice (a) still appears in the invoice list, and (b) its balance/status reverts to the full pre-payment outstanding amount — not left at a phantom partial. |
| BIL8-07 | Payment rows show both references | Payment list/detail rows display the internal payment reference AND the gateway reference (where applicable) — not just one. |
➡️ Full click-by-click steps: TC-BIL-008 (Detailed).