feat(statements): top up open late-fee invoices instead of stacking new ones #24
Reference in New Issue
Block a user
Delete Branch "feature/customer-statements"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Statement generation raised a fresh LPF invoice every month, so a customer
who never paid accumulated a pile of small invoices, each carrying the flat
dunning_fee again. Interest was also recomputed from each invoice's due date
every run, re-billing periods already charged for.
Now a customer gets one fee invoice per collections episode:
it and appends the new period's interest as a further line item, rather
than creating a second invoice.
cancellation and re-applied to the amended invoice via
reconcile_against_document (the primitive Payment Reconciliation uses), so
the outstanding amount and Payment Ledger stay correct.
reset the invoice to Current in the statement's aging buckets and hide how
long the balance has been owed.
custom_late_fee_billed_upto field on Sales Invoice, so no period is billed
twice. Fee invoices predating the field fall back to their posting date,
which is when they were billed, so no migration patch is needed.
not again on every top-up.
other overdue receivable, so interest compounds onto the fee balance.
Amending means cancelling, which is only reversible for links we can
restore. If the open fee invoice has a Journal Entry or credit note applied,
a negative payment allocation, or a posting date in a frozen period, it is
left alone, the charge goes on a new invoice, and the reason is recorded on
the customer's timeline.
Verified against nsi.local with two rolled-back integration probes covering
the amend + re-link path (including two consecutive amendments) and the
blocked-amend fallback.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com