# E-Invoicing All in One for XRechnung B2G

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

- **What it is:** The routing identifier German public bodies need, validated, plus the XRechnung rules beyond the European baseline, checked before you send.
- **For:** Accounting
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 318 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_xrechnung
- **Not for:** 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.
- **Manual:** https://docs.bambooforge.dev/bambooforge_xrechnung/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-account.action_move_out_invoice_type
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_xrechnung
- **Manual last updated:** 2026-10-15

---
# E-Invoicing All in One for XRechnung B2G

## 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.

## How we make sure it works

Before every release, **11 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- An ordinary company is not held to the german rules.
- A reference of the wrong shape is only a warning.
- A malformed leitweg id is refused on the partner.
- A public invoice without a reference is blocked.
- No payment means is blocking.

The complete list is in the source you receive.

## Install

1. Copy `bambooforge_xrechnung` into your addons path and update the app list, or install the ZIP from the Odoo Apps Store.
2. Install **XRechnung: German B2G E-Invoicing**.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Web; einvoice (BambooForge) must be installed first app. No extra Python package.

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.
