EN16931 / XRechnung / Peppol BIS 3 Validator

PEPPOL-EN16931-P0100: Invoice type code MUST be set according to the profile.

fatal UBL auto-fix

What this error means and how to fix it

A Peppol BIS Billing 3.0 rule (OpenPeppol): an extra requirement for invoices sent over the Peppol network, for example electronic addresses (BT-34, BT-49), the business process (BT-23) or code values. This is an error: the invoice is rejected until it is fixed.

Check your invoice against PEPPOL-EN16931-P0100 — free

Runs the KoSIT validator 1.6.3, unmodified · result in seconds · the file is not stored · No file at hand? Try a sample invoice

Automatic fix: 9 € per file (excl. VAT where applicable). An invoice type code (BT-3) that is valid in UNTDID 1001 but not allowed in the Peppol billing process (e.g. 389 self-billed, 385 consolidated) is mapped to 380 (commercial invoice). Optional, Peppol profile only; the customer confirms the document type. The result page shows which errors the repair removes and whether the corrected file then passes — before you pay. Many files? Pilot and Repair API.

Rule text

[PEPPOL-EN16931-P0100]-Invoice type code MUST be set according to the profile.

Automatic repair

An invoice type code (BT-3) that is valid in UNTDID 1001 but not allowed in the Peppol billing process (e.g. 389 self-billed, 385 consolidated) is mapped to 380 (commercial invoice). Optional, Peppol profile only; the customer confirms the document type.

This rule is in the deterministic set of our repair engine (UBL 2.1; measured 2026-10-23: XRechnung 15 broken test invoices accepted after repair, 45 valid invoices unchanged; Peppol BIS Billing 3: 10 official examples unchanged, 40 mutated invoices: 36 accepted after repair, 4 rejected as expected — one documented limit, two with the repair parameter switched off, one where no address could be derived; profile conversion of 33 XRechnung test invoices to Peppol: 30 accepted). For UN/CEFACT CII (Factur-X / ZUGFeRD EN 16931 XML, XRechnung CII) the engine repairs the totals chain, VAT breakdown, rounding, decimals and element order (measured 2026-10-24: 53 valid CEN and XRechnung CII invoices unchanged; 28 broken invoices: 27 accepted after repair, 1 rejected as expected because a VAT exemption reason cannot be derived). Single files: 9 € on the result page; many files: the Repair API — see Pricing.

Where the rule is checked (XPath context and test)
SyntaxSeverityContext (XPath)Test (XPath)
Peppol-UBLfatalcbc:InvoiceTypeCodenot($profile = ('01','02')) or (some $code in tokenize('71 80 82 84 102 218 219 326 331 380 382 383 384 386 388 393 395 553 575 623 780 817 870 875 876 877', '\s') satisfies normalize-space(text()) = $code)

Source: Peppol BIS Billing 3.0 Schematron, UBL (OpenPeppol, docs.peppol.eu validation artefacts 3.0.21).

Check your invoice against this rule