XRechnung (German national rules)

BR-DE-21: Invalid specification identifier (BT-24)

BT-24 must carry the XRechnung identifier – otherwise the invoice is not recognised as an XRechnung.

Fact sheet

Rule
BR-DE-21
Severity
Warning – the invoice remains valid
Rule set
XRechnung 3.0 (KoSIT)
Affected fields
BT-24
Syntax
CII & UBL

Check your invoice now

Upload a PDF or XML – free, without sign-up, against the official rule sets.

Open the online validator

Official wording

[BR-DE-21] Das Element "Specification identifier" (BT-24) soll syntaktisch der Kennung des Standards XRechnung entsprechen.

Source: official KoSIT Schematron for XRechnung 3.0.

What the rule requires

The specification identifier (BT-24) states which standard the invoice follows. For XRechnung 3.0 it is exactly:

urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0

Apart from that, the rule only accepts the identifiers of the XRechnung extension and of the clean vehicles variant (CVD). BR-DE-21 is a warning, so the invoice stays formally valid. Receiving platforms, however, choose their checks based on BT-24 – a wrong identifier easily leads to rejection there.

Common causes

  • The patch version is part of the identifier, e.g. xrechnung_3.0.2 – only xrechnung_3.0 is valid.
  • The old namespace from XRechnung 2.x combined with the new version number: urn:xoev-de:kosit:standard:xrechnung_3.0.
  • Typos or trailing spaces, often in identifiers hard-coded in the software.
  • An even older identifier such as xrechnung_2.3: many validators then no longer recognise the invoice as XRechnung 3.0 and do not apply its rules.

What it looks like in XML

✗ CII – wrong (patch version)
<rsm:ExchangedDocumentContext>
    <ram:GuidelineSpecifiedDocumentContextParameter>
        <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0.2</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>
✓ CII – correct
<rsm:ExchangedDocumentContext>
    <ram:BusinessProcessSpecifiedDocumentContextParameter>
        <ram:ID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</ram:ID>
    </ram:BusinessProcessSpecifiedDocumentContextParameter>
    <ram:GuidelineSpecifiedDocumentContextParameter>
        <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>

In UBL the same identifier goes into cbc:CustomizationID, the business process (BT-23) into cbc:ProfileID.

Fix in C#

In the Facturexa Creator you only choose the profile; the Creator writes the identifier itself. Also set the business process (BT-23) – XRechnung requires it via rule PEPPOL-EN16931-R001.

C#
invoice.BusinessProcess = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"; // BT-23

// The XRechnung profile writes the valid identifier to BT-24:
// urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0
invoice.Save(xmlStream, InvoiceProfile.XRechnung);

Related rules

All explained validation rules