Troubleshooting18 min read

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 seeWhenWhat it meansWhere to go
A rule ID such as BR-CO-14; in OrdoGrid, an error on the Peppol line of the send resultBefore transmissionThe file broke a fatal rule; nothing was sentThis article
Erreur (error), Pas sur Peppol (not on Peppol) or Nouvelle tentative (retrying) in Peppol → OutboxAfter transmission startedThe network could not deliver yet, or at allPeppol 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 contentPeppol 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 prefixDefined byChecks
BR-, BR-CO-, BR-CL-EN 16931Mandatory 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 16931One VAT category each
PEPPOL-EN16931-R, -CL, -POpenPeppolPeppol restrictions: buyer reference, attachment types, type codes
PEPPOL-COMMON-ROpenPeppolIdentifier 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:

RuleWhat OrdoGrid does
BR-CO-10 to BR-CO-17Calculates 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-R003Fills the buyer reference: N° bon de commande (PO number), else the Communication, else the invoice number
BR-CL-23The 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-25No line can be saved without a Description
R010, R020, PEPPOL-COMMON-R043Your 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, P0101Invoices 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:

CauseRulePrevention
Word (.docx, .doc), old Excel (.xls) or GIF attachmentPEPPOL-EN16931-CL001OrdoGrid 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-12These 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 clientPEPPOL-EN16931-R008, BR-09, BR-11An 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.

RuleChecksTypical causeFix
PEPPOL-EN16931-R003Buyer reference (BT-10) or order reference (BT-13)Both left emptyAdd 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-R043Every 0208 value: 10 digits, mod 97 checkDots, spaces, "BE" prefix, 9 digits, typoEnterprise number from the Crossroads Bank for Enterprises (KBO/BCE), digits only
PEPPOL-EN16931-R010, R020, CL008Buyer and seller electronic address, scheme from the EAS listMissing, or retired scheme such as 9956Belgian participants must be registered under 0208; 9925 (VAT number) is a valid extra scheme. Scheme and value must match
BR-CO-10Sum of line nets (BT-106) = Σ line nets (BT-131)Total from another calculationRecalculate from the lines
BR-CO-14Total VAT (BT-110) = Σ category VAT (BT-117), exactlyTotal VAT added up from rounded line VAT while the breakdown is calculated per rate, or typed in by handTake the total from the VAT breakdown
BR-CO-15Total incl. VAT (BT-112) = excl. VAT (BT-109) + VAT (BT-110)One total patched by handRecalculate; never patch one field
BR-CO-16Amount due (BT-115) = BT-112 − paid (BT-113) + rounding (BT-114)VAT-inclusive total sent as amount due without BT-114Send the difference as BT-114 (VAT-inclusive prices and rounding)
BR-CO-17, BR-S-08, BR-S-09Per rate: taxable amount = Σ line nets + document charges − document allowances, VAT = taxable × rate, each within less than 1.00Wrong rate, base or categoryCorrect the line, then recalculate
PEPPOL-EN16931-R120Line net = quantity × net price + charges − allowances (0.02 tolerance)Price rounded before multiplying; discount not sent as allowanceKeep 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-05Rate fits the category: above 0 for S, 0 for the others0% line under the Standard regimeChoose the right regime or rate
BR-E-10, BR-AE-10, BR-AE-02Exemption reason; for reverse charge, both VAT numbersReason or customer VAT number missingAdd them
BR-CL-23Units from UN/ECE Recommendation 20"pcs", "uur", "Stück"C62, HUR, DAY and so on
PEPPOL-EN16931-R002At most one document-level noteOne note per legal mentionCombine them in one note
PEPPOL-EN16931-P0100Allowed invoice type codes389 (self-billing) sent as BIS BillingSelf-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 regimeCategoryExemption reason sentMain rules
StandardS–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)EThe franchise mention printed on the PDF, no VATEX codeBR-E-02, BR-E-05, BR-E-10
Autoliquidation, Régime cocontractant (reverse charge)AEVATEX-EU-AEBR-AE-02, BR-AE-05, BR-AE-10
Livraison intracommunautaireKVATEX-EU-ICBR-IC-02, BR-IC-11, BR-IC-12
ExportGVATEX-EU-GBR-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.

LineQuantity × priceNetVAT
Flyers A5, 2,500 copies1 × €212.50€212.5021%
Posters A250 × €1.75€87.5021%
Business cards, 5001 × €162.50€162.5021%
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:

ExportValues in the fileResult
Breakdown €97.13, total VAT €97.14BT-117 differs from BT-110BR-CO-14 fails
Breakdown and total VAT €97.14, total €559.64ConsistentPasses thanks to the BR-CO-17 tolerance, but differs from the standard's €97.13
Posters line €87.50 with unit price €1.7050 × €1.70 = €85.00PEPPOL-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:

  1. Opens F-2026-0087 and checks N° bon de commande under Documents et Références: PO-4471 becomes the buyer reference (R003).
  2. Removes bon-de-livraison.docx and adds bon-de-livraison.pdf, exported from Word (CL001).
  3. Checks Options de TVA (VAT options): Standard, every line at 21%.
  4. 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.
  5. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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

SituationRiskWhat to do
Editing the XML by hand until it passesNew mismatches; the file no longer matches your booksCorrect the source data and regenerate the file
The report lists only warningsNone for sendingWarnings, such as the 3.0.21 checks on Dutch identifiers, do not block
One invoice for several purchase ordersEN 16931 (2017) carries one order reference per invoiceAsk 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 invoiceNot 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.failures and details.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