GuideOdoo 20 series, part 7 of 25September 20, 2026By Olivia, Senior Odoo Architect

Odoo 20 Accounting:
tax returns, yearly audits, AI auditors and new localizations

Tax returns, audits and e-invoicing: Odoo 20 screenshot behind the article title
INTRODUCTION

Closing a period becomes a checklist that Odoo keeps for you

In Odoo 19, closing a VAT or sales-tax period meant opening the tax report, reading the figures and trusting that nothing had been missed. Odoo 20 treats every recurring declaration as a record called a return: it has a type, a period, a deadline, a workflow and a list of checks that must pass before it is validated. The same mechanism powers a yearly audit working file, two AI agents are wired to it, and the release ships e-invoicing and statutory reports for new countries. If you close the books for one company or a dozen client files, this release changes your month.

The return screens were clicked through on a Belgian demo company, because a tax return needs a localization that ships a tax report; the US Tax Report and the Interco Comparison come from a US company. For the AI agents we show the configuration only, since agent replies could not be captured on the private demo. For the localizations, we list the new countries as the source names them and say where Canada and the United States stand.

Observed on the Odoo 20.0 Enterprise pre-release build of September 23, 2026. Names, menus and availability can change before general availability; we will update this page when they do.

Every tax return is a record with a deadline, a workflow and checks

Accounting > Accounting > Tax Returns opens a kanban grouped by period. Each card carries the return name, a pending-check counter such as 3 Pending, a deadline badge such as Sep 20, and the workflow steps of its return type: Reviewed, Submitted, Paid. Review opens the return, Preview the underlying tax report, and Pay appears on returns whose only step is a payment, like a quarterly advance. The To Do filter hides what is done, so a controller supervises every open declaration from one list.

Odoo 20 Tax Returns kanban listing Belgian VAT returns by month with Review and Pay buttons
Tax Returns grouped by period, with deadline badges, pending-check counters and workflow steps.

Inside a return, the checks do the work. On the VAT August 2026 return, Bank Matching is flagged Anomaly with 3 bank transactions behind it and carries the note we typed: 3 card payments without receipt, requested from employees on Sep 24. Four other checks are Reviewed or To Review. Clicking the count opens the flagged records, so a bookkeeper works from the check rather than from a journal, and the notes stay on the return for whoever picks up the file next. Validate moves the return to its next step. Four workflows exist per return type: reviewed; reviewed and submitted; reviewed, submitted and paid; or paid only.

Tax return check list with an anomaly note and reviewed checks
Checks of the VAT August 2026 return; Bank Matching flagged as Anomaly with a note, others Reviewed / To Review.
Step 1: Animated walkthrough of reviewing a tax return and adding a note to a checkStep 2: Animated walkthrough of reviewing a tax return and adding a note to a checkStep 3: Animated walkthrough of reviewing a tax return and adding a note to a check
Open Accounting > Accounting > Tax Returns, open a return, annotate a check, validate.

The yearly audit is a working file of checks grouped by cycle

Return types come in two categories, Tax Return and Audit, and the Audit category feeds a yearly flow under Accounting > Review > Working Files. New opens the Start an Audit dialog: a Return Type (Audit, plus a localized Audit (BE) on the Belgian company), the fiscal year dates and the cycles to include, eleven of them from Equity to Treasury and financing. Generate Return builds the working file.

Start an Audit dialog for Jan 1 - Dec 31 2025 with cycles
Review > Audit > Working Files > New: "Start an Audit" with dates and audit cycles

The working file card shows two progress bars, Balances and Checks; the fresh Audit 2026 read 0 of 9 balances and 10 of 54 checks. Inside, three tabs, Cycles, Balances and Spreadsheet, and the checks grouped by cycle, each To Review, Reviewed or Anomaly, each with a notes field, plus a Validate button for the whole file. Look first at Bank Transaction Missing Document, in the Treasury and financing cycle: it lists every bank statement line not linked to an invoice or a bill, 15 on the demo, and the accountant creates the missing documents from that list instead of scrolling the bank journal. The audit periodicity follows the fiscal year defined on the company, and each return keeps its own lock date and submission date.

Audit check listing 15 unreconciled bank transactions
Treasury and financing cycle: "Bank Transaction Missing Document" check with 15 bank transactions (Anomaly).
Step 1: Animated walkthrough of starting a yearly audit working fileStep 2: Animated walkthrough of starting a yearly audit working fileStep 3: Animated walkthrough of starting a yearly audit working file
Review > Working Files > New: pick Audit type, fiscal year and cycles, generate the working file.

Return types, check templates and the Interco Comparison report

Accounting > Configuration > Return Types lists Tax Return and Audit types with their periodicity and an active toggle. The Belgian VAT type shows what a return type carries: the Tax Return or Audit radio, Periodicity, Start Date, a Deadline in days after the tax period, the Country and Report it is built on, and the tax accounts. Create your own and one more field appears: States, the workflow the return follows. On this build, States is shown only on custom return types; the master types of a localization hide it. The gear menu offers Duplicate and Delete; archiving is the active toggle in the list.

