| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) • Inventory (stock) |
| Community Apps Dependencies | Show |
| Lines of code | 5875 |
| Technical Name |
l10n_ro_declaration_D101 |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) • Inventory (stock) |
| Community Apps Dependencies | Show |
| Lines of code | 5875 |
| Technical Name |
l10n_ro_declaration_D101 |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
Romania - D101 ANAF Declaration
Romania - D101 ANAF Declaration
Overview
This module generates the D101 (Declarația privind impozitul pe profit) for Romanian ANAF. D101 is the annual corporate income tax return through which Romanian legal entities and foreign companies with a permanent establishment in Romania report and reconcile their corporate income tax liability for the previous fiscal year. It complements the quarterly advance payments reported via D100 — D101 settles the actual tax due on the audited financial result.
The wizard (l10n.ro.anaf.d101.v10) supports the four obligation codes
recognized by ANAF: 103 (most for-profit companies), 102 (banks and
credit institutions with anticipated advance payment), 104 (agricultural
cooperatives, NGOs, religious cults) and 105 (foreign legal entities
with a Romanian PE). It computes the payment deadline based on the fiscal
year end, the obligation code and special situations (dissolution,
regularization, fiscal group), and generates the unique 23-digit nr_evid
record number with checksum.
The module ships a complete nomenclator of the 100+ profit tax positions
(P1…P53 and sub-fields P81…P84, P111…P113, P421…P4231,
P38a…P43a, etc.), each mapped to either a PCG RO account range or a
formula referencing other positions. Generated XML matches the
d101_20250214.xsd schema (OPANAF 206/11.02.2025) and is validated against
a locally bundled, corrected copy of that XSD.
Built & supported by NextERP Romania
Romanian Odoo specialists, here for the long run — from implementation to localization and day-to-day production support.
What we do
Odoo Solutions
From quick-start rollouts to multi-company deployments and custom modules built for your processes.
Romanian Localization
SAF-T (D406), e-Factura, e-Transport, D300 / D390 / D394, ANAF integration, full chart of accounts and fiscal positions.
Our Services
Implementation, customization, migration, integration, support and consultancy — Romanian-speaking, SLA-backed.
Features
- Annual corporate income tax return — wizard
l10n.ro.anaf.d101.v10generates<declaratie101>under namespacemfp:anaf:dgti:d101:declaratie:v3, validated against the locally bundledd101_20250214.xsd(OPANAF 206/11.02.2025). - Four obligation codes covered —
102(banks with advance payments),103(most companies),104(NGOs, agricultural cooperatives, religious cults),105(foreign legal entities with a Romanian PE). Fiscal year start, end and the obligation code drive the computedscadenta. - Profit tax position nomenclator — about 100 records in
l10n.ro.anaf.d101.configcoveringP1…P53plus sub-fields (P81,P84,P111–P113,P421–P4231,P38a–P43a,P481,P482). - Two-pass computation —
compute_from_configfirst sums the trial balance ofaccount_code_from–account_code_tofor each non-computed field, then evaluates the formulae on derived positions (e.g.P26 = P3 + P4 - P5). - Default PCG RO mapping — total revenues from class
7%, total expenses from class6%, gross profit/loss as a derived field; ready to use for the standard Romanian chart of accounts. - Sector-specific adjustments (
P38a,P39a,P40a,P43a) are shipped without an account range — companies in banking, oil and gas, mining or electricity production fill those manually. - Special filing flags — initial / rectificative / rectificative with
notification (
d_rec), reglementare (d_reglem), dissolution (Data_L,Data_B), successor (d_succ,cifs), fiscal group (d_grup), micro-enterprise switch year (trim_micro,primul_an_modif,ultimul_an_modif). - 23-digit
nr_evidgenerated in ANAF format11<cod:3>01<LLAA><scadenta:6><dissolution:1>000<checksum:2>. - PDF preview —
d101_v10_reportQWeb template renders the populated wizard so the accountant can sign off internally before generating XML. - Locally corrected XSD — the upstream
d101_20250214.xsdpublished by ANAF has two known syntax errors that preventlxmlfrom parsing it; the module ships a fixed copy as a binary attachment used for the pre-download validation step.
Configuration
1. Prerequisites
Complete the setup described in the l10n_ro_declaration base module shipped with this one:
- Romanian VAT/CUI on the company.
- The CAEN code on the company record (required in the D101 XML
caenattribute). - At least one ANAF signature under Accounting → Configuration → Romania → ANAF Signatures.
- The company bank account.
- The company opening date — used as the lower bound when reading the trial balance for the fiscal year.
2. Review the profit tax positions nomenclator
Open Accounting → Configuration → Romania → D101 — Profit Tax Configuration. About 100 records cover every position in the declaration:
| Field | Description |
|---|---|
version_id |
The D101 version (anaf_D101_v10) |
field_name |
XML attribute name on <declaratie101> (P1, P38, P421, …) |
name |
Human-readable label |
account_code_from / account_code_to |
PCG RO account range read from the trial balance |
formula |
For derived fields, formula referencing other P-positions (e.g. P3 + P4 - P5) |
computed |
True if the value is derived via formula; False if mapped from accounts |
sequence |
Position order |
3. Account-based vs formula-based fields
Two kinds of positions are computed during compute_from_config:
- Account-mapped fields (
computed = False) — the wizard reads the trial balance for the configured account range over the wizard period. Examples:P1(total revenues, mapped to all7%accounts),P2(total expenses, mapped to6%). - Formula-based fields (
computed = True) — evaluated after the first pass against previously computed P-values. Examples:P3(gross profit),P26(taxable profit),P38(corporate income tax due),P50(final tax liability).
The total payable (totalPlata_A) is computed at generation time as the
sum of absolute values of the main P1…P53 positions (not sub-fields).
4. Sector-specific adjustments
Industry-specific positions ship without an account range because they depend on each company's analytical accounts:
P38a,P40a— electricity producers / oil and gas.P39a,P43a— banking, mining, additional sector levies.P481,P482— additional adjustments.
If your company is liable, either configure the analytical range on the relevant config record or override the value directly on the wizard before generating the XML.
5. Run the declaration
After configuration, generate the declaration as described in USAGE.md.
How it works
Open Accounting → Reports → Romania → D101.

