Romania - D100 / 710 ANAF Declaration
by NextERP Romania https://github.com/NextERP-Romania/l10n-romania-enterprise$ 4699.60
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) • Inventory (stock) |
| Community Apps Dependencies | Show |
| Lines of code | 4635 |
| Technical Name |
l10n_ro_declaration_D100 |
| License | OPL-1 |
| Website | https://github.com/NextERP-Romania/l10n-romania-enterprise |
Romania - D100 / 710 ANAF Declaration

This module implements the generation of the D100 declaration (Declarația privind obligațiile de plată la bugetul de stat) and the D710 declaration (rectificativa acesteia) for Romanian ANAF. ANAF publishes a single combined nomenclator and identical XML structure for both — only the root element and namespace differ — so a single wizard model handles both forms.
D100 is the monthly / quarterly / annual declaration through which Romanian taxpayers report their payment obligations to the state budget — corporate income tax, micro-enterprise tax, dividend taxes, excise duties, withholding taxes, special industry taxes (gambling, mining, oil & gas, electricity producers), construction tax, the disability fund and many others.
The module:
- Defines the wizard l10n.ro.anaf.d100.v2 (versiunea 2 — XSD d100_24022022.xsd, in force from 2022-02-24); the same wizard also handles D710 v1 (XSD d710_20012025.xsd, in force from 2025-01-20).
- Loads a complete nomenclator of obligation codes (l10n.ro.anaf.d100.config) with cca. 107 entries: payment obligation code (cod_oblig), name, ANAF budget account (cod_bugetar), period type (monthly/quarterly/semi-annual/annual) and optional default account-code mapping for auto-computation from accounting.
- Computes the legal payment deadline (scadenta) per obligation:
- Monthly obligations → 25th of the following month.
- Quarterly obligations (codes 102, 103, 105) → end-of-quarter rolls to 25th of the next month.
- Computes the unique nr_evid record number per obligation (formatul ANAF: 10<cod:3>01<MM><YY><scadenta:6>0000<checksum:2>).
- Generates the XML file conformant to ANAF schema, validates it with the XSD, saves the result on the wizard for download.
The output XML has to be validated with DUKIntegrator and signed with the digital signature before being uploaded to the ANAF e-Guvernare portal.
Supported declarations
| Category | Examples (cod_oblig) | Notes |
|---|---|---|
| Corporate income tax | 102, 103, 105, 107, 108, 115, 131, 132 | Includes Pillar 2 / national additional tax |
| Specific turnover tax | 116, 117 | Oil & gas / credit institutions |
| Micro-enterprise tax | 121, 125, 127, 128 | Includes redirected difference + offshore oil |
| Dividend tax | 150, 161, 162, 604 | Legal entities + individuals |
| Excise duties | 211–247, 270 | Alcohol, tobacco, energy products, sugary drinks, electricity |
| Medicine clawback | 450, 455, 456 | FNUASS quarterly contributions |
| Gambling taxes | 504–553 | Authorization fees, exploitation tax, vice tax, video lottery |
| Non-resident withholding | 631–642, 690 | Dividends, royalties, interest, services |
| Other income taxes | 605, 606, 608, 620–629 | Interest, prizes, real estate transfer |
| Construction & special | 701, 702, 706, 707 | Includes new logistics tax (2026) |
| Special funds | 708, 709 | Energy transition fund, solidarity contribution |
| Resource taxes | 711–767 | Mining royalties, oil royalties, offshore wind |
| Net profit / state dividends | 780, 781 | Autonomous authorities, central public |
| Disability fund | 810 | Article 78 Law 448/2006 |
| Military pensions | 825 | Individual contribution |
Source
Generated based on the official ANAF schema reference document `structura_D100-D710_0126_260326.pdf <https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/d100_24022022.xsd>`__.
Table of contents
Legal context
D100 is the monthly / quarterly / annual declaration through which Romanian taxpayers report their payment obligations to the state budget (Declarația privind obligațiile de plată la bugetul de stat).
Filing obligation: OPANAF 587/2016 as amended. Schema: OPANAF 0126/26.03.2026 (structura_D100-D710_0126_260326.pdf). XSD: `d100_24022022.xsd <https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/d100_24022022.xsd>`__.
Filing periodicity per obligation
The same XML element <declaratie100> is used for monthly (L), quarterly (T), semi-annual (S) and annual (A) obligations. The taxpayer files separate D100 declarations per period — but each declaration can include lines for multiple obligations of the same period.
Common scenarios:
| Filing | Typical content |
|---|---|
| Monthly (by 25 of next month) | Withholding taxes (412, 604, 605, 608), excise duties (211–270), gambling fees (504–553), construction tax (701), disability fund (810), most non-resident withholdings (631–642) |
| Quarterly (by 25 of month after quarter end) | Corporate income tax advance payments (102, 103, 105, 107), micro-enterprise income tax (121), medicine clawback (450, 455, 456) |
| Annual (by 25 January next year) | Pillar 2 multinational top-up tax (131), national additional tax (132), mining royalties annual reconciliation (755, 756, 758) |
Relationship with other declarations
D100 is part of a family of ANAF declarations that share the same l10n.ro.declaration infrastructure:
- D100 — payment obligations to state budget (this module).
- D101 — corporate income tax annual return (separate module, not yet implemented).
- D112 — payroll declaration (salary withholdings, separate flow).
- D300 — VAT (l10n_ro_declaration_D300).
- D390 — intra-community VAT recap (l10n_ro_declaration_D390).
- D394 — domestic operations recap (l10n_ro_declaration_D394).
- D406 — SAF-T (l10n_ro_declaration_D406).
If your company is a micro-enterprise that files D100 with code 121, it does not also file D101.
Data model
l10n.ro.anaf.declaration ─┬── name = "d100"
│
l10n.ro.anaf.declaration.version
│ ─── name = "Versiunea 2"
│ date_from = 2022-02-24
│ model = l10n.ro.anaf.d100.v2
│
l10n.ro.anaf.d100.config ─┘── nomenclator (107 records loaded as data)
cod_oblig, cod_bugetar, period_type,
account_code_from / account_code_to,
sign
l10n.ro.anaf.d100 (TransientModel — wizard base)
└─ inherits l10n.ro.anaf.mixin
└─ extended by l10n.ro.anaf.d100.v2 (XML generation logic per version)
└─ generate_xmldict() → ordered fields
└─ build_file() → assembled XML string
└─ _compute_scadenta(cod_oblig) → due date
└─ _compute_nr_evid(cod_oblig, scadenta_short) → unique record number
└─ compute_from_config() → auto-fill obligation_line_ids from accounting
l10n.ro.anaf.d100.obligation (TransientModel — line under wizard)
├─ cod_oblig
├─ cod_bugetar
├─ amount_due / amount_deductible / amount_to_pay / amount_to_refund
└─ declaration_wizard_id (M2O parent)
Why account-range mapping is partial
The Romanian Chart of Accounts (PCG OMF 1802/2014) standardizes account names down to 4 digits (e.g. 4411 Impozit pe profit, 4418 Impozit microîntreprinderi, 4426 TVA deductibilă). Beyond that, analytical subdivision is at each company’s discretion.
For obligations with a clear standard PCG account (corporate income tax, microenterprise tax, dividend tax, disability fund), the module pre-maps a 6-digit range (e.g. 441100–441199). For industry-specific obligations (excise, gambling, mining, offshore wind, electricity producers, medicine clawback), the mapping is left empty intentionally — each taxpayer configures its own analytical accounts.
This avoids forcing a numbering convention on companies and keeps the standard mapping clean.
XSD schema reference
The output XML must validate against the official ANAF XSD: https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/d100_24022022.xsd
The schema defines:
- Required attributes on <declaratie100>: luna, an, cui, den, etc.
- Pattern constraints on nr_evid (23 digits with checksum).
- Allowed cod_oblig values (enumeration in the schema, must match nomenclator).
- Allowed cod_bugetar values per cod_oblig (often 5503 for state budget).
- Required scadenta format (DD.MM.YYYY).
ANAF updates the XSD periodically (hence the version system). When ANAF publishes a new version (e.g. d100_<DDMMYYYY>.xsd), a new sibling module should be added (e.g. l10n.ro.anaf.d100.v3) with the appropriate XML generation logic and date_from on the version record.
Configuration
Prerequisites
Check the configuration steps from l10n_ro_declaration module downloaded with this module — ANAF declaration setup, signature configuration, company VAT/CUI fields and bank account.
Obligation codes nomenclator
This module ships with all ~107 D100 obligation codes loaded as configuration records in l10n.ro.anaf.d100.config. Each record describes:
| Field | Description |
|---|---|
| cod_oblig | ANAF obligation code (e.g. 103, 121, 412, 810) |
| name | Tax / contribution label |
| cod_bugetar | ANAF budget code (5503 for general state budget; specific for special funds) |
| period_type | L=monthly, T=quarterly, S=semi-annual, A=annual |
| account_code_from / account_code_to | PCG RO account range used for auto-computation (optional) |
| sign | 1 for amounts owed (default), -1 for amounts to deduct/refund |
Access the nomenclator from the menu: Accounting → Configuration → Romania → D100 — Obligation Configuration.
Account code mapping — what is configured by default
Out-of-the-box, the module maps only the obligations that use standard PCG RO chart-of-accounts subaccounts that any Romanian company will have:
| PCG accounts | Category | Mapped obligation codes |
|---|---|---|
| 441100–441199 | Impozit pe profit | 102, 103, 105, 107, 108, 115 |
| 441800–441899 | Impozit microîntreprinderi | 121, 125, 127 |
| 446200–446299 | Impozit pe dividende | 150 (legal entities), 604 (individuals) |
| 446500–446599 | Fond handicap (art.78 Legea 448/2006) | 810 |
Total: 12 obligations pre-mapped out of ~107.
Account code mapping — what you must configure manually
The remaining ~95 obligations are industry-specific and must be configured by each taxpayer individually, because:
- The Romanian Chart of Accounts (OMF 1802/2014) does not standardize subaccounts below the 4-digit level for 446... (Alte impozite, taxe și vărsăminte asimilate). Each company defines its own analytical subdivision.
- The taxes themselves are sector-specific and not all companies will encounter them (e.g. excise duties, gambling, mining royalties, offshore wind fees, electricity producer additional tax, medicine clawback).
If your company is liable for one of these, follow this procedure:
- Create / identify the analytical account in your chart-of-accounts where you book the tax liability (typically a sub-account of 446 or 447). For example for excise duties on alcohol, you might use 4461.AA or 446100AA (depends on your numbering convention).
- Open the D100 obligation record (Configuration → D100 — Obligation Configuration), find the corresponding cod_oblig (e.g. 211 — Excise beer).
- Fill in Account Code From and Account Code To with the analytical account range (e.g. 446100–446199 if you use 6-digit codes).
- Save. From now on, compute_from_config on the wizard will auto-pick balances from those accounts for that obligation.
If you don’t fill the account range, the obligation still works — you just need to enter the amounts manually in the wizard’s obligation lines table.
Industry quick-reference
| Industry | Obligations to configure | Typical PCG account |
|---|---|---|
| Banks / oil & gas | 116, 117 | 4413xx (impozit specific) |
| Excise warehouses | 211–247, 270 | 4461xx (accize) |
| Pharma / medicine vendors | 450, 455, 456 | 4467xx (clawback FNUASS) |
| Gambling operators | 504–553 | analytical 446 or 447 |
| Non-resident withholding | 631–642, 690 | 4463xx (impozit nerez.) |
| Construction | 701, 702 | analytical 446... |
| Mining / oil royalties | 750, 754–767 | analytical 446 or 447 |
| Offshore wind | 714–719 | analytical 446... |
| Electricity producers | 161, 708 | 446xx / 447xx |
| Public sector / autonomous | 780, 781 | 446xxx |
D710 (declarație rectificativă)
D710 corrects a previously submitted D100. ANAF publishes a single combined nomenclator and identical XML structure for both — only the root element and namespace differ:
| Declaration | Root element | Namespace | XSD |
|---|---|---|---|
| D100 | <declaratie100> | mfp:anaf:dgti:d100:declaratie:v2 | D100.xsd |
| D710 | <declaratie710> | mfp:anaf:dgti:d710:declaratie:v1 | D710.xsd |
Because the structure is shared, this module ships a single wizard model that emits both forms. The dispatch happens in _DECL_FORMAT in models/v2/d100_20220224.py based on declaration_id.name. No separate obligation nomenclator is required — compute_from_config searches across all versions that target the same wizard model, so the D100 nomenclator automatically applies to D710 as well.
Open D710 from Accounting → Reporting → Romania → D710 Declaration.
Running the declaration
After configuration, generate the declaration as described in USAGE.md.
Usage
To use this module, you need to be an account adviser and go to:
Accounting → Reporting → Romania → D100 Declaration (or D710 Declaration for the rectifying version of a previously submitted D100).
The wizard form is identical for both — only the menu entry preselects the declaration type, which controls the XML root element and namespace emitted.
Steps
- Open the wizard and complete the headers:
- Declaration / Version — D100 / Versiunea 2 (default).
- Date From / Date To — defaults to the current month / quarter; adjust if filing for a past period.
- Signature — the digital signature record configured for your company.
- Bank Account — the company bank account from which obligations are paid.
- Compute obligations from accounting — click the „Compute from Accounting” button (icon 🧮). The wizard reads the D100 configuration nomenclator for the selected version and auto-fills the obligations table with amounts from the accounts mapped in account_code_from / account_code_to. The wizard re-opens automatically with the populated lines so you can review before generating.
- Edit the obligations table if needed:
- Add lines for industry-specific obligations not pre-mapped (excise, gambling, mining royalties, etc.) — see CONFIGURE.md.
- Adjust any amount manually (Amount Due, Amount Deductible, Amount to Pay, Amount to Refund).
- Remove lines you don’t need.
- Optional fields for special situations:
- Legal Basis (``temei``) — if filing under art.105 alin.(6) of Codul de Procedură Fiscală.
- Successor (``succesor_id``) — if the declaration is filed by a successor entity (art.90 alin.4) — populates d_succ and cifS in the XML.
- Corrected after Reserve Cancellation (``d_anulare``) — set Yes for the specific case in art.42 alin.4^1 Cod Fiscal.
- Dissolution Without Liquidation (``d_dizolv``) — set Yes if filed at the point of dissolution.
- Generate the XML — click „Get Report”. The wizard:
- Produces an XML file according to the d100_24022022.xsd schema.
- Validates against the XSD.
- Saves the result on the file_save field with a download link.
- Validate with DUKIntegrator — run ANAF’s local validator on the generated XML before signing.
- Sign with the digital signature — use ANAF’s signing tool or your installed token (Sectigo, certSIGN, etc.).
- Upload to ANAF at https://www.anaf.ro/anaf/internet/ANAF/servicii_online/inreg_inreg_pers_juridice under „Depunere declarații → D100”.
Key XML fields generated
The module generates a <declaratie100> (or <declaratie710> when filing a rectification) XML element with attributes:
- luna, an — period
- cui, den, adresa, telefon, mail — taxpayer identification
- nume_declar, prenume_declar, functie_declar — declarer info
- d_anulare, temei, d_succ, cifS, d_dizolv — optional flags
- totalPlata_A — total amount due (sum of all obligation amounts)
For each obligation line, an <obligatie> sub-element is added with:
- cod_oblig — obligation code
- cod_bugetar — ANAF budget code
- scadenta — payment deadline (format DD.MM.YYYY)
- nr_evid — unique 23-digit record number with checksum
- suma_dat / suma_ded / suma_plata / suma_rest — amounts (omitted if zero)
Quick reference: deadlines
| Period type | Default scadenta | Special case |
|---|---|---|
| L — monthly | 25th of next month | — |
| T — quarterly | 25th of next month | At quarter-end (Mar, Jun, Sep, Dec): rolls one month forward |
| S — semi-annual | 25th of next month | — |
| A — annual | 25th of next month | — |
December always rolls over to January of the next year.
Bug Tracker
Bugs are tracked on NextERP Issues. In case of trouble, please check there if your issue has already been reported.
Do not contact contributors directly about support or help with technical issues.
Credits
Authors
- NextERP Romania
Contributors
- NextERP Romania:
- Fekete Mihai <feketemihai@nexterp.ro>
Maintainers
Current maintainer:

This module is part of the NextERP-Romania/l10n-romania-enterprise project on GitHub.
You are welcome to contribute.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module