Bank Reconciliation in Odoo 20: What Changed and How to Adapt

Bank reconciliation in Odoo 20 is not a brand-new tool, but several changes arrive together and quietly reshape the job: a stricter rule underneath it, a renamed Bank Matching view on top of it, clearer payment statuses, new matching controls, faster data entry, and a summary report built for period-end proof. If your team reconciles the way it did in Odoo 18 or 19, most of the workflow will feel familiar — but a few old habits will stop working, and a few new options are worth adopting deliberately.

This article walks through what changed, based on the Odoo 20 release notes and the 20.0 documentation, and turns it into an adaptation plan.

The foundation changed first: bank consistency

The biggest change is not in the reconciliation screen at all. In Odoo 20, all journal entries impacting bank accounts must originate from bank transactions. Manual journal entries posted directly against a bank account — the traditional shortcut for plugs, corrections, and forcing a balance to agree — are no longer the way the bank ledger gets built.

For reconciliation, that has a welcome consequence: the population you reconcile is complete by construction. Every movement exists as a transaction in the Bank Matching view, arriving by bank synchronization, by file import (CAMT.053, CSV, XLSX, OFX, QIF, or CODA), or by manual registration as a transaction. There is no second, invisible layer of journals to explain when the balance does not tie out.

The view itself: Bank Matching

In the 20.0 documentation the reconciliation workspace is called the Bank Matching view. You reach it from the Accounting Dashboard in two ways:

  • Click the journal name, or its Transactions button, to see all transactions, including those already reconciled.
  • Click the “x to reconcile” button to see only unreconciled transactions. Removing the Not Matched filter brings reconciled lines back into view.

The view is a list of transaction lines, newest first. Each line shows the date, label, partner where one is set, the amount, and up to two suggested action buttons, with further actions behind the ellipsis menu. Once a transaction is reconciled, its suggested buttons are replaced by the counterpart items it was matched with, or the account it was written off to — so the state of every line is readable at a glance.

Behind each line, the accounting follows the same pattern: the transaction’s journal entry debits or credits the bank journal’s main account against a suspense account until reconciliation replaces the suspense side with the real counterpart. Unreconciled therefore no longer means “somewhere in the ledger”; it means visibly parked in suspense, waiting in one queue.

Clearer language: Paid now means Reconciled later

Odoo 20 renames payment statuses to describe what has actually happened. What was called “In Process” is now Paid, and what was called “Paid” is now Reconciled. The distinction matters: registering a payment means you believe money moved; reconciling it against a bank transaction proves it did.

In the same spirit, the manual “Mark as Reconciled” button has been moved into the action menu, to encourage linking payments with real bank entries instead of declaring them reconciled by hand. Train the team on the new labels: “only Paid, not Reconciled” is not an error — it is a normal state awaiting its bank line. A related safeguard in the payment wizard now detects pending “Paid” payments, deducts them from the amount due, and sorts outstanding payments by date.

Matching: what the system does before you touch anything

Odoo pre-selects matches automatically where it can, and the 20.0 documentation spells out the order of logic. If no partner is set on a transaction, its label is compared with the number, customer reference, bill reference, and payment reference of existing invoices, bills, and payments. If a partner is set, matching is driven by that partner’s open items and amount, applying rules in sequence:

  1. Exact match on amount.
  2. Discounted match, for payment terms that grant an early-payment discount.
  3. Amount in label, where the invoice amount appears inside the transaction label.

On top of those fixed rules sit reconciliation models — custom rules you define for repeated operations, applied automatically or offered as buttons. A transaction partly matched to a bill, with a small remainder that is really a bank fee, is the documentation’s own example: match the bill first, then apply a Bank Fees model to create the counterpart for the remainder.

Two Odoo 20 additions strengthen this layer. First, you can configure Matching Rules for automatic bill and invoice reconciliation, including payment tolerance and matching order. Second, if automatic reconciliation did not run when you expected, the new Run Auto Reconciliation option lets you retrigger it manually instead of wondering whether to wait or work by hand.

