Banking & Reconciliation
Manage bank accounts, import global statement formats, and reconcile.
Bank Accounts
Create bank accounts linked to your chart of accounts. Each account owns its own statement imports, transactions, and reconciliation workflow.
Fields
| Field | Description |
|---|---|
| Account Name | Display name (e.g., "Business Checking") |
| Account Number | Masked number for display |
| Bank Name | Name of the bank |
| Currency | Account currency |
| Country | Country or region of the account |
| Account Type | Checking, savings, credit card, cash, loan, investment, or other |
| Accent Color | Visual identity used across the banking UI |
| GL Account | Chart of accounts link |
Add a transaction manually
If a statement import skipped a few lines (parse error, incomplete file, etc.), you do not need to re-import everything:
- Open the bank or credit-card account.
- Click Add transaction (header, or on the Transactions tab).
- Enter date, type (Money out for purchases/charges, Money in for payments/refunds), description, and amount. Add more rows if needed.
- Save — lines appear under Transactions → To do.
- Categorize (or match invoice/bill) as usual — pick the category, VAT/tax, and optional customer/supplier there (same as for imported lines), then tick them on the statement check if you use Reconcile.
Duplicates of existing lines (same date, amount, description) are not added again.
Importing Transactions
Import bank statements into a specific bank account:
- Navigate to your bank account
- Click Import Statement
- Upload a file or paste raw statement data
- Preview detected rows, duplicates, warnings, and date ranges
- Confirm the import
Supported formats:
- CSV
- TSV
- QIF
- OFX / QFX / QBO
- CAMT.052 / CAMT.053 / CAMT.054
- MT940 / MT942
- BAI2
- JSON lines (
json_lines) — structured API import (POST …/transactions/import-lines). Amounts are integer cents; lines stay unreconciled (no bank-rule auto-reconcile on ingest).
Every imported transaction stores provenance such as the import batch and source format.
The banking UI loads all transactions for an account (paginated API, max 100 per request, walked client-side) so credit-card months with 50+ lines are fully visible — filters and counts apply to the complete set.
Apply bank rules after import
Structured API imports intentionally do not auto-categorise on ingest. After lines appear under Transactions:
- Configure patterns under Settings → Bank Rules:
- Categorise to account — fee/interest/merchant → chart account.
- Settle open invoice/bill — pin a contact; create a payment when the bank amount matches open documents (exact amount, document number in the narrative, or optional FIFO). Choose review first to queue proposals, or post immediately on Apply.
- Open the bank account → Transactions → Apply bank rules.
- Matching to-do lines use the first matching rule (by priority). Settle proposals appear in a review panel (Confirm / Dismiss). Optional auto-settle on classic statement import requires both the rule’s “Settle on import” and the org flag
bankRuleAutoSettleEnabled(API import-lines never auto-settle).
Use Assign in bulk or the bank line Match invoice / Match bill button for one-offs. Tick one or more open invoices (or bills) for the same customer/supplier, set how much of the deposit applies to each, and confirm when Allocated = Bank amount. Use Fill FIFO to auto-fill oldest-due first. ⋯ → Find & match links existing payments/journals or a single open document. Bank rules settle design: docs/design/bank-rules-settlement.md; multi-doc match: docs/design/multi-invoice-bank-match.md.
Category default tax
When you Assign to a category, Record as expense, Split, or Assign in bulk, picking a chart account applies that account’s default tax (if set under Chart of Accounts → Settings). Bank rules use rule-level tax when set; otherwise they inherit the account default at apply time.
Live Connections
Live bank connections are not enabled yet.
- The banking UI shows No bank connected
- Statement imports are the active workflow today
- Salt Edge is planned for a future release
Reconciliation
Reconciliation matches bank transactions to your accounting records.
Transaction list
Each row shows the statement date (bank day). After a line is posted to the books (categorise, match, transfer, etc.), the list also shows when it was recorded (In books date/time).
Edit details (until period close)
On a bank line, use Edit details / Details to correct:
- Statement date
- Description
- Reference and payee
Allowed while the date is not period-locked (Settings → period lock / closed fiscal year). Amount cannot be changed here. If the line is already in the books, the linked journal’s date and description update with the bank line (no void/recreate). Locked periods return an error until unlocked.
API: PATCH /api/v1/bank-transactions/:id. MCP: update_bank_transaction.
Search
On Transactions and Reconcile, the search box matches:
- Description, reference, and payee (substring, case-insensitive)
- Amount when the whole query looks like money (e.g.
5.50,R5.50,5,50,201,201.00)
Amounts are stored as integer cents. A decimal query is major units (5.50 → R5.50). A digits-only query matches both as cents and as whole rands (550 finds R5.50 and R550.00). Sign is ignored (money in and money out both match). Reconcile also matches the statement date string.
Transaction Statuses
- Unreconciled — Not yet matched to your books / statement workflow
- Reconciled (status) — In your books (categorised or matched); may still need to be ticked on a statement check
- On a statement check —
reconciliationIdset: ticked on an open check, or closed into a completed check - Excluded — Intentionally ignored
Statement check workflow
- Navigate to the bank account → Reconcile
- Check a statement — enter the statement period (start and end dates, e.g. 1 Mar–23 Mar 2025) and opening/closing balances (session stays In progress)
- The tick list shows only bank lines dated in that period (plus any already ticked on this check)
- If you chose the wrong dates (e.g. wrong year), use Edit period on the in-progress banner — ticks outside the new range are cleared automatically
- Tick lines that appear on the statement — ticks save immediately and survive page refresh
- Untick to remove a line from the open check
- Finish statement check when done (or Mark N on statement & finish for an explicit final set)
Lines must already be in your books (categorised or matched to an invoice/bill) before they can be ticked.
Design detail: docs/design/statement-check-draft-ticks.md.
The fuzzy matcher on the bank account page still suggests matches based on amount, date, reference, and description.