AccountContext
AccountContext is the expense register: invoices, receipts, credit notes, payments, subscriptions, and reimbursement claims. In the data model those documents are bills, tied to a party and a billing account, with optional lines. A payment is matched to bills by an allocation. Original files stay immutable. A browser reader shows the records, and assistants use the accountcontext client.
Recording a payment stores evidence that it happened. The app does not send money, file taxes, or keep a full ledger.
The records
flowchart LR
party[Party and billing account]
doc[Bill: invoice, receipt, or credit note]
pay[Payment]
alloc[Allocation]
sub[Subscription]
claim[Reimbursement claim]
party --> doc
party --> sub
doc --> alloc
pay --> alloc
claim --> doc
A subscription names a supplier and a billing account. It stays a separate record from the bills.
Money is stored as integer minor units (cents, for example) with an explicit currency. US dollar reports and euro reports stay separate. Settling across currencies needs a rate, a date, and a source for that rate.
sequenceDiagram
participant Person
participant AC as AccountContext
participant Finance as Finance member
Person->>AC: submit a claim and the receipt file
Note over AC: the file is stored and not edited later
Finance->>AC: match a payment to documents
Finance->>AC: approve, independently of finance membership
Finance->>AC: export CSV or a zip of originals
A new Workspace user can submit and read their own claims and documents. Company-wide finance access is a separate membership. Approval is a separate right from that membership. SQL, the records API, file download, export, and history each apply the rules on their own.
Imports and the text inside documents are untrusted. They are evidence, not instructions.
Export builds a file for a person to hand to an accountant. The app does not deliver it itself.