Validation artifacts
Versions, sources, and checksums of the validation artifacts used by the Beliq e-invoice engine.
Beliq validates every generated and uploaded e-invoice against official standards artifacts. This page lists the versions currently used in production. The same Italy FatturaPA XSD bundle applies to POST /v1/generate (standard: "fatturapa") and to POST /v1/validate when FatturaPA invoice XML is detected — POST /v1/parse accepts UBL 2.1 and CII only (FatturaPA and SDI messaggio inputs are validated, not parsed). Italy SDI file messaggio XML (MessaggiTypes) uses a separate vendored XSD graph and is validated only on POST /v1/validate when format=sdi_messaggio is set or when a known messaggio root is auto-detected — it is not FatturaPA invoice validation.
For the machine-readable version of this inventory, call GET /v1/rulesets: the same pinned versions and artifact hashes, keyless and with no quota cost.
Current versions
| Artifact | Version | Release date | Official source |
|---|---|---|---|
| EN 16931 CII Schematron | 1.3.16 | 2026-04-04 | ConnectingEurope/eInvoicing-EN16931 |
| EN 16931 UBL Schematron | 1.3.16 | 2026-04-04 | ConnectingEurope/eInvoicing-EN16931 |
| XRechnung Schematron | 2.5.0 | 2026-01-31 | itplr-kosit/xrechnung-schematron |
| Peppol BIS Billing 3.0 Schematron (UBL) | 3.0.20 | 2026-03-16 | OpenPEPPOL/peppol-bis-invoice-3 |
| Factur-X 1.08 / CII D22B Schematron + per-profile XSDs (all 5 profiles: MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED) | 1.08 | 2025-12-18 | FNFE-MPE / FeRD joint pack — primary for BASIC_WL / EN16931 / EXTENDED; Mustangproject (Apache-2.0) secondary for MINIMUM and BASIC (FNFE-MPE-recommended downstream consumer; pinned to tag core-2.22.0). |
| France BR-FR-CTC Flux 2 Schematron (CII + UBL) | 1.3.0 | 2026-02-16 | FNFE-MPE on behalf of DGFiP / AIFE |
| France EXTENDED-CTC-FR Schematron (CII + UBL) | 1.3.0 | 2026-02-16 | FNFE-MPE on behalf of DGFiP / AIFE |
| Italy FatturaPA XSD (ordinaria/PA VFPR/VFPA 1.2.3 + semplificata VFSM 1.0.2, runtime bundle) | 1.4-runtime-2026-05-01 | — | fatturapa.gov.it — formato / XSD v1.4 |
| Italy SDI MessaggiTypes XSD (file messaggio v1.1) | 1.1.0-pinned-2026-05-02 | — | fatturapa.gov.it — Messaggi v1.1 + xmldsig companion. Runtime: POST /v1/validate with format=sdi_messaggio or auto-detect on known messaggio roots — XSD only, not FatturaPA invoice validation. |
| Italy SDI transport — SOAP / spec URL bundle (reference URLs only, not vendored) | sdi-interchange-1.8.4-urls-2026-04-28 | — | DocumentazioneSDI + Specifiche tecniche v1.8.4 PDF + WSDL/XSD export tree. Reference only — SDI submission, signing, and operator interchange are not implemented in Beliq (italy_sdi_transport is blocked); transmission belongs to your SDI intermediary. |
| Spain Facturae XSD (3.2.2 runtime bundle) | 3.2.2-research-2026-05-24 | 2017-06-06 | facturae.gob.es — formato (MINECO unified spec). Runtime: XSD-only on POST /v1/generate (standard: "facturae") and POST /v1/validate (format=facturae or auto-detect). |
| Slovenia e-SLOG XSD (2.0 runtime bundle, INVOIC v200 + xmldsig companion) | 2.0-08-2020 | 2020-08 | epos.si (GZS/ePOS invoice package). Runtime: XSD-only on POST /v1/generate (standard: "eslog", invoices + credit notes) and POST /v1/validate (format=eslog or auto-detect on the urn:eslog:2.00 root). |
| Romania RO_CIUS Schematron (XSLT pair: EN 16931 CIUS-RO + RO e-Factura operational/VAT) | 1.0.9 | 2024-06-05 | Helger phive-rules-cius-ro 4.3.5 (Maven Central, Apache-2.0; vendors ANAF’s authoritative XSLT). Runtime: fired on UBL invoices carrying the CIUS-RO CustomizationID (urn:efactura.mfinante.ro:CIUS-RO:1.0.1 current or RO_CIUS:1.0.0.2021 legacy). The CIUS-RO XSLT bakes in EN 16931 + Peppol BIS rules; both XSLTs fire sequentially. See Romania format reference. |
| Netherlands NLCIUS Schematron (SI-UBL 2.0; single XSLT covering Invoice + CreditNote) | 2.0.3.13 | 2026-05-21 | NPa peppolautoriteit-nl/validation 2026-05-21 (Nederlandse Peppol Autoriteit; MIT-licensed; STPE / Stichting Simplerinvoicing copyright; no Helger wrapper). Runtime: fired on UBL invoices carrying the NLCIUS CustomizationID prefix urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0 (matched starts-with). The NPa-compiled XSLT bakes in EN 16931 + Peppol BIS rules; failures carry BR-NL-* rule IDs. See Netherlands NLCIUS format reference. |
| CII XSD (D16B) | D16B | 2016 | UN/CEFACT (vendored via the EN 16931 reference repository) |
| CII XSD (D22B, used by Factur-X 1.08 / ZUGFeRD 2.x) | D22B | 2023-06-23 | UN/CEFACT |
| UBL 2.1 XSD | 2.1 | 2013-11-04 | OASIS |
| Mustang CLI (ZUGFeRD/Factur-X) | 2.22.0 | 2026-02-04 | mustangproject.org |
| Saxon HE (XSLT processor) | 12.9 | 2025-09-12 | saxonica.com |
| VeraPDF (PDF/A validator) | 1.28.2 | 2025-07-15 | verapdf.org |
| SchXslt2 (Schematron transpiler — vendor-time only, not runtime) | 1.10.3 | 2025-09 | Codeberg — SchXslt/schxslt2 |
Cross-validation tooling
These artifacts are not used to validate customer traffic; they are used internally to cross-check the T3 spec-derived fixtures we ship are validated against an independent reference implementation.
| Artifact | Version | Release date | Official source |
|---|---|---|---|
| KoSIT validator (standalone JAR) | 1.6.2 | 2026-02-17 | itplr-kosit/validator |
| KoSIT XRechnung scenario configuration | 2026-01-31 (compatible with XRechnung 3.0.x) | 2026-01-31 | itplr-kosit/validator-configuration-xrechnung |
| KoSIT Peppol BIS scenario configuration | 3.0.20 | 2026-03 | itplr-kosit/validator-configuration-bis |
| AGID FEL — Fattura Elettronica compilation software XSD bundle | 2.1.4 | 2025-04-01 | Agenzia delle Entrate — Software di compilazione |
KoSIT xml-mutate (T2 fixture-generation tooling — not a validator) |
0.6 | 2026-02-13 | projekte.kosit.org — xml-mutate |
Validation pipeline
Every invoice goes through a validation pipeline before a result is returned.
For UBL 2.1 and CII instances in the EN 16931 family, the chain is:
Input → XSD Schema → EN 16931 Schematron → CIUS Schematron → Result
For Italy FatturaPA XML (FatturaElettronica / FatturaElettronicaSemplificata in the
Italian namespaces) and Spain Facturae XML (Facturae 3.2.2 in the MINECO namespace), the
engine runs W3C XSD validation only against the authority schema graph pinned in the engine
(no EN 16931 Schematron layer; responses omit schematronVersion and carry country-specific
metadata instead).
- XSD schema validation checks XML structure (UBL 2.1, CII D16B/D22B, Factur-X profile subset, FatturaPA XSD, or Facturae XSD)
- EN 16931 Schematron checks core business rules (not run for FatturaPA or Facturae)
- CIUS Schematron checks country- or network-specific rules when the document declares a recognised customization:
- XRechnung (KoSIT) — when the
CustomizationIDmatches an XRechnung URN - Peppol BIS Billing 3.0 (OpenPeppol) — when the
CustomizationIDmatchesurn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0. UBL only — Peppol Network only transports UBL, so Peppol rules are not applied to CII payloads even if they happen to carry the URN.
- XRechnung (KoSIT) — when the
For PDF output (ZUGFeRD/Factur-X), additional steps also run:
- Mustang CLI embeds validated XML into a PDF/A-3 document
- VeraPDF validates the resulting PDF against PDF/A-3b
API response metadata
Validation responses include the artifact versions used:
| Response field / header | Example value | Description |
|---|---|---|
validationResult.schematronVersion |
"1.3.16" |
EN 16931 Schematron version (omitted when validating Italy FatturaPA or Spain Facturae XSD-only) |
validationResult.ciusVersion |
"XRechnung-2.5.0" or "PeppolBIS-Billing-3.0.20" |
CIUS-specific Schematron version (when detected) |
validationResult.peppolVersion |
"PeppolBIS-Billing-3.0.20" |
Peppol BIS Billing 3.0 CIUS version. Only present when the document was detected as Peppol; mirrors ciusVersion for Peppol-specific consumers (e.g. Access Point integrations). |
validationResult.italyFatturapaXsdBundle |
(bundle label string) | Human-readable label of the authority XSD graph used for FatturaPA (XSD-only). |
validationResult.italyFatturapaRuntimeVersion |
e.g. 1.4-runtime-2026-05-01 |
Runtime bundle pin (XSD-only invoices). |
validationResult.italySdiMessaggiXsdBundle |
(bundle label string) | Human-readable label of the SDI MessaggiTypes XSD graph (XSD-only). Present only when format=sdi_messaggio was used or auto-detected. |
validationResult.italySdiMessaggiXsdVersion |
e.g. 1.1.0-pinned-2026-05-02 |
SDI MessaggiTypes XSD pin. |
validationResult.spainFacturaeXsdBundle |
(bundle label string) | Human-readable label of the authority XSD graph used for Spain Facturae (XSD-only). |
validationResult.spainFacturaeRuntimeVersion |
e.g. 3.2.2-research-2026-05-24 |
Runtime bundle pin (XSD-only invoices). |
validationResult.sloveniaEslogXsdBundle |
(bundle label string) | Human-readable label of the authority XSD used for Slovenia e-SLOG (XSD-only). |
validationResult.sloveniaEslogRuntimeVersion |
e.g. 2.0-08-2020 |
Runtime bundle pin (XSD-only; invoices and credit notes). |
validationResult.romaniaRoCiusVersion |
e.g. 1.0.9 |
Romania CIUS-RO Schematron version pin. Populated when profileDetected === "romania-ro-cius". |
validationResult.netherlandsNlciusVersion |
e.g. 2.0.3.13 |
Netherlands NLCIUS (SI-UBL 2.0) Schematron version pin. Populated when profileDetected === "netherlands-nlcius"; mirrors ciusVersion. |
x-schematron-version header |
1.3.16 |
Same as schematronVersion, also exposed as a response header on generate/validate |
These fields show which rule versions were applied to your invoice. Validation responses also carry sha256 (the exact bytes validated) and rulesetSha256 + rulesetArtifacts (the rule artifacts that judged them, hashed); see Verify a hash to reproduce both and cross-check the ruleset against the public catalog.
Business rule reference
EN 16931 and related standards use rule IDs with these prefixes:
| Prefix | Source | Example |
|---|---|---|
BR-* |
EN 16931 core rules | BR-01: An Invoice shall have a Specification identifier |
BR-CL-* |
EN 16931 code list rules | BR-CL-01: Currency code must be valid ISO 4217 |
BR-CO-* |
EN 16931 calculation rules | BR-CO-10: Sum of line net amounts must equal invoice net amount |
BR-DE-* |
XRechnung (Germany) | BR-DE-1: Buyer reference is required |
PEPPOL-EN16931-R* |
Peppol BIS 3.0 cross-border | PEPPOL-EN16931-R003: Buyer reference or order reference is required |
PEPPOL-COMMON-R* |
Peppol BIS 3.0 common | PEPPOL-COMMON-R040: Country-specific rule set must be applied |
FX-SCH-* |
Factur-X 1.08 profile Schematron (FNFE-MPE / FeRD) | FX-SCH-A-000015: Profile-specific assertion (Factur-X reports the EN 16931 rule code in the message body) |
BR-FR-CTC-* |
France BR-FR-CTC Flux 2 overlay (DGFiP / FNFE-MPE) | BR-FR-CTC-01: SIREN or SIRET must be present on French parties |
EXT-FR-* |
France EXTENDED-CTC-FR overlay | EXT-FR-FE-163: EXTENDED-CTC-FR-specific structural assertion |
Official rule references:
Update policy
Beliq does not auto-update validation artifacts. Version updates are reviewed and tested before rollout. For how versions are classified (safe vs breaking), announced, and how to pin a channel per request or org-wide, see Ruleset versioning.
Nightly content-SHA drift detection
Beyond reviewing official release announcements, the engine runs a nightly content-SHA check against every pinned artefact. If an authority re-publishes an artefact without bumping its version tag (a real failure mode for FNFE-MPE Factur-X bundles and the AdE FEL XsdProject.jar), the workflow opens a tracking issue on the engine repository within 24 hours.
- Cadence: every day at 04:00 UTC.
- Workflow:
.github/workflows/check-artifact-updates.yml, Layer 3 (the Python moduletools/sha_drift). - Coverage: 19 SHA-pinned artefacts across 7 structural shapes. New artefacts pinned by SHA are picked up automatically — the engine’s enumeration-coverage test fails loud if a SHA is added without a paired URL.
- Signal-only: the workflow never auto-bumps anything. Each detected drift creates an issue for human review; vendor / re-pin happens explicitly via
scripts/upgrade-artifact.sh. - Status visibility: drift status is visible in the engine’s GitHub Actions run logs and as tracking issues on the engine repository.
XRechnung release cycle
XRechnung follows a fixed release schedule:
- New versions are published on January 31 and July 31
- Each version becomes mandatory 6 months after publication
- During the 6-month transition, both old and new versions are accepted by government portals
Beliq adopts new XRechnung versions promptly after publication and runs them through the full test suite before deployment.
Version changelog
| Date | Artifact | Old version | New version | Notes |
|---|---|---|---|---|
| 2026-04-04 | EN 16931 Schematron | — | 1.3.16 | Initial version |
| 2026-01-31 | XRechnung Schematron | — | 2.5.0 | Initial version |
| 2026-02-04 | Mustang CLI | — | 2.22.0 | Initial version |
| 2026-04 | Peppol BIS Billing 3.0 Schematron | — | 3.0.20 | Initial version. Compiled from upstream .sch sources at vendor time using SchXslt2. |
| 2026-04 | Factur-X / D22B Schematron + XSDs | — | 1.08 | Initial version. Vendored from FNFE-MPE / FeRD public ZIP. Covers BASIC_WL, EN16931 and EXTENDED profiles directly. |
| 2026-04-24 | Factur-X 1.08 — MINIMUM and BASIC profiles | — | 1.08 | Vendored from Mustangproject core-2.22.0 (Apache-2.0) as the FNFE-MPE-recommended downstream consumer. All five Factur-X 1.08 profiles (MINIMUM, BASIC_WL, BASIC, EN16931, EXTENDED) are now supported. |
| 2026-04 | France BR-FR-CTC Flux 2 + EXTENDED-CTC-FR Schematron | — | 1.3.0 | Initial version. Vendored from the FNFE-MPE 2026-02-16 publication. |
| 2026-04-25 | KoSIT Peppol BIS scenario configuration | — | 3.0.20 | Cross-validation only. Added alongside the KoSIT validator JAR. |
| 2026-04-28 | AGID FEL XSD bundle | — | 2.1.4 | Cross-validation only. Added to back T3 negatives for italy_fatturapa_ordinaria. |
| 2026-05-01 | Italy FatturaPA runtime XSD bundle | — | 1.4-runtime-2026-05-01 | Runtime XSD validation on POST /v1/generate and POST /v1/validate for FatturaPA FPR12 / FPA12 / FSM10. |
| 2026-05-02 | Italy SDI MessaggiTypes XSD | — | 1.1.0-pinned-2026-05-02 | XSD-only path on POST /v1/validate for SDI file messaggi (notifications / receipts). Not transport. |
| 2026-04-28 | Italy SDI transport URL bundle | — | sdi-interchange-1.8.4-urls-2026-04-28 | URL pointers only — no submission, signing, or operator integration is implemented. |
| 2026-05-23 | Nightly content-SHA drift detection | — | active | Re-fetches every SHA-pinned artefact nightly and opens tracking issues on detected drift. Internal — no customer-facing API change. |
| 2026-05-26 | Spain Facturae runtime XSD bundle | — | 3.2.2-research-2026-05-24 | Runtime XSD validation on POST /v1/generate (standard: "facturae") and POST /v1/validate for Facturae 3.2.2 — XSD-only, no EN 16931 Schematron (Facturae’s lineage is the MINECO spec, not CEN). |
| 2026-06-02 | Romania RO_CIUS Schematron (XSLT pair via Helger phive-rules-cius-ro 4.3.5) | — | 1.0.9 | Runtime Schematron arm on POST /v1/validate for Romanian CIUS-RO UBL (current + legacy URN), plus POST /v1/generate with standard: "peppol-bis" + profile: "romania-ro-cius". Profile is provisional; promotion to supported waits on the remaining T3 negatives and phive cross-validation gate. ANAF SPV submission stays BYOC. |
| 2026-06-09 | Netherlands NLCIUS Schematron (SI-UBL 2.0 via NPa peppolautoriteit-nl/validation) | — | 2.0.3.13 | Runtime NLCIUS XSLT arm on POST /v1/validate for Dutch NLCIUS UBL (CustomizationID prefix urn:fdc:nen.nl:nlcius:v1.0, matched starts-with), plus POST /v1/generate with standard: "peppol-bis" + profile: "netherlands-nlcius". Single XSLT covers Invoice + CreditNote; failures carry BR-NL-*. Profile netherlands_peppol_nlcius promoted to supported. Digipoort / Logius B2G submission stays Peppol-AP-routed BYOC. |
| 2026-06-11 | Slovenia e-SLOG 2.0 runtime XSD bundle | — | 2.0-08-2020 | Runtime XSD validation on POST /v1/generate (standard: "eslog", invoices and credit notes) and POST /v1/validate for e-SLOG 2.0. XSD-only, no EN 16931 Schematron (GZS/ePOS publish no machine-readable business rules). UJP submission and e-route provider services stay BYOC. |
| 2026-06-13 | Netherlands NLCIUS comprehensive corpus + Schematron-only harness | — | 2.0.3.13 (unchanged) | No runtime artifact version change (SI-UBL 2.0 v2.0.3.13, same SHA; SHA-drift unchanged). Test corpus grown 10 → 120 (the full NPa SI-UBL 2.0 authority testset) and asserted by a Schematron-only harness (every document outcome plus per-rule SVRL firing). A rule-coverage audit confirms a Tier-1 negative per critical rule family. Profile netherlands_peppol_nlcius promoted supported → fully-verified; two residuals documented (UBL-SR-09/15 upstream XSLT XPTY0004 crash, BR-NL-34 under the BR-NL-32 id). No API surface change. |