Ifriqa Validator

Validate Factur-X / CII e-invoices before you send them

Check the embedded UN/CEFACT CII XML of your Factur-X (and ZUGFeRD) invoices against EN 16931 and the Factur-X profiles — before the e-invoicing mandate rejects them.

Drag and drop your XML file here

or click to browse

XML only · 1 MB max · 20 transactions

Guided demo samples

Use these only to preview the diagnostics experience. Your own XML remains the main workflow.

Prefer downloads? valid XML or invalid XML

Files are processed in memory only — nothing is stored or transmitted to third parties.

EN 16931 semantic model

Official Factur-X profiles

Readable diagnostics

No account required

Not just XML validation

A valid XSD is not a valid invoice.

e-Invoicing platforms reject files for EN 16931 business-rule, profile and VAT-consistency reasons that XSD never checks. Ifriqa combines schema checks, EN 16931 rules, profile overlays and readable reports.

LayerWhat it catches
XSD / CII structureXML structure, required elements, data types
EN 16931 rulesBR / BR-CO business rules, totals and VAT consistency
Factur-X profilesMINIMUM / BASIC WL / BASIC / EN 16931 / EXTENDED constraints
Explanation layerHuman-readable diagnostics and machine-readable JSON

Supported profiles

Factur-X MINIMUMFactur-X BASIC WLFactur-X BASICFactur-X EN 16931Factur-X EXTENDED

Mandate-ready validation

Validate the CII XML embedded in your Factur-X / ZUGFeRD PDFs against EN 16931 and each Factur-X profile before the French (2026-2027) and German B2B e-invoicing mandates.

ZUGFeRD 2.x is technically aligned with Factur-X and validated the same way.

Human-readable diagnostics

ErrorExplanation
Line totals mismatchSum of invoice lines does not match the document total (BR-CO-10).
VAT breakdown mismatchDeclared VAT total differs from the computed VAT per category (BR-CO-14).
Wrong CustomizationID / profileThe Factur-X profile URN does not match the actual content level.

Guides & Reference

Technical Reference

Document structure

23 fields · 21 rules · 3 tables
▸
invoice[1..1]//*[local-name()='CrossIndustryInvoice']
◦invoice.profileIdFactur-X Profile ID
IDrequired
◦invoice.idInvoice Number
IDrequired
◦invoice.typeCodeDocument Type Code
CODErequired
◦invoice.issueDateIssue Date
ISO_DATE_BASICrequired
◦invoice.currencyCodeInvoice Currency Code
CURRENCY_CODE
▸
seller[1..1]//*[local-name()='SellerTradeParty']
◦seller.nameSeller Name
TEXT
▸
buyer[1..1]//*[local-name()='BuyerTradeParty']
◦buyer.nameBuyer Name
TEXT
▸
totals[1..1]//*[local-name()='SpecifiedTradeSettlementHeaderMonetarySummation']
◦totals.lineTotalSum of Line Net Amounts
AMOUNT
◦totals.taxBasisAmountTax Basis Total Amount (excl. VAT)
AMOUNT
◦totals.taxAmountTax Total Amount
AMOUNT
◦totals.grandTotalAmountGrand Total Amount (incl. VAT)
AMOUNT
◦totals.duePayableAmountDue Payable Amount
AMOUNT
▸
line[0..unbounded]//*[local-name()='IncludedSupplyChainTradeLineItem']
◦line.idLine ID
ID
◦line.productNameProduct Name
TEXT
◦line.billedQtyBilled Quantity
QUANTITY
◦line.unitPriceNet Unit Price
AMOUNT
◦line.lineTotalLine Total Amount
AMOUNT
▸
vat[0..unbounded]//*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='ApplicableTradeTax']
◦vat.categoryCodeVAT Category Code
CODE
◦vat.ratePercentVAT Rate (%)
PERCENT
◦vat.basisAmountVAT Basis Amount
AMOUNT
◦vat.calculatedAmountVAT Calculated Amount
AMOUNT
▸
payment[0..unbounded]//*[local-name()='SpecifiedTradePaymentTerms']
◦payment.dueDatePayment Due Date
ISO_DATE_BASIC
▸
delivery[0..1]//*[local-name()='ApplicableHeaderTradeDelivery']
◦delivery.dateDelivery Date
ISO_DATE_BASIC

