Skip to main content
Introducing packages.sweber.dev
Documentation menuProfiles and rule sets

Profiles and rule sets

Which rules Summand applies for XRechnung, ZUGFeRD, Factur-X and Peppol invoices.

Summand reads the specification identifier (BT-24: cbc:CustomizationID in UBL, GuidelineSpecifiedDocumentContextParameter/ram:ID in CII) and picks the rule sets:

ProfileRecognised byRule sets
XRechnung 3.0…#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0EN 16931 + XRechnung
XRechnung Extension…#conformant#urn:xeinkauf.de:kosit:extension:xrechnung_3.0EN 16931 + XRechnung, with KoSIT's relaxed levels
XRechnung CVD…#compliant#urn:xeinkauf.de:kosit:xrechnung:cvd_…EN 16931 + XRechnung
ZUGFeRD / Factur-X EN 16931 (COMFORT)urn:cen.eu:en16931:2017EN 16931
ZUGFeRD / Factur-X BASIC…:factur-x.eu:1p0:basicEN 16931
ZUGFeRD / Factur-X EXTENDED…:factur-x.eu:1p0:extendedEN 16931, errors reported as warnings by default
Peppol BIS Billing 3.0…peppol…EN 16931 (Peppol rules not included yet)
ZUGFeRD / Factur-X MINIMUM, BASIC WL…:minimum, …:basicwlnone; reported as error SUM-PROFILE
anything elseEN 16931, with warning SUM-PROFILE

The EN 16931 rule set follows the syntax: en16931-ubl for UBL Invoice and Credit Note, en16931-cii for CII. The same goes for XRechnung.

MINIMUM and BASIC WL

These two Factur-X profiles leave out the invoice lines and other information EN 16931 requires. They are booking aids, not e-invoices: in Germany they do not count as an e-invoice under § 14 UStG since 2025. Summand reports them as invalid without running the rules.

XRechnung severity levels

The KoSIT validator configuration for XRechnung changes the severity of some EN 16931 rules, for example BR-CL-21 (item classification code list) becomes a warning, and for the extension BR-CO-16 becomes an information. Summand applies the same changes when the XRechnung rules run, so results match the KoSIT validator.

Forcing rule sets

// German public buyer: always apply XRechnung
validateInvoice(xml, { xrechnung: true });

// only EN 16931 for UBL
validateInvoice(xml, { ruleSets: ["en16931-ubl"] });