Documentation

skeemrr validates e-invoice XML payloads against Schematron business rules for 21 international formats.

How It Works

Validation follows a multi-step pipeline:

  1. SBDH unwrapping — if the payload is wrapped in a Standard Business Document Header (SBDH) envelope, the inner document is extracted before processing.
  2. XML parsing & format detection — the XML is parsed and the invoice format is auto-detected from the root element, namespace, and CustomizationID. Supported formats include FatturaPA, UBL 2.1, CII, PEPPOL BIS 3.0, XRechnung, ZUGFeRD/Factur-X, NLCIUS, RO-CIUS, CIUS-PT, and OIOUBL.
  3. Ruleset chain evaluation — for layered formats, base rules run first, then format-specific rules. For example, a PEPPOL BIS 3.0 invoice runs EN 16931 rules followed by PEPPOL-specific rules. Each failing assertion produces an error with a rule ID, message, severity, and XPath location.

Supported Formats

Italy — FatturaPA

Format IDDescriptionNotes
FPA12FatturaPA — Public Administration (B2G)TD01–TD29 document type rules applied
FPR12FatturaPA — Private (B2B/B2C)TD01–TD29 document type rules applied
FSM10FatturaPA — SimplifiedSimplified invoice rules (FSM schema)

EU Base — EN 16931

Format IDDescription
en16931-ubl-invoiceEN 16931 UBL Invoice
en16931-ubl-creditnoteEN 16931 UBL Credit Note
en16931-ciiEN 16931 Cross Industry Invoice (CII)

PEPPOL

Format IDDescription
peppol-bis3-ubl-invoicePEPPOL BIS 3.0 UBL Invoice (30+ countries)
peppol-bis3-ubl-creditnotePEPPOL BIS 3.0 UBL Credit Note
peppol-bis3-sbdhPEPPOL SBDH envelope validation

Germany — XRechnung

Format IDDescription
xrechnung-ublXRechnung CIUS — UBL
xrechnung-ciiXRechnung CIUS — CII

Germany / France — ZUGFeRD / Factur-X

ProfileDescription
zugferd-minimumZUGFeRD/Factur-X MINIMUM profile
zugferd-basic-wlZUGFeRD/Factur-X BASIC-WL profile
zugferd-basicZUGFeRD/Factur-X BASIC profile
zugferd-en16931ZUGFeRD/Factur-X EN 16931 profile
zugferd-extendedZUGFeRD/Factur-X EXTENDED profile

Country-Specific CIUS

Format IDCountryDescription
nlciusNetherlandsNLCIUS (SI-UBL 2.0)
ro-ciusRomaniaRO-CIUS
cius-ptPortugalCIUS-PT
oioublDenmarkOIOUBL 2.1

Auto-Detection

You do not need to specify the format — skeemrr detects it automatically from the XML. For UBL and CII invoices, the CustomizationID determines which ruleset applies (e.g., PEPPOL BIS 3.0, XRechnung, NLCIUS, or base EN 16931). For FatturaPA, the versione attribute on the root element identifies the transmission format. For ZUGFeRD/Factur-X CII documents, the GuidelineSpecifiedDocumentContextParameter ID determines the profile.

Learn More