ValidateFin
Back to blog
Peppol13 min readBy Eliel Nicaise

Peppol BIS Billing 3.0 Business Rules: The Complete Reference

A comprehensive reference to the Peppol BIS Billing 3.0 business rules (PEPPOL-EN16931-xx): what they validate, the most common rule failures, how they differ from base EN 16931 rules, and how to diagnose and fix validation errors.

What Are Peppol BIS Billing 3.0 Business Rules?

Peppol BIS Billing 3.0 is a Core Invoice Usage Specification (CIUS) of EN 16931 using the UBL 2.1 syntax. As a CIUS, it inherits all EN 16931 base business rules (BR-xx) and adds additional Peppol-specific rules prefixed PEPPOL-EN16931-xx. These additional rules enforce interoperability constraints specific to the Peppol network — mandatory fields, restricted code lists, and specific payment means requirements that go beyond the base EN 16931 standard.

There are approximately 60 PEPPOL-EN16931-xx rules on top of the approximately 120 EN 16931 base rules. Understanding the distinction matters: an invoice can pass EN 16931 base validation but still fail Peppol BIS 3.0 validation for a PEPPOL-EN16931 rule. Both sets of rules are validated by certified Peppol access points before invoice delivery.

The official Peppol BIS Billing 3.0 validation artefacts (XSD schema and Schematron rules) are published by OpenPeppol and updated with each specification release. ValidateFin implements a comprehensive subset of these rules in the browser, covering the most common causes of Peppol invoice rejection.

Most Common Peppol BIS 3.0 Rule Failures

These are the Peppol-specific rules (PEPPOL-EN16931-xx) most frequently violated in real-world invoices:

PEPPOL-EN16931-R001: Buyer reference (BT-10) mandatory

Peppol BIS 3.0 makes the buyer reference (cbc:BuyerReference or cac:OrderReference/cbc:ID) mandatory, even though it is optional in base EN 16931. The buyer reference is used to route the invoice within the buyer's organisation. Its absence causes rejection at Peppol access points.

PEPPOL-EN16931-R004: Payment means code must be from restricted list

While EN 16931 allows any UNCL4461 payment means code, Peppol BIS 3.0 restricts the allowed codes. The most common valid codes are 30 (Credit Transfer), 49 (Direct Debit), and 58 (SEPA Credit Transfer). Code 1 (by instrument not otherwise specified) is not accepted.

PEPPOL-EN16931-R010: Seller VAT identifier mandatory when not tax-exempt

Peppol BIS 3.0 requires the seller's VAT identifier (cbc:CompanyID with schemeID='VAT' in SellerTaxRepresentativeParty or AccountingSupplierParty) when the seller is not tax-exempt. Missing seller VAT is one of the most common causes of Peppol invoice rejection.

PEPPOL-EN16931-R040: CustomizationID must be correct Peppol value

The cbc:CustomizationID must be exactly: urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0. Even minor variations (wrong separator, version number) cause schema identification failure. This value is case-sensitive.

PEPPOL-EN16931-R120: Only UBL Invoice or CreditNote document type

Peppol BIS 3.0 supports exactly two document types: Invoice (380) and Credit Note (381). Other document type codes (debit note 383, self-billing 389, etc.) are not supported. Using wrong document type code prevents proper processing at the buyer's access point.

EN 16931 Base Rules vs Peppol-Specific Rules

The base EN 16931 rules (BR-xx) define the minimum requirements for any EN 16931-compliant invoice. They ensure that mandatory fields are present, amounts are consistent, and VAT breakdowns are correct. These rules apply to all EN 16931 implementations — XRechnung, Factur-X, Peppol BIS 3.0, and any other CIUS.

The Peppol-specific rules (PEPPOL-EN16931-xx) are additional constraints that apply only to Peppol BIS 3.0 invoices. Key categories: (1) mandatory fields promoted from optional: buyer reference, seller VAT, order reference; (2) restricted code lists: payment means codes, unit of measure codes must come from specific UNCL and EU-defined code lists; (3) structural constraints: certain combinations of elements that are technically possible in EN 16931 but not supported in the Peppol context.

Diagnosis approach: when a Peppol invoice fails validation, check whether the failing rule is BR-xx (EN 16931 base) or PEPPOL-EN16931-xx (Peppol-specific). Base rule failures indicate missing mandatory fields or inconsistent amounts — these must be fixed for any EN 16931 compliance. Peppol rule failures indicate Peppol-network-specific constraints that may not apply to other CIUS implementations.

Schematron vs XSD Validation

Peppol BIS 3.0 validation uses two complementary mechanisms: XSD schema validation and Schematron rule validation. XSD validates the XML structure — element names, data types, cardinality, and nesting. A schema-valid invoice has correct XML syntax and all required elements in the right places. However, XSD cannot express cross-element logical constraints like 'the sum of line amounts must equal the invoice total'.

Schematron is an ISO standard for rule-based XML validation that can express these complex cross-element constraints. The Peppol BIS 3.0 Schematron rules implement all business rules: EN 16931 BR-xx rules and PEPPOL-EN16931-xx rules. An invoice must pass both XSD and Schematron validation to be accepted by a Peppol access point.

ValidateFin implements a comprehensive subset of the Peppol BIS 3.0 Schematron rules in the browser using JavaScript. It catches the most common rule failures including the PEPPOL-EN16931-xx rules listed above, providing actionable error messages with the specific rule code and affected element path.

Validate Your Peppol BIS 3.0 Invoices with ValidateFin

ValidateFin checks your UBL invoices against both EN 16931 base rules and Peppol BIS 3.0 specific rules in your browser. Get detailed error messages with rule codes and field paths — 100% client-side, no file uploaded.

Validate your Peppol invoice

Frequently Asked Questions

What is Peppol BIS Billing 3.0?

Peppol BIS Billing 3.0 (Business Interoperability Specification for Billing) is the standard electronic invoice format used on the Peppol network. It is a Core Invoice Usage Specification (CIUS) of EN 16931 using the UBL 2.1 syntax, with additional Peppol-specific business rules for interoperability across the Peppol network.

What is the CustomizationID for Peppol BIS 3.0?

The exact CustomizationID value is: urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 — This value must appear in the cbc:CustomizationID element of the UBL Invoice or CreditNote. It is case-sensitive and must be exactly as written.

Is buyer reference mandatory in Peppol BIS 3.0?

Yes. Peppol BIS 3.0 rule PEPPOL-EN16931-R001 makes the buyer reference (BT-10, mapped to cbc:BuyerReference or cac:OrderReference/cbc:ID) mandatory. Ask your buyers for their preferred reference value — it is typically a purchase order number or cost centre code used for internal routing.

What payment means codes are valid in Peppol BIS 3.0?

The allowed payment means codes in Peppol BIS 3.0 are: 10 (cash), 20 (cheque), 30 (credit transfer), 42 (payment to bank account), 48 (bank card), 49 (direct debit), 57 (standing agreement), 58 (SEPA credit transfer), 59 (SEPA direct debit), 97 (clearing between partners). Code 1 and most other UNCL4461 codes are not accepted.

How do I fix PEPPOL-EN16931-R040?

Set the cbc:CustomizationID element to exactly: urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0. Also set cbc:ProfileID to urn:fdc:peppol.eu:2017:poacc:billing:01:1.0. Both values are required and case-sensitive.

What is the difference between EN 16931 rules and Peppol rules?

EN 16931 rules (BR-xx) define the minimum requirements for any European e-invoice: mandatory fields, consistent amounts, valid VAT categories. Peppol rules (PEPPOL-EN16931-xx) add Peppol-specific requirements: mandatory buyer reference, restricted payment means codes, specific CustomizationID. A Peppol invoice must satisfy both sets of rules.

Can I use Peppol BIS 3.0 for non-Peppol delivery?

Yes. Peppol BIS 3.0 is a document format specification that can be used independently of the Peppol transport network. Some countries (Belgium, Netherlands) accept Peppol BIS 3.0 for direct delivery via other channels. The format is also accepted by non-Peppol e-invoicing platforms that support EN 16931 CIUS formats.

What is the Peppol BIS 3.0 ProfileID?

The ProfileID is: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 — This value in cbc:ProfileID identifies the billing process profile. It is different from the CustomizationID which identifies the CIUS specification. Both are required in a Peppol BIS 3.0 invoice.

How often are Peppol BIS 3.0 rules updated?

OpenPeppol releases updated validation artefacts (XSD + Schematron) approximately twice per year, typically in May and November. Updates fix bugs, add new code list values, and occasionally add new rules. Monitor the OpenPeppol GitHub repository for release announcements and update your validation tooling accordingly.

What tool can I use to validate Peppol BIS 3.0 invoices?

ValidateFin validates UBL invoices against both EN 16931 base rules and Peppol BIS 3.0 specific rules entirely in your browser. For server-side validation, Peppol access points validate all invoices before delivery. The OpenPeppol Schematron validation artefacts are available on GitHub for integration into your own build pipeline.