# 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.

- Canonical URL: https://einvoices.uk/news/common-peppol-validation-errors
- Published: 20 October 2026 (2026-10-20)
- Last updated: 20 October 2026 (2026-10-20) (not updated since publication)
- Author: Floris Lindenaar, Editor, e-invoicing expert (https://einvoices.uk/authors/floris-lindenaar)
- Publisher: einvoices.uk (https://einvoices.uk)
- Type: Guide
- Topics: Validation, Peppol, Technical, Finance teams
- Language: en-GB (UK English); covers the United Kingdom

## Sources

- [Rules for Peppol BIS 3.0 Billing](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/)
- [EN16931 model bound to UBL – Peppol BIS Billing 3.0 rules](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/)
- [Peppol BIS Billing 3.0 (May 2026 release, version 3.0.21)](https://docs.peppol.eu/poacc/billing/3.0/bis/)
- [ConnectingEurope/eInvoicing-EN16931 validation artefacts](https://github.com/ConnectingEurope/eInvoicing-EN16931)
- [OpenPEPPOL/peppol-bis-invoice-3 validation rules](https://github.com/OpenPEPPOL/peppol-bis-invoice-3)

---

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:

```text
[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](https://docs.peppol.eu/poacc/billing/3.0/syntax/ubl-invoice/tree/).
- 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](https://einvoices.uk/news/peppol-validation-error-br-co-15) |
| 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](https://einvoices.uk/news/uk-vat-category-codes-peppol). Construction is covered in [reverse charge e-invoices](https://einvoices.uk/news/domestic-reverse-charge-construction-e-invoice).

## 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](https://einvoices.uk/news/purchase-order-reference-buyer-reference-peppol).

**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](https://einvoices.uk/news/peppol-eas-codes-uk-9932-0088).

**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](https://einvoices.uk/news/multi-currency-e-invoices-gbp).

**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](https://einvoices.uk/news/credit-notes-peppol-uk).

## 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](https://einvoices.uk/news/invoice-attachments-peppol).

## 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](https://github.com/ConnectingEurope/eInvoicing-EN16931) and [Peppol](https://github.com/OpenPEPPOL/peppol-bis-invoice-3) 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](https://einvoices.uk/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.

---

How to cite: "Common Peppol validation errors explained (with fixes)", einvoices.uk, 20 October 2026, https://einvoices.uk/news/common-peppol-validation-errors

einvoices.uk is an independent publication and is not affiliated with HMRC or the UK Government. Nothing here is tax advice; check the sources and official GOV.UK guidance before acting.
