Odoo 20 Accounting Upgrade Checklist: Reconciliation, Taxes, Reports
Odoo 20 accounting changes explained, with an upgrade test checklist for bank reconciliation, taxes, fiscal positions, lock dates and financial reports.
Most Odoo 20 accounting articles list what is new. Few say what to check before you trust your books on the new version. Our Odoo upgrade services start from that question, and our Odoo 20 Accounting release notes explain all 45 changes with screenshots.
This guide is for CFOs, finance managers and Odoo admins planning a move from Odoo 18 or 19. For the general post-migration data integrity checks (record counts, balances, attachments), use our Odoo upgrade verification guide; this post stays on accounting.
What changed in Odoo 20 Accounting?

The Odoo 20 accounting changes that matter for an upgrade sit in five areas: chart structure, bank and payments, taxes, reports and assets. The rest are mostly screen and workflow improvements.
| Area | Odoo 20 change | What to test |
|---|---|---|
| Chart of accounts | Parent accounts replace account groups; codes optional | Report sections and custom reports |
| Payments | In Process becomes Paid; Paid becomes Reconciled | Filters, dashboards, aged reports |
| Bank | No manual journal lines on bank accounts | Imports and scripts that post to bank |
| Taxes | Taxes limited to their fiscal positions | Tax lines on foreign and exempt invoices |
| Reports | New CTA line; reconciled items in bank summary | Balance sheet and bank report totals |
| Assets | Asset models become depreciation models | Depreciation boards and schedules |
Each row comes from the official release note, checked in a live Odoo 20 database on our release notes page. The full list also covers reminders, purchase order matching, split items and bill line prediction.
Which Odoo 20 accounting changes can break an upgrade?
Changes that rename states, remove models or tighten rules break things, because saved filters, custom code and habits still expect the old behavior. Plan extra test time for these.
- Parent accounts: the account.group model is gone. Custom reports or code that read account groups must move to the parent account field, and code that assumes every account has a code needs a fallback.
- Payment status: stored values are migrated, but custom filters, reports or automations that test for "in process" or "paid" must be updated.
- Bank consistency: imports or scripts that post manual entries on bank accounts should create bank statement lines instead.
- Fiscal position taxes: invoices can lose a tax line after the upgrade if that tax is restricted to another fiscal position.
- Multi-ledger: ledger groups now list included journals instead of excluded ones, so check every ledger filter.
- Employee Expenses menu: removed; approved expenses now arrive as draft bills in the expense journal.
If your database runs custom modules, read our guide to the Odoo 20 custom modules upgrade next. Accounting code is often where those modules break first.
How do you set up an Odoo upgrade test database for accounting?
Request an upgraded test database, then treat it as a rehearsal of a real month-end, not a quick click-through. Odoo's own process starts with a test upgrade and asks you to test thoroughly before production.
Odoo's upgrade documentation says test databases are neutralized: scheduled actions are disabled, outgoing mail is replaced, payment providers go to test mode and bank synchronization is off. So automatic bank feeds and reminders will not run on their own in the test copy.
Its basic checklist includes checking reports, taxes, currencies, bank accounts and the fiscal year, and issuing a credit note. That is a start. For finance, add these steps:
- Pick two periods: one closed month with filed taxes and one open month with live activity.
- Export baselines from production: trial balance, balance sheet, P&L, aged receivables and payables, tax report and bank reconciliation report for both periods.
- Run the same reports in the test database with the same filters and compare totals line by line.
- Replay real transactions in the open month: invoices, bills, payments, credit notes and a bank statement import.
- Log every difference with a screenshot, an owner and a decision: expected Odoo 20 change, data fix or bug.
- Report bugs to Odoo through its upgrade support page before you plan the production upgrade.
A production upgrade cannot be reverted, so every open issue should be closed or accepted in writing first. Our Odoo UAT guide for Odoo 19 and 20 covers defect triage and sign-off in more depth.
How to test Odoo 20 bank reconciliation after the upgrade
Test Odoo 20 bank reconciliation by importing a real statement and checking that matching, write-offs and the reconciliation report give the same result as before. Bank matching changed more than any other accounting screen.
Odoo's bank reconciliation guide explains the Bank Matching view, default matching rules and reconciliation models. In Odoo 20, run this sequence:
- Import last month's statement into the test database and note how many lines auto-match.
- Review Matching Rules under Accounting, Configuration. Set the payment tolerance and matching order to match your current practice.
- Check your old reconciliation models still exist and still fire on fees, interest and recurring transfers.
- Use Run Auto Reconciliation from the gear menu after changing a rule, and compare results.
- Split one transaction across two accounts with Set Account to confirm the new multi-account split.
- Book a write-off with an analytic distribution if you charge differences to departments or projects.
- Open the Bank Reconciliation Summary: it now lists reconciled and unreconciled items up to the period end date. Its total must equal the statement balance.
Two more checks matter. Statements with a wrong ending balance now show a clear warning, so clean these up before go-live. And if you hash cash journals, a hashed cash statement cannot go back to draft.
How to test taxes and fiscal positions in Odoo 20
Test taxes by posting sample invoices for every fiscal position you use and comparing tax lines and the tax report with Odoo 19. The new fiscal position rule is the change most likely to surprise a finance team.
In Odoo 20, if a tax is linked to fiscal positions, it can only be used within them. When a product's default tax does not belong to the invoice's fiscal position, Odoo removes it, even if no replacement tax is mapped. Odoo 19 kept such a tax unless it was mapped.
Odoo's fiscal positions guide explains tax and account mapping. Use it to build a test matrix:
| Scenario | Post in test database | Expected result |
|---|---|---|
| Domestic customer | Invoice with default sales tax | Same tax and amount as Odoo 19 |
| Export or out of state | Invoice with mapped fiscal position | Mapped tax only, or none if exempt |
| Intra-region B2B | Invoice with reverse charge position | Reverse charge tags on the tax report |
| Vendor with withholding | Bill with withholding tax | Amount Due, Withhold Due, Net Due shown |
| Partial deductible expense | Receipt with Professional % | Correct deductible share in tax report |
Then open the tax return. Odoo's tax return guide lists automatic checks before validation, such as draft entries, bill attachments, company data and taxes matching countries. Run them on a closed period and confirm the grid totals match your filed return.
Indian, Gulf and EU companies should also test their localization flows. Our guide on Odoo accounting for CFOs in the GCC covers VAT and e-invoicing controls there.
How to check Odoo lock dates and closed periods in Odoo 20
Check that every lock date from production survived the upgrade and still blocks edits to closed periods. Lock dates protect filed taxes and audited years, so a gap here is a compliance risk.
Odoo's year-end closing guide describes the Lock Journal Entries window under Accounting, Accounting, Lock Dates. Test each type:
- Lock Everything: try to post or edit an entry dated inside the locked period. Odoo should block it or move the date to the day after the lock date.
- Lock Tax Return: post a back-dated invoice. Its tax values should move to the next open tax period, not change a filed return.
- Hard Lock: confirm the date is set where you expect. Odoo calls it irreversible, so never set a new one in testing without a plan.
- Exceptions: test a lock date exception for one user and a limited duration, then confirm it expires.
The Reset to Draft action now works in batch from list views. Try it on a locked period to confirm the lock still wins, and decide who may use it.
Upgrading from a version before Odoo 19? Current year earnings work differently from Odoo 19 onward. Odoo's docs advise booking the result of past fiscal years with explicit manual entries, in date order, and its blog post on current year earnings in Odoo 19 explains why.
How to test Odoo 20 accounting reports
Compare the balance sheet, P&L, trial balance and aged reports between production and the test database for the same dates; any difference needs an explanation. Report structure is where parent accounts show up.
Because account groups are replaced by parent accounts, check that every section of your balance sheet and P&L still lands in the right place. Then check reports built in Studio, spreadsheets or custom modules that read account groups or codes.
- Trial balance: totals and the Result Brought Forward line match production for a closed year.
- Balance sheet: a new Cumulative Translation Adjustments line appears under Other Comprehensive Income when you report several currencies together.
- Aged receivables and payables: totals match, and payment status filters still return the right invoices.
- Annual report: exporting now uses the company document layout, and the export fails until a layout is set.
- Ledger groups: multi-ledger filters return the journals you expect after the switch to included journals.
If you are new to how these reports connect, our guide to how Odoo Accounting works walks from invoice to statements.
How to test payments, reminders and vendor bills in Odoo 20
Run one full payable and one full receivable cycle in the test database, because states, buttons and reminders have moved. Users notice these changes on day one.
- Payment states: a validated payment now shows Paid, and Reconciled once matched with the bank. Mark as Reconciled moved to the Actions menu.
- Double payment check: register a partial payment, then click Pay again. Odoo 20 should propose only the remaining amount.
- Foreign currency: the Pay dialog shows the conversion rate, and exchange gains or losses appear as one line per invoice.
- Reminders: follow-ups become invoice reminders, with a Send Reminder button and a Last Reminder date. Rebuild and test your reminder levels.
- Vendor bills: check purchase order matching warnings for price and quantity, duplicate warnings, and bill line prediction on a repeat vendor.
- Expenses: approve an expense and find it as a draft bill in the expense journal.
Integrations that create invoices or payments through the API deserve their own test. XML-RPC and JSON-RPC are deprecated in Odoo 20, with removal of the main endpoints scheduled for Odoo 22, per Odoo's external API reference. Our guide to Odoo JSON-2 API migration covers the move.
What about assets, inventory valuation and multi-currency?
Assets and stock valuation need their own reconciliation, because the upgrade migrates their setup and any custom code around it. Check them against the general ledger, not only on screen.
Asset models are replaced by depreciation models in Odoo 20. Accounts and the default depreciation model now live on the fixed asset account. Depreciation can also be based on a yearly rate, and durations accept decimals.
For each asset class, compare the depreciation board, net book value and posted depreciation with production. Then check that a new asset bill still creates the asset with the right model.
Stock valuation moved partly into core Accounting, and the closing report can now book accruals such as received but not billed goods. Our guide to Odoo 20 inventory valuation lists the stock checks.
Odoo 20 accounting upgrade checks by industry
Each industry stresses a different part of Odoo 20 Accounting, so weight your test plan toward your own risk. The table shows where we focus first.
| Industry | Pain or cost driver | Odoo approach in Odoo 20 | How iVentureTeam helps |
|---|---|---|---|
| Manufacturing | Stock value and month-end accruals | Valuation closing report with accruals | Reconcile stock to the ledger |
| Distribution | High bank and payment volume | Matching rules, auto reconciliation | Tune rules on real statements |
| Multi-entity groups | Consolidation in several currencies | CTA line, intercompany PO matching | Test consolidated reports |
| Professional services | Reminders and receivables follow-up | Invoice-level reminders | Rebuild reminder levels |
| Exporters | Tax on foreign sales | Taxes limited to fiscal positions | Build a tax test matrix |
| Asset-heavy firms | Depreciation accuracy | Depreciation models on accounts | Compare boards before go-live |
Who should sign off an Odoo 20 accounting upgrade?
The finance lead should sign off the accounting tests, not only the IT team or the partner. Only the people who close the books know when a number looks wrong.
| Test area | Owner | Sign-off evidence |
|---|---|---|
| Bank reconciliation | Accounts team lead | Bank summary equals statement balance |
| Taxes | Tax or compliance lead | Closed-period tax report matches filed return |
| Reports | Finance controller | Trial balance and P&L match production |
| Lock dates | CFO or controller | Locked periods reject edits |
| Integrations | Odoo admin | Test invoices and payments post correctly |
Budget for this testing early. Our Odoo migration cost calculator gives an indicative cost and timeline for a move to Odoo 20, so you can plan finance time around it.
How iVentureTeam helps with your Odoo 20 accounting upgrade