New return type form with States field
New custom return type: the **States** workflow field is only shown for non-master return types.

Accounting > Configuration > Checks holds the library of check templates, grouped by the same cycles, from aged receivables review to minimum share capital compliance, and you can add your own.

For a Canadian or US firm

Create a custom return type for a filing your localization does not model as a return yet, a payroll withholding remittance for instance, with a monthly periodicity and a deadline in days, and attach the checks your team runs from a spreadsheet today. That filing then shows up on the kanban next to the tax returns.

List of audit check templates
Configuration > Checks: library of check templates grouped by cycle.

Multi-company groups get the Interco Comparison report: main company balance, counterpart balance and Difference per account type, with drill-down to journal items. We posted intercompany invoices between two US companies with a deliberate 5,000 against 4,750, and the report shows the 250.00 gap on Income and Receivable. Two corrections to the feature guide: the report has no entry under Reporting on this build, it opens from the audit check Intercompany account reconciliation; and Horizontal Groups are still hidden without developer mode, we reached the list by direct URL.

Intercompany comparison report with a difference column
Interco Comparison 2026: Main company, Counterpart and Difference (250.00 on income/receivable).

Auditor and Audit Reviewer: two agents wired to the working file

The module ai_account_reports adds an accounting skill set and two agents under AI > Agents. Auditor's card says it investigates one audit check and returns independently reviewed findings; Audit Reviewer independently reviews one check's evidence and conclusion. Both carry the skills Search Database, Accounting Report Analysis and Accounting Audit Evidence. Auditor's Skills tab shows the design: Generate Image, Web Search and Self Update are off, and Audit Reviewer is listed under Subagents. The intent, per the feature guide, is that Auditor gathers evidence, hands its conclusion to Audit Reviewer, which challenges it, and the result is written back on the check with the evidence, so the assistant does not mark its own homework.

Two agent cards, Auditor and Audit Reviewer
AI > Agents: the Auditor and Audit Reviewer agents
Agent panel with Accounting Report Analysis, Accounting Audit Evidence and sub-agent Audit Reviewer
Auditor > Skills: accounting skills and Audit Reviewer as a sub-agent

The report side is simpler. Every accounting report has an AI icon that opens the Odoo AI chat with the current report and its options as context. On the US company's Profit and Loss we typed: Explain the biggest variance versus last year in this Profit and Loss. That is as far as we can take you; the reply goes through Odoo's asynchronous AI endpoint, which calls the database back over a public URL, so on a private demo it never arrives. Where the data goes is known: to Odoo's proxy, billed in IAP credits, with no setting to pick the model or bring your own key. A firm bound by client confidentiality should settle that first.

P&L with the Odoo AI chat window and a variance question
AI chat opened on the report (the report and its options are passed as context), question typed

New localizations and e-invoicing: mostly outside North America

Odoo 20 adds a large batch of country modules. According to the feature guide, the biggest piece is Türkiye's first complete e-invoicing stack through the Nilvera integrator; the rest is e-invoicing in Latin America and West Africa, statutory reports, and Intrastat for six more countries with bridges that feed stock movements into the declaration. The table lists them as the guide names them.

CountryWhat is newType
TürkiyeNilvera e-invoice and e-archive, UBL 1.2.1 e-dispatch, central bank buy and sell ratesE-invoicing
Ivory CoastNormalized electronic invoice sent to the DGI, QR code on the PDFE-invoicing
Dominican RepublicElectronic invoicing with document type ranges and DGII status requestE-invoicing
UruguayE-tickets from the Point of Sale, final consumer limitE-invoicing
PeruElectronic withholding documents sent to SUNATE-invoicing
Hong KongAutoPay files for batch paymentsPayments
NorwaySAF-T import of historical dataImport
Guatemala, North Macedonia, Hungary, Romania, PhilippinesVAT books, financial statements, A60, D390, BIR 2306 and 2307Statutory reports
Bulgaria, Greece, Hungary, Malta, Serbia, SwedenIntrastat declarations, plus stock bridges for every countryIntrastat
United StatesAvaTax exempt and non-taxable amounts in their own columns of the US Tax ReportTax report

Where does that leave Canada and the United States? The guide names no change to the Canadian localization, so a Canadian company should expect its GST, HST, PST and QST setup to carry over as it is. For the United States, the one named change is on the tax report: AvaTax users get their exempt and non-taxable amounts in the correct columns. On the US demo company the Exempt and Non-Taxable columns sit next to Total Sales, Taxable, Tax Rate and Tax; we could not test the AvaTax feed itself. The guide's appendix also lists country reports removed from the 20.0 enterprise branch, among them the Netherlands and Sweden tax returns and German Elster; a group with a subsidiary there should confirm the replacement first.

US tax report with exempt and non-taxable columns
US Tax Report (My US Company) with Exempt and Non-Taxable columns.

