Advanced Bank Reconciliation
Advanced Bank Reconciliation
ERPNext ships with a standard Bank Reconciliation Tool. Advanced Bank Reconciliation replaces it with a faster UI and an auto-matching engine that handles the majority of transactions without any clicking.
The key idea: every potential match between a Bank Transaction and a Payment Entry / Journal Entry / Sales Invoice / Purchase Invoice gets a score based on multiple signals. Above a confidence threshold, the match auto-reconciles; below it, the human decides — but the UI sorts options by score so the right answer is usually on top.
What it matches
Bank Transactions can reconcile against:
- Payment Entry — payments you've already booked, awaiting bank confirmation
- Journal Entry — manual ledger postings, e.g. bank charges
- Sales Invoice — unpaid customer invoices (the tool creates a Payment Entry on reconciliation)
- Purchase Invoice — unpaid supplier invoices (creates a Payment Entry)
For invoices, the tool creates the missing Payment Entry / Journal Entry on the fly during reconciliation — you don't need to manually draft a payment first.
The ranking algorithm
Each candidate match gets points from these signals:
| Signal | Points | Description |
|---|---|---|
| Reference number match | 1 | Bank transaction reference_number matches voucher reference_no exactly |
| Amount match | 1 | Bank transaction amount equals voucher amount to the cent |
| Party match | 1 | Bank transaction party equals voucher party |
| Date proximity | 1–5 | Sliding scale: same day = 5, ±1 day = 4, … ±3 days = 1 |
| Voucher name in description | 1 | The voucher's name (e.g. PE-00123) appears anywhere in the bank description |
| Reference in description | 1 | The voucher's reference_no appears in the bank description |
Total score ranges 1–11+. Auto-reconcile fires at rank ≥ 3 with an exact amount match. Lower scores go to the UI for human review.
Daily auto-reconcile
The app schedules an auto-reconcile task that runs daily. For each Unreconciled bank transaction in the configured date range:
- Build the candidate list across all four voucher types.
- Score each candidate using the table above.
- If the best candidate has rank ≥ 3 AND amount matches to the cent, reconcile automatically.
- Otherwise, leave the transaction Unreconciled and surface it in the reconciliation UI.
Most ledgers settle 70–90% of transactions on this pass alone. The remaining 10–30% are typically the interesting cases (split payments, unmatched references, edge cases) that benefit from human eyes.
The reconciliation UI
For transactions that didn't auto-reconcile, open Advanced Bank Reconciliation in the awesomebar. The UI is a split panel:
- Left panel — list of unreconciled Bank Transactions, with date, amount, and party.
- Right panel — for the selected transaction, the candidate vouchers sorted by score with explanations of which signals fired.
Click a candidate to reconcile. Or click Create Payment Entry if no voucher exists yet — the tool drafts the PE pre-filled from the bank transaction's amount, date, and party.
Banking Reference Mapping
Some Dutch banks include reference numbers in non-standard places —
e.g. ABN AMRO sometimes puts the SEPA end-to-end reference in the
description field, ING uses a separate field. The Banking Reference
Mapping child table on Banking Settings lets you tell the matcher:
"look for SEPA references in the transaction_description field on
this bank's transactions, not the standard reference_no."
Set this up once per bank you use; the matcher then knows where to look.
Configuration
Open Banking Settings in the awesomebar:
- Auto-reconcile date range — how many days back the scheduled job looks (default 30). Increase if your reconciliation cadence is monthly rather than weekly.
- Auto-reconcile minimum rank — defaults to 3. Lowering to 2 accepts more matches automatically (more false positives); raising to 4 makes the auto-step more conservative (more manual work).
- Banking Reference Mappings — per-bank custom field mappings as described above.
When it doesn't auto-match
Common reasons a transaction stays unreconciled:
- Split payment. One bank credit covers multiple invoices. The current matcher does 1:1 matching only — you'll need to split manually in the UI.
- No corresponding voucher exists yet. The customer paid before the invoice was issued (rare). Create the invoice, then re-run the matcher on the next schedule, or reconcile manually.
- Party mismatch. The Customer is set up with a slightly different
name than what the bank uses. Update the Customer's
bank_accountor use the description field for matching. - Currency conversion noise. A foreign-currency transaction arrives slightly off the EUR voucher amount due to FX. Rank stays below threshold; resolve manually.
What this app does not do
- Initiate payments. Reconciliation is downstream of payment. See the SEPA Payments feature of erpnext_netherlands to send payments out via your bank.
- Connect to banks directly. Bank Transactions need to arrive via CSV / camt.053 / GoCardless Banking. This app only matches what's already there.
- Recategorise transactions. It matches to existing vouchers; it doesn't decide what category an unmatched transaction belongs to. That's still a manual classification step on Bank Transaction.