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 validatorOfficial 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– onlyxrechnung_3.0is 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
<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>
<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.
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);