What does BR-38 mean?
Every document level charge must be justified, as free text or as a reason code. That keeps the surcharge transparent.
Common causes of BR-38
- The charge contains neither ram:Reason (BT-104) nor ram:ReasonCode (BT-105).
- The field ram:Reason is present, but empty.
- The reason was shown only in the PDF layout, not stored in the XML.
How to fix BR-38
- Find the faulty spot in the XML. Open the XML of the invoice and go to field BT-104 along this XPath:
//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason - Apply the fix. Every document level charge (BG-21) needs a reason: either the free text ram:Reason (BT-104) or the reason code ram:ReasonCode (BT-105) per UNTDID 7161. Add at least one of the two elements to the affected ram:SpecifiedTradeAllowanceCharge with ChargeIndicator=true.
- Validate again. Save the file and validate it again to check that BR-38 is no longer reported.
Every document level charge (BG-21) needs a reason: either the free text ram:Reason (BT-104) or the reason code ram:ReasonCode (BT-105) per UNTDID 7161. Add at least one of the two elements to the affected ram:SpecifiedTradeAllowanceCharge with ChargeIndicator=true.
//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonBefore / after: the XML example
This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator><udt:Indicator>true</udt:Indicator></ram:ChargeIndicator>
<ram:ActualAmount>15.00</ram:ActualAmount>
</ram:SpecifiedTradeAllowanceCharge>
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator><udt:Indicator>true</udt:Indicator></ram:ChargeIndicator>
<ram:ActualAmount>15.00</ram:ActualAmount>
<ram:Reason>Versandpauschale</ram:Reason>
</ram:SpecifiedTradeAllowanceCharge>
Frequent questions about BR-38
Is the free text enough, or do I need the code?
Where do I find suitable reason codes for BT-105?
Related error codes
Check BR-38 automatically
Instead of digging through the XML by hand you can validate your ZUGFeRD or XRechnung file online – upload the PDF or the XML and you get every error with rule ID, affected field, fix and XPath, as a readable report or as JSON through the API.