ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.
Factur-X — Franco-German hybrid PDF + CII XML invoice

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:

  1. The traditional PDF stream: headers, invoice lines, totals, legal mentions, visual signature. This is what the human recipient sees.
  2. The embedded XML file named factur-x.xml (or zugferd-invoice.xml in 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.

ProfileCoverageTypical use
MINIMUMMinimum data (issuer, recipient, total incl. VAT, invoice number and date)Chorus Pro level — receive side on the French administration.
BASIC WLFull header and footer, no lines (Without Lines)Flat-fee or simple B2B customer invoice.
BASICBASIC WL + line-level detailFull SME-to-SME invoice.
EN 16931All fields defined by the European norm (formerly called the COMFORT profile)Reference profile for PEPPOL interoperability.
EXTENDEDEN 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 factur-x.xml
<?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 GuidelineSpecifiedDocumentContextParameter names the profile — here urn:factur-x.eu:1p0:en16931 = EN 16931 profile.
  • TypeCode 380 = commercial invoice (UN/CEFACT codelist 1001); 381 would be a credit note.
  • Company identifiers use the pair schemeID + value: 0002 = French SIRET. On the German side, 0204 is used for the Leitweg-ID, or USt-IdNr (intracom VAT number).
  • All amounts sit inside the SpecifiedTradeSettlementHeaderMonetarySummation block, 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:

DateObligation
1 September 2026Mandatory receipt of B2B electronic invoices for all French companies, plus mandatory issuance for large companies and ETIs.
1 September 2027Mandatory 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