Peppol invoice validation errors: rule IDs, causes and fixes
What Peppol validation errors such as BR-CO-14, R003, R043 and CL001 mean, how OrdoGrid checks each invoice before sending, and what to fix and what proof to keep.
- Updated
- Content owner
- Customer education team
- For
- Business owners and finance staff who send invoices on Peppol · Accountants reading validation reports for clients · Developers sending invoices through the OrdoGrid API
At a glance
A validation error means the invoice file broke a fatal rule of EN 16931 or Peppol BIS Billing 3.0, so it was refused before anyone received it. OrdoGrid checks every Peppol send against the official rules (BIS Billing 3.0.21, EN 16931 artefacts 1.3.16). Check attachments, VAT regime and addresses before you send: a refused invoice stays locked and needs OrdoGrid support.
Before you begin
- The invoice or credit note you want to send on Peppol, or the validation report you received
- Owner or administrator access to the OrdoGrid company
- Your customer's VAT number and, for a Belgian customer, its enterprise number
What you will achieve
- Read a rule ID and know which data to fix
- Tell a validation refusal apart from a delivery problem and a customer rejection
- Check an invoice in OrdoGrid before the first Peppol send
- Know what to keep and whom to contact after a refusal
On this page
A Peppol validation error means the structured invoice file broke a rule of the European standard EN 16931 or of Peppol BIS Billing 3.0, and was refused before it left. It is neither a delivery failure nor a customer rejection: the file never reached the customer, so there is nothing for them to book, approve or reject.
This guide is for anyone who sends structured invoices, reads a validation report or uses the OrdoGrid API. Messages shown before validation (such as a missing authorisation or a customer not found) and customer rejections are covered in Fix a failed Peppol send or a rejected Peppol invoice.
Validation error, delivery problem or rejection?
| What you see | When | What it means | Where to go |
|---|---|---|---|
| A rule ID such as BR-CO-14; in OrdoGrid, an error on the Peppol line of the send result | Before transmission | The file broke a fatal rule; nothing was sent | This article |
| Erreur (error), Pas sur Peppol (not on Peppol) or Nouvelle tentative (retrying) in Peppol → Outbox | After transmission started | The network could not deliver yet, or at all | Peppol delivery status |
| An Invoice Response such as RE Rejetée (rejected) or UQ Sous question (under query) | After delivery (Traité) | The customer's decision about the content | Peppol invoice responses |
Traité (processed) means the network delivered the file, not that the customer accepted its content; an invoice with wrong content still has to be corrected with a credit note.
How Peppol validation works
Validation has three layers: the UBL 2.1 XML schema (does the file follow the UBL structure?), the EN 16931 business rules (do data and sums hold together?) and the Peppol BIS Billing rules (Peppol restrictions and code lists). A fatal rule refuses the file; a warning only informs.
- Schematron
- The rule files published by CEN (EN 16931) and OpenPeppol (BIS Billing). Each assertion has an ID such as BR-CO-14, a flag (fatal or warning), a location in the XML and a message naming the business terms (BT numbers) involved.
| Rule prefix | Defined by | Checks |
|---|---|---|
| BR-, BR-CO-, BR-CL- | EN 16931 | Mandatory data (BR-02 invoice number), calculations (BR-CO-10 to BR-CO-17), code lists (units, countries) |
| BR-S-, BR-Z-, BR-E-, BR-AE-, BR-IC-, BR-G- | EN 16931 | One VAT category each |
| PEPPOL-EN16931-R, -CL, -P | OpenPeppol | Peppol restrictions: buyer reference, attachment types, type codes |
| PEPPOL-COMMON-R | OpenPeppol | Identifier formats, such as R043 for the Belgian enterprise number |
Which release applies. As of October 2026, the current release is Peppol BIS Billing 3.0.21 (May 2026 release), published on 20 May 2026 and mandatory since 17 August 2026. OpenPeppol publishes a release each spring and autumn, mandatory about three months later (release notes). Release 3.0.21 removed BR-CO-25 (due date or payment terms) and tightened PEPPOL-EN16931-R004: the specification identifier may no longer end with a version suffix such as ::2.1. Belgium has no national rules in BIS Billing; its only specific check is PEPPOL-COMMON-R043.
Reading a report line. "[BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117)" names the rule, then the business terms: BT-110 is the total VAT, BT-117 the VAT of each category. Fix the data behind those terms; one wrong amount often triggers several BR-CO rules at once.
What OrdoGrid checks before a Peppol send
OrdoGrid connects to Peppol through a certified access point. Before handing over a file, it builds the UBL from your Profil entreprise (company profile), the client and the invoice, and validates it against the UBL 2.1 schema, the EN 16931 validation artefacts 1.3.16 and the Peppol BIS Billing 3.0.21 rules. Only fatal rules stop the send. If one fails, nothing is transmitted: the send result shows Des erreurs sont survenues. (errors occurred) and, on the Peppol line, the English message "Official Peppol/EN16931 validation refused the emitted XML" or a similar one about the UBL 2.1 schema. The rule IDs are not shown on screen. After a refusal, Peppol → Outbox still lists the invoice with the badge Créé (created), and Envoyer shows Déjà envoyé via Peppol (already sent via Peppol), although nothing was transmitted; a draft invoice also stays Brouillon (draft) unless the email went out. Here, Créé does not mean the invoice is on its way.
OrdoGrid takes care of many rules itself, because it generates the file from your data:
| Rule | What OrdoGrid does |
|---|---|
| BR-CO-10 to BR-CO-17 | Calculates all totals from the lines, VAT once per rate; a cent difference from VAT-inclusive prices is sent as BT-114 (Arrondi, rounding) |
| PEPPOL-EN16931-R003 | Fills the buyer reference: N° bon de commande (PO number), else the Communication, else the invoice number |
| BR-CL-23 | The Unité (unit) picker offers only UN/ECE codes: C62, HUR, DAY, KGM, LTR, MTR, KWH, MTK. It may display a short symbol such as pcs or h, but the file always carries the code |
| BR-25 | No line can be saved without a Description |
| R010, R020, PEPPOL-COMMON-R043 | Your Peppol electronic address is 0208: plus the enterprise number from your BE VAT number; the customer's comes from the network lookup on its VAT number |
| P0100, P0101 | Invoices go as type 380, credit notes as 381 with the original invoice number |
The editor also blocks two VAT inconsistencies that would break BR-S-05: all lines at 0% under Standard (warning Attention : Régime standard incompatible avec TVA à 0%, then a modal with Appliquer ce régime, apply this regime), and a mix of 0% and other rates under Standard, refused when sending. Apply a proposed regime only if it is legally right: OrdoGrid's suggestion is not a tax rule.
What remains up to you:
| Cause | Rule | Prevention |
|---|---|---|
| Word (.docx, .doc), old Excel (.xls) or GIF attachment | PEPPOL-EN16931-CL001 | OrdoGrid accepts these files and sends all attachments with the invoice by default, but Peppol allows only PDF, PNG, JPEG, CSV, XLSX and ODS (MIME code list). Convert to PDF or remove the file under Documents et Références |
| Regime Livraison intracommunautaire (intra-Community supply of goods) | BR-IC-11, BR-IC-12 | These need a delivery date or invoicing period and a deliver-to country. OrdoGrid sends the date in Delivery / service date (its label follows your document language: Date de livraison / prestation in French), or else the invoice date (for a credit note, the date of the credited invoice), and the country of the client's address. Enter the actual delivery date when it differs from the invoice date; a credit note for an invoice issued outside OrdoGrid is refused until you fill it in. If the customer is not on Peppol, send by Email: cross-border invoices are outside the Belgian obligation (Invoice business customers abroad) |
| Incomplete address on your profile or the client | PEPPOL-EN16931-R008, BR-09, BR-11 | An empty field can produce an empty XML element, which R008 refuses. Complete street, Code postal, Ville and Pays in Profil entreprise and on the client |
Rule IDs: cause and fix
A selection of fatal rules, with their typical cause and fix. Tolerances come from the official rule pages (BIS rules, EN 16931 rules). CL001, R008, BR-09, BR-11 and BR-IC-11/12 are covered in the table "What remains up to you" above.
| Rule | Checks | Typical cause | Fix |
|---|---|---|---|
| PEPPOL-EN16931-R003 | Buyer reference (BT-10) or order reference (BT-13) | Both left empty | Add the customer's PO number; if there is none, BIS lets you put another reference in the buyer reference ("Your ref"), such as the name of the person who placed the order |
| PEPPOL-COMMON-R043 | Every 0208 value: 10 digits, mod 97 check | Dots, spaces, "BE" prefix, 9 digits, typo | Enterprise number from the Crossroads Bank for Enterprises (KBO/BCE), digits only |
| PEPPOL-EN16931-R010, R020, CL008 | Buyer and seller electronic address, scheme from the EAS list | Missing, or retired scheme such as 9956 | Belgian participants must be registered under 0208; 9925 (VAT number) is a valid extra scheme. Scheme and value must match |
| BR-CO-10 | Sum of line nets (BT-106) = Σ line nets (BT-131) | Total from another calculation | Recalculate from the lines |
| BR-CO-14 | Total VAT (BT-110) = Σ category VAT (BT-117), exactly | Total VAT added up from rounded line VAT while the breakdown is calculated per rate, or typed in by hand | Take the total from the VAT breakdown |
| BR-CO-15 | Total incl. VAT (BT-112) = excl. VAT (BT-109) + VAT (BT-110) | One total patched by hand | Recalculate; never patch one field |
| BR-CO-16 | Amount due (BT-115) = BT-112 − paid (BT-113) + rounding (BT-114) | VAT-inclusive total sent as amount due without BT-114 | Send the difference as BT-114 (VAT-inclusive prices and rounding) |
| BR-CO-17, BR-S-08, BR-S-09 | Per rate: taxable amount = Σ line nets + document charges − document allowances, VAT = taxable × rate, each within less than 1.00 | Wrong rate, base or category | Correct the line, then recalculate |
| PEPPOL-EN16931-R120 | Line net = quantity × net price + charges − allowances (0.02 tolerance) | Price rounded before multiplying; discount not sent as allowance | Keep the unit price unrounded; send the discount as a line allowance |
| BR-S-05, BR-Z-05, BR-E-05, BR-AE-05, BR-G-05 | Rate fits the category: above 0 for S, 0 for the others | 0% line under the Standard regime | Choose the right regime or rate |
| BR-E-10, BR-AE-10, BR-AE-02 | Exemption reason; for reverse charge, both VAT numbers | Reason or customer VAT number missing | Add them |
| BR-CL-23 | Units from UN/ECE Recommendation 20 | "pcs", "uur", "Stück" | C62, HUR, DAY and so on |
| PEPPOL-EN16931-R002 | At most one document-level note | One note per legal mention | Combine them in one note |
| PEPPOL-EN16931-P0100 | Allowed invoice type codes | 389 (self-billing) sent as BIS Billing | Self-billing has its own BIS specification; OrdoGrid does not issue self-billed invoices |
The enterprise number check. PEPPOL-COMMON-R043 divides the first eight digits by 97 and expects the last two digits to equal 97 minus the remainder. With the example FPS Finance gives, 0208:0308357159: 03083571 divided by 97 leaves 38, and 97 − 38 = 59, the last two digits. A typo such as 0308357195 fails. Enterprise numbers issued since September 2023 start with 1: they are valid and must be accepted as they are. FPS Finance points to lookup.peppol.org to check whether a number is registered.
The VAT categories OrdoGrid sends, and the rules each one triggers:
| OrdoGrid regime | Category | Exemption reason sent | Main rules |
|---|---|---|---|
| Standard | S | – | BR-S-05, BR-S-08, BR-S-09 |
| Taux zéro (zero rate) | Z | – | BR-Z-05 |
| Régime de la franchise de taxe (small-business exemption scheme) | E | The franchise mention printed on the PDF, no VATEX code | BR-E-02, BR-E-05, BR-E-10 |
| Autoliquidation, Régime cocontractant (reverse charge) | AE | VATEX-EU-AE | BR-AE-02, BR-AE-05, BR-AE-10 |
| Livraison intracommunautaire | K | VATEX-EU-IC | BR-IC-02, BR-IC-11, BR-IC-12 |
| Export | G | VATEX-EU-G | BR-G-02, BR-G-05 |
The code list (UNCL 5305) has no "franchise" category: the small-business scheme is sent as category E with an exemption reason. OrdoGrid also writes every VAT mention, followed by your Notes, in the single document note (BT-22) that rule R002 allows.
Worked example: one invoice, rule by rule
Imprimerie Dufour SRL (Namur) prints for Agence Lumen SRL (Brussels): invoice F-2026-0087 of 6 October 2026, due 5 November 2026, PO number PO-4471.
| Line | Quantity × price | Net | VAT |
|---|---|---|---|
| Flyers A5, 2,500 copies | 1 × €212.50 | €212.50 | 21% |
| Posters A2 | 50 × €1.75 | €87.50 | 21% |
| Business cards, 500 | 1 × €162.50 | €162.50 | 21% |
| Sum of line net amounts (BT-106) | €462.50 |
Under EN 16931, VAT is computed once for the 21% category: €462.50 × 21% = €97.125, rounded to €97.13. Total including VAT: €462.50 + €97.13 = €559.63; amount due €559.63.
A spreadsheet that rounds VAT line by line gets €44.63 + €18.38 + €34.13 = €97.14. What happens next depends on the export:
| Export | Values in the file | Result |
|---|---|---|
| Breakdown €97.13, total VAT €97.14 | BT-117 differs from BT-110 | BR-CO-14 fails |
| Breakdown and total VAT €97.14, total €559.64 | Consistent | Passes thanks to the BR-CO-17 tolerance, but differs from the standard's €97.13 |
| Posters line €87.50 with unit price €1.70 | 50 × €1.70 = €85.00 | PEPPOL-EN16931-R120 fails (difference €2.50) |
In OrdoGrid, TVA shows €97.13 and Total TVAC €559.63, so the file passes these rules automatically. The risk was elsewhere: the delivery note was attached as bon-de-livraison.docx. Before sending, the bookkeeper:
- Opens F-2026-0087 and checks N° bon de commande under Documents et Références: PO-4471 becomes the buyer reference (R003).
- Removes
bon-de-livraison.docxand addsbon-de-livraison.pdf, exported from Word (CL001). - Checks Options de TVA (VAT options): Standard, every line at 21%.
- Clicks Aperçu du PDF, then Envoyer, keeps Envoi électronique via Peppol ticked, unticks Email (the PDF is already inside the Peppol file, so the customer does not get two copies) and clicks Sauvegarder & Envoyer.
- Follows the row in Peppol → Outbox, using Vérifier (check) until it shows Traité.
With the Word file still attached, step 4 would have ended in a refusal and a locked invoice.
After a refusal in OrdoGrid
- Record the message. Screenshot the send result with the invoice number and the time: Peppol → Outbox will then list the invoice as Créé, not as refused.
- Check the Email line. Email and Peppol are sent in parallel. If Email was ticked and succeeded, the customer already has the PDF: do not send another copy. For an in-scope Belgian B2B sale, that PDF is not the legal invoice: the structured invoice still has to be issued, so step 5 remains necessary.
- Do not try again or create a new document. No second Sauvegarder & Envoyer, no Dupliquer, no Note de crédit: the invoice is locked, and a second document for the same sale risks double booking.
- Find the likely cause in the table "What remains up to you". For Livraison intracommunautaire, sending the same invoice by Email is a valid route and an exception to step 3: use Envoyer with only Email ticked, or the email action in the invoice list.
- Contact OrdoGrid support with the invoice number, the screenshot and the suspected cause. If the invoice does have to be replaced in the end, follow the advice of support and your accountant: when the PDF already reached the customer by email, the correction is a credit note and a new invoice (Fix a failed Peppol send or a rejected Peppol invoice).
Through the API. A send refused by validation returns HTTP 400 with the code PEPPOL_XML_INVALID; details.failures lists each failed rule (id, location, message) and details.validation the versions used. A UBL 2.1 schema failure reports its errors in details.schema_errors. When validation refuses a POST /api/v1/peppol/send call, that call has already created the invoice: it stays in OrdoGrid, locked, with its number. Do not repeat the call with corrected data, because that creates a second invoice for the same sale. If only an attachment failed (PEPPOL-EN16931-CL001), retry the same invoice with POST /api/v1/peppol/invoices/{id}/send and attachment_ids that leave the file out; to keep its content, add a PDF version under attachments. For any other rule, contact OrdoGrid support as described above. For new invoices, use UN/ECE unit codes and the six Peppol attachment types. There is no test mode: every call acts on real data and the real network.
Edge cases and common mistakes
| Situation | Risk | What to do |
|---|---|---|
| Editing the XML by hand until it passes | New mismatches; the file no longer matches your books | Correct the source data and regenerate the file |
| The report lists only warnings | None for sending | Warnings, such as the 3.0.21 checks on Dutch identifiers, do not block |
| One invoice for several purchase orders | EN 16931 (2017) carries one order reference per invoice | Ask the customer which reference it wants, or issue one invoice per order; FPS Finance describes a temporary workaround in its e-invoicing FAQ (question 12) |
| Credit note without a reference to the invoice | Not a validation error (BG-3 is optional in BIS; BR-55 only checks that a reference present has a number), but Belgian law requires a credit note to refer to the invoice it corrects (Royal Decree no. 1, art. 12) | OrdoGrid adds the original number; keep invoice numbers unique |
Evidence to keep
- The screenshot of the refusal, with invoice number, date and time, and whether the email went out.
- For API sends: the full error response, including
details.failuresanddetails.validation. - For a report from another tool: the report itself, with the rule IDs and the release it used.
- For invoices that went out: the XML and PDF as transmitted, which OrdoGrid archives with their validation versions and SHA-256 hashes. Download them from Peppol → Outbox (XML or PDF, or a ZIP of selected rows).
- A short note of what changed and why, for your accountant, if an invoice number ends up unused or replaced.
FAQ
Why does OrdoGrid refuse to send when the PDF looks fine?
The PDF is a readable copy. Peppol validates the structured XML, which since 1 January 2026 is the legal invoice for in-scope Belgian B2B sales. A Word attachment or an incomplete address breaks rules the PDF does not show.
Is a validation error the same as a rejected invoice?
No. A validation error stops the file before transmission: the customer received nothing. A rejection is an Invoice Response (RE) from a customer who received the invoice.
Which Peppol rules does OrdoGrid validate against?
The UBL 2.1 schema, the EN 16931 validation artefacts 1.3.16 and the Peppol BIS Billing 3.0.21 rules (May 2026 release, mandatory since 17 August 2026). Only fatal rules block a send.
Can I correct the invoice and send it again after a refusal?
Not yourself: the amounts, VAT, customer and number are locked from the moment OrdoGrid prepares the Peppol file, before validation. Do not duplicate or credit the invoice; contact OrdoGrid support with the invoice number and a screenshot.
Why does the VAT total not match the lines?
EN 16931 calculates VAT per category, not per line. When software adds up rounded line VAT for the total but calculates the breakdown per rate, BR-CO-14 fails.
Why is my customer's enterprise number refused by rule R043?
A 0208 value must be exactly ten digits, without BE, dots or spaces, and pass the mod 97 check on its last two digits. Check the number in the KBO/BCE register.
Does a clean validation report mean my VAT is correct?
No. Validation checks consistency; the right rate, regime and legal mentions remain your responsibility.
Sources and references
- Peppol BIS Billing 3.0: rules for Peppol BIS (PEPPOL-EN16931 and PEPPOL-COMMON)
- Peppol BIS Billing 3.0: EN 16931 business rules bound to UBL (BR rules)
- Peppol BIS Billing 3.0: release notes (3.0.21, May 2026)
- Peppol BIS Billing 3.0: specification, section 7.2.10 (attachments) and chapter 9 (rounding)
- Royal Decree of 17 December 2025, art. 10: rounding of structured e-invoices (Belgian Official Journal, 31.12.2025)
- FPS Finance, Peppol FAQ: enterprise number (0208) and participant lookup