What DE-R-002 checks
DE-R-002 requires that a domestic German Peppol invoice carry the seller contact group, BG-6: cac:Contact inside the supplier party in UBL. German invoice processing assumes a reachable counterpart for clarifying questions, and the national pack enforces on the network what BR-DE-2 enforces in XRechnung: a name, a phone number, and an email address on the seller side.
Layer and formats
The finding carries "layer": "cius" and fires when validating against the Peppol BIS profile with both country codes DE. Under options.profile en16931 the overlay and the national packs are dropped; the European core itself keeps the contact group optional.
Why it fails in practice
- Master data without a billing contact. The seller record holds legal name and address; the accounts-receivable phone and inbox were never part of it.
- Privacy-motivated stripping. Personal names and direct numbers are removed from outbound documents, leaving the group empty or absent.
- A cross-border pipeline meets a domestic pair. The Peppol integration validated cleanly for months on exports; the first DE-to-DE document activates a pack nobody had tested against.
How to fix it
Emit the full contact trio in the supplier party:
<cac:Contact>
<cbc:Name>Accounts Receivable</cbc:Name>
<cbc:Telephone>+49 40 1234567</cbc:Telephone>
<cbc:ElectronicMail>billing@example.de</cbc:ElectronicMail>
</cac:Contact>
In an InvoiceXML create request the group is invoice.seller.contact with name, phone and email. Fill it once in your seller defaults and both the Peppol and the XRechnung rulebooks are satisfied.
The raw rejection vs the InvoiceXML finding
The raw Schematron output, silent about the domestic trigger:
<svrl:failed-assert id="DE-R-002" flag="fatal"
location="/*:Invoice[namespace-uri()='...']/cac:AccountingSupplierParty[1]/cac:Party[1]">
<svrl:text>The group "SELLER CONTACT" (BG-6) shall be provided.</svrl:text>
</svrl:failed-assert>
The InvoiceXML finding with the context and the field paths:
{
"rule": "DE-R-002",
"layer": "cius",
"line": null,
"message": "This is a domestic German invoice (both parties in DE), so Peppol BIS requires the seller contact group (BG-6). Add a seller contact with name, phone, and email.",
"btCodes": ["BG-6", "BT-41", "BT-42", "BT-43"],
"fields": ["seller.contact", "seller.contact.name", "seller.contact.phone", "seller.contact.email"],
"raw": "[DE-R-002] CIUS: The group \"SELLER CONTACT\" (BG-6) shall be provided."
}
The message explains the domestic-pair trigger and names the inputs; your UI marks all four paths invalid in one pass. No rule prose to parse, and clients localize by the stable rule key.
Check or generate Peppol documents
Validate a domestic German BIS document in the UBL validator, or generate with POST /v1/create/ubl: the national packs are always the network-current versions, applied server-side with nothing to monitor or redeploy. The Peppol hub has the full network picture.
Related rules and identifiers
- BR-DE-2, the same requirement in the XRechnung rulebook
- DE-R-001 and DE-R-015, the rest of the German national pack's headline rules
- The Peppol BIS Billing 3.0 CustomizationID, the identifier that activates the overlay