The e-invoicing baseline sits in Accounting > Configuration > Settings: Fiscal Localization, then Electronic Invoicing with Enable PEPPOL, then Tax Return Periodicity. Peppol is not new in Odoo 20, and sending through it needs a registration on the Odoo Peppol proxy. On a Belgian customer set to the Peppol BIS 3 format, Send on a posted invoice attaches the UBL BIS 3 XML next to the PDF. A Canadian or US company meets this when a European subsidiary or customer requires it.

Accounting settings, localization and Peppol
Settings: Fiscal Localization "Belgium - Companies", Electronic Invoicing "Enable PEPPOL", tax return periodicity.
Step 1: Animated sending of a Peppol UBL invoiceStep 2: Animated sending of a Peppol UBL invoiceStep 3: Animated sending of a Peppol UBL invoice
Customers > Invoices > open a Belgian invoice > Send: the UBL BIS 3 XML is attached.

How to try it on a demo database

  1. On a demo database with a localization that ships a tax report, open Accounting > Accounting > Tax Returns.
  2. Click Review on a return, click the count next to a flagged check, type a note in Add notes, then click Validate.
  3. Open Accounting > Review > Working Files, click New, keep the Audit type, set the fiscal year and click Generate Return.
  4. In the working file, open Treasury and financing and click the count on Bank Transaction Missing Document.
  5. Open Accounting > Configuration > Return Types, click New and note the States field; then open Accounting > Configuration > Checks.
  6. With intercompany invoices posted, open the Interco Comparison from the audit check Intercompany account reconciliation.
  7. Open AI > Agents > Auditor and read its Skills tab, then Accounting > Reporting > Profit and Loss and click the AI icon.
  8. Open Customers > Invoices, open a posted invoice for a Peppol customer and click Send to see the UBL attachment.
Step 1: Animated steps asking AI about the P&LStep 2: Animated steps asking AI about the P&LStep 3: Animated steps asking AI about the P&L
Reporting > Profit and Loss > AI icon > ask

What we could not verify on the pre-release build

We did not see an AI reply: the Profit and Loss variance explanation and the Auditor's findings written back on a check both run as agent chats through Odoo's asynchronous AI endpoint, which fails on a private demo. Only Belgium and the United States were installed, so none of the new country modules in the table, the new Intrastat countries or the AvaTax columns were exercised. Peppol sending was not completed because it requires a registration on the Odoo Peppol proxy. Contrary to the guide, the Interco Comparison has no Reporting menu entry and Horizontal Groups did not appear under Configuration without developer mode. Everything else on this page was clicked through on the 20.0 Enterprise build of 23 September 2026.

What this means for an upgrade

If you run Odoo 17, 18 or 19, your tax reports do not change; what changes is that Odoo generates returns from the return types of your localization, so plan a session to map your closing checklist onto check templates and pick a workflow per return type. Groups with several entities should read the Interco Comparison before their first Odoo 20 close. Accounting is also the app with the most scripts around it: bank feed imports, a tax engine or a BI tool pulling journal items over XML-RPC or JSON-RPC are all at risk in Odoo 20, for which Odoo has scheduled the removal of both endpoints, so run our RPC migration audit first. The return type mapping is part of the scoping in our migration service, and the series hub lists the other accounting changes in the same upgrade.

FAQ

Frequently asked questions

What is a tax return in Odoo 20?

A record generated from a return type for one period. It carries a deadline, a workflow of up to three steps (Reviewed, Submitted, Paid) and a list of checks that flag records to review, each with a free-text note. You find them under Accounting > Accounting > Tax Returns, grouped by period.

Can I create a return type for a Canadian GST/HST remittance or a US state filing?

Yes. Under Accounting > Configuration > Return Types you create a custom type with a periodicity, a deadline in days after the period, an optional report and the States workflow, then attach the checks you want. The localized master types shipped by Odoo hide the States field; your own types show it.

Do the return checks need AI credits?

No. Checks are rules that point to a set of records and count what they find; they run without the AI app. Only the Auditor and Audit Reviewer agents and the AI icon on reports go through Odoo's AI proxy and consume IAP credits.

Does the Odoo 20 audit working file replace an external auditor?

No. It gives your team and your accountant a shared checklist grouped by cycle, with statuses, notes and record counts, so the file that reaches the auditor is documented. The opinion, the sampling and the sign-off remain the auditor's work.

Is Canada affected by the new Odoo 20 localizations?

Not according to the feature guide, which names no Canadian change in this release. The new modules cover Türkiye, Ivory Coast, the Dominican Republic, Uruguay, Peru, Hong Kong, Norway, Guatemala, North Macedonia, Hungary, Romania, the Philippines and six Intrastat countries. For the United States, the named change is the Exempt and Non-Taxable columns of the US Tax Report for AvaTax users.

Where do I open the Interco Comparison report?

On the pre-release build it has no entry under Reporting. Open a yearly audit working file and click the check named Intercompany account reconciliation; the report shows the main company, the counterpart and the difference per account type, with drill-down to the journal items.

Closing several entities or client files every month?

We can map your current closing checklist onto Odoo 20 return types and check templates on a copy of your data, and show you the Tax Returns kanban with your own deadlines before you commit to the upgrade.

Book a free consultation