Steps
-
Header fields
- Declaration / Version — defaults to
D101 / Versiunea 10. - Date From / Date To — the full fiscal year (typically
01.01.YYYY–31.12.YYYY). - Signature — the ANAF signature record for the declarant.
- Bank Account — the company bank account.
- Cod Obligație —
103(most companies),102(banks with advance payment),104(NGO / agricultural cooperatives),105(foreign legal entities with a PE in Romania).
- Declaration / Version — defaults to
-
Special filing situations — toggle only if applicable:
- Tip Declarație (
d_rec) — initial / rectificative / rectificative with notification. - Reglementare (
d_reglem) — Yes if filing under regularizare (deadline +3 months). - Dissolution (
Data_L,Data_B) — set the liquidation / dissolution date when filing for an entity in dissolution. - Succesor (
succesor_id) — populatesd_succ=1andcifs=<CUI>when filing on behalf of a successor entity (art.90 alin.4 Codul de Procedură Fiscală). - Grup Fiscal (
d_grup) — Yes when filing as part of a fiscal group consolidation. - Alte situații (
d_alte) — Yes for art.105 alin.(6) cases.
- Tip Declarație (
-
Compute from accounting — click Compute from Accounting. The wizard:
- Reads the trial balance for every account-mapped P-field over the wizard period.
- Evaluates formula-based fields (
P3,P5,P26,P38,P50, …).
-
Review and adjust the computed positions — manually correct any amount that needs sector-specific adjustments not covered by the automatic mappings (
P38a,P40a,P481,P482, …). -
Get Report — generates the XML, validates it against the bundled
d101_20250214.xsdand attaches the file to the wizard for download. -
PDF preview — print the
d101_v10_reportQWeb template from the wizard for internal review and archiving. -
Validate with DUKIntegrator, sign with the digital signature (Sectigo / certSIGN / other token), then upload to ANAF at the Depunere declarații portal under D101.
Generated XML — key fields
- Root
<declaratie101>with header attributesluna_i,an_i,luna,an,data_i,data_s,cod_obligatie,cod_bug(5503),scadenta,nr_evid,totalPlata_A,cif,caen,denumire,adresa,nume_declar,prenume_declar,functie_declar. - Profit tax positions
P1–P53plus sub-positionsP81–P84,P91,P111–P113,P121–P122,P151,P171–P173,P411–P412,P421–P4231,P431,P432and sector-specificP38a,P39a,P40a,P43a,P481,P482. - Optional
temei,d_recN,d_grup,data_m,data_l,data_b,trim_micro,primul_an_modif,ultimul_an_modif, plus fiscal representative fields (cifR,denR,adrR,telR,faxR,emailR).
Deadlines (scadenta)
cod_obligatie |
Default deadline | With d_reglem = 1 |
|---|---|---|
103 (most companies) |
25.06 next year | +3 months |
104 (NGO / agricultural) |
25.02 next year | n/a |
105 (foreign PE) |
25.06 next year | +3 months |
For dissolution scenarios (Data_L or Data_B set), the deadline is the
25th of the month following the dissolution event.
Versions
19.0.1.0.0 (2026-05-24)
- Changelog tracking starts at this release.
Discover the NextERP suite
Other modules from the same publisher, built to work together.
NextERP Romania
Odoo implementation, customization, Romanian localization and long-term support since 2018.
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