# Real-time books

URL: /systems/finance/real-time-books · Id: `page:systems/finance/real-time-books`

> How every money Event posts its own Entries, why the books reconcile daily, and why month-end close is a lock rather than a project.

A [Startup](/business/nouns/startup)'s books stay closed in real time. Every [Event](/business/nouns/event) that moves money posts its own [Entries](/business/nouns/entry) as it happens, so the month-end close only locks what is already true.

## Every money Verb posts
A [Verb](/business/nouns/verb) that moves money declares the Entries it posts: one double-entry row per effect, with an amount computed from the call's records. [`Mandate.spend`](/business/nouns/mandate/spend) debits `expense.spend` and credits `cash.cards` for the amount spent. No one types a journal line for a charge, a refund, a payout or a card purchase.

| Event | Debit | Credit |
| --- | --- | --- |
| A [Customer](/business/nouns/customer)'s charge settles | `cash.rail` | `revenue.deferred` |
| Delivery earns the revenue | `revenue.deferred` | `revenue.sales` |
| A [Card](/business/nouns/card) charge clears | `expense.spend` | `cash.cards` |
| A payout reaches the bank | `cash.bank` | `cash.rail` |
| A [Supplier](/business/nouns/supplier) is paid | `liability.supplier-earnings` | `cash.rail` |

An account name is its class and a name: `cash`, `asset`, `receivable`, `liability`, `equity`, `revenue` or `expense`, then the account. Every Startup starts from the chart of accounts its [Startup Template](/business/nouns/startup-template) declares. A money Verb whose rule names an account outside that chart fails the registry check.

## Categorize and reconcile every day
Bank and card [Transactions](/business/nouns/transaction) arrive daily. [`Transaction.categorize`](/business/nouns/transaction/categorize) codes each one to an account by the Startup's [Policy](/business/nouns/policy). Below the Policy's confidence threshold, it opens a review [Task](/business/nouns/task) for the [Finance Lead](/agents/finance/finance-lead).

[`Transaction.reconcile`](/business/nouns/transaction/reconcile) matches each Transaction to the Entries already posted. A nightly reconcile compares balances, payouts and open [Invoices](/business/nouns/invoice) with Stripe and opens an [Issue](/business/nouns/issue) for every difference. A difference is a bug in a posting rule, so the fix is a [Change](/business/nouns/change), never a hand-typed line.

A manual Entry exists only for what no Verb caused, such as an opening balance. [`Entry.post`](/business/nouns/entry/post) records it once a second [Role](/business/nouns/role) approves it.

## Bills and cards
A [Bill](/business/nouns/bill) arrives by email or upload, is coded to an account, and is approved within a [Mandate](/business/nouns/mandate) through [`Bill.approve`](/business/nouns/bill/approve). [`Bill.pay`](/business/nouns/bill/pay) pays it on its due date. A Bill naming a bank that differs from the payee's record waits under [Bank detail changes](/systems/trust-and-governance/controls/bank-detail-changes), whatever its amount.

Each Card charge posts a [Cost](/business/nouns/cost) to the Task that spent it, and the receipt attaches to the same Task. A charge without a receipt shows as missing on the day it clears, not at month end.

## Close is a lock
[`Period.close`](/business/nouns/period/close) ends a month once every Entry in the [Period](/business/nouns/period) reconciles. [`Period.lock`](/business/nouns/period/lock) then freezes it, and the Finance Lead signs the locked Period as a [Decision](/business/nouns/decision). A correction to a locked Period posts to the next open one; the locked Period never changes.

Four [Controls](/business/nouns/control) guard the books:

- [Segregation of duties](/systems/trust-and-governance/controls/segregation-of-duties): the [Worker](/business/nouns/worker) that creates a payee never approves its payment, counted by seat.
- [Reconciliation completeness](/systems/trust-and-governance/controls/reconciliation-completeness): a Period locks only when every Transaction reconciles.
- [Manual entry review](/systems/trust-and-governance/controls/manual-entry-review): an Entry with no causing Verb waits for a second Role.
- [Period sign-off](/systems/trust-and-governance/controls/period-sign-off): the Finance Lead signs each locked Period.

## Statements per Startup and per Company
Each closed Period produces a [Statement](/business/nouns/statement) of each kind: `profitAndLoss`, `balanceSheet` and `cashFlow`. Each one renders per Startup, per [Company](/business/nouns/company), and across a [Portfolio](/business/nouns/portfolio).

Every Entry names its Startup, and an intercompany Entry names the sibling on the other side in `Entry.counterparty`. Inside one Company, the pairs eliminate in the Company's statements. Across Companies, [`Entry.settle`](/business/nouns/entry/settle) nets a Period's pairs into one transfer and reconciles both sides.

## Next
- [Monthly close](/workflows/processes/books/monthly-close): the [Workflow](/business/nouns/workflow) that locks each Period.
- [How funds flow](/systems/finance/funds-flow): how money moves on the rail before it posts.
- [Revenue recognition](/systems/finance/revenue-counting): which Entries count as revenue.