Skip to content

Conformity

Everything on this page can be re-run by you. We do not ask you to trust our own validator: the files below were generated by the live API and then checked with an independent, open-source reference validator, and we publish the raw reports.

Last run: 2 September 2026, against https://facturx.orvel.dev, API version 0.1.2.

What was checked

Layer Tool Rule set
PDF/A-3 container veraPDF (inside Mustangproject) ISO 19005-3, level B, 10 210 assertions per file
XML structure Mustangproject 2.26.0 Factur-X 1.0.07 XSD (CII D16B), UBL 2.1 XSD
EN 16931 business rules Mustangproject 2.26.0 CEN schematron 1.3.16 (BR-*, BR-CO-*, BR-S/E/AE/K/G-*)
Factur-X profile rules Mustangproject 2.26.0 FX-SCH-* for BASIC WL, EN 16931, EXTENDED
French rules Mustangproject 2.26.0 BR-FR "Flux 2" schematron v1.3.0 (AFNOR XP Z12-012, 16 Feb 2026)

Mustangproject is the open-source validator behind the ZUGFeRD community's online validation service and one of the tools recommended in the FNFE-MPE resources. It is unrelated to this API.

Corpus

Three invoices from our test suite, each covering a different VAT situation, in every profile and syntax the API produces:

Fixture Situation Profiles
invoice_fr_standard French B2B, 20 % and 10 % VAT, delivery date, purchase order EN 16931, EXTENDED-CTC-FR, BASIC WL
invoice_fr_franchise Micro-entrepreneur, VAT not applicable (art. 293 B CGI, category E) EN 16931, EXTENDED-CTC-FR
invoice_eu_reverse_charge Intra-EU services, reverse charge (category AE) EN 16931, EXTENDED-CTC-FR

Syntaxes: Factur-X PDF/A-3 (CII embedded), CII XML, UBL 2.1 XML (EN 16931 only). 17 files in total.

Results

Profile / syntax Files PDF/A-3 XSD EN 16931 BR-FR Factur-X profile
EN 16931, Factur-X PDF 3 pass pass pass pass pass
EN 16931, CII XML 3 n/a pass pass pass pass
EN 16931, UBL XML 3 n/a pass pass n/a n/a
BASIC WL, Factur-X PDF and CII 2 pass pass pass pass pass
EXTENDED-CTC-FR, Factur-X PDF and CII 6 pass pass pass pass see note 1

Zero business-rule errors across the corpus. The two remarks the validator raises are explained below, with references so you can check them yourself.

Note 1: FX-SCH-A-000636 on EXTENDED-CTC-FR (validator code list, not a document defect)

Mustang reports Value of ram:ID is not allowed on the specification identifier (BT-24) of every EXTENDED-CTC-FR file. The value we emit is urn:cen.eu:en16931:2017#conformant#urn.cpro.gouv.fr:1p0:extended-ctc-fr, which is the identifier mandated by the French standard XP Z12-012 (section on BT-24, published by the DGFiP in the external B2B specifications). Mustang 2.26 validates the French BR-FR rules but its Factur-X EXTENDED code list still only contains the generic urn:factur-x.eu:1p0:extended and urn:zugferd.de:2p0:extended values, so the French URN is flagged as unknown. Every other rule on those files, including the 117 BR-FR rules fired on the reverse-charge case, passes. We keep the official URN: a Plateforme Agréée expects it.

Note 2: PEPPOL-EN16931-R008 warning (empty ApplicableHeaderTradeDelivery)

On invoices without delivery information, the CII element ram:ApplicableHeaderTradeDelivery is emitted empty. The CII D16B schema makes it mandatory (cardinality 1..1 in SupplyChainTradeTransactionType, see the Factur-X XSD), so it cannot be omitted; the PEPPOL rule "document must not contain empty elements" was written for UBL and is reported by Mustang as a warning, not an error. The invoice_fr_standard case carries a delivery date and does not trigger it.

The Mustang run also prints German XRechnung notices (BR-DE-*); they only apply to invoices addressed to German public entities and are informational.

Files

Reproduce it

Two ways.

Online, no install. Download any PDF above and drop it into the FNFE-MPE validator (the French association's own service, free account) or the ZUGFeRD community validator (runs Mustang). Two independent engines, same files.

Locally, against the live API. Requires Java 17+ and any API key (the Free plan is enough; the run uses 17 documents):

git clone https://github.com/LeBorgneAntoine/Brainstorm
cd Brainstorm/projects/facturx-api
export FACTURX_API_KEY=fx....
uv run python scripts/conformity.py --out /tmp/conformity

The script downloads Mustang-CLI 2.26.0 (SHA-256 pinned), generates the 17 files through POST /v1/invoices/generate, validates each one, and writes summary.md, summary.json and the raw reports. Point --base at another vendor's URL to compare.

What this does not prove

  • Acceptance by a specific Plateforme Agréée: each PA can apply additional controls (directory lookups, lifecycle statuses, routing). The AIFE / PA sandboxes are not open to third parties at the time of writing; this section will be updated when a PA test result is available.
  • Correctness of your data: the engine validates structure and business rules, not whether your amounts or VAT treatment are right for your situation.
  • The visual PDF layer: PDF/A-3 conformity is checked; the readability of the human page is a matter of taste, see the samples.