# Books

URL: /systems/books · Id: `page:systems/books`

> How Ledger, Spend management, Treasury and Tax keep a Startup’s books current every hour, and how they cover the work of accounting software.

A [Startup](/business/nouns/startup)’s books are four [Systems](/business/nouns/system) over one ledger: [Ledger](/systems/ledger), [Spend management](/systems/spend), [Treasury](/systems/treasury) and [Tax](/systems/tax). Every money [Verb](/business/nouns/verb) posts its own [Entries](/business/nouns/entry) as it runs, so the books are current every hour.

## Posted by the Verb
Accounting software imports what happened and asks a bookkeeper to code it. Here the Verb that moves money declares the Entries it writes, so nothing waits to be coded. A call in the `try` [Mode](/business/nouns/mode) returns the Entries it would post and stores nothing.

| Verb | Debit | Credit |
| --- | --- | --- |
| [`Bill.approve`](/business/nouns/bill/approve) | `expense.operating` | `liability.payable` |
| [`Bill.pay`](/business/nouns/bill/pay) | `liability.payable` | `cash.rail` |
| [`Mandate.spend`](/business/nouns/mandate/spend) | `expense.spend` | `cash.cards` |
| [`Period.recognize`](/business/nouns/period/recognize) | `liability.deferred-revenue` | `revenue.recognized` |
| [`Company.submit`](/business/nouns/company/submit) | `liability.sales-tax` | `cash.rail` |
| [`Entry.settle`](/business/nouns/entry/settle) | `liability.due-to-sibling` | `cash.rail` |

Each Entry names its Startup and, for an intercompany line, the sibling on the other side. Every [Statement](/business/nouns/statement) and [Metric](/business/nouns/metric) reads the same Entries, so the profit and loss and every [Dashboard](/business/nouns/dashboard) agree to the cent.

## Ledger against accounting software
Ledger does the work a small business buys accounting software for, run by the [Finance Lead](/agents/finance/finance-lead) [Agent](/business/nouns/agent) instead of a bookkeeper.

| Work | Verbs | How it runs |
| --- | --- | --- |
| Chart of accounts | `Entry.account` | Each [Startup Template](/business/nouns/startup-template) ships a default chart; every Entry names one account, such as `revenue.recognized`. |
| Pull bank feeds | [`Transaction.list`](/business/nouns/transaction/list) | Every rail and linked bank [Transaction](/business/nouns/transaction) arrives within the day. |
| Categorize | [`Transaction.categorize`](/business/nouns/transaction/categorize) | A [Policy](/business/nouns/policy) codes the known; the Agent codes the rest and opens a review [Task](/business/nouns/task) below its confidence threshold. |
| Reconcile | [`Transaction.reconcile`](/business/nouns/transaction/reconcile) | Each Transaction matches the Entries it settles, or opens a Task. |
| Manual journals | [`Entry.post`](/business/nouns/entry/post) | Waits for an [Approval](/business/nouns/approval) from a second [Role](/business/nouns/role); never dated in a locked [Period](/business/nouns/period). |
| Recognize revenue | [`Period.recognize`](/business/nouns/period/recognize) | Daily, by the revenue-recognition Policy: [Subscriptions](/business/nouns/subscription) by elapsed days, [Orders](/business/nouns/order) on delivery. |
| Receivables | [`Invoice.bill`](/business/nouns/invoice/bill), [`Invoice.collect`](/business/nouns/invoice/collect) | Billing ages open [Invoices](/business/nouns/invoice) at 30, 60 and 90 days and runs collections. |
| Report | [`Statement.list`](/business/nouns/statement/list) | Profit and loss, balance sheet and cash flow per Startup, [Company](/business/nouns/company) or [Portfolio](/business/nouns/portfolio). |
| [Budget](/business/nouns/budget) against actuals | [`Budget.create`](/business/nouns/budget/create) | One Budget per account and Period, read beside actual Entries. |
| Close and lock | [`Period.close`](/business/nouns/period/close), [`Period.lock`](/business/nouns/period/lock) | The month closes once every Transaction reconciles, then locks. |
| Settle intercompany | [`Entry.settle`](/business/nouns/entry/settle) | One net transfer per pair of Companies each month. |
| Accountant access | [`Permission.create`](/business/nouns/permission/create) | A scoped, expiring [Permission](/business/nouns/permission) on the books. |
| [Cost](/business/nouns/cost) per [Action](/business/nouns/action) | [`Cost.list`](/business/nouns/cost/list) | Every Action posts its Cost, so margin reads per Verb, [Offer](/business/nouns/offer) and [Customer](/business/nouns/customer). |

The last two rows go past the category. Cost per Action exists because every Action posts its Cost; intercompany settlement exists because one Company holds many Startups.

## Spend management against spend platforms
Money goes out three ways: a [Bill](/business/nouns/bill) from an outside [Organization](/business/nouns/organization), a [Card](/business/nouns/card) payment, and the receipt that proves it. A [Worker](/business/nouns/worker) spends only under a [Mandate](/business/nouns/mandate) and its [Limit](/business/nouns/limit).

