Invoices and contract billings feed one control account, and the subledger is rebuilt as it stood on the date you ask about — not as it stands today.
Draft → sent → partially paid → paid, with each transition posting its own journal entry. An invoice cannot be paid before it is sent.
What is outstanding is derived from recorded payments, so the invoice and the ledger cannot drift apart.
An invoice raised after a period end does not leak into that period's balance, and one settled afterwards is still counted as open then.
Per-line taxable value and rate, with output tax posted alongside revenue at the moment the invoice is sent.
Current, 1–30, 31–60 and 60+ days, computed from due dates rather than maintained as a report.
Overdue invoices ranked by days outstanding, and a continuous agent that raises stale receivables past a threshold — with the note that past ninety days this is usually a provision decision, not a chasing problem.
Instalments from a revenue contract post to the same AR control account, clearing any unbilled receivable before creating deferred revenue.
Payments are recorded against the document and cannot exceed what is outstanding. The status follows the arithmetic rather than being set by hand.
The AR subledger is reconciled to its GL account as part of every close, and a difference blocks the close.
The demo runs on a seeded company with a live close waiting — two real blockers and agents holding proposals.