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.
Related rules and identifiers
- BR-DE-15, the same requirement in the XRechnung rulebook
- DE-R-001 and DE-R-002, the German pack's payment instructions and seller contact rules
- PEPPOL-EN16931-R010 and PEPPOL-EN16931-R020, the network's electronic address requirements
- The Peppol BIS Billing 3.0 CustomizationID, the identifier that activates the overlay