
Factur-X & ZUGFeRD Profiles
Decide which Factur-X or ZUGFeRD profile each customer's invoice PDF claims to be, and check the invoice really carries what it promises.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_facturx.
Factur-X & ZUGFeRD Profiles
What this is for
Odoo silently embeds a Factur-X file inside every invoice PDF. Which profile that file claims to be is not a detail — each profile is a different promise about what the document contains, and a receiver expecting one will reject another.
The five profiles
MINIMUM and BASIC WL carry no lines. They are accounting summaries. France and Germany do not accept them as an invoice for VAT purposes, which is usually discovered by the customer's accountant months later.
BASIC, EN 16931 and EXTENDED promise a quantity, a unit price and a tax category on every line. A file that promises them and does not carry them fails on parse.
EN 16931 is the safe default: it is the European semantic standard, and every receiver understands it.
Where the profile lives
Agreed per customer (their system, their expectation), defaulted per company on the company record, and overridable per invoice for the occasional exception.
What gets checked
no profile agreed with this customer — a warning, because the default may be perfectly fine;
MINIMUM used for a real invoice — a warning, with the VAT consequence spelled out;
a line-level profile chosen while the lines are thin — blocking, naming the line and what it is missing;
a tax line in a different currency from the invoice — blocking. Factur-X carries one tax currency, and when they differ the receiver's parser reads the wrong number.
Findings appear in the same pre-flight list as the European rules.
Known limits
The profile is recorded and checked here; producing the embedded file is Odoo's own job.
EXTENDED has more optional content than is checked. What is checked is what causes rejections.
Screens

