BFBambooForge Labs

XRechnung: German B2G E-Invoicing

The routing identifier German public bodies need, validated, plus the XRechnung rules beyond the European baseline, checked before you send.

Buy on the Odoo Apps StoreOpen the live demoAccounting€464Community & Enterprise

Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_xrechnung.

Odoo 16.0Odoo 17.0Odoo 18.0Odoo 19.0
Full walkthrough on a live Odoo 19.0 database, with subtitles. It ends with what this app deliberately does not do.

XRechnung: German B2G E-Invoicing

What this is for

Invoicing a German public body is not the same as invoicing a company. The document has to carry a Leitweg-ID — the routing identifier the authority publishes — and XRechnung adds rules on top of EN 16931 that the European baseline does not enforce.

Setting it up

On the customer: tick Public Sector Buyer and enter the Leitweg-ID they gave you. The identifier is validated against its published structure — a state or federal code, an optional middle part, and a two-digit check part, for example 04011000-1234512345-06. A typo is invisible until the invoice disappears, which is why it is checked on entry rather than at send time.

The flag matters: ordinary B2B invoices are not held to these rules, because nobody applies them there.

What gets checked

  • BR-DE-15 — no buyer reference. This is the most common reason a German B2G invoice bounces, and it bounces silently.

  • BF-DE-LEITWEG — a reference that is present but not shaped like one. A warning, not a stop: it is worth a look, and occasionally a department really does publish something unusual.

  • BR-DE-01 — no payment means. The invoice has to say how it is to be paid.

  • BR-DE-05, 06, 07 — a named seller contact with a telephone and an email. Most companies have never filled these in, and every German public buyer wants them.

The findings appear in the same pre-flight list as the European rules, on the invoice and in the company-wide view.

Known limits

  • The check verifies the shape of a Leitweg-ID, not that it exists. Only the authority's own directory can tell you that.

  • XRechnung has more rules than these; the ones here are those that actually bounce invoices in practice.

  • Sending is not part of this app — it produces an invoice that will be accepted, not the transport that delivers it.

Screens

Invoice - bambooforge_xrechnung
Invoice
Public body - bambooforge_xrechnung
Public body