Reference
Markdown exportPEPPOL-EN16931-R046 Item net price must equal item gross price minus item price discount
Under Peppol rule PEPPOL-EN16931-R046, whenever an invoice line item specifies an item gross price in BT-148 (GrossPrice) and an item price discount in BT-147 (PriceAllowance), the item net price in BT-146 (PriceAmount) must satisfy the exact mathematical equality: ItemNetPrice = ItemGrossPrice - ItemPriceAllowance. Peppol validation engines enforce strict rounding parity (typically to 2 to 4 decimal places) so that unit pricing calculations remain consistent across buyer and supplier ERP databases.
Problem Description
Under Peppol rule PEPPOL-EN16931-R046, whenever an invoice line item specifies an item gross price in BT-148 (GrossPrice) and an item price discount in BT-147 (PriceAllowance), the item net price in BT-146 (PriceAmount) must satisfy the exact mathematical equality: ItemNetPrice = ItemGrossPrice - ItemPriceAllowance. Peppol validation engines enforce strict rounding parity (typically to 2 to 4 decimal places) so that unit pricing calculations remain consistent across buyer and supplier ERP databases.
ERROR
XRechnung 3.0
Context and Significance
Discrepancies between gross price, unit discount, and net price trigger PEPPOL-EN16931-R046. Price discount calculations must be mathematically exact.
Solution
In your ERP pricing configuration, ensure that the net unit price is computed as the gross unit list price minus the unit price discount before exporting. In UBL 2.1 syntax, within <cac:Price>, ensure <cbc:PriceAmount> matches <cac:AllowanceCharge><cbc:Amount> subtracted from <cac:AllowanceCharge><cbc:BaseAmount> (or gross price). In UN/CEFACT CII syntax, ensure <ram:ChargeAmount> under <ram:NetPriceProductTradePrice> equals <ram:ChargeAmount> under <ram:GrossPriceProductTradePrice> minus <ram:ActualAmount> under <ram:AppliedTradeAllowanceCharge>.
Quick actions
Valid Examples
Use these points as the practical checks for this section.
- Gross price BT-148 = 100.00 EUR, Price discount BT-147 = 20.00 EUR, Net price BT-146 = 80.00 EUR
- Gross price BT-148 = 50.00 EUR, Price discount BT-147 = 5.00 EUR, Net price BT-146 = 45.00 EUR
Invalid Examples
Use these points as the practical checks for this section.
- Gross price 100.00 EUR minus discount 20.00 EUR exported with Net price = 85.00 EUR (Arithmetic mismatch)
- Price discount declared as 10.00 EUR but Net price equals Gross price without deduction
Code Examples
<cac:Price>
<cbc:PriceAmount currencyID="EUR">80.00</cbc:PriceAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">20.00</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">100.00</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price><cac:Price>
<!-- 100.00 - 20.00 must equal 80.00, not 85.00 -->
<cbc:PriceAmount currencyID="EUR">85.00</cbc:PriceAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="EUR">20.00</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">100.00</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>