Last reviewed: 2026-08-13
Accepted decisions:
- ../decisions/accepted/0020-initial-release-scope-and-financial-workflow-taxonomy.md
- ../decisions/accepted/0024-operational-summary-workflow-boundaries-and-purchasing-facts.md
- ../decisions/accepted/0026-initial-release-single-currency-boundary.md
- ../decisions/accepted/0029-cross-workflow-accounting-event-identity.md
- ../decisions/accepted/0034-sales-tax-accounting-and-remittance-boundary.md
Banking and Finance Summary Fact Contract
Purpose and ownership
This contract defines the provider-agnostic Banking and Finance Summary boundary used to validate, explain, prepare, reconcile, and later persist accepted cash, bank, credit-card, clearing, statement-match, and closing-balance results.
The operational finance system owns bank-feed rows, payment instruments, deposit composition, card transaction detail, reconciliation execution, statement files, and operational matching. BooksPlus owns accepted accounting event identity, workflow review, account-role templates, relationship and allocation validation, period control, posting, audit, and reconciliation to posted ledger balances.
BooksPlus does not create a bank, cash, or credit-card subledger. Detailed statement and reconciliation rows remain in versioned operational manifests referenced by Source Documents.
Canonical objects
- BankingAndFinanceFact
- FinanceSettlementAllocation
- FinanceDirectComponent
- FinancePreparedReconciliation
- FinanceStatementMatchResult
- FinanceAccountReconciliationResult
- FinanceAccountReconciliationLine
- FinanceSalesTaxRemittanceMatchResult
Fact types and source-event stages
| Fact type | Source-event stage | Posting meaning |
|---|---|---|
finance_receipt_clearing_settlement |
receipt_clearing_settled |
Move a later bank or cash deposit from receipts-for-deposit clearing to the reviewed destination account. |
finance_disbursement_clearing_settlement |
disbursement_clearing_settled |
Move a later bank settlement from payment-disbursements clearing to the reviewed bank account. |
finance_direct_receipt_summary |
direct_receipt_settled |
Recognize one Finance-owned receipt already settled to bank or cash without inventing a Sales clearing stage. |
finance_direct_disbursement_summary |
direct_disbursement_settled |
Recognize one Finance-owned ordinary operating disbursement already settled to bank or cash without inventing a Purchasing event. |
finance_credit_card_charge_summary |
credit_card_charge_accepted |
Recognize one Finance-owned ordinary operating or finance-charge component against a reviewed credit-card liability. |
finance_credit_card_payment_summary |
credit_card_payment_settled |
Settle a reviewed credit-card liability from a reviewed bank account. |
finance_account_transfer_summary |
account_transfer_settled |
Move value once between two distinct reviewed bank or cash accounts for one direct transfer event. |
finance_charge_summary |
finance_charge_assessed |
Recognize an explicit bank or card fee or interest charge against its reviewed settlement account. |
finance_interest_income_summary |
interest_income_received |
Recognize explicit interest income received directly into a reviewed bank account. |
finance_statement_match_result |
statement_match_completed |
Preserve a non-posting statement match to an event already posted directly to bank. |
finance_account_reconciliation_result |
account_reconciliation_completed |
Preserve a non-posting period reconciliation from reviewed source closing balance to posted ledger balance. |
Every type is owned by banking_and_finance_summary. Provider journals,
account numbers, bank-feed descriptions, invoice text, counterparty names,
equal amounts, or a bank-statement row cannot select the workflow, fact type,
stage, component, account, template, or relationship.
The ordinary Finance workflow accepts only original facts and results.
Corrections and reversals remain held for the Corrections workflow.
Common identity and provenance
Every fact or reconciliation result requires:
- stable record id and company id;
- source system and source-system instance when applicable;
- source object type, external object id, and external event or version id;
- idempotency key and normalized meaning hash;
- explicit fact type, source-event stage, owning workflow, and change type;
- source-world activity date or inclusive date range;
- target FinancialPeriod and posting date for a posting fact;
- company currency and preserved source-currency evidence;
- active same-company primary Source Document;
- supporting Source Documents and stable evidence references;
- import-run and source-group provenance for file or machine intake;
- source completion time and BooksPlus acceptance time; and
- posting-template and mapping versions when a posting template applies.
Exact source identity or idempotency replay requires exact normalized meaning. Changed reuse conflicts and cannot silently replace accepted meaning. A different original for an already accepted source event remains held.
Import and preparation boundary
File or machine preparation accepts an AccountingImportIdentifiedCandidate only when:
- candidate company and source system equal the fact and request context;
- verified currency is present and equals the company currency;
- the explicit route is
banking_and_finance_summary; - identity outcome is
ready_for_workflow; - change type is
originalwith no related-original identity; - import-run, source-group, source object, external object, external event, idempotency, and normalized-meaning identity are complete;
- candidate posting date equals the fact posting date when the fact posts;
- candidate source reference identifies the active primary Source Document; and
- fact type and source-event stage are an accepted pair.
Strict route isolation applies. Sales and Receivables, Purchasing and Payables, Inventory, Opening Balance, Correction/Reversal, Unclassified, missing, or ambiguous routes cannot prepare through Banking and Finance.
Import-run and source-event provenance remains visible. Provider journal, description, account, bank, card, invoice, counterparty, or reference text cannot establish the Finance route or accounting meaning.
Settlement accounts and components
Reviewed settlement account selections use immutable BooksPlus account ids:
- bank accounts require
bank.operating; - cash accounts require
cash.on_hand; - credit-card accounts require
liability.credit_card; - receipt-clearing accounts require
clearing.receipts_for_deposit; and - disbursement-clearing accounts require
clearing.payment_disbursements.
FinanceDirectComponent contains:
- stable component reference unique within the fact;
- explicit disposition;
- positive amount and company currency;
- resolved immutable destination account id;
- active Source Document and reviewed classification evidence; and
- relationship or allocation references when another accepted event supplies required meaning.
Allowed direct component dispositions are:
trade_receivable_settlement;customer_deposit;unapplied_customer_cash;operating_expense;finance_charge; andinterest_income.
Direct Finance facts do not accept inventory acquisition, prepaid expense, capital project, fixed asset, sales tax, use tax, payroll, loan, equity, dividend, owner draw, refund, chargeback, or foreign-exchange components. Those cases remain held until their owning truth accepts them.
Posting templates
| Fact type or disposition | Debit | Credit |
|---|---|---|
| receipt-clearing settlement | selected bank.operating or cash.on_hand |
selected clearing.receipts_for_deposit |
| disbursement-clearing settlement | selected clearing.payment_disbursements |
selected bank.operating |
| direct receipt applied to receivable | selected bank.operating or cash.on_hand |
receivable.trade |
| direct receipt classified as customer deposit | selected bank.operating or cash.on_hand |
liability.customer_deposits |
| direct receipt classified as unapplied cash | selected bank.operating or cash.on_hand |
liability.unapplied_customer_cash |
| direct operating disbursement | reviewed expense.operating component |
selected bank.operating or cash.on_hand |
| ordinary credit-card charge | reviewed expense.operating component |
selected liability.credit_card |
| credit-card finance charge | reviewed expense.finance_charges |
selected liability.credit_card |
| credit-card payment | selected liability.credit_card |
selected bank.operating |
| direct account transfer | destination bank.operating or cash.on_hand |
distinct source bank.operating or cash.on_hand |
| bank finance charge | reviewed expense.finance_charges |
selected bank.operating |
| interest income received | selected bank.operating |
revenue.interest |
Posting amounts are positive. Direction comes from the fact type and explicit component disposition. A transfer source and destination must be distinct immutable accounts. One direct transfer creates one balanced entry; BooksPlus does not synthesize withdrawal and deposit events in addition to it.
Externally accounted lines are reconciliation evidence. They never replace these templates or bypass central Accounting.
Clearing allocations and relationships
FinanceSettlementAllocation contains:
- stable allocation id;
- accepted prior Sales receipt or Purchasing payment event;
- stable prior component or payment-allocation reference when applicable;
- allocated company-currency amount;
- clearing account id;
clearsrelationship id and version; and- active evidence references.
For receipt clearing:
- the Finance settlement is the source and each prior accepted Sales receipt,
customer-deposit, or unapplied-receipt event is a target of
clears; - every target must have posted to the selected
clearing.receipts_for_depositaccount; - allocations sum exactly to the Finance settlement and cannot overlap the posted open clearing amount; and
- one settlement may clear several prior receipts and one prior receipt may be cleared by several settlements.
For disbursement clearing:
- the Finance settlement is the source and each prior accepted Purchasing
vendor-payment or direct-purchase event is a target of
clears; - every target must have posted to the selected
clearing.payment_disbursementsaccount; - allocations sum exactly to the Finance settlement and cannot overlap the posted open clearing amount; and
- one settlement may clear several prior payments and one prior payment may be cleared by several settlements.
The prior event must be accepted and posted before a dependent clearing
settlement becomes ready. A ready_to_post Finance batch reserves its
allocations against the posted open clearing balance. Posting revalidates and
consumes that balance atomically. Staged, held, and abandoned batches do not
reserve it.
For a direct receipt applied to trade receivables, applies_to points from the
Finance receipt to each accepted posted Sales invoice event. Workflow-owned
allocations sum exactly to the receivable-settlement component and cannot
exceed the posted open receivable amount. Customer-deposit and unapplied-cash
classifications do not invent an invoice relationship.
A relationship preserves evidence and ordering but never authorizes posting, changes event ownership, or creates another posting result.
Direct-settlement isolation
- A Sales-source receipt that posted to receipts-for-deposit clearing is not a Finance direct receipt.
- A Purchasing-source vendor payment that posted directly to bank remains Purchasing-owned and is not a Finance direct disbursement.
- A Purchasing-source vendor payment that posted to disbursement clearing is not reposted by Finance; only its later bank settlement is Finance-owned.
- A one-stage Finance-owned receipt or disbursement does not gain a synthetic Sales or Purchasing clearing stage.
- A vendor invoice, customer invoice, or counterparty reference on a Finance event is evidence or allocation context and cannot recreate that invoice.
- A Finance direct disbursement cannot settle trade payables. Vendor-payment issuance remains Purchasing-owned.
- A one-stage Finance-owned card charge may recognize only accepted ordinary operating or finance-charge components. A separately supplied Purchasing acquisition remains Purchasing-owned and cannot be reposted as a card charge.
Statement-match result
FinanceStatementMatchResult contains:
- stable result and source identity;
- statement account, statement-line, statement, and match-run identities;
- statement date and amount in company currency;
- accepted same-company event already posted directly to the same bank account;
statement_matchesrelationship id, version, and evidence;- match status and reviewed attribution; and
- exact amount and account reconciliation.
The only accepted durable match status in the initial release is matched.
Missing, ambiguous, mismatched, or unreconciled proposals return visible held
issues and are not persisted as completed match results.
statement_matches points from the later Finance result to the already posted
direct-bank event. It is support-only and non-posting. It does not create a
Summary posting preview, change event ownership, reserve or consume a clearing
balance, or create another journal entry.
Missing, ambiguous, mismatched, cross-company, wrong-account, wrong-currency, or unreconciled matches remain visible. A discrepancy, fee, interest item, or exchange difference is not forced into a statement match.
Sales-tax remittance statement match
The Sales Tax Accounting and Remittance Contract adds one bounded Finance-
owned non-posting result for a seller-owned remittance already posted directly
to bank or cash. FinanceSalesTaxRemittanceMatchResult links the statement
identity and evidence directly to the exact SalesTaxRemittance and posted
journal entry. It requires the same company, bank account, currency, and amount
and persists only matched.
This result does not turn the tax remittance into a Finance direct disbursement, create an accepted accounting event, consume a clearing balance, or create another posting. Missing or discrepant results remain visible and cannot be forced through an ordinary Finance component or statement match.
Account-reconciliation result
FinanceAccountReconciliationResult covers one company, one reviewed bank, cash, credit-card, receipt-clearing, or disbursement-clearing account, and one FinancialPeriod. It contains:
- inclusive source business-date range, source time zone, half-open cutoff instants, and reconciliation run identity and version;
- company accounting time-zone identity and a cutoff matching the same FinancialPeriod under the Business Time Contract;
- source opening balance in debit-positive sign convention;
- source-period debit and credit activity;
- source closing balance;
- FinanceAccountReconciliationLine children for outstanding or timing items;
- signed debit-positive adjustment total;
- adjusted source closing balance;
- posted ledger opening, period debit, period credit, and closing balances for the same immutable account and cutoff;
- exact source-to-ledger differences;
- manifest identity, version, SHA-256 digest, row count, and active Source Document evidence; and
- reviewer identity, review time, status, and exception count.
Required equations:
source opening debit-positive balance
+ source-period debits
- source-period credits
= source closing debit-positive balance
source closing debit-positive balance
+ signed reconciliation-line adjustments
= adjusted source closing debit-positive balance
posted ledger opening debit-positive balance
+ posted ledger period debits
- posted ledger period credits
= posted ledger closing debit-positive balance
adjusted source closing debit-positive balance
- posted ledger closing debit-positive balance
= source-to-ledger difference = 0
Each reconciliation line has stable identity, explicit type, signed debit-positive amount, source or accepted-event reference when applicable, and active evidence. Operational bank-feed and statement rows remain in the manifest, not a BooksPlus subledger.
Initial reconciliation-line types are:
outstanding_item; andtiming_item.
The type explains why the line exists. It does not infer debit or credit direction. The explicit signed debit-positive amount alone controls the reconciliation equation.
The only accepted durable account-reconciliation status in the initial release
is reconciled. Incomplete, exception-bearing, or nonzero-difference proposals
return visible held issues and are not persisted as completed reconciliation
results.
A completed reconciled result is non-posting. An unexplained difference, missing statement, incomplete manifest, duplicate coverage, unresolved line, or nonzero exception count remains visible and does not create a balancing, clearing, suspense, fee, interest, or discrepancy entry.
Exact preparation reconciliation
Every posting fact preserves:
- normalized external-line debit and credit totals;
- identified-candidate debit and credit totals;
- candidate-to-line debit and credit differences;
- reviewed operational control debit and credit totals;
- workflow component or allocation totals;
- prepared-preview debit and credit totals;
- candidate-to-prepared differences;
- operational-control-to-prepared differences;
- company currency; and
- evidence, relationship, allocation, and account-role readiness.
All applicable differences must be exactly zero at Money precision before a preview is ready. Every component or allocation appears once in its applicable control total. Rounding, residual, suspense, or discrepancy treatment cannot be inferred from a provider line.
Source evidence
- Every fact and result references one active same-company primary Source Document.
- Statement, balance, allocation, account, match, manifest, control-total, and reconciliation evidence remains linked through active Source Documents or stable references owned by those documents.
- Superseded evidence cannot support new routine preparation.
- Sensitive credentials, full account credentials, payment instruments, and raw protected banking data are not stored in ordinary facts, logs, audit events, or support output.
Held behavior
Preparation returns visible blocking issues and no posting preview for:
- missing, ambiguous, inactive, superseded, or cross-company Source Documents;
- missing or mismatched company, source system, source identity, route, original change type, fact type, stage, posting date, FinancialPeriod, currency, source reference, or provenance;
- missing, ambiguous, inactive, retired, non-posting, or wrong-company account role targets;
- an unsupported or provider-inferred component, settlement mode, account, relationship, or template;
- missing, unresolved, invalid, cross-company, wrong-direction, wrong-account, overlapping, over-applied, or unreconciled allocations or relationships;
- an unposted prior event required by a clearing or receivable allocation;
- equal source and destination accounts for a transfer;
- duplicate direct and clearing treatment for one source settlement;
- a Finance event that would repeat a Sales, Purchasing, Inventory, or prior Finance posting;
- an unexplained source-to-ledger, statement-match, candidate, preview, operational-control, or closing-balance difference;
- unsupported inventory, prepayment, capital, fixed-asset, tax, payroll, loan, equity, dividend, owner, refund, chargeback, cash-over/short, suspense, exchange-difference, or foreign-currency treatment; and
- correction, reversal, late, backdated, or changed finalized-period meaning not accepted by the Corrections workflow.
Held evidence never creates a ready reservation, journal entry, posting result, or ledger effect.
Implementation boundaries
Initial implementation slices may separately own:
- starter-chart and account-role readiness;
- receipt/disbursement clearing and direct bank/cash preparation;
- card, transfer, finance-charge, and interest preparation;
- statement-match and account-reconciliation results;
- Summary review and posting orchestration; and
- persistence, replay recovery, reservations, and company backup.
Provider adapters, UI, corrections, reversals, foreign currency, cash over/short, loans, equity activity, payroll, tax-remittance accounting, capital and fixed assets, check printing, payment execution, bank-feed operation, automatic matching, and reconciliation execution remain outside this contract's ordinary Finance implementation boundary. The bounded non-posting sales-tax remittance match is governed by the Sales Tax Accounting and Remittance Contract and must not expand ordinary Finance templates.
Related binding truth
account-role.contract.mdaccounting-import-candidate.contract.mdfinancial-period.contract.mdbusiness-time.contract.mdmoney.contract.mdpurchasing-and-payables-summary-fact.contract.mdsource-document.contract.mdsummary-accounting-batch.contract.mdsales-tax-accounting-and-remittance.contract.md../accounting/posting-and-reversal.md../accounting/summary-accounting.md