Validation
Fiscalane validation results
We checked 1,990 unique Fiscalane test documents against the official UBL 2.1 XSD and EN 16931 / Peppol BIS 3.0 Schematron on 22 Oct 2026 and found 0 fatal errors. Here are the validator versions and sample files, so you can check the results yourself.
Headline numbers
- Unique test documents
- 1,990
- 3,787 exported files across 3 seeds; identical files counted once (by sha256).
- Fatal errors
- 0
- 0 fatal assertions and 0 XSD failures in every seed.
- Run on
- 22 Oct 2026
- Report generated 15:19 UTC.
Fiscalane is not a certification and not a Peppol Access Point. It checks a documented subset of the rules; a receiver's own validator may check more.
What we ran
As recorded in the run report.
- Command
npm run validate:proof- Seeds
- 1, 2 and 3
- Generated cases
- 500 per seed (1,500 in total). Each seed also runs the fixed named test cases, so it exports more files than it has generated cases.
- Run at commit
0568b27(clean working tree)- Runtime
- 135 seconds
- Environment
- Java 21.0.12.1, xmllint (libxml 20913)
Validators
Official files, pinned by version and sha256.
CEN EN 16931 UBL Schematron
Version 1.3.16
en16931-ubl-1.3.16.zip
- sha256
bafada015efb
Peppol BIS Billing 3.0 Schematron
Version 3.0.20
PEPPOL-EN16931-UBL-v3.0.20.sch
- sha256
5ddf3a2f6633- Source
- OpenPeppol (GitHub)
Also pinned: xmlresolver-5.2.2.jar, xmlresolver-5.2.2-data.jar. Each file is downloaded from its source and refused if its sha256 differs.
Results per seed
| Seed | Generated cases | Exported files | Refused by Fiscalane's check | Fatal assertions | XSD failures | Warnings (not fatal) |
|---|---|---|---|---|---|---|
| 1 | 500 | 1,260 | 167 | 0 | 0 | 48 |
| 2 | 500 | 1,257 | 170 | 0 | 0 | 58 |
| 3 | 500 | 1,270 | 157 | 0 | 0 | 39 |
| All seeds | 1,500 | 3,7871,990 unique | 494 | 0 | 0 | 145 |
Scroll the table sideways to see every column.
Only files that Fiscalane's own check accepts are exported and sent to the validators; refused cases include deliberate negative tests. Warning rules seen: NO-R-002 (93), PEPPOL-COMMON-R047 (34), DK-R-003 (3), DK-R-017 (3), PEPPOL-COMMON-R044 (3), PEPPOL-COMMON-R045 (3), PEPPOL-COMMON-R052 (3), PEPPOL-COMMON-R053 (3).
Rules covered and not covered
Covered in this run
- Structure against the UBL 2.1 XSD: 0 XSD failures.
- EN 16931 business rules (CEN UBL Schematron 1.3.16): 0 fatal assertions.
- Peppol BIS Billing 3.0.20 rules, including country sections: 0 fatal, 145 warnings across 8 rule ids.
- 4 internal sample files and 1 public sample: 0 fatal, 0 XSD failures.
Not covered
- This is evidence on a generated corpus, not proof; rules newer than those versions are not covered.
- Peppol may also accept or reject documents for reasons outside these files (access point policies, receiver-side checks).
- UBL 2.1 Invoice/CreditNote with BIS 3.0 identifiers only; no Factur-X/CII, XRechnung or other national CIUS, no document-level allowances/charges unless the rule table says so.
- Unsupported by design: Greek sellers (MARK number etc.), direct debit (payment means 49 and 59: the e-invoice needs a mandate reference Fiscalane does not hold), card payments between German parties (DE-R-024), Danish Giro and FIK (means 50, 93), Icelandic payment means 9 and 42 (need account formats Fiscalane does not hold), intra-community supply (VAT category K), currencies with more than 2 decimals (EN 16931 limit), fractional line totals in 0-decimal currencies (JPY).
- No delivery: no Access Point, no SMP lookup, no Peppol network sending.
Download samples
Sample data only. Open it in any Peppol validator.
Invoice SAMPLE-0001. sha256 014a36b1a3c3. 0 fatal, 0 XSD failures in this run.