Stampbench for the European Union

Default ruleseten16931@2017·EN 16931 core·40 rules

This is where Stampbench is deepest. Every invoice is checked against EN 16931-1:2017, the semantic standard the member-state formats are customisations of, and both syntaxes are read: UBL 2.1 and CII, the syntax ZUGFeRD and Factur-X carry. One national customisation is implemented in full — Germany’s XRechnung 3.0. The others are not, and are listed as such rather than implied.

Start here

Validate against the European core, then switch to a national profile when the buyer’s country has one implemented.

What works here today

Available now, no account needed to try any of it.

Invoice validation

40 EN 16931 core rules, including the full BR-S/E/AE/Z/G/O VAT category families. Every violation carries the rule id, the business term and the line it failed on.

Reads both XML syntaxes

UBL 2.1 and UN/CEFACT CII (the syntax ZUGFeRD and Factur-X carry), auto-detected from the document.

Deterministic repair

Totals and VAT amounts that disagree with the figures they are computed from have exactly one right answer, so Stampbench corrects them in your file. Anything it cannot derive is handed back to a person.

Invoice creation from JSON

Send lines with quantities, prices and VAT categories; Stampbench computes the totals and the VAT breakdown, then emits UBL 2.1.

German XRechnung profile

A further 16 BR-DE rules on top of the European core — the Leitweg-ID, buyer reference and contact requirements German public buyers enforce.

CLI, hosted API and CI

The same engine as an npm library, a CLI, a hosted REST API and a GitHub Action that annotates the failing line in a pull request.

Available in a specific case

Implemented, but it only applies in the situation described.

A domestic ruleset for this country

A national customisation of EN 16931 (a CIUS) with its own rules, on top of the European core.

Germany (XRechnung 3.0) is the one national CIUS implemented today. France, Italy and the rest are validated against the European core only — Factur-X profiles, FatturaPA and Peppol BIS rules are not implemented.

Not implemented

Listed so you can rule Stampbench out quickly if this is what you needed.

Deciding which tax rate to charge

Stampbench checks that the tax figures in a document are internally consistent and correctly declared. It does not decide which rate applies to a transaction.

Sending invoices over a network

Transmission through Peppol or a national exchange. Stampbench validates and produces documents; delivering them is someone else’s job today.

On the command line

The same engine, as an npm package. The header line names the ruleset that ran, so a result is never ambiguous about what it was measured against.

$ npx stampbench validate invoice.xml --profile en16931

invoice.xml  syntax: UBL | profile: en16931 | ruleset: 2026-08.2
  ERROR  BR-CO-17  VAT breakdown S @ 7%: tax amount should be
         22.04 (314.86 × 7%) but is 99.99. (line 78)
INVALID — 1 error, 0 warnings (40 rules run)

Other markets

Compare every market side by side, gaps included.