einvoice / EN 16931 / XRechnung rule reference

BR-DE-10

So beheben Sie den Fehler

Das Element "Deliver to city" (BT-77) muss übermittelt werden, wenn die Gruppe "DELIVER TO ADDRESS" (BG-15) übermittelt wird.

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

Deliver to city (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present.

Requires
Deliver to city (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present.
Business terms
BG-15 BT-77
Syntax
Binds the UBL-2.1 Invoice / CreditNote syntax and the UN/CEFACT-CII syntax
Location (UBL-2.1 path)
/ubl:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address
Fix (Deutsch)
Ergänzen Sie das erforderliche Element bei `/ubl:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address`: Das Element "Deliver to city" (BT-77) muss übermittelt werden, wenn die Gruppe "DELIVER TO ADDRESS" (BG-15) übermittelt wird.
Fix
Add the required element at `/ubl:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address`: Deliver to city (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present.
Severity
fatal
Provenance source
xrechnung-ubl
Provenance assert

Das Element "Deliver to city" (BT-77) muss übermittelt werden, wenn die Gruppe "DELIVER TO ADDRESS" (BG-15) übermittelt wird.

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-10 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-10 once the edit lands.

The same invoice, failing and fixed

No vendored test suite ships a labelled example for this rule, so this pair was found rather than written. The engine was run over the vendored instance corpus/xrechnung-testsuite/src/test/technical-cases/cius/01.01_comprehensive_test_ubl.xml under --profile xrechnung, then re-run over the same file with one mechanical edit applied to one element, over and over, until the edit below changed the verdict: the text content of CityName was deleted, leaving the element present but empty. The page publishes it because the engine reported BR-DE-10 for the edited document and did not report it for the untouched one.

UBL Invoice — fails

The vendored file around the change, verbatim:

<cac:Delivery>
  <cbc:ActualDeliveryDate>2018-04-13</cbc:ActualDeliveryDate>
  <cac:DeliveryLocation>
    <cbc:ID>68</cbc:ID>
    <cac:Address>
      <cbc:StreetName>[Deliver to street]</cbc:StreetName>
      <cbc:AdditionalStreetName>4. OG</cbc:AdditionalStreetName>
      <cbc:CityName></cbc:CityName>
      <cbc:PostalZone>98765</cbc:PostalZone>
      <cbc:CountrySubentity>Bayern</cbc:CountrySubentity>
      <cac:AddressLine>
        <cbc:Line>More Details</cbc:Line>
      </cac:AddressLine>
      <cac:Country>
        <cbc:IdentificationCode>DE</cbc:IdentificationCode>
      </cac:Country>
    </cac:Address>
  </cac:DeliveryLocation>
  <cac:DeliveryParty>
    <cac:PartyName>
      <cbc:Name>[Deliver to party name]</cbc:Name>
    </cac:PartyName>
  </cac:DeliveryParty>
</cac:Delivery>

UBL Invoice — passes

The same lines as 01.01_comprehensive_test_ubl.xml actually ships them — this block is the fix for the block above:

<cac:Delivery>
  <cbc:ActualDeliveryDate>2018-04-13</cbc:ActualDeliveryDate>
  <cac:DeliveryLocation>
    <cbc:ID>68</cbc:ID>
    <cac:Address>
      <cbc:StreetName>[Deliver to street]</cbc:StreetName>
      <cbc:AdditionalStreetName>4. OG</cbc:AdditionalStreetName>
      <cbc:CityName>[Deliver to city]</cbc:CityName>
      <cbc:PostalZone>98765</cbc:PostalZone>
      <cbc:CountrySubentity>Bayern</cbc:CountrySubentity>
      <cac:AddressLine>
        <cbc:Line>More Details</cbc:Line>
      </cac:AddressLine>
      <cac:Country>
        <cbc:IdentificationCode>DE</cbc:IdentificationCode>
      </cac:Country>
    </cac:Address>
  </cac:DeliveryLocation>
  <cac:DeliveryParty>
    <cac:PartyName>
      <cbc:Name>[Deliver to party name]</cbc:Name>
    </cac:PartyName>
  </cac:DeliveryParty>
</cac:Delivery>

What the engine reports for the edited invoice

{
  "element": "cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:CityName",
  "field": "cac:Delivery/cac:DeliveryLocation/cac:Address/cbc:CityName",
  "fix_hint": "Add the required element at `/ubl:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address`: Deliver to city (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present.",
  "location": "/ubl:Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address",
  "message": "The element 'Deliver to city' (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present.",
  "rule": "BR-DE-10",
  "severity": "fatal",
  "terms": [
    "BG-15",
    "BT-77"
  ],
  "title": "Deliver to city (BT-77) must be transmitted when DELIVER TO ADDRESS (BG-15) is present."
}

Rule ids the engine reports for 01.01_comprehensive_test_ubl.xml untouched: none. After the edit, BR-DE-10 is reported that was not before.

Two honest limits. This is an edit that provokes the rule, not the only one, and it is not a claim about how real exporters break it. And it is the reverse of the fix a reader needs: the passing block is the vendored file's own content, which is what a conformant invoice looks like here.

Reproduce it yourself: take corpus/xrechnung-testsuite/src/test/technical-cases/cius/01.01_comprehensive_test_ubl.xml from this repository, apply the one edit named above, and run einvoice validate 01.01_comprehensive_test_ubl.xml --profile xrechnung --format json, or paste the file into the browser validator, which runs this same engine locally with no upload.

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