We upgrade the database, then test accounting with your finance team until reports, taxes and bank matching agree with production. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Upgrade and test database: we request and prepare the test copy and set up baseline reports.
- Accounting test plan: reconciliation, taxes, lock dates, reports and payments, scripted for your periods.
- Custom code fixes: reports and modules moved from account groups to parent accounts and new payment states.
- Configuration: matching rules, reminders and depreciation models set to your practice by our Odoo consulting services team.
- After go-live: first month-end support on the new version.
Odoo accounting upgrade case study: Fernando Tax Management B.V.
A Dutch tax practice moved to Odoo 18 with iVentureTeam and fixed accounting and localization issues during the migration. It shows why accounting checks belong inside every upgrade.
The firm had outgrown a rigid legacy system. Manual entry across systems produced duplicate and inconsistent records that staff reconciled by hand, and reports rendered with translation gaps.
We migrated the code base to Odoo 18.0 and fixed database and compatibility issues so custom code ran cleanly. We also resolved a hidden journal lines issue that had been obscuring accounting data, and built localized tax compliance reports for the Netherlands and Curaçao.
The project took 10 weeks of migration and customization and cut manual data entry by 60%. Read the Fernando Tax Odoo accounting automation case study.
The bottom line on the Odoo 20 accounting upgrade
Odoo 20 Accounting is worth the upgrade, but only after a finance-led test of reconciliation, taxes, lock dates and reports on a copy of your database. The changes are useful; the risk sits in old filters, custom reports and tax setup.
Run one closed and one open month through the test database, compare every key report with production and sign off area by area. If the numbers agree, you can upgrade with confidence.
Ready to test your Odoo 20 accounting upgrade?

