einvoice / EN 16931 / XRechnung rule reference

BR-DE-2

So beheben Sie den Fehler

Die Gruppe "SELLER CONTACT" (BG-6) muss übermittelt werden.

Deutsche Fassung: Amtlicher KoSIT-Text (official KoSIT assert text).

SELLER CONTACT (BG-6) must be transmitted.

Requires
SELLER CONTACT (BG-6) must be transmitted.
Business terms
BG-6
Syntax
Binds the UBL-2.1 Invoice / CreditNote syntax and the UN/CEFACT-CII syntax
Location (UBL-2.1 path)
/ubl:Invoice/cac:AccountingSupplierParty
Fix (Deutsch)
Ergänzen Sie das erforderliche Element bei `/ubl:Invoice/cac:AccountingSupplierParty`: Die Gruppe "SELLER CONTACT" (BG-6) muss übermittelt werden.
Fix
Add the required element at `/ubl:Invoice/cac:AccountingSupplierParty`: SELLER CONTACT (BG-6) must be transmitted.
Severity
fatal
Provenance source
xrechnung-ubl
Provenance assert

Die Gruppe "SELLER CONTACT" (BG-6) muss übermittelt werden.

The Location above is a UBL-2.1 path, and no UN/CEFACT-CII path for this rule is published here; Fix and Fix (Deutsch), verbatim from remediation_catalog.json and not reworded here; the UN/CEFACT-CII binding of this rule is differentially proven against the official KoSIT XRechnung 2.5.0 (XRechnung 3.0.2) Schematron.

Korrektur prüfen: Laden Sie die geänderte Rechnung in den Browser-Validator unter /einvoice/validate/ — er führt dieselbe Engine lokal im Browser aus, ohne Upload, und meldet BR-DE-2 nicht mehr, sobald die Korrektur greift.

Where to check the fix: paste the corrected invoice into the browser validator at /einvoice/validate/ — it runs this same engine locally in your browser, with no upload, and stops reporting BR-DE-2 once the edit lands.

The same invoice, failing and fixed

Neither block below is hand-written. Both are cut verbatim from a vendored KoSIT test instance — one this engine already grades clean under --profile xrechnung — at the element this rule's own Schematron context names. The failing variant is that element with one mechanical change, spliced back into the whole instance and re-graded: it is published only because the engine reported BR-DE-2 for the changed document and did not report it for the untouched one. Both official XRechnung syntaxes are shown, because the same rule id is asserted in each: UBL (the KoSIT default) and UN/CEFACT CII (the syntax inside a ZUGFeRD / Factur-X PDF).

UBL — fails

The cac:AccountingSupplierParty element of the vendored UBL instance 01.06_minimal_test_ubl.xml, with exactly one change: its cac:Party/cac:Contact child is deleted.

<cac:AccountingSupplierParty>
  <cac:Party>
    <cbc:EndpointID schemeID="EM">rechnungsausgang@test.com</cbc:EndpointID>
    <cac:PartyIdentification>
      <cbc:ID>9876543217894897438</cbc:ID>
    </cac:PartyIdentification>
    <cac:PostalAddress>
      <cbc:CityName>[Seller city]</cbc:CityName>
      <cbc:PostalZone>12345</cbc:PostalZone>
      <cac:Country>
        <cbc:IdentificationCode>DE</cbc:IdentificationCode>
      </cac:Country>
    </cac:PostalAddress>
    <cac:PartyTaxScheme>
      <cbc:CompanyID>ATU123456789</cbc:CompanyID>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:PartyTaxScheme>
    <cac:PartyLegalEntity>
      <cbc:RegistrationName>[Seller name]</cbc:RegistrationName>
    </cac:PartyLegalEntity>
    <!-- BR-DE-2: cac:Party/cac:Contact (BG-6) removed -->
  </cac:Party>
</cac:AccountingSupplierParty>

UBL — passes

<cac:AccountingSupplierParty>
  <cac:Party>
    <cbc:EndpointID schemeID="EM">rechnungsausgang@test.com</cbc:EndpointID>
    <cac:PartyIdentification>
      <cbc:ID>9876543217894897438</cbc:ID>
    </cac:PartyIdentification>
    <cac:PostalAddress>
      <cbc:CityName>[Seller city]</cbc:CityName>
      <cbc:PostalZone>12345</cbc:PostalZone>
      <cac:Country>
        <cbc:IdentificationCode>DE</cbc:IdentificationCode>
      </cac:Country>
    </cac:PostalAddress>
    <cac:PartyTaxScheme>
      <cbc:CompanyID>ATU123456789</cbc:CompanyID>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:PartyTaxScheme>
    <cac:PartyLegalEntity>
      <cbc:RegistrationName>[Seller name]</cbc:RegistrationName>
    </cac:PartyLegalEntity>
    <cac:Contact>
      <cbc:Name>Tim Tester</cbc:Name>
      <cbc:Telephone>012 3456789</cbc:Telephone>
      <cbc:ElectronicMail>tim.tester@test.com</cbc:ElectronicMail>
    </cac:Contact>
  </cac:Party>
