Every Peppol validation error names a rule identifier. The prefix tells you which rule set the rule belongs to, who maintains it, what it governs and where the normative text is published. Start with the prefix to identify the relevant validation layer before examining the invoice.
Prefixes and what they govern
| Prefix | Rule set | Governs | Published by |
| BR- | EN 16931 business rules | Mandatory business terms and their combinations | CEN/TC 434 |
| BR-CO- | EN 16931 calculation rules | Totals, sums and derived amounts | CEN/TC 434 |
| BR-CL- | EN 16931 code list rules | Values restricted to a code list | CEN/TC 434 |
| BR-DEC- | EN 16931 decimal rules | Number of decimals in an amount | CEN/TC 434 |
| BR-S-, BR-Z-, BR-E-, BR-AE-, BR-IC-, BR-G-, BR-O-, BR-AF-, BR-AG- | EN 16931 VAT category rules | One family per VAT category | CEN/TC 434 |
| UBL-SR-, UBL-CR- | Syntax rules for UBL | How the model is expressed in UBL | CEN/TC 434 |
| CII-SR- | Syntax rules for CII | How the model is expressed in CII | CEN/TC 434 |
| PEPPOL-EN16931-R | Peppol rules | Requirements Peppol adds on top of EN 16931 | OpenPeppol |
| PEPPOL-EN16931-CL | Peppol code list rules | Peppol restrictions on code list values | OpenPeppol |
| PEPPOL-COMMON-R | Peppol identifier rules | Format of national organization and tax identifiers | OpenPeppol |
| SE-R-, NO-R-, DK-R-, NL-R-, DE-R-, IT-R-, GR-R-, IS-R- | National rules | Country requirements applied by party country | The relevant Peppol Authority |
The VAT category families
Each VAT family enforces the field combination its category requires. BR-S- covers standard rate, BR-Z- zero rated, BR-E- exempt, BR-AE- reverse charge, BR-IC- intra-community supply, BR-G- export outside the EU and BR-O- not subject to VAT.
Two families do not follow the pattern. The Canary Islands tax (IGIC, category code L) is BR-AF-, and the Ceuta and Melilla tax (IPSI, category code M) is BR-AG-. BR-IG- and BR-IP- are not EN 16931 rule-family prefixes.
Common Peppol validation rules
| Identifier | Message | Severity |
| PEPPOL-EN16931-R001 | Business process MUST be provided | Fatal |
| PEPPOL-EN16931-R004 | Specification identifier MUST begin with the value urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 and follow the identifier format rules | Fatal |
| PEPPOL-EN16931-R007 | Business process MUST have an approved identifier | Fatal |
| PEPPOL-EN16931-R008 | Document MUST not contain empty elements | Fatal |
| PEPPOL-EN16931-R010 | Buyer electronic address MUST be provided | Fatal |
| PEPPOL-EN16931-R020 | Seller electronic address MUST be provided | Fatal |
| PEPPOL-COMMON-R052 | Danish chamber of commerce number (P) MUST be stated in the correct format | Fatal |
| PEPPOL-COMMON-R053 | Danish ERSTORG number (SE) MUST be stated in the correct format | Fatal |
R004 concerns an incorrect or truncated specification identifier. R008 occurs when a source system writes an empty element instead of omitting it.
Severity is a property of the release, not the rule
A rule identifier does not carry a fixed severity. The same rule can be a warning in one release and fatal in the next, and the artifact version your validator runs determines which applies.
In 3.0.21, PEPPOL-COMMON-R052 and PEPPOL-COMMON-R053 changed from warning to fatal because the rules now apply to all profiles. The Danish rules DK-R-003 and DK-R-017 became fatal in the same release. A document that passed with an earlier artifact version can therefore fail when validated against the new release.
The same release added warning rules for Dutch identifiers, PEPPOL-COMMON-R054 to R057, covering KVK numbers (0106), organization numbers (0190), establishment numbers (0217) and VAT numbers (9944). OpenPeppol states that these will become fatal in a future release and are warnings now to give implementers a transition period. Plan to resolve them before their severity changes.
If an invoice that used to pass now fails, check the release notes before checking the invoice.
Where the normative text lives
| Prefix | Where to look |
| PEPPOL-EN16931-R, PEPPOL-EN16931-CL, PEPPOL-COMMON-R | Rules for Peppol BIS 3.0 Billing on docs.peppol.eu |
| BR-, BR-CO-, BR-CL-, BR-DEC-, VAT families | The EN 16931 rule pages for your syntax |
| UBL-SR-, UBL-CR-, CII-SR- | The syntax binding rule pages for your syntax |
| National prefixes | The release notes first, then the country rule set |
Release notes show whether national rules have been added, revised or assigned a different severity.
Reading a rule identifier you have not seen before
- Start with the prefix. It identifies the owner and validation layer. A BR- rule concerns the invoice data. A UBL-SR- rule concerns how the file is built. A PEPPOL-COMMON-R rule concerns an identifier format. A national prefix means the rule was applied because of the seller’s or buyer’s country and may not apply to your next document.
- Check the severity in the current artifacts. The same identifier can be fatal in one release and a warning in another, and a forwarded error message may not identify the artifact version that produced it.
- Look up the business term the rule names. Peppol rule messages name the business concept, not the element path. The syntax page for that business term gives you the element, the cardinality and every other rule that applies to it, which is usually where the real cause is.
- Check whether a second rule fired on the same field. Rules cluster. A missing element gives one rule, a wrong value in that element gives another, and fixing only the one in the subject line leaves the document failing.
Related guidance
Normative sources
Peppol rules and EN 16931 rules for UBL, OpenPeppol. Rule families were also checked against the EN 16931 validation artifacts published by CEN/TC 434.