Odoo Fixed Assets and Depreciation: A Setup Your Auditors Will like
Asset models, depreciation methods, prorata, disposals and reports in Odoo 19 Enterprise, the Community route, and a worked example in round numbers.
· 9 min read
Odoo bank reconciliation should take minutes a day, not days at month end. Here is how bank feeds, statement imports and reconciliation models work in Odoo 19 Enterprise, how to handle partial payments and write-offs, and the routine that keeps the bank clean.
Key takeaways
The bank balance is the one number in your books that an outside party confirms every day. When Odoo and the bank disagree, every other figure becomes suspect: receivables look higher than they are, supplier payments seem to vanish, and cash forecasts start from the wrong place.
Odoo bank reconciliation is built to keep that gap small. Transactions arrive from a bank feed or a statement file, built-in rules match what they can, and reconciliation models handle the cases that repeat. This guide covers how it works in Odoo 19 Enterprise, the rules worth setting up first, and a daily routine that turns the month-end close into a check rather than a hunt.
Each bank account in Odoo has its own bank journal and ledger account. Every transaction that arrives creates a journal entry between the bank account and a suspense account. Reconciling the transaction replaces the suspense line with the real counterpart: a customer invoice, a vendor bill, a payment, or an account such as bank charges.
That design gives you a simple test. If the suspense account is zero, every bank line has been explained.
The work happens in the Bank Matching view. Open it from the Accounting dashboard by clicking the journal name to see every transaction, or the button that counts the lines left to reconcile to see only the open ones. Each line shows the date, label, partner, amount and up to two suggested actions, with the rest under the ellipsis menu:
Odoo 19 simplified this view, added keyboard shortcuts and lets you match draft entries: any automatic entries, such as exchange differences, are created in draft and confirmed when the original entry is posted. The Bank Matching view comes with the Accounting app in Odoo Enterprise. On Odoo 19 Community, our guide to the accounting reports Community leaves out covers the free route for reporting.
When someone clicks Pay on an invoice, what happens next depends on your outstanding accounts. Without them, Odoo creates no journal entry yet, and the invoice shows as paid once the bank transaction is reconciled. With outstanding receipts and payments accounts configured, the payment posts to that account straight away and reduces the amount due, then moves to the bank account when it is matched. Either way, the bank line has the final word.
Odoo's bank synchronization imports transactions automatically through third-party providers such as Salt Edge, Plaid, Yodlee and Ponto, depending on your country and bank. It needs a valid Odoo Enterprise subscription, and coverage varies by institution, so check Odoo's list of supported institutions before you plan around a feed. Odoo's bank synchronization guide covers connection and troubleshooting.
A few behaviors are worth knowing before you connect:
If your bank is not supported, or you prefer files, Odoo imports CAMT.053 (an ISO 20022 statement format), CSV and XLSX spreadsheets, OFX (Open Financial Exchange) and QIF (Quicken Interchange Format) files, plus CODA for Belgian banks. Drag the file onto the bank journal on the dashboard or onto the Bank Matching view. CSV and XLSX files need their columns mapped to Odoo fields, with a test run before the import.
Whichever route you use, record an opening transaction for the balance on the day you start, so Odoo's statement balances can match the bank's. Group transactions into statements with a starting balance, an ending balance and the bank's PDF attached; Odoo warns you when a statement does not follow on from the previous one or does not add up. After any overlap between a feed and a file, run Find Duplicate Transactions from the Actions menu.
Odoo has fixed matching rules of its own. If a transaction has no partner, its label is compared with the numbers and references of open invoices, bills and payments. If a partner is set, Odoo looks for an exact amount first, then a discounted amount for early-payment terms, then an invoice amount quoted in the label.
Reconciliation models add your own rules on top. You find them in the bank journal's menu under the Reconciliation section. Each model is either manual, appearing as a button on transactions it fits, or automated, applying by itself. When several automated models fit one transaction, the first in the sequence wins, so order them deliberately.
Conditions narrow where a model applies: journals, partners, an amount range, and the label, which can contain or not contain a text, or match a regular expression (regex), a pattern language for text. Counterpart items then say what to create: a partner, an account, an amount type (a fixed amount, a percentage of the remaining balance, a percentage of the transaction, or an amount read from the label), taxes, an analytic distribution and a label. A model can also schedule a Next Activity on the transaction.
Start with the models Odoo provides in most localizations, then add your own:
Customers do not always pay the exact amount. Odoo 19 handles the common cases cleanly:
| Situation | What Odoo does | What to do |
|---|---|---|
| Payment lower than the invoice | The transaction is fully reconciled and the difference stays open on the invoice | Leave it open for the next payment, or mark the invoice as fully paid and book the difference |
| Payment higher than the invoice | The transaction is only partly reconciled | Match the rest to another invoice, or use Receivable to keep it as customer credit |
| Bank fee added to a supplier payment | A small remainder is left on the transaction | Use your bank charges model button, or Set Account on the remainder |
| One deposit for many payments | No single invoice matches | Use Batches to match the batch payment |
| Customer who is also a supplier | Debts on both sides stay open | Net the receivable and payable items, with or without a bank line |
To mark an invoice as fully paid, edit the matched line and choose fully paid; to undo it, choose partial payment. Odoo 19 also lets you fully reconcile or write off items that were partly reconciled earlier, so old small balances stop lingering on the aged receivable report.
An invoice for 10,000 is paid by a customer abroad, and the bank line shows 9,950 because an intermediary bank deducted 50 in charges. The label quotes the invoice number.
Reconciliation is quickest when it is small. A routine of a few minutes each morning keeps it that way:
At month end, the bank review becomes a short checklist that feeds straight into your close:
Tip: Where you can, keep the people who register payments separate from the people who reconcile the bank. Reconciliation is a control, and it works best when the reviewer did not create the entries being reviewed. Our guide to access rights in Odoo shows how to set that up.
Through OdooStar, our Odoo practice in Ajman, we implement Odoo Enterprise Accounting for UAE businesses: bank journals, feeds or statement imports, outstanding accounts, reconciliation models tuned to your banks' wording, and a routine your team can keep. When a bank cannot be connected, we set up file imports with the column mapping worked out for your bank's files.
Moving from another system? We bring across opening balances and open items so the first reconciliation starts clean. Contact us, call +971 55 973 4524 or email [email protected].
Tell us which banks and payment channels you use. Our engineers will set up feeds or imports, reconciliation models and a routine your finance team can keep.