What the ZUGFeRD & XRechnung Validator Checks
Generating a file is not the same as generating a valid file. The validator runs three independent checks on every upload: all three must pass for your invoice to be accepted by accounting systems and public portals.
Validation Layer 1: XML Schema
The embedded XML must conform to the Cross Industry Invoice (CII) D16B schema. Schema errors are structural: a missing element, a wrong data type, or an attribute in the wrong namespace. These are caught before any business rules are applied and usually indicate a code generation or serialisation bug.
Validation Layer 2: EN 16931 Schematron Rules
The Schematron layer enforces over 200 semantic business rules defined in the European e-invoicing standard. Rules are identified by codes such as BR-01, BR-CO-15, or DE-R-001. Common failures:
- BR-08 - Invoice currency code is missing (BT-5)
- BR-CO-15 - VAT category tax amount does not match the calculated value
- BR-S-08 - Tax rate (BT-119) is mandatory when VAT category is Standard
- DE-R-003 - Seller tax ID (BT-31 or BT-32) is required for German domestic invoices
Each error in the report includes the rule code, the XPath of the failing element, and a plain-language description, no need to read the spec to understand what to fix.
Validation Layer 3: PDF/A-3b Conformance (ZUGFeRD only)
ZUGFeRD requires the PDF container to be a PDF/A-3b archive. A regular PDF will fail even if the embedded XML is perfectly valid. Common causes: missing embedded fonts, no ICC output intent, incorrect XMP metadata, or the XML attachment not declared with the AFRelationship key set to Alternative.
Profile-Specific Checks
The validator applies additional rules depending on which ZUGFeRD profile the file declares. Higher profiles require more data fields: submitting a MINIMUM-profile file where EN 16931 is expected will produce dozens of missing-field errors.
| Profile | Line items required | Allowances & charges | Full EN 16931 rules |
|---|---|---|---|
| MINIMUM | No | No | No |
| BASIC WL | No | Yes | No |
| BASIC | Yes | No | No |
| EN 16931 | Yes | Yes | Yes |
| EXTENDED | Yes | Yes | Yes + extensions |
XRechnung-Specific Checks
XRechnung is pure XML: there is no PDF layer, so PDF/A-3b conformance does not apply. The validator instead enforces the German CIUS (Core Invoice Usage Specification) on top of EN 16931:
- DE-R-001 - BT-10 (Buyer reference / Leitweg-ID) is mandatory for all XRechnung invoices
- DE-R-002 - The Leitweg-ID must follow the pattern {authority-id}-{optional-suffix}-{check-digit}
- DE-R-009 - Payment means code must be one of the permitted values (30, 58, or 59)
If you are submitting to a federal or state portal (ZRE, OZG-RE), the Leitweg-ID must be obtained from the contracting authority before you issue the invoice, the validator will flag a missing or malformed ID immediately.