Fields

23 defined
IdentifierLabelTypeRequired
invoice.profileIdFactur-X Profile IDID✓
invoice.idInvoice NumberID✓
invoice.typeCodeDocument Type CodeCODE✓
invoice.issueDateIssue DateISO_DATE_BASIC✓
invoice.currencyCodeInvoice Currency CodeCURRENCY_CODE—
seller.nameSeller NameTEXT—
buyer.nameBuyer NameTEXT—
totals.taxBasisAmountTax Basis Total Amount (excl. VAT)AMOUNT—
totals.taxAmountTax Total AmountAMOUNT—
totals.grandTotalAmountGrand Total Amount (incl. VAT)AMOUNT—
totals.duePayableAmountDue Payable AmountAMOUNT—
totals.lineTotalSum of Line Net AmountsAMOUNT—
line.idLine IDID—
line.productNameProduct NameTEXT—
line.billedQtyBilled QuantityQUANTITY—
line.unitPriceNet Unit PriceAMOUNT—
line.lineTotalLine Total AmountAMOUNT—
vat.categoryCodeVAT Category CodeCODE—
vat.ratePercentVAT Rate (%)PERCENT—
vat.basisAmountVAT Basis AmountAMOUNT—
vat.calculatedAmountVAT Calculated AmountAMOUNT—
payment.dueDatePayment Due DateISO_DATE_BASIC—
delivery.dateDelivery DateISO_DATE_BASIC—

Validation rules

21 rules
FX-PROF-001ERROR

A CII invoice must specify a GuidelineSpecifiedDocumentContextParameter/ID (Factur-X profile identifier).

Assertion

Factur-X Profile ID is required

FX-PROF-002ERROR

The Factur-X profile ID must be one of the recognised profile URNs (MINIMUM, BASIC-WL, BASIC, EN16931, EXTENDED).

Assertion

Factur-X Profile ID ∈ Recognised Factur-X / ZUGFeRD profile URNs: {urn:factur-x.eu:1p0:minimum, urn:factur-x.eu:1p0:basicwl, urn:factur-x.eu:1p0:basic, urn:cen.eu:en16931:2017, urn:factur-x.eu:1p0:extended, urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.3 ... (16 values)}

FX-HDR-001ERROR

An invoice shall have an invoice number (ExchangedDocument/ID). (EN16931 BR-02)

Assertion

Invoice Number is required

FX-HDR-002ERROR

An invoice shall have an issue date (ExchangedDocument/IssueDateTime). (EN16931 BR-03)

Assertion

Issue Date is required

FX-HDR-003ERROR

An invoice shall specify a document type code (ExchangedDocument/TypeCode). (EN16931 BR-04)

Assertion

Document Type Code is required

FX-HDR-004ERROR

The invoice document type code must be one of the recognised UNTDID 1001 codes for Factur-X invoices.

When

Document Type Code is present

Assertion

Document Type Code ∈ UNTDID 1001 document type codes allowed for Factur-X: {380, 381, 383, 384, 386, 389 ... (12 values)}

FX-SEL-001ERROR

An invoice shall contain the seller name (SellerTradeParty/Name). (EN16931 BR-06)

Assertion

Seller Name is required

FX-BUY-001ERROR

An invoice shall contain the buyer name (BuyerTradeParty/Name). (EN16931 BR-07)

Assertion

Buyer Name is required

FX-TOT-001ERROR

The header line total amount must equal the sum of all invoice line total amounts, with a tolerance of 0.01.

When

Sum of Line Net Amounts is present and Line Total Amount is present

Assertion

Sum of Line Net Amounts = Σ line.lineTotal over line.lineTotal (±0.01)

FX-TOT-002ERROR

The grand total amount must equal the tax basis total amount plus the tax total amount, with a tolerance of 0.01.

When

Grand Total Amount (incl. VAT) is present and Tax Basis Total Amount (excl. VAT) is present and Tax Total Amount is present

Assertion

Grand Total Amount (incl. VAT) = Tax Basis Total Amount (excl. VAT) + Tax Total Amount (±0.01)

FX-LIN-001ERROR

Each invoice line must have a line identifier (AssociatedDocumentLineDocument/LineID).

Assertion

Line ID is required

FX-LIN-003ERROR

Each invoice line must state the billed quantity.

