If your company invoices in Romania, tax compliance can no longer be handled with a PDF and a quarterly return. Romania has rolled out two technical obligations that run side by side: structured electronic invoicing (RO e-Factura) and the standardised accounting file SAF-T (D406 return). Both are submitted to the tax authority, ANAF, in specific formats and on specific deadlines.
Important: e-Factura and SAF-T are separate obligations. e-Factura runs invoice by invoice, almost in real time; SAF-T is a periodic dump of your entire accounting. A good Odoo module needs to cover both, not just one.
What RO e-Factura is and who it affects
RO e-Factura is Romania's national electronic invoicing system, run by ANAF. Every invoice is issued as a structured XML file (based on the European standard EN 16931) and transmitted to the public platform, which seals it and makes it available to the recipient. Since 2024 it has been mandatory for B2B transactions between parties established in Romania, and it has gradually extended to B2C. The PDF is no longer the valid invoice: the legal invoice is the structured file accepted by ANAF.
In practice, it affects any company doing business in Romania that issues invoices to Romanian customers: subsidiaries, distributors, manufacturers and marketplace sellers with a local entity. Submission has a short window from the moment of issuance, so it can't be left until month-end.
What SAF-T is (the D406 return)
SAF-T (Standard Audit File for Tax) is an OECD-standardised XML file containing the accounting detail: chart of accounts, journal entries, customers, suppliers, products, taxes and, where applicable, stock and assets. In Romania it is filed through the D406 return. The main obligation is recurring — usually monthly or quarterly depending on the taxpayer — with specific filings for stock and assets when ANAF requires them.
D406 doesn't forgive mapping errors: if your accounts, taxes or third parties aren't classified correctly, the file gets rejected or, worse, accepted with inconsistent data that triggers information requests months later.
How it's handled from Odoo
The idea is simple: your accounting already lives in Odoo, so both obligations should be generated from there without re-keying data into external portals. Our module does three concrete things:
- Converts each Odoo invoice into RO e-Factura structured XML and sends it to ANAF, pulling the status (accepted, rejected, errors) back onto the invoice itself.
- Builds the SAF-T / D406 file from the journal entries, third parties, taxes and products already recorded in Odoo, mapped to the Romanian chart of accounts.
- Validates the format before sending, so you catch missing mandatory fields (tax ID, tax codes, units) before the authority rejects them.
You can see the module's full scope and technical sheet here:
What to watch before going live
- Clean master data: third parties' tax IDs (CUI), tax codes and units of measure need to be filled in correctly — they're the number-one cause of rejection.
- ANAF credentials and certificate: platform access requires registration and a token, which needs renewing — keep an eye on its expiry.
- Deadlines: e-Factura has a short window from issuance and SAF-T is recurring — automate submission so backlogs don't build up.
- Traceability: keep ANAF's status and response linked to every invoice and every D406, so you can prove what was sent and when.
FAQs
Is electronic invoicing mandatory in Romania?
Yes. Since 2024, the RO e-Factura system has been mandatory for B2B transactions between parties established in Romania, and it has gradually extended to B2C. Invoices are sent to the ANAF platform in structured format.
What is SAF-T (D406)?
SAF-T is a standard XML file containing the accounting detail: customers, suppliers, journal entries and taxes. In Romania it is filed periodically with ANAF through the D406 return.
Can Odoo issue e-Factura and generate SAF-T?
Yes, with a module that converts Odoo invoices to the structured format and sends them to ANAF, and that builds the D406 file from the accounting data already recorded in Odoo.
What happens if I don't file on time?
Romania applies penalties for failing to send e-Factura through the official channel within the deadline, and for filing SAF-T late or with errors. That's why it's worth automating submission and validating the format before you send it.
Invoicing in Romania? Let's review your Odoo
We'll look at your master data, taxes and filing calendar to tell you what's missing so e-Factura and SAF-T come out clean on the first try. Book a call on Calendly or call us at +34 616 809 504.