Automation MCP Server Features Blog Pricing Contact
Validation rule Peppol · German national rules

DE-R-015

Peppol carries national rule packs, and Germany's kicks in when both trading parties are German. DE-R-015 then requires a buyer reference (BT-10), mirroring XRechnung's famous BR-DE-15 on the network's own rails.

What DE-R-015 checks

DE-R-015 requires that a domestic German Peppol invoice carry a buyer reference, BT-10 (cbc:BuyerReference in UBL). Peppol BIS bundles national rule packs that activate on the parties' countries, and the German pack encodes the same conviction as XRechnung: German invoice processing routes and matches on the buyer reference, the Leitweg-ID in the public sector. When both parties are in DE, the network refuses a BIS document without it.

Layer and formats

The finding carries "layer": "cius" and fires when validating against the Peppol BIS profile with both country codes DE. It is the network-side sibling of BR-DE-15: the same document sent as XRechnung would fail there instead. Under options.profile en16931 neither overlay applies.

Why it fails in practice

  • A pan-European pipeline meets its first domestic German pair. The Peppol integration works across borders for months, then the first DE-to-DE invoice activates a rule pack nobody had seen.
  • The reference lives in the order data. The buyer communicated a reference or Leitweg-ID, but only BT-13, the purchase order reference, is mapped.
  • B2B parties never agreed on a reference. The field has no natural value outside the public sector, and stays empty unless the parties define one.

How to fix it

Add the buyer reference under the invoice root:

<cbc:BuyerReference>04011000-1234512345-06</cbc:BuyerReference>

In an InvoiceXML create request the field is invoice.buyerReference. For German public-sector buyers use the Leitweg-ID; for B2B use the reference agreed with the buyer.

The raw rejection vs the InvoiceXML finding

The raw Schematron output does not explain the domestic trigger:

<svrl:failed-assert id="DE-R-015" flag="fatal"
    location="/*:Invoice[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'][1]">
  <svrl:text>The element "Buyer reference" (BT-10)
    shall be provided.</svrl:text>
</svrl:failed-assert>

The InvoiceXML finding does:

{
  "rule": "DE-R-015",
  "layer": "cius",
  "line": null,
  "message": "This is a domestic German invoice (both parties in DE), so Peppol BIS requires a buyer reference (BT-10). Add the buyer reference (the Leitweg-ID for public-sector buyers); a purchase order reference does not substitute for it here.",
  "btCodes": ["BT-10"],
  "fields": ["buyerReference"],
  "raw": "[DE-R-015] CIUS: The element \"Buyer reference\" (BT-10) shall be provided."
}

The message explains why the rule fired and what exactly to add, and fields points at the request property. Your integration never maintains a rule-code lookup, and clients can localize by the stable rule key.

Check or generate Peppol documents

Validate a domestic German BIS document in the UBL validator to see the national rules fire, or generate with POST /v1/create/ubl, where national rule packs are always the network-current versions, updated server-side with each Peppol release. The Peppol hub covers the network, and for the German B2G side see the XRechnung API toolkit.

Frequently asked questions

When do the DE-R rules apply at all?

When the document is validated as Peppol BIS and both the seller's and the buyer's country code are DE. Cross-border invoices through a German access point do not trigger them; a Berlin company invoicing a Munich one over Peppol does.

Is DE-R-015 the same as BR-DE-15?

Same requirement, different rulebook. BR-DE-15 is a KoSIT rule firing when validating the XRechnung profile; DE-R-015 is OpenPeppol's German national rule firing on domestic German BIS documents. Which one you see depends on the profile the document was validated under.

Does a purchase order reference satisfy it?

No. The rule checks BT-10 specifically; a purchase order reference in BT-13 does not substitute, even if it contains the same value. Public-sector buyers expect their Leitweg-ID here, B2B parties whatever reference they agreed on.

Which layer does the finding appear in?

The cius layer, as part of the Peppol overlay. Validated under the plain en16931 profile the same document passes; the requirement exists on the network (and in XRechnung), not in the European core.