</cac:AccountingSupplierParty>

What the engine reports for the failing UBL invoice

{
  "element": "cac:AccountingSupplierParty/cac:Party/cac:Contact",
  "field": "cac:AccountingSupplierParty/cac:Party/cac:Contact",
  "fix_hint": "Add the required element at `/ubl:Invoice/cac:AccountingSupplierParty`: SELLER CONTACT (BG-6) must be transmitted.",
  "insertion_point_line": 12,
  "location": "/ubl:Invoice/cac:AccountingSupplierParty",
  "message": "The group 'SELLER CONTACT' (BG-6) must be transmitted.",
  "rule": "BR-DE-2",
  "severity": "fatal",
  "terms": [
    "BG-6"
  ],
  "title": "SELLER CONTACT (BG-6) must be transmitted."
}

Rule ids reported for the failing document: BR-DE-2. For the corrected document: none. (BR-DE-TMP-32, an information-level finding about the delivery date, is reported for both documents and is not affected by this edit.)

CII — fails

The ram:SellerTradeParty element of the vendored CII instance 01.06_minimal_test_uncefact.xml, with exactly one change: its ram:DefinedTradeContact child is deleted.

<ram:SellerTradeParty>
    <!-- BT-29 -->
    <ram:ID>9876543217894897438</ram:ID>
<!-- BT-27 -->
    <ram:Name>[Seller name]</ram:Name>
    <!-- BR-DE-2: ram:DefinedTradeContact (BG-6) removed -->
    <ram:PostalTradeAddress>
<!-- BT-38 -->
        <ram:PostcodeCode>12345</ram:PostcodeCode>
<!-- BT-37 -->
        <ram:CityName>[Seller city]</ram:CityName>
<!-- BT-40 -->
        <ram:CountryID>DE</ram:CountryID>
    </ram:PostalTradeAddress>
    <!-- BT-34 -->
    <ram:URIUniversalCommunication>
        <ram:URIID schemeID="EM">rechnungsausgang@test.com</ram:URIID>
    </ram:URIUniversalCommunication>
    <!-- BT-31 -->
    <ram:SpecifiedTaxRegistration>
        <ram:ID schemeID="VA">ATU123456789</ram:ID>
    </ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>

CII — passes

<ram:SellerTradeParty>
    <!-- BT-29 -->
    <ram:ID>9876543217894897438</ram:ID>
<!-- BT-27 -->
    <ram:Name>[Seller name]</ram:Name>
    <ram:DefinedTradeContact>
<!-- BT-41 -->
        <ram:PersonName>Tim Tester</ram:PersonName>
<!-- BT-42 -->
        <ram:TelephoneUniversalCommunication>
            <ram:CompleteNumber>012 3456789</ram:CompleteNumber>
        </ram:TelephoneUniversalCommunication>
<!-- BT-43 -->
        <ram:EmailURIUniversalCommunication>
            <ram:URIID>tim.tester@test.com</ram:URIID>
        </ram:EmailURIUniversalCommunication>
    </ram:DefinedTradeContact>
    <ram:PostalTradeAddress>
<!-- BT-38 -->
        <ram:PostcodeCode>12345</ram:PostcodeCode>
<!-- BT-37 -->
        <ram:CityName>[Seller city]</ram:CityName>
<!-- BT-40 -->
        <ram:CountryID>DE</ram:CountryID>
    </ram:PostalTradeAddress>
    <!-- BT-34 -->
    <ram:URIUniversalCommunication>
        <ram:URIID schemeID="EM">rechnungsausgang@test.com</ram:URIID>
    </ram:URIUniversalCommunication>
    <!-- BT-31 -->
    <ram:SpecifiedTaxRegistration>
        <ram:ID schemeID="VA">ATU123456789</ram:ID>
    </ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>

The CII run reports BR-DE-2 at ram:SellerTradeParty/ram:DefinedTradeContact and, for the corrected document, none — the same rule id, a different syntax and a different element path.

The rule as the vendored Schematron states it

UBL context
/ubl:Invoice/cac:AccountingSupplierParty | /cn:CreditNote/cac:AccountingSupplierParty
UBL assert
cac:Party/cac:Contact
CII context
/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ram:SellerTradeParty
CII assert
ram:DefinedTradeContact
Artifact
corpus/xrechnung-schematron/schematron/ubl/XRechnung-UBL-validation.sch

Reproduce it yourself: put the failing block into 01.06_minimal_test_ubl.xml in place of its cac:AccountingSupplierParty element and run einvoice validate invoice.xml --profile xrechnung --format json, or paste the file into the browser validator, which runs the same engine locally with no upload.

Everything here is free and open source — pick up whatever helps, at your own pace: