Common UBL & Peppol BIS 3.0 Errors and How to Fix Them
The most frequent UBL 2.1 and Peppol BIS Billing 3.0 validation errors, with root causes and practical fixes for each.
Why UBL invoices get rejected
UBL 2.1 invoices sent via the Peppol network must comply with both the UBL schema and the Peppol BIS Billing 3.0 business rules. These rules enforce EN 16931 compliance, ensuring invoices are machine-processable across Europe. Violations cause rejection by the receiving access point or the buyer's ERP system.
This guide covers the most common UBL and Peppol errors, organized by category. Each includes the specific rule violated, the XML element involved, and a tested fix.
ValidateFin checks all of these rules in your browser — no file uploaded.
Schema and structure errors
Fundamental XML structure issues that prevent parsing.
Wrong UBL namespace
The root element must use the correct UBL 2.1 namespace: urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 or CreditNote-2. A wrong or missing namespace causes immediate schema failure.
Missing CustomizationID or ProfileID
Peppol requires cbc:CustomizationID (e.g., urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0) and cbc:ProfileID (urn:fdc:peppol.eu:2017:poacc:billing:01:1.0). Without these, the access point cannot route the invoice.
Invalid document type
Peppol BIS 3.0 only supports Invoice and CreditNote. Other UBL document types (DebitNote, Order) are not valid in the billing context.
Tax and amount errors
Peppol enforces strict mathematical rules on tax calculations.
PEPPOL-EN16931-R004: Currency mismatch
DocumentCurrencyCode must match the currency of all monetary amounts. You cannot mix EUR and USD amounts in a single invoice.
PEPPOL-EN16931-R040/R041: Tax calculation errors
The tax amount must equal the taxable amount × tax rate (within rounding tolerance). TaxTotal must equal the sum of all TaxSubtotal amounts. Even 0.01 difference causes failure.
PEPPOL-EN16931-R053: Payable amount mismatch
PayableAmount must equal LegalMonetaryTotal/TaxExclusiveAmount + TaxTotal/TaxAmount - PrepaidAmount. This end-to-end consistency check catches most mathematical errors.
Party and identification errors
Buyer and seller identification issues.
Missing seller VAT number
The seller (AccountingSupplierParty) must include a VAT identification number in PartyTaxScheme/CompanyID for tax-liable invoices. The format must match the country (e.g., FR + 11 chars, DE + 9 digits).
Invalid endpoint identifier scheme
Peppol requires EndpointID with a valid scheme (e.g., 0208 for Belgian enterprise number, 0106 for Dutch KvK). Using the wrong scheme prevents network routing.
Missing or invalid buyer reference
BuyerReference (BT-10) is mandatory in Peppol BIS 3.0. For German XRechnung, this must be the Leitweg-ID. Missing or malformed references cause buyer-side rejection.
Validate your UBL invoice now
ValidateFin checks UBL schema, Peppol BIS 3.0 business rules, EN 16931 mandatory fields, and VAT number formats — all in your browser, no file uploaded.
Open UBL ValidatorFrequently Asked Questions
How many Peppol validation rules are there?
Peppol BIS Billing 3.0 defines approximately 150 business rules (PEPPOL-EN16931-R*) on top of the UBL schema. ValidateFin checks all of them.
What is the difference between UBL schema validation and Peppol rules?
UBL schema (XSD) validates XML structure. Peppol rules validate business logic: tax math, mandatory fields, code list values. An invoice can pass XSD but fail Peppol rules.
Can I send a UBL invoice without Peppol?
Yes. UBL is an open standard. You can send UBL invoices via email, SFTP, or any channel. Peppol BIS 3.0 rules only apply when using the Peppol network.
Which UBL version does Peppol use?
Peppol BIS Billing 3.0 uses UBL 2.1. There is no official Peppol support for UBL 2.2 or 2.3 yet.
What is a Schematron rule?
Schematron is an XML validation language used to express Peppol business rules. Unlike XSD (which validates structure), Schematron can validate cross-field relationships like "if tax category is S, then tax rate must be > 0".
How do I find my Peppol endpoint?
Your Peppol endpoint is registered with your access point provider. It uses a scheme ID (e.g., 0208 for BE enterprise number) and your identifier. Check with your AP provider.
Can ValidateFin check NLCIUS or XRechnung rules?
ValidateFin validates against Peppol BIS 3.0 and EN 16931 core rules, which cover the majority of NLCIUS and XRechnung requirements. Country-specific extensions may require additional validation.
What is BR-CO-10?
BR-CO-10 is an EN 16931 rule requiring that the sum of Invoice line net amounts equals the Tax exclusive amount. It is one of the most commonly failed rules due to rounding issues.
Do credit notes follow the same rules?
Yes. Peppol BIS 3.0 applies the same business rules to both Invoice and CreditNote. The main difference is the document type code (380 for invoice, 381 for credit note).
How often do Peppol rules change?
Peppol publishes rule updates roughly twice per year (spring and fall releases). Each update may add, modify, or remove rules. ValidateFin stays current with the latest release.