Factur-X / ZUGFeRD
The Franco-German hybrid invoice: a human-readable PDF/A-3 carrying, as an attachment, a CII XML compliant with the European Norm EN 16931. One format, two names, a single file across France and Germany.
Why a hybrid invoice?
The e-invoicing debate has long been polarised between two camps: PDF-only partisans (human-readable but opaque to machines), and XML-only partisans (perfect for ERPs, unreadable without a stylesheet). Factur-X / ZUGFeRD resolves the tension by stacking both into a single file: a PDF/A-3 whose visual rendering is the invoice, plus an embedded XML attachment compliant with EN 16931.
This dual approach lets a small business:
- keep printing or archiving a readable invoice;
- send the same file to a customer who automates accounting capture;
- meet the French B2B e-invoicing obligation without rolling out a heavy EDI platform, since the PDF/A-3 remains the familiar container.
The hybrid character is deliberately reversible: a reader that only knows PDF renders the invoice as usual; a modern accounting system consumes the attached XML and ignores the visual rendering.
Architecture of a file
Technically, Factur-X / ZUGFeRD is a PDF/A-3 — a variant of PDF/A (ISO 19005-3) that allows attachments. A Factur-X invoice is therefore the superposition of two objects:
- The traditional PDF stream: headers, invoice lines, totals, legal mentions, visual signature. This is what the human recipient sees.
-
The embedded XML file named
factur-x.xml(orzugferd-invoice.xmlin early ZUGFeRD versions). This XML follows the UN/CEFACT CII (Cross Industry Invoice) syntax and carries exactly the same information as the visual PDF.
A fifth context entity in the PDF's XMP metadata announces the embedded XML, its profile and its filename: this is how the recipient detects the hybrid character without opening the PDF.
Factur-X / ZUGFeRD profiles
The standard publishes five profiles, from the simplest to the most complete. They all share the same PDF/A-3 envelope and the same CII syntax: they differ by the number of mandatory business fields.
| Profile | Coverage | Typical use |
|---|---|---|
| MINIMUM | Minimum data (issuer, recipient, total incl. VAT, invoice number and date) | Chorus Pro level — receive side on the French administration. |
| BASIC WL | Full header and footer, no lines (Without Lines) | Flat-fee or simple B2B customer invoice. |
| BASIC | BASIC WL + line-level detail | Full SME-to-SME invoice. |
| EN 16931 | All fields defined by the European norm (formerly called the COMFORT profile) | Reference profile for PEPPOL interoperability. |
| EXTENDED | EN 16931 + sector extensions (logistics, transport, complex B2B transactions) | Industry, automotive, transport — still evolving. |
For Chorus Pro, the minimum acceptable profile is MINIMUM. For French B2B post-2026, BASIC or EN 16931 are the most relevant. The XRECHNUNG profile sometimes cited on the German side is, in practice, an EN 16931 + German rules alignment — it can be carried either inside a Factur-X EN 16931 file, or as a pure UBL XRechnung document (no PDF).
Anatomy of a CII XML
The embedded XML follows the UN/CEFACT Cross Industry Invoice
(CII) syntax. Its organisation differs from UBL but covers the same semantics. The
root is <rsm:CrossIndustryInvoice> with four main blocks: exchange
context, document, trade transaction, and lines.
<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
<rsm:ExchangedDocumentContext>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:en16931</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>
<rsm:ExchangedDocument>
<ram:ID>FX-2026-04127</ram:ID>
<ram:TypeCode>380</ram:TypeCode>
<ram:IssueDateTime>
<udt:DateTimeString format="102">20260514</udt:DateTimeString>
</ram:IssueDateTime>
</rsm:ExchangedDocument>
<rsm:SupplyChainTradeTransaction>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>1</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Consulting — EDI process workshop</ram:Name>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>900.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="HUR">2</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>1800.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:ApplicableHeaderTradeAgreement>
<ram:SellerTradeParty>
<ram:Name>Atelier Numérique SARL</ram:Name>
<ram:SpecifiedLegalOrganization>
<ram:ID schemeID="0002">80214579500024</ram:ID>
</ram:SpecifiedLegalOrganization>
</ram:SellerTradeParty>
<ram:BuyerTradeParty>
<ram:Name>Coopérative Solaire SCIC</ram:Name>
<ram:SpecifiedLegalOrganization>
<ram:ID schemeID="0002">88410230400015</ram:ID>
</ram:SpecifiedLegalOrganization>
</ram:BuyerTradeParty>
</ram:ApplicableHeaderTradeAgreement>
<ram:ApplicableHeaderTradeSettlement>
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:TaxBasisTotalAmount>1800.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">360.00</ram:TaxTotalAmount>
<ram:GrandTotalAmount>2160.00</ram:GrandTotalAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
</rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice> Useful reading anchors:
-
The
GuidelineSpecifiedDocumentContextParameternames the profile — hereurn:factur-x.eu:1p0:en16931= EN 16931 profile. -
TypeCode 380= commercial invoice (UN/CEFACT codelist 1001);381would be a credit note. -
Company identifiers use the pair
schemeID+ value:0002= French SIRET. On the German side,0204is used for the Leitweg-ID, or USt-IdNr (intracom VAT number). -
All amounts sit inside the
SpecifiedTradeSettlementHeaderMonetarySummationblock, which computes the net total, VAT total and grand total according to the EN 16931 BR-CO-X business rules.
French 2026-2027 reform
France is rolling out a major B2B e-invoicing reform, following the Chorus Pro obligation already in force for B2G. The official schedule published by the DGFiP over 2025-2026 plans:
| Date | Obligation |
|---|---|
| 1 September 2026 | Mandatory receipt of B2B electronic invoices for all French companies, plus mandatory issuance for large companies and ETIs. |
| 1 September 2027 | Mandatory issuance extended to SMEs and micro-enterprises. |
The schedule may slip: the version in force on 14 May 2026 must be cross-checked with impots.gouv.fr and the most recent DGFiP communications. Accepted formats on the Portail Public de Facturation (PPF) will be principally: Factur-X (CII embedded in PDF/A-3), UBL Invoice, and pure CII.
XRechnung and Leitweg-ID in Germany
On the German side, B2G e-invoicing has been mandatory since 2020 (E-RechV law). Since 1 January 2025, every German company must also be able to receive a B2B electronic invoice; issuance becomes progressive over 2026-2028 by company size.
Two formats coexist:
- XRechnung — pure XML (UBL or CII) compliant with EN 16931 plus
German rules (
BR-DE-XX). Mandatory for federal public procurement and acceptable in B2B. - ZUGFeRD EN 16931 or XRECHNUNG profile — hybrid PDF/A-3 with a CII XML compatible with XRechnung. The most widely deployed solution for SMEs, as it preserves a visual rendering.
A German specificity: the Leitweg-ID, which routes the invoice to
the destination public authority on the ZRE / OZG-RE portal. It travels in the CII
BuyerReference field, or its UBL equivalent BuyerReference.
Tools
- Factur-X / ZUGFeRD Validator — planned for ediverse v1.2,
validates PDF/A-3 + CII XML against the official Factur-X profiles. Coming at
/tools/facturx-validator/. - FNFE-MPE tools — the French federation publishes an open-source Java validation library, plus an XMP / embedded XML viewer to verify the conformance of a produced file.
- Mustangproject open-source validator — German project (mustangproject.org) that can read, write and validate Factur-X / ZUGFeRD at the MINIMUM, BASIC WL, BASIC, EN 16931 and EXTENDED profiles.
Further reading
- FNFE-MPE — Factur-X — French official specification, profiles, examples.
- FeRD — ZUGFeRD — German official specification, versions 2.4 (in force 15 January 2026) and 2.5 (announced 20 May 2026).
- impots.gouv.fr — Facturation électronique — official roadmap of the French B2B reform.
- UBL / PEPPOL on ediverse — open alternative to the hybrid format, dominant in Belgium and Northern Europe.
- Standards landscape — place Factur-X in the global e-invoicing ecosystem.