Skip to contentSaltar al contenidoAle nan kontni anПерейти к содержимомуדלג לתוכן
EstateDraftFL

For Florida law firms

The reconciled trust ledger for accounting software: QuickBooks Online, Xero and the fiduciary ledger, from an executed accounting

firm lane · Deterministic — no model call

Current availability

ShippedConfigured and enabled: a firm's staff, on an executed accounting whose period end the ledger reconciles at.

Where it lives
The firm's Money tab (/admin/matter/[id]?tab=money → For accounting software) · /api/matter/statements/[id]/accounting-export
What unlocks it
the firm's staff on the firm's matters, behind the matter's wall

Status is evaluated against this deployment's configuration by the capability-status service at build time; the catalogue's facts were last reviewed on the date shown.

Capabilities

  • ShippedThree files from an executed accounting: QuickBooks Online's bank-transaction format (Date, Description, Amount; day/month/year), Xero's bank statement (Date, Amount, Payee, Description, Reference; year/month/day), and the fiduciary ledger (every entry, its fiduciary account, and the statement's number and full SHA-256 on each row).
  • ShippedOffered only over a reconciled ledger: the statement's bytes hash to their recorded SHA-256 and read whole; no amended statement replaces it; the ledger has not changed since it was executed; the newest reconciliation at its period end matched three ways; and that reconciliation still holds when run again over today's ledger.
  • ShippedA statement from the trust's first entry must carry the reconciliation's own cash — receipts, payments, principal, income, what is in kind and the gains and losses — to the cent.
  • ShippedEach file is read back before it is offered: its rows and the sum of its amounts must be the statement's own, or the file is not served.
  • ShippedThe bank files carry money only; an entry in kind and a gain or loss are named in the panel and carried in the fiduciary ledger file. A zero amount is not a bank line.
  • ShippedA statement that is not ready says exactly what opens it — record a reconciliation, resolve a difference, execute an amended statement — with a link to where.
  • ShippedEvery export is recorded before it is served: who, which statement, which format, the statement's hash and the file's hash — never an amount.

Limits

  • The figures are the statement's, unchanged: nothing is allocated, estimated or predicted, and no account in the firm's books is chosen for it — the firm maps the file when it imports it.
  • QuickBooks Online takes at most 1,000 lines and 350 KB per file, and Xero 100,000 rows; a longer statement is refused for that format, and shorter periods are the way through.
  • One trust, one file: separate shares or sub-trusts are not split apart.
  • No direct connection to QuickBooks or Xero: the firm downloads the file and imports it (docs/business/ACCOUNTING-INTEGRATIONS-BUSINESS-CASE.md is the case for anything deeper).
  • A worksheet aid for the firm's books: an export neither files nor approves a Florida trust accounting (§ 736.08135).

What EstateDraftFL refuses

Reason codeHTTPWhat it means
auth_required401Exporting needs a signed-in member of the firm's staff.
invalid400The format is not QuickBooks Online, Xero or the fiduciary ledger.
forbidden403The firm's staff export the reconciled ledger; a client, or the direct service, does not.
not found404The statement was not found, or the caller cannot open it.
no-reconciliation409No reconciliation is recorded at the statement's period end — record one; the export opens when all three readings agree.
bank-missing409The reconciliation at the period end has no bank statement balance — record one with the balances.
discrepancy409The reconciliation at the period end is off — the message names the amount and the leg; resolve it and record a new one.
reconciliation-stale409The ledger has changed since the reconciliation at the period end was recorded — record a new one.
reconciliation-unreadable409The reconciliation at the period end could not be read again — record a new one.
statement-untied409A statement from the trust's first entry does not carry the reconciliation's cash — record a new reconciliation, or execute an amended statement.
drifted409The ledger has changed since the statement was executed — execute an amended statement, then export that one.
superseded409An amended statement replaces this one — export the amended one.
not-accounting409A distribution statement is one beneficiary's — only an accounting is exported.
too-large409The statement is longer than that importer takes in one file — execute statements for shorter periods.
ledger-too-large409The ledger is too large to check again here (over 50,000 entries).
empty409A bank file has no money moving to carry — the fiduciary ledger file carries the entries.
integrity500The statement's bytes do not hash to its recorded SHA-256 — nothing is served.
unreadable500The statement's bytes could not be read whole — nothing is served.
untied500The file did not read back to the statement's own figures — it is not served.
drift-unknown503Whether the ledger has changed since the statement could not be checked just now — try again.
ledger-unavailable503The ledger could not be read in full just now — nothing was exported.
audit-unavailable503The export's record could not be written, so the file was not served.
unavailable503The statement, its reconciliation or the ledger could not be read just now — nothing was exported.

Evidence

  • src/lib/accounting-export.ts
  • src/lib/accounting-export-server.ts
  • src/lib/accounting-export.test.ts
  • src/lib/phase21-accounting-export-route.test.ts
  • src/app/api/matter/statements/[id]/accounting-export/route.ts
  • src/components/AccountingExportPanel.tsx
  • docs/business/ACCOUNTING-INTEGRATIONS-BUSINESS-CASE.md

Last reviewed 2026-10-03

← All surfaces