Skip to main content
All Docs
FeaturesagentOS Block ManagerUpdated April 13, 2026

Bank Reconciliation

Bank Reconciliation

The Bank Reconciliation module lets you import bank statement CSV files, automatically match transactions to outstanding demands, and maintain an audit-ready ledger for each block.

Navigate to Reconciliation in the sidebar (between Payments & Arrears and Client Money) to access the module.


Overview

The reconciliation workflow has three stages:

  1. Import — Upload a bank statement CSV for a block.
  2. Auto-match — A background job scores each transaction against outstanding demands and matches those above the confidence threshold.
  3. Review — Work through the remaining unmatched transactions in the Queue, manually matching or excluding each one.

Dashboard Tab

The Dashboard tab shows a high-level summary for the selected block (or all blocks):

  • Match rate — Percentage of transactions matched, shown as a number and a progress bar.
  • Cash flow summary — Total credits, total debits, and net for the imported transactions.
  • Stats cards — Total transactions, matched percentage, unreconciled count, and date of the last import.

Importing a Bank Statement

Requirements

  • File must be a .csv.
  • A block must be selected before importing.
  • The CSV must have at least one header row and one data row.
  • Required columns: Date, Description, Amount.
  • Optional column: Reference.

Steps

  1. Select a block from the block filter dropdown.
  2. Click Import CSV.
  3. Choose your CSV file. The importer reads the headers and auto-detects column mappings based on common names.
  4. In the column mapping step, confirm or adjust which CSV columns map to Date, Description, Amount, and Reference.
  5. Review the 3-row preview to verify the mapping looks correct.
  6. Click Import N Transactions to confirm.

After import, a background job starts auto-matching immediately. A success toast confirms the number of rows imported.

Supported formats

FieldSupported formats
DateDD/MM/YYYY, ISO 8601, natural dates
Amount1234.56, £1,234.56, (1234.56) for negatives

Rows that cannot be parsed are skipped and reported as a warning toast after import.

Auto-detected column names

The importer recognises the following header patterns automatically:

FieldRecognised headers (case-insensitive)
Datedate, posted
Descriptiondescription, narrative, details, memo
Amountamount, credit, money in, value
Referencereference, ref, payee

Auto-Matching

After each import, the reconciliation-auto-match background job runs and scores each imported transaction against all outstanding demands for the block.

Scoring algorithm

SignalPoints
Exact amount match+40
Amount within 10%+20
Reference contains unit number+30
Reference contains leaseholder surname+20
Description contains unit number+10

Transactions with a total score of 60 or above are automatically matched. A payment record is created and the demand status is updated.

Transactions below the threshold remain Unmatched and appear in the Reconciliation Queue.

The job runs with a concurrency limit of 2 per organisation.


Reconciliation Queue Tab

The Queue tab lists all unmatched transactions for the selected block or across all blocks. An amber badge on the tab shows the current unmatched count.

Match status badges

BadgeMeaning
🟢 AutoMatched automatically by the background job
🔵 ManualMatched manually by a user
⚪ ExcludedExcluded from reconciliation (e.g. bank fees)
🟡 UnmatchedNot yet matched or excluded

Actions

Match (credit transactions only)

  1. Click Match on a transaction row.
  2. An inline panel opens showing all outstanding demands for the block.
  3. Select the correct demand and click Confirm Match.
  4. A payment record is created and the demand status is updated.

Exclude

  • Click Exclude to mark a transaction as excluded. Use this for bank charges, interest credits, or any non-service-charge items.
  • Excluded transactions are removed from the unmatched queue.

Ledger Tab

The Ledger tab shows a full transaction history for a selected block.

A block must be selected to view the ledger.

Columns: Date · Description · Reference · Credit · Debit · Status

Unmatch — For auto-matched or manually matched transactions, an Unmatch button appears in the row. Clicking it reverses the match and deletes the associated payment record, returning the transaction to the unmatched queue.

Exporting to Excel

When a block is selected and transactions exist, an Export Excel button appears in the toolbar. Clicking it downloads a .xlsx file named {block-name}-ledger-{date}.xlsx.

The export includes: Date, Description, Reference, Credit (£), Debit (£), Status, Notes.


Imports Tab

The Imports tab shows the history of all CSV import batches.

Columns: Date · File name · Block · Total rows · Matched · Unmatched · Status

Import statuses

StatusMeaning
CompleteImport and auto-match finished successfully
ProcessingAuto-match job is still running
PendingImport queued, not yet started
FailedImport encountered an error

Data & Security

  • All reconciliation data is stored in two tables — bank_imports and bank_transactions — both protected by Row-Level Security (RLS) for full tenant isolation.
  • Excluding a transaction does not delete it; it is flagged and excluded from reporting.
  • Unmatching a transaction deletes the associated payment record and returns the demand to outstanding.