HomeError code lexicon › BR-33
BR-33 Field BT-97 EN 16931 core rules (BR)

Fix BR-33: Reason for the allowance (BT-97/BT-98) missing

[BR-33]-Each Document level allowance (BG-20) shall have a Document level allowance reason (BT-97) or a Document level allowance

BR-33 in your own invoice? Upload the file and find every error in seconds.

What does BR-33 mean?

Every document level allowance must be justified, as text or as a code. That keeps it clear what the deduction is for.

Common causes of BR-33

How to fix BR-33

  1. Find the faulty spot in the XML. Open the XML of the invoice and go to field BT-97 along this XPath://ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason
  2. Apply the fix. Every document level allowance (BG-20) needs a reason as text (BT-97, ram:Reason) or a reason as a code (BT-98, ram:ReasonCode). Add at least one of them, for example ram:Reason with 'Loyalty discount' or ram:ReasonCode with '95' from UNCL5189.
  3. Validate again. Save the file and validate it again to check that BR-33 is no longer reported.
Concrete fix

Every document level allowance (BG-20) needs a reason as text (BT-97, ram:Reason) or a reason as a code (BT-98, ram:ReasonCode). Add at least one of them, for example ram:Reason with 'Loyalty discount' or ram:ReasonCode with '95' from UNCL5189.

XPath//ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason

Before / after: the XML example

This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).

Wrong
<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>10.00</ram:ActualAmount>
</ram:SpecifiedTradeAllowanceCharge>
Correct
<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
  <ram:ActualAmount>10.00</ram:ActualAmount>
  <ram:Reason>Treuerabatt</ram:Reason>
</ram:SpecifiedTradeAllowanceCharge>

Frequent questions about BR-33

Do I need text and code, or is one enough?
One of the two is enough: either the reason text (BT-97) or the reason code (BT-98). You may give both, but you must set at least one.
Where do I find the codes for the allowance reason?
In the code list UNCL5189. Common values are '95' for discount or '100' for special rebate. For free text use ram:Reason instead.

Related error codes

Check BR-33 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.

Find every error automatically instead of searching by hand

Upload your ZUGFeRD, Factur-X or XRechnung file – you get every violation back with rule ID, field, fix and XPath.

Validate online for free
Check invoice