Receivables (AR)
Domain model in domain/05-order-to-cash.md.
109. InvoiceForm
Lines with account and dimensions, itemized tax by jurisdiction and rate, terms, PO reference. Shows the revenue recognition preview per line before posting — whether each line credits revenue or deferred revenue, and on what schedule. Invoice number is system-assigned and gapless; the user cannot pick it.
Discount terms render in full: "2% discount if paid within 10 days, otherwise due in 30 days", with both amounts and the discount deadline computed.
110. InvoiceDetail
Balance due as the hero figure, total as context. Payment history, applied credits, dispute state, dunning history, and the audit trail. Actions gated by state — void only while unpaid and within an open period.
111. InvoiceRegister
All invoices with aging, filterable. Surfaces the gapless-numbering check as a banner when a gap exists — many VAT regimes require a sequence, and a gap is an audit red flag.
112. CashApplication
The highest-value screen in AR, and the one most tools handle worst.
Left: unapplied payments. Right: open invoices for that customer. A running sum against the payment amount as invoices are selected, so the user sees when the selection is exact.
Every case is a first-class path, not just the happy one: exact, partial, overpayment, lump-sum-to-many, short pay, no-invoice, duplicate, bank fee deducted in transit, FX settlement difference.
Rules: unapplied cash is never revenue; it is shown separately within AR, and a customer's net credit balance is flagged for reclassification to a liability · a remaining difference always requires a disposition (write-off with reason and account, leave unapplied, or dispute) · write-off thresholds enforce approval · applying is reversible and audited.
The match uses the reconciliation animation — one of the four sanctioned moments.
113. PaymentSuggestion
Given a lump sum, proposes the set of open invoices that sums to it exactly. Multiple valid combinations are ranked oldest-first. Shows the basis, not a bare confidence score.
114. UnappliedCashPanel
Outstanding customer credits awaiting application, aged. A customer with a net credit balance in AR is flagged for possible reclassification to a liability at period end — shown, never buried.
115. CreditNoteForm
References its original invoice and is capped at that invoice's balance without an explicit override. Distinguished from a refund and a write-off in the UI copy and in the actions offered — they have different GL, tax, and business meanings.
116. CollectionsWorklist
Prioritized by amount × age × risk. Promise-to-pay is a first-class object with a date and amount; a broken promise escalates. Disputed invoices are excluded from dunning but present in the list, marked.
117. DunningTimeline
Full communication history per customer, not per invoice — a collector needs one timeline. Shows sent, opened, and responded, with the next scheduled step and its pause conditions.
118. CustomerStatement
Printable, per-customer, in open-item or full-activity form. Print styles are first-class; this is a document that gets emailed and filed.
119. CustomerCreditPanel
Credit limit and current exposure together, exposure including unbilled orders. Supports customer hierarchy roll-up — three subsidiaries of one group are one credit risk. Flags expired tax-exemption certificates.
120. SalesOrderTable
Backlog. Visually separated from anything ledger-derived, because orders have no GL impact and showing them near revenue is how pipeline gets mistaken for performance.
121. ArMetricsPanel
DSO (with the method stated — the two formulas give different answers), best-possible DSO, ADD, CEI, % past due, bad debt rate. Every metric via MetricDefinition.