Get a finance-led test plan before you move production. Plan an Odoo 20 accounting upgrade test with our team, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
What is new in Odoo 20 Accounting?
+
The official release notes list 45 Accounting changes. Key ones include parent accounts replacing account groups, matching rules for bank reconciliation, renamed payment states, invoice reminders and depreciation models.
Will my account groups survive the upgrade to Odoo 20?
+
Account groups are replaced by parent accounts in Odoo 20. Check that report sections still add up and update any custom report or code that reads account groups or assumes every account has a code.
Why did a tax disappear from my invoice after upgrading to Odoo 20?
+
In Odoo 20, a tax linked to fiscal positions can only be used within them. If the default tax does not belong to the invoice's fiscal position, Odoo removes it, even when no replacement is mapped.
What does Paid mean for payments in Odoo 20?
+
Paid now means a validated payment not yet matched with the bank, the old In Process state. Reconciled means it is matched with a bank transaction, the old Paid state.
Do lock dates carry over in an Odoo upgrade?
+
They should, but test them. Post or edit an entry inside each locked period in the test database and confirm Odoo blocks it or moves the date. Remember that a Hard Lock date cannot be undone.
Can I test an Odoo 20 upgrade without affecting production?
+
Yes. Request an upgraded test database. Odoo neutralizes it: scheduled actions, outgoing mail and bank synchronization are off, and payment providers run in test mode.
How long does accounting testing take for an Odoo 20 upgrade?
+
It depends on your localization, volume and custom code. Plan at least one closed and one open month of testing, and add time for custom reports and integrations.
Can I post manual journal entries to a bank account in Odoo 20?
+
No. Manual journal lines no longer accept bank and cash accounts. Bank balances change only through bank transactions, so imports and scripts must create bank statement lines instead.
Ready to put this into action?
Talk to iVentureTeam about Odoo, AI automation, or custom development — get a free, no-obligation consultation.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo 20 Inventory Valuation: Changes, FIFO vs AVCO and Upgrade Checks
Odoo 20 inventory valuation explained: what changed since Odoo 18 and 19, FIFO vs AVCO, Anglo-Saxon perpetual setup, reports and upgrade checks to run.
Odoo Internal Controls: Access, Approvals, 3-Way Match, Audit Trail
Set up Odoo internal controls in Odoo 19 and 20: access rights, segregation of duties, purchase approvals, three-way match, lock dates and the audit trail.
Odoo Multi Company Setup: Intercompany Rules and Consolidation
Odoo multi company setup for Odoo 19 and 20: companies vs branches, intercompany rules, Odoo 20 clearing, consolidation tools and limits, and plan costs.