Assertion

Billed Quantity is required

FX-LIN-004ERROR

Each invoice line must state the net unit price.

Assertion

Net Unit Price is required

FX-VAT-001ERROR

Each VAT breakdown category code must be one of the recognised EN16931 VAT category codes.

When

VAT Category Code is present

Assertion

VAT Category Code ∈ EN16931 VAT category codes: {S, Z, E, AE, K, G ... (9 values)}

FX-VAT-003ERROR

The tax total amount must equal the sum of VAT breakdown calculated amounts, with a tolerance of 0.01.

When

Tax Total Amount is present and VAT Calculated Amount is present

Assertion

Tax Total Amount = Σ vat.calculatedAmount over vat.calculatedAmount (±0.01)

FX-VAT-004ERROR

The tax basis total amount must equal the sum of VAT breakdown basis amounts, with a tolerance of 0.01.

When

Tax Basis Total Amount (excl. VAT) is present and VAT Basis Amount is present

Assertion

Tax Basis Total Amount (excl. VAT) = Σ vat.basisAmount over vat.basisAmount (±0.01)

FX-PROFILE-BASIC-001ERRORFactur-X 1.08 BASIC

This validator is for the Factur-X BASIC profile; the invoice profile ID must be urn:factur-x.eu:1p0:basic.

When

Factur-X Profile ID is present

Assertion

Factur-X Profile ID = "urn:factur-x.eu:1p0:basic"

FX-PROFILE-BASICWL-001ERRORFactur-X 1.08 BASIC-WL

This validator is for the Factur-X BASIC-WL profile; the invoice profile ID must be urn:factur-x.eu:1p0:basicwl.

When

Factur-X Profile ID is present

Assertion

Factur-X Profile ID = "urn:factur-x.eu:1p0:basicwl"

FX-PROFILE-EN16931-001ERRORFactur-X 1.08 EN16931

This validator is for the Factur-X EN16931 profile; the invoice profile ID must be urn:cen.eu:en16931:2017.

When

Factur-X Profile ID is present

Assertion

Factur-X Profile ID = "urn:cen.eu:en16931:2017"

FX-PROFILE-EXTENDED-001ERRORFactur-X 1.08 EXTENDED

This validator is for the Factur-X EXTENDED profile; the invoice profile ID must be urn:factur-x.eu:1p0:extended.

When

Factur-X Profile ID is present

Assertion

Factur-X Profile ID = "urn:factur-x.eu:1p0:extended"

FX-PROFILE-MINIMUM-001ERRORFactur-X 1.08 MINIMUM

This validator is for the Factur-X MINIMUM profile; the invoice profile ID must be urn:factur-x.eu:1p0:minimum.

When

Factur-X Profile ID is present

Assertion

Factur-X Profile ID = "urn:factur-x.eu:1p0:minimum"

Reference tables

3 lists

Recognised Factur-X / ZUGFeRD profile URNs

facturx-profile-urns
urn:factur-x.eu:1p0:minimumurn:factur-x.eu:1p0:basicwlurn:factur-x.eu:1p0:basicurn:cen.eu:en16931:2017urn:factur-x.eu:1p0:extendedurn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_2.3urn:zugferd.de:2p0:minimumurn:zugferd.de:2p0:basicwlurn:zugferd.de:2p0:basicurn:zugferd.de:2p0:en16931+6 more

UNTDID 1001 document type codes allowed for Factur-X

invoice-type-codes
380381383384386389394395553575+2 more

EN16931 VAT category codes

vat-category-codes
SZEAEKGOLM

Built for

  • ERP and accounting software vendors
  • Finance and AP/AR teams preparing e-invoices
  • Companies subject to the FR 2026-2027 / DE e-invoicing mandate
  • Developers integrating Factur-X / ZUGFeRD export
  • Consultants debugging e-invoice rejections
FeatureFreePaid
Single invoice validationYesYes
XSD + EN 16931 diagnosticsYesYes
Full business explanationPartialYes
JSON/API reportPreviewYes
Batch / ZIPNoYes
Profile-specific reportsLimitedYes
History / saved reportsNoYes
API accessNoYes

Need batch validation or API access?

API access, ZIP/batch processing, saved reports and profile-specific diagnostics are planned for paid usage.

Contact Ifriqa
Ifriqa Validator