Guide

Common Peppol validation errors explained (with fixes)

The Peppol BIS Billing 3.0 validation errors UK senders hit most, with the exact rule text, why each one fires and how to fix it in the UBL.

Published 7 min readBy

Most Peppol validation errors fall into a handful of groups: totals that don't add up (BR-CO-10 to BR-CO-16), VAT category mistakes (BR-S, BR-Z, BR-E, BR-AE, BR-O), missing references (PEPPOL-EN16931-R003), and formatting problems such as empty elements, dates and decimals. Below are the errors UK senders hit most, with the exact rule text, the cause and the fix.

We reproduced every error listed here by breaking one element of a valid UK invoice and running it through the EN 16931 UBL rules and the Peppol BIS Billing 3.0 rules (OpenPEPPOL schematron and the docs.peppol.eu rule pages, May 2026 release).

How to read an error

A typical error looks like this:

[BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).
  • The prefix tells you who owns the rule. BR- rules come from the European standard EN 16931. PEPPOL-EN16931- and PEPPOL-COMMON- rules are Peppol's. UBL-SR, UBL-CR and UBL-DT are UBL syntax rules.
  • BT- numbers are EN 16931 business terms. BG- numbers are groups. Map them to UBL elements using the Peppol syntax pages.
  • Most rules are fatal. Some are warnings. A fatal error means the invoice is rejected.

Fix errors from the top down. One wrong amount often triggers three rules.

1. Totals and calculations

Rule Text Usual cause Fix
BR-CO-10 "Sum of Invoice line net amount (BT-106) = Σ Invoice line net amount (BT-131)." Header LineExtensionAmount not the sum of line amounts Recalculate from lines
BR-CO-13 "Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108)." Header discount or charge not reflected Recompute TaxExclusiveAmount
BR-CO-14 "Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117)." Header VAT ≠ sum of subtotals Set header to exact sum
BR-CO-15 "Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110)." Rounding, or two VAT totals in the invoice currency Full guide
BR-CO-16 "Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114)." Payable rounded without PayableRoundingAmount Use BT-114 for rounding
BR-CO-17 "VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals." VAT in a breakdown off by 1.00 or more Recalculate per category and rate
PEPPOL-EN16931-R120 "Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) + Sum of invoice line charge amount - sum of invoice line allowance amount" Price × quantity ≠ line amount, often a hidden discount Show discounts as line allowances
BR-DEC-23 "The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2." Line amount with 3+ decimals Round line amounts to 2 dp

Two things that surprise people:

  • BR-CO-17 and BR-S-09 have a tolerance; the header rules do not. The UBL tests accept a breakdown VAT amount within 1 of base × rate, so per-line rounding usually passes. BR-CO-14 and BR-CO-15 must match to the penny.
  • Unit prices can have more than 2 decimals; line amounts cannot. Peppol says the unit price amount "does not set restrictions on number of decimals", so £0.0125 per unit is fine. The line net amount must still have at most 2 decimals. The published R120 test lets it differ from quantity × price (plus line charges, minus line allowances) by up to 0.02.

2. VAT categories

Rule Text (shortened) Usual cause Fix
BR-S-05 Standard rated line: "VAT rate (BT-152) shall be greater than zero" Zero-rated item coded as S at 0% Use Z
BR-S-10 "Standard rate" breakdown "shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120)" ERP fills reason on every line Remove reason for S
BR-Z-01 / BR-S-01 An invoice with a Z (or S) line must have a Z (or S) breakdown Breakdown missing for one category One breakdown per category and rate
BR-E-10 Exempt breakdown "shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120)" Reason missing Add cbc:TaxExemptionReason
BR-AE-05 Reverse charge line "VAT rate (BT-152) shall be 0 (zero)" AE sent at 20% Rate 0; show 20% in text
BR-AE-02 Reverse charge needs seller and buyer VAT identifiers Customer VAT number missing Add buyer PartyTaxScheme
BR-O-02 / BR-O-11 "Not subject to VAT" invoices cannot carry VAT numbers or other VAT categories Outside-scope line on a normal invoice Separate invoice
BR-CL-17 / BR-CL-18 "Invoice tax categories MUST be coded using UNCL5305 code list" Internal code like T1, R or 20 sent Map to S, Z, E, AE, O

The UK mapping is in UK VAT category codes in Peppol. Construction is covered in reverse charge e-invoices.

3. Parties, identifiers and references

