E-Invoice Mandate Lint - EU 2026

Lints UBL/CII invoice XML against EN 16931 plus the 2026 country mandates (FR, DE, BE, PL, ES, IT) and flags retired schema versions. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Get the complete version $29

This page is the working piece. The full pack has everything below.

Lints UBL and CII invoice XML against EN 16931 and the national e-invoicing mandates that are live in 2026

An EN 16931 / Peppol integration consultant reviews an invoice mapping at about $170 an hour.

Buy the full version — $29

· ReadyStack

Worked example

Real numbers from this tool, line by line.

E-Invoice Mandate Lint - EU 2026

Nine errors and one warning, in a French B2B invoice that a Paris billing developer's XSD validator had called valid ten seconds earlier.

The file was ordinary. A French seller, a French buyer, two service lines, EUR 6,000.00 payable. It came out of a mapping written two years ago for a German customer, and nobody had looked at the specification identifier since.

Since 1 September 2026 that matters. Every VAT-registered business in France must be able to receive structured e-invoices, and large and mid-sized companies must issue them; SMEs and micro-enterprises follow on 1 September 2027. The invoice no longer travels to the buyer. It travels through an approved platform, and the platform accepts the whole document or rejects the whole document. There is no partially valid invoice, and a rejected invoice is an unpaid invoice.

Here is what 35 rules found in that one file.

The specification identifier still said xrechnung_2.3. XRechnung 2.3 was retired on 6 February 2025 and replaced by 3.0. The seller's legal registration identifier read "FR 732 829 320" - a SIREN is nine digits and a SIRET is fourteen, with no spaces and no country prefix. The buyer's PartyLegalEntity had no CompanyID at all, which a domestic French B2B invoice needs.

Then the arithmetic. LineExtensionAmount was declared as 4800.00 while the two lines add up to 5000.00 (BR-CO-10). TaxInclusiveAmount was declared as 5900.00 while 5000.00 + 1000.00 = 6000.00 (BR-CO-15). PayableAmount was declared as 6000.00 while the amount due recomputed from the totals is 5900.00 (BR-CO-16).

Because the file declared an XRechnung profile, the German CIUS rules applied as well: no BuyerReference, so no Leitweg-ID (BR-DE-15); no Contact block under the supplier party; no PaymentMeans. The single warning: 5900.00 is due and the file gives neither a due date (BT-9) nor payment terms (BT-20).

Why does a chatbot miss this? Because the timeline moved underneath it. Poland replaced the FA(2) structure with FA(3) on 1 February 2026 and made KSeF mandatory for every remaining VAT payer on 1 April 2026. Belgium's domestic B2B mandate went live on 1 January 2026 and its tolerance period ended on 31 March 2026. And Spain's Verifactu, which nearly every article written in 2025 places on 1 January 2026, was postponed by a full year - corporate income tax payers from 1 January 2027, everyone else from 1 July 2027. Ask a general model in September 2026 and you will often get the 2026 date, because that is what most of the text it read says.

A rule that is confident and out of date is worse than no rule, so the mandate dates and the profile identifiers live in rules.json as data rather than code. You can read exactly what the linter believes about France, Germany, Belgium, Poland, Spain and Italy before you trust a single finding, and you can see which rules stayed silent because their date has not arrived.

Run the same linter on a corrected copy and it returns zero errors and one informational line stating the mandate dates it was measured against.

Linting the file you have open is free and complete - all 35 rules, all six mandates, every finding shown, no watermark and no trial counter. It runs in VS Code and in the browser from the same engine file. The licence key is for a different job: scanning every invoice XML in a workspace in one pass and exporting the findings as JSON, CSV or SARIF that you keep and run in CI.

An EN 16931 / Peppol integration consultant reviews an invoice mapping at about $170 an hour.

Questions people ask

What does E-Invoice Mandate Lint actually do?

It reads a UBL 2.1 or UN/CEFACT CII invoice XML file, works out which national mandate applies from the CustomizationID and the seller country, and reports every missing business term, retired profile version and broken total against 35 rules, each anchored to the line it breaks on.

Who is it for?

Billing and ERP developers who emit invoices into France's Plateforme Agreee network, Belgium's Peppol B2B channel, Germany's XRechnung, or Poland's KSeF. If you own the mapping code that turns an order into an invoice XML, this checks your output before a national platform does.

Why is a free XSD validator or a chatbot not enough?

An XSD validator only proves the shape is legal UBL; it passes files that France or Belgium reject. Chatbots answer from the old timeline - they still quote retired XRechnung 2.3, treat Poland's FA(2) as current, and place Spain's Verifactu in 2026 after it moved to 2027.

What is free and what needs a licence key?

Linting the file you have open is free and complete: all 35 rules, all six country mandates, no watermark, no trial limit, no locked findings. The licence key unlocks a different job - scanning every invoice XML in the workspace at once and exporting the findings as JSON, CSV or SARIF.

What would this cost as a person?

An EN 16931 or Peppol integration consultant reviews an invoice mapping at roughly $170 an hour, and a mandate review of one country profile is rarely under half a day. The extension is $29 once, and the file-level lint is free forever.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Want the full version?
Enter your email and we send the download link.
ENDEJAESPT

Find a tool