What does BR-28 mean?
The list price per unit must not be less than zero. Discounts are shown separately as an invoice line allowance.
Common causes of BR-28
- A discount was modelled as a negative item gross price instead of an invoice line allowance.
- A sign error in the export flipped the gross price into the negative.
- A credit note line was wrongly written with a negative gross price.
How to fix BR-28
- Find the faulty spot in the XML. Open the XML of the invoice and go to field BT-148 along this XPath:
//ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmount - Apply the fix. The item gross price (BT-148) must not be negative. Set a value of 0 or greater in ram:GrossPriceProductTradePrice/ram:ChargeAmount. Discounts belong in ram:AppliedTradeAllowanceCharge as an invoice line allowance, not in a negative gross price.
- Validate again. Save the file and validate it again to check that BR-28 is no longer reported.
The item gross price (BT-148) must not be negative. Set a value of 0 or greater in ram:GrossPriceProductTradePrice/ram:ChargeAmount. Discounts belong in ram:AppliedTradeAllowanceCharge as an invoice line allowance, not in a negative gross price.
//ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:ChargeAmountBefore / after: the XML example
This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).
<ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>-11.90</ram:ChargeAmount>
</ram:GrossPriceProductTradePrice>
<ram:GrossPriceProductTradePrice>
<ram:ChargeAmount>11.90</ram:ChargeAmount>
<ram:AppliedTradeAllowanceCharge>
<ram:ChargeIndicator><udt:Indicator>false</udt:Indicator></ram:ChargeIndicator>
<ram:ActualAmount>1.90</ram:ActualAmount>
</ram:AppliedTradeAllowanceCharge>
</ram:GrossPriceProductTradePrice>
Frequent questions about BR-28
Where do I enter a line discount correctly?
Do I have to give a gross price at all?
Related error codes
Check BR-28 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.