Skip to content

2.9.0

Released: TBD

Highlights

  • Bank reconciliation now settles the books. Confirming a bank-statement match to an invoice records the customer payment and updates the invoice — previously it only stored match metadata. This is the first of the deferred Accounting Placeholder Audit feature builds.

Added

  • Bank-reconciliation settlement (audit #16). Confirming a CREDIT bank transaction matched to an Invoice creates a real Receipt (debits bank, credits accounts receivable, lowers the invoice balance, shows on the client statement). A DEBIT matched to an Expense reconciles without posting, since the expense already booked its cash leg when recorded. See Bank-Reconciliation Settlement.

Changed

  • None.

Fixed

  • None.

Migrations

  • add_bank_tx_settlement_receipt (down_revision tax_rate_store_percent) — adds the nullable bank_statement_transactions.settlement_receipt_id column linking a confirmed invoice match to the Receipt it created. upgrade and downgrade both implemented.

Frontend impact

  • Confirming a CREDIT→Invoice bank match now settles the invoice: its paid/outstanding balance updates and the payment appears on the client statement. No GraphQL contract change — confirmMatch keeps its signature; only its behaviour changed.

Versioning notes

  • MINOR bump (uv run python scripts/bump_version.py 2.9.0 --changelog-stub): additive feature with a new nullable column, no breaking schema change.