Finance

Ledger, receivables, payables and billing. Part of the business vertical. Legend: βœ… done Β· 🟑 in progress Β· ⬜ pending.

Checklist

βœ… Accounts

Ledger, receivables, payables and billing.

βœ… Payables

Vendor bills accrue on receipt (V07_10) with net terms and vendorBillPaid postings β€” live-proven.

βœ… Billing

Three rails, decided and built: Stripe tokens, BAC Credomatic (PowerTranz) and SINPE Movil as a reference-and-confirm flow with no bank API β€” SINPE pay β†’ confirming β†’ confirmed paid proven live; unconfigured rails throw naming themselves.

βœ… Collections

Open invoices bucketed by the pure compute-aging, recomputed per read β€” live-proven totals.

βœ… Statements

Periodic per-customer AR documents: opening + invoiced βˆ’ paid = closing in integer cents, line detail in jsonb, regenerated idempotently per (customer, period end) β€” live-proven against the collections totals.

βœ… Dunning

Per-bucket policies on the compute-aging vocabulary; the sweep mints one notice per (invoice, bucket) behind a DB unique and sends through a Resend-shaped port β€” unconfigured, notices stay pending; live-proven re-run creates zero.

Evidence

Double-entry for real: chart of accounts and journal postings balance on every proven flow (order β†’ AR invoice, receipt β†’ vendor bill, payment β†’ postings), collections aging recomputes per read, and the dental ledger and commerce ledger speak one vocabulary. Billing is decided and built: Stripe tokens, BAC Credomatic and SINPE Movil.