| Work | Verbs | How it runs |
| --- | --- | --- |
| Capture Bills | [`Bill.create`](/business/nouns/bill/create) | Bills arrive by email or upload and are coded on arrival. |
| Approve within a Mandate | [`Bill.approve`](/business/nouns/bill/approve) | Above the Mandate’s Limit, an Approval goes to the [Founder](/agents/founding/founder). |
| Pay on the due date | [`Bill.pay`](/business/nouns/bill/pay) | Pays an approved Bill from the Stripe balance or a linked bank. |
| Cards for Workers | [`Card.issue`](/business/nouns/card/issue), [`Mandate.spend`](/business/nouns/mandate/spend) | One Card per Worker and Mandate, issued on Stripe, its controls compiled from the Mandate. |
| Match receipts | [`Transaction.attach`](/business/nouns/transaction/attach) | Receipts sent to a [Mailbox](/business/nouns/mailbox) match their card Transaction; a missing one opens a Task after 7 days. |
| Budget per account | [`Budget.create`](/business/nouns/budget/create) | The same Budgets Ledger reads. |
| Keep vendor records | [`Organization.create`](/business/nouns/organization/create) | Each payee is an Organization in the one database. |

Every money Limit reads [`Startup.spendState`](/business/nouns/startup) before it allows a call, and the latest [Forecast](/business/nouns/forecast) sets it. `free` leaves Limits as set, and `tight` halves discretionary Limits and the [Demand Budget](/business/nouns/demand-budget). `hold` stops one-way spend and opens a [Decision](/business/nouns/decision).

## Treasury against business banking
A Startup’s cash sits in four places: the Stripe payments balance, the card balance, financial accounts for operating and reserve cash, and the Company’s bank. Revenue in the payments balance buys nothing until it moves to the card balance. The [Treasurer](/agents/finance/treasurer) Agent moves cash on rules, such as two weeks of card spend in cards and the rest in reserve.

| Work | Verbs | How it runs |
| --- | --- | --- |
| See every balance and Transaction | [`Transaction.list`](/business/nouns/transaction/list), [`Transaction.get`](/business/nouns/transaction/get) | Payments, card, reserve and bank balances side by side, each computed from Entries. |
| Move money between accounts | [Financial accounts](/systems/finance/financial-accounts) | A move between two places the same owner holds, within the Treasurer’s Limit. |
| Pay out to the bank | [Payment rails](/systems/finance/payments) | Available cash pays out on the connected account’s schedule, daily by default. |
| Forecast runway | [`Forecast.create`](/business/nouns/forecast/create) | Weekly and after every large money Decision, from Subscriptions, open Invoices, Bills and committed spend. |

The [default-alive check](/workflows/processes/runway/default-alive-check) writes the Forecast, and the Forecast sets the spend state. Runway is a number that acts, not a report someone reads.

## Tax against sales tax software
Each Startup sells as its own seller of record on its own Stripe account, so it collects and remits its own tax. A digital sale to a consumer in the EU or UK is taxable from the first sale. A US state taxes once sales there cross its threshold.

| Work | Verbs | How it runs |
| --- | --- | --- |
| Calculate tax at checkout | [`Order.place`](/business/nouns/order/place) | Stripe Tax computes `Order.tax` for the buyer’s location and the Offer’s tax category before payment. |
| Register at a threshold | [`Company.register`](/business/nouns/company/register) | Sales total across every Startup the Company holds; a crossing registers the Company and starts collection. |
| Returns | [`Company.submit`](/business/nouns/company/submit) | Each return covers locked Periods only, and is paid from the Company’s cash. |
| Information returns | [`Company.submit`](/business/nouns/company/submit) | Year-end returns for every [Supplier](/business/nouns/supplier) and [Partner](/business/nouns/partner) the Company paid. |
| Exemption certificates | [`Customer.exempt`](/business/nouns/customer/exempt) | A verified certificate zeroes tax on that Customer’s Orders where it applies. |

A registration and an exemption certificate are both [Credentials](/business/nouns/credential). The [tax filing](/workflows/processes/books/tax-filing) [Workflow](/business/nouns/workflow) creates each return as a Task with a due date. A [Human](/business/nouns/human) signs any return that carries a sworn declaration.

## The month
The [monthly close](/workflows/processes/books/monthly-close) runs on the second business day. The Finance Lead Agent reconciles every Transaction, recognizes the last revenue, closes the Period, and locks it. A correction to a locked Period posts to the next open one, so a sent Statement never changes.

Four [Controls](/business/nouns/control) test the books from these records and keep their [Evidence](/business/nouns/evidence).

| Control | What it makes true |
| --- | --- |
| [Segregation of duties](/systems/trust-and-governance/controls/segregation-of-duties) | The seat that creates a payee or a Bill never approves its payment. |
| [Reconciliation completeness](/systems/trust-and-governance/controls/reconciliation-completeness) | A Period locks only when every Transaction in it reconciles. |
| [Manual Entry review](/systems/trust-and-governance/controls/manual-entry-review) | An Entry no Verb caused lands only after a second Role approves it. |
| [Period sign-off](/systems/trust-and-governance/controls/period-sign-off) | The Finance Lead signs each locked Period before its Statements leave the Startup. |

## Next
- [How money moves](/systems/finance/funds-flow): one sale on the rail and in the ledger.
- [Revenue recognition](/systems/finance/revenue-counting): which dollars count as revenue, and when.
- [Books](/workflows/processes/books): the [Process](/business/nouns/process) that runs the close and tax filing.