OdooWiki OCA HUB

Netherlands BTW Statement

l10n_nl_tax_statement folder_open OCA/l10n-netherlands open_in_new
Localization License: AGPL-3

This module provides you with the Tax Statement in the Dutch format.

The Tax Statement can be generated in two ways, according to the chosen Dutch accounting system:

  • Kasstelsel
  • Factuurstelsel

By default the Tax Statement is generated according to the Factuurstelsel system. It means that, when validating an invoice, the system uses the invoice date instead of accounting date to determine the date of the move line for tax lines. See

About the Kasstelsel system instead, more information can be found in:

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Create, compute, post and finalize Dutch VAT (BTW) statements directly in Odoo, with a PDF and an Excel export. Choose between invoice basis (Factuurstelsel) and cash basis (Kasstelsel) per company.

This module adds a Dutch VAT statement tool under Accounting ▸ Reporting ▸ NL BTW Statement (for accounting managers). A statement covers a date range and is filled with the standard Dutch BTW rubrieken (1a to 5f), showing turnover and VAT per line.

  • Press Update to recompute the statement from posted journal items whose tax tags match the Dutch BTW tags; lines 5a, 5c, 5d, 5e and 5f are calculated automatically and 5d/5e/5f can be edited manually.
  • Use the magnifier buttons on a line to open the underlying base lines or tax lines.
  • A "Past Undeclared Moves" tab lists earlier invoices/moves not yet declared; you can add them one by one or with "Add All Undeclared Invoices/Moves".
  • Workflow: Draft → Post → Finalize, with Reset to Draft. A statement can only be posted if all earlier statements are posted, and posted/final statements cannot be modified or deleted.
  • Print the NL Tax Statement (PDF) or export it to Excel.

In Settings you can enable the Netherlands Tax Invoice Basis (Factuurstelsel); when enabled, the invoice date is used instead of the accounting date, and the standard tax exigibility setting is hidden. Multi-company fiscal units are supported for Dutch child companies sharing the same currency.

Depends on

Menus it adds

menu_account_vat_statement_nl
Models and fields (7)
  • res.company · extends an existing modell10n_nl_tax_invoice_basis (NL Tax Invoice Basis)
  • account.move · extends an existing modell10n_nl_vat_statement_id, l10n_nl_vat_statement_include (Include in VAT Statement)
  • account.move.line · extends an existing modell10n_nl_vat_statement_id (Related Move Statement), l10n_nl_vat_statement_include
  • res.config.settings · extends an existing modell10n_nl_tax_invoice_basis (NL Tax Invoice Basis)
  • l10n.nl.vat.statement · new modelname (Tax Statement), state (Status), to_date, line_ids, btw_total (5g. Total (5c + 5d)), from_date, parent_id, company_id, currency_id, date_posted, date_update, move_line_ids (Entry Lines), format_btw_total (5g - Total), is_invoice_basis (NL Tax Invoice Basis), unreported_move_ids (Unreported Journal Entries), fiscal_unit_company_ids, multicompany_fiscal_unit, unreported_move_from_date, display_multicompany_fiscal_unit, display_button_add_all_undeclared_invoices
  • l10n.nl.vat.statement.line · new modelbtw (VAT), code, name, omzet (Turnover), is_group, is_total, format_btw, currency_id, is_readonly, format_omzet, statement_id
  • report.l10n_nl_tax_statement.report_tax_statement_xlsx · new model

Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 8 confirmed, 1 with no information of 9 versions.

Sources · Odoo 19.0

Confirmed on 2026-11-03 in branch 19.0 of OCA/l10n-netherlands.

terminal Installation and usage

OCA documentation · Odoo 19.0

This module makes use of the tax tags (eg.: 1a, 1b, 1c, 1d, 2a...) as prescribed by the Dutch tax laws.

If the default Odoo Dutch chart of accounts is installed (module l10n_nl) then these tags are automatically present in the database.

If a non-standard chart of accounts is installed, you have to manually create the tax tags and properly set them into the tax definition. The name of the tags must be formatted this way: "+1a (omzet)", "+1a (btw)", "-1a (omzet)", "-1a (btw)", "+2a (omzet)", "+2a (btw)", etc...

This module provides an accounting setting Invoice basis (Factuurstelsel) that is enabled by default. This option makes the invoice date leading for the tax declaration of a period, rather than the accounting date, and allows you to change the accounting date of incoming invoices to the period to which the costs apply and still create a legally valid Dutch tax declaration. Without this option, the entries on the tax statement are collected using only their accounting dates (what Odoo calls standard taxes).

This setting is not compatible with the Odoo Cash basis (Kasstelsel) setting which leads to the creation of tax journal lines at the moment that a payment is received, so when using Cash basis you need to disable the Invoice basis setting to create a valid Dutch tax declaration using this module. To disable the Invoice basis for a company, you need to:

  • Open your Company form and verify that Country is set to Netherlands.
  • Go to Invoicing -> Configuration -> Settings, enable/disable NL Tax Invoice Basis (Factuurstelsel) and Apply.

To create a statement you need to:

  • Verify that you have enough permits. You need to belong at least to the Billing Manager or the Accountant group.
  • Go to the menu: Invoicing -\> Reporting \> NL BTW Statement
  • Create a statement, providing a name and specifying start date and end date
  • Press the Update button to calculate the report: the report lines will be displayed in the tab Statement
  • Manually enter the BTW amounts of lines '5d', '5e', '5f' (in Edit mode, click on the amount of the line to be able to change it)
  • Press the Post button to set the status of the statement to Posted; the statements set to this state cannot be modified

To add past undeclared invoices/moves:

  • Open the tab Past Undeclared Moves, available when the statement is in status Draft.
  • Set an initial date (field From Date) from which the past undeclared moves will be displayed.
  • One by one, add the displayed undeclared moves, by clicking on the Add Move button present in each line.
  • Press the Update button in order to recompute the statement lines.

Extra info about the workflow:

  • If you need to recalculate or modify or delete a statement already set to Posted status you need first to set it back to Draft status: press the button Reset to Draft
  • Instead, if you send the statement to the Tax Authority, you may want to avoid that the statement is set back to Draft: to avoid this, press the button Final. If you then confirm, it will be not possible to modify this Statement or reset it back to draft anymore.

Printing a PDF report:

  • If you need to print the report in PDF, open a statement form and click: Print -\> NL Tax Statement

Exporting a XLS report:

  • If you need to export the report in XLSX, open a statement form and click: Print -\> NL Tax Statement XLS export

Multicompany fiscal unit:

  • According the Dutch Tax Authority, for all the companies belonging to a fiscal unit, it's possible to declare one single tax statement.
  • To create one tax statement for a fiscal unit, log in into the parent company and select the child companies in the statement (be sure the user belongs to the multicompany group).
  • The child companies must have the same Tax codes labels (Tax Tags) as the parent company, the same currency as the parent company and must be located in The Netherlands.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.