Working a transaction by hand

When no automatic match applies, expand the transaction line and choose how to define the counterpart:

  • Reconcile — pick existing items such as customer invoices, vendor bills, or payments. If a partner is set, the list is pre-filtered to that partner.
  • Set Account — write the amount off directly to an account, editing the line if only part of the transaction belongs there.
  • Receivable / Payable — write off straight to the partner’s receivable or payable account.
  • Batches — match the line against a batch payment, creating a counterpart for each payment in the batch.
  • Set Partner — add the missing partner, which immediately improves Odoo’s suggestions.
  • Reconciliation models — apply a saved model’s counterpart lines in one click.
  • Upload bills — upload a bill for digitization from this view, then match it afterwards; note that uploading does not reconcile it automatically.

Partial amounts are handled explicitly. If a transaction is smaller than the invoice it settles, the transaction reconciles fully and the difference stays open on the invoice — or you can mark the invoice fully paid from the line if the shortfall is accepted. If the transaction is larger, it reconciles partially and the remaining balance stays available to reconcile like any other amount. To undo, delete the counterpart items to unreconcile, or edit a counterpart line with the pencil icon to fix amounts and accounts.

Speed improves in Odoo 20 as well: the release notes credit faster encoding to quick reconciliation model shortcuts and statement transaction batching. For write-offs created during reconciliation, you can now also define an analytic distribution, so a written-off remainder lands in the right analytic accounts instead of being fixed up later.

Reconciliation beyond the bank

Two changes widen the tool’s reach. Manual reconciliation can now be performed on any account, not only the traditional receivable and payable accounts. At the same time, the old “Allow Reconciliation” checkbox on accounts has been renamed Payment Reconciliation: it controls whether an account’s open items are suggested in the bank reconciliation view and whether exchange rate difference entries are expected on reconciliation.

The same view also supports netting — offsetting what a partner owes you against what you owe them. Where a bank transaction balances the two sides, select counterpart items on both sides. Where no bank transaction is involved, select the journal items and reconcile them directly, choosing how to handle any remainder: leave it open, apply a model, or write it off.

The new summary report, and closing the period

Odoo 20 adds a bank reconciliation summary report with a detailed view of reconciled and unreconciled transactions based on the end date of the selected period. That “as of” framing is what a close needs: proof of what was still open at the period boundary. Statement validation feedback has also been refined, and the Bank Matching view’s duplicate-finder flags likely duplicates by amount, date, and account number — so the close becomes a review of exceptions rather than a hunt.

An adaptation checklist for your team

  1. Clear the old backlog before upgrading. Reconcile or consciously carry over every unmatched item; a strict, transaction-first system is a bad place to store unexplained history.
  2. Ban the bank journal-entry shortcut. Corrections, fees, and transfers all start from a transaction now. If a line is missing, register the transaction — label and date are mandatory, and a partner makes matching far easier.
  3. Teach the new status names. Paid means recorded; Reconciled means proven against the bank. Update your internal checklists and report definitions to match.
  4. Invest an hour in matching setup. Review your reconciliation models, add models for recurring fees and settlements, and set tolerances and matching order in the bill/invoice matching rules.
  5. Reconcile little and often. With synchronization or regular imports, a short weekly pass through the “x to reconcile” queue keeps suspense near zero and makes the summary report a formality at period-end.
  6. Use the summary report at close. Run it for the period end date, work the unreconciled list it produces, and keep it with your close documentation as the proof behind the bank balance.

None of these changes asks accountants to learn a new profession. They ask for one shift in mindset: the bank statement is no longer supporting evidence for the ledger — in Odoo 20, it is the ledger’s source. Teams that make that shift will find reconciliation faster, closes calmer, and balances considerably easier to defend.

Further reading

Leave a Comment