What BR-DE-15 checks
BR-DE-15 requires that an XRechnung contain a buyer reference: element BT-10, cbc:BuyerReference in UBL, ram:BuyerReference in CII. The European core model treats the field as optional; the German CIUS makes it mandatory because the public sector uses it for routing. A German authority's invoice inbox is addressed by the Leitweg-ID, and BT-10 is where that identifier travels. No buyer reference, no routing, so the KoSIT rules reject the document outright.
Layer and formats
The rule belongs to the XRechnung overlay, so findings carry "layer": "cius". It fires whenever a document is validated against the XRechnung profile: pure XML invoices in UBL or CII syntax, and ZUGFeRD or Factur-X hybrids whose specification identifier declares the XRechnung profile. It never fires in the en16931 core layer, which is why the same file can pass a generic EN 16931 check and still bounce at a German B2G platform.
Why it fails in practice
- The Leitweg-ID never made it into the data. The buyer communicated it on the order, but the billing system has no field for it, so BT-10 goes out empty.
- B2B XRechnung without an agreed reference. XRechnung is increasingly used between companies, where no Leitweg-ID exists. The field is still mandatory; the parties need to agree on a reference.
- The value is mapped to the wrong element. A purchase order reference (BT-13) does not satisfy BR-DE-15, even when it holds the same string.
How to fix it
In the XML, add the reference under the invoice root:
<cbc:BuyerReference>04011000-1234512345-06</cbc:BuyerReference>
In an InvoiceXML create request the same field is invoice.buyerReference, a plain string at the top level of the document. Set it to the Leitweg-ID for public-sector buyers, or to the reference the buyer asked for.
The raw rejection vs the InvoiceXML finding
A Schematron validator reports BR-DE-15 in the words of the German rule text, attached to an XPath:
<svrl:failed-assert id="BR-DE-15" flag="fatal"
location="/*:Invoice[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'][1]">
<svrl:text>[BR-DE-15] Das Element "Buyer reference" (BT-10)
muss übermittelt werden.</svrl:text>
</svrl:failed-assert>
The InvoiceXML validators return the same failure as a finding you can hand straight to your UI:
{
"rule": "BR-DE-15",
"layer": "cius",
"line": null,
"message": "The buyer must have a reference (Leitweg-ID). This is mandatory for German public sector invoices.",
"btCodes": ["BT-10"],
"fields": ["buyerReference"],
"raw": "[BR-DE-15] CIUS: Das Element \"Buyer reference\" (BT-10) muss übermittelt werden."
}
You never parse rule codes or translate German rule prose for your customers: the message is already human-readable, and fields names the exact input to highlight in your form. Because the message table is keyed by rule code, clients that want their own wording (or another language) can localize by rule and still rely on btCodes and fields for the mapping.
Check or generate XRechnung documents
Paste a suspect file into the XRechnung validator to see every finding with rule, layer, and field path, or let POST /v1/create/xrechnung produce the document from JSON: a missing buyerReference is then a clean model-validation error before any XML exists. The XRechnung API toolkit walks through the full integration.
Related rules and identifiers
- DE-R-015, the Peppol twin of this rule for domestic German invoices on the network
- BR-DE-1, payment instructions required, and BR-DE-2, seller contact required
- BR-DE-21, the specification identifier must be the XRechnung one
- The XRechnung 3.0 CustomizationID, the BT-24 value that switches these rules on