E-invoice validator

E-invoice formats by country: what the validator checks

The e-invoice validator recognises the format of your file automatically. For each format we check the structure against the official XML schema. Where official business rules are publicly available, we check those too. Below you can see the e-invoice formats by country and what exactly is checked.

E-invoice formats by country

CountryFormatStructure (XSD)Business rules
BelgiumPeppol BIS Billing 3.0 (UBL)The format of the Belgian mandate. Peppol BIS has no separate Belgian rules.YesYes
UBL.BE / e-FFFOlder Belgian variant: structure only (UBL 2.1).YesNo
NetherlandsPeppol BIS Billing 3.0 (UBL)Including the Dutch Peppol rules.YesYes
SI-UBL 2.0 and NLCIUS (UBL and CII)YesYes
Energie eFactuurUBL structure only.YesNo
GermanyXRechnung 3.0 (UBL and CII)YesYes
ZUGFeRD / Factur-X (all profiles)Checked against version 2.5.2. ZUGFeRD 2.0: structure only.YesYes
Peppol BIS Billing 3.0 (UBL)Including the German Peppol rules.YesYes
FranceFactur-X (all profiles)YesYes
CTC Flux 2 and EXTENDED-CTC-FR (UBL and CII)CII is checked against the CII D22B schema.YesYes
CDAR (status messages)YesNo
PPF Flux 1 and Flux 10NoNo
ItalyFatturaPA 1.2 (FPA12 and FPR12)Signed .p7m files too. The checks of the SdI itself are not performed.YesNo
Peppol BIS Billing 3.0 (UBL)Including the Italian Peppol rules; not the additional AGID rules.YesYes
SpainFacturae 3.0 to 3.2.2The signature and VeriFactu are not checked.YesNo
PolandKSeF FA(1), FA(2) and FA(3)YesNo
AustriaebInterface 3.0 to 6.1YesNo
Peppol BIS Billing 3.0 (UBL)YesYes
HungaryNAV Online Számla 2.0 and 3.0YesNo
CzechiaISDOC 6.0YesNo
SwedenPeppol BIS Billing 3.0 (UBL)Including the Swedish Peppol rules.YesYes
Svefaktura 1.0YesNo
NorwayEHF Billing 3.0 / Peppol BISIncluding the Norwegian Peppol rules. Other EHF documents: structure only.YesYes
DenmarkPeppol BIS Billing 3.0 (UBL)Including the Danish Peppol rules.YesYes
OIOUBLUBL structure only.YesNo
FinlandFinvoice 1.3 to 3.0YesNo
TEAPPSXML 2.7.2 and 3.0YesNo
Peppol BIS Billing 3.0 (UBL)YesYes
GreecePeppol BIS Billing 3.0 (UBL)Including the Greek Peppol rules. myDATA is not supported.YesYes
IcelandPeppol BIS Billing 3.0 (UBL)Including the Icelandic Peppol rules.YesYes
PortugalCIUS-PT (UBL)You can select the EN 16931 core rules in the list; the Portuguese rules are not included.YesPartly
RomaniaCIUS-RO (UBL)You can select the EN 16931 core rules in the list; the Romanian rules are not included.YesPartly
CroatiaeRačun (UBL)You can select the EN 16931 core rules in the list; the Croatian rules are not included.YesPartly
eIzvještavanje (e-reporting)YesNo
SerbiaSEF (UBL), eOtpremnica and ePrijemnicaYesNo
TürkiyeUBL-TR / e-FaturaThe envelope (Zarf) is not supported.YesNo
Saudi ArabiaZATCA / FATOORA (UBL)Signature, QR code and ZATCA rules not checked.YesNo
Peppol outside EuropePeppol PINT (A-NZ, JP, MY, SG, AE, OM)UBL structure only.YesNo
Other EU countriesEN 16931 (UBL and CII)YesYes
Peppol BIS Billing 3.0 (UBL)YesYes

Not supported: Brazilian NF-e, Greek myDATA, VeriFactu, PPF Flux 1 and 10, Turkish Zarf envelopes and formats that are not XML based.

The validator checks the structure against the official schema and, where available, the official business rules. The result is an aid, not a guarantee that a recipient, Access Point or government platform will accept the document. National platforms (such as SdI, KSeF or the PPF) and recipients may perform additional checks, for example on signatures, numbering or registrations. Your file is processed only in your browser.

A validator for each e-invoice format

For the most requested formats we have a dedicated page, with the validator already set to the right country:

Two checks: structure and business rules

Every file goes through two checks. First, we check whether it follows the structure of the official schema: the right elements, in the right order and with the right type of data. Then we check the business rules, such as mandatory fields, calculations and code lists. For Peppol BIS, XRechnung, Factur-X and the Dutch and French rules, these business rules are publicly available. For other formats, no public rule set exists. In those cases we therefore only check the structure.

How does the validator choose the rules automatically?

When you choose “Automatic”, we first read a few details from your file. Based on those, we choose the rules. Below the result, “Detected by” shows which details decided the choice. We look at three things:

  1. The format: UBL or CII, or a PDF with embedded XML such as Factur-X or ZUGFeRD.
  2. The specification ID (BT-24): in UBL the field CustomizationID, in CII GuidelineSpecifiedDocumentContextParameter. That ID states which rules the sender follows. It carries the most weight.
  3. The French invoicing mode: a code from B1 to M9 in ProfileID or BusinessProcessSpecifiedDocumentContextParameter. That code points to the French rules.

Recognisable parts of the specification ID

Part of the IDRules
poacc:billing:3.0Peppol BIS Billing 3.0
poacc:selfbilling:3.0Peppol BIS Self-Billing 3.0
kosit:xrechnungXRechnung (Germany)
kosit:extension:xrechnungXRechnung Extension
nen.nl:nlciusSI-UBL 2.0 / NLCIUS (Netherlands)
nen.nl:gaccountSI-UBL 2.0 with G account
factur-x.eu:1p0Factur-X / ZUGFeRD, in the profile from the ID (MINIMUM, BASIC WL, BASIC, EXTENDED)
cpro.gouv.frEN 16931 with the French rules (BR-FR)
extended-ctc-frEXTENDED-CTC-FR (France)
urn:cen.eu:en16931:2017EN 16931, the European standard (when nothing follows)

A specification ID we do not know

A specification ID consists of layers. Each layer starts with #compliant# (a restriction of the standard) or #conformant# (an extension). If we do not know the full ID, we remove the last layer and try again. That way, an unknown variant of XRechnung is still checked with the XRechnung rules. If it is an extension we do not know, we warn that elements from that extension may show up as errors.

Is the choice wrong? Then choose the country yourself, or pick the exact rule set under “Advanced”. A Peppol invoice or credit note is always checked with the Peppol rules of the current release.

Why one validator for e-invoice formats from several countries?

Belgian businesses send their invoices via Peppol, in the Peppol BIS Billing 3.0 format. Still, you also receive invoices from abroad, or you send invoices to customers in Germany, France or Italy yourself. Moreover, many software packages use one export format for all countries. With this validator you therefore check every file in the same place, without first having to know which format it is.

What the validator does not check

National platforms such as the SdI in Italy, KSeF in Poland or the PPF in France perform additional checks, for example on signatures, numbering or registrations. Those checks fall outside this validator. The result is therefore an aid, not a guarantee that a recipient or platform will accept the document. Do you want to check a Belgian Peppol invoice? Then use the e-invoice validator, and for an error message read the explanation of the Peppol error codes.

Sources

Schemas and rules: OASIS (UBL), UN/CEFACT (CII), CEN (EN 16931), OpenPeppol, KoSIT, FNFE-MPE and the national publishers, brought together by Philip Helger in phive-rules (Apache 2.0). XML schema check with libxml2 (xmllint-wasm, MIT).