PEPPOL-EN16931-R003: "A buyer reference or purchase order reference MUST be provided." This is the most common Peppol-specific error. Fill cbc:BuyerReference (BT-10) or cac:OrderReference/cbc:ID (BT-13). See buyer reference and PO number.

BR-CO-09: VAT identifiers "shall have a prefix in accordance with ISO code ISO 3166-1 alpha-2". UK VAT numbers must be sent as GB123456789, not 123456789. Northern Ireland goods traders using an XI number follow the same pattern with XI.

BR-62 / BR-63: "The Seller electronic address (BT-34) shall have a Scheme identifier." (BR-63 is the same for the buyer.) cbc:EndpointID needs a schemeID such as 0088 or 9932. See Peppol EAS codes in the UK.

PEPPOL-EN16931-R010 / R020: "Buyer electronic address MUST be provided" / "Seller electronic address MUST be provided".

PEPPOL-COMMON-R040: "GLN must have a valid format according to GS1 rules." A 0088 identifier with a bad check digit fails here.

4. Formatting and structure

PEPPOL-EN16931-R008: "Document MUST not contain empty elements." <cbc:BuyerReference></cbc:BuyerReference> fails. Remove elements you have no value for. Don't send them empty.

PEPPOL-EN16931-F001: "A date MUST be formatted YYYY-MM-DD." 20/10/2026 also fails the UBL schema before schematron runs.

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 format rules for the identifier." Copy the cbc:CustomizationID exactly.

PEPPOL-EN16931-R002: "No more than one note is allowed on document level, unless both the buyer and seller are German organizations." Merge your notes into one cbc:Note.

PEPPOL-EN16931-R053: "Only one tax total with tax subtotals MUST be provided."

PEPPOL-EN16931-R051: "All currencyID attributes must have the same value as the invoice currency code (BT-5), except for the invoice total VAT amount in accounting currency (BT-111)." See multi-currency e-invoices.

BR-27: "The Item net price (BT-146) shall NOT be negative." For credits, use a negative quantity or a credit note, never a negative price. See credit notes in Peppol.

5. Attachments

PEPPOL-EN16931-CL001: "Mime code must be according to subset of IANA code list." Only PDF, PNG, JPEG, CSV, XLSX and ODS are allowed. A Word document fails.

UBL-DT-07: "Binary object elements shall contain the file name attribute".

BR-52: "Each Additional supporting document (BG-24) shall contain a Supporting document reference (BT-122)."

Details in attaching a PDF to a Peppol invoice.

Schema errors come first

Before any of these rules run, the XML must be valid UBL 2.1. Elements in the wrong order are the usual cause, for example cbc:Note after cbc:DocumentCurrencyCode, or cac:Delivery after cac:PaymentMeans. These come back as schema messages ("This element is not expected"), not as BR codes. Peppol's syntax pages list the required order.

What to do now

  • Validate before you send. The EN 16931 and Peppol schematron files are public, and most Access Points validate on submission.
  • Log rejection codes and fix them at the source (ERP mapping or master data), not by hand.
  • Build totals from the lines up, in one direction.
  • Watch for the UK specification. Peppol BIS Billing 3.0 has country rules for several countries (for example Germany, the Netherlands and Sweden) but none for the UK today. A UK specification for the 2029 mandate could add UK rules. None has been published. Check the timeline.

Frequently asked questions

What do the prefixes in Peppol error codes mean?

BR- rules come from EN 16931 (BR-CO are calculations and conditions, BR-S, BR-Z, BR-E, BR-AE, BR-O are VAT category rules, BR-CL are code lists, BR-DEC are decimals). PEPPOL-EN16931- rules are Peppol's own. UBL-SR, UBL-CR and UBL-DT are UBL syntax rules.

What is the difference between fatal and warning?

A fatal error means the invoice fails validation and should be rejected. A warning is reported but does not stop the invoice.

Who validates a Peppol invoice?

The sender's software or Access Point should validate before sending, and the receiving side validates again. Rejected invoices may come back as a Message Level Response.

Are there UK-specific Peppol validation rules?

Not today. Peppol BIS Billing 3.0 has country rules for some countries, but none for the UK. A UK specification for the 2029 mandate could add some, but none has been published.

Spotted a mistake? Report an error. einvoices.uk is an independent publication and is not affiliated with HMRC. Details of the mandate may change; check the sources and official GOV.UK guidance before acting.