Ledger

A double-entry shadow ledger. It mirrors an upstream system of record — SAP today — as correct double-entry, so it can be queried, reconciled and reported on at full granularity.

It is not the book of record. Statutory numbering and period close belong upstream. This is the copy you can ask questions of.

The model in one line

A transaction is a dated fact. Its entries are how it lands on accounts. The entries' debits equal their credits.

Everything else follows from that sentence. There are three tables, and no fourth concept hiding behind them.

Built for machines

Most writes here come from importers and AI agents over the API; most reads come from people looking at reports. That shapes the interface:

  • Errors carry figures, not adjectives. A refused transaction comes back with total_debit, total_credit and the difference — usually the missing line.
  • Errors never suggest a fix. A caller that cannot see the books should not be handed a plausible-looking correction to apply unread.
  • Writes are idempotent on (source, source_ref), so an interrupted sync is safe to re-run.
  • Responses are composite. A transaction arrives with its entries and totals; an entry arrives with its parent's date and narration. One question, one request.

Start here

For LLMs

Every page here is available as raw markdown. Start at /docs/md/sitemap and fetch what you need — see LLM Access.