# BR-28 Item gross price must not be negative

The Item gross price (BT-148), the unit price before any item price discount, shall not be negative.

## Problem Description

> **ERROR**: EN 16931 core business rule (CEN)

## Context and Significance

This is an EN 16931 core rule and a value check. The gross price (BT-148) is the list price before the item price discount (BT-147); the net price is the gross price minus that discount, which Peppol checks with PEPPOL-EN16931-R046. A negative gross price usually comes from a discount with the wrong sign or from a discount amount placed in cbc:BaseAmount by mistake.

## Solution

Provide the gross price as cac:Price/cac:AllowanceCharge/cbc:BaseAmount (CII: ram:GrossPriceProductTradePrice/ram:ChargeAmount) with a value of zero or more, and state the item price discount (BT-147) in cbc:Amount of the same group.

- [Validate XML](/en/xrechnung-validator?source=resource&rule=BR-28)
- [Convert invoice](/en/pdf-to-xrechnung?source=resource&rule=BR-28)

## Valid Examples

- BT-148 = 15.00 with an item price discount of 2.50

## Invalid Examples

- BT-148 = -3.00 — negative gross price rejected

## Code Examples

### Valid XML
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">2.50</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">15.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

### Invalid XML
```
<cac:Price>
  <cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:Amount currencyID="EUR">2.50</cbc:Amount>
    <cbc:BaseAmount currencyID="EUR">-3.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
</cac:Price>
```

## Affected Fields

- [BT-148 Item gross price](/resources/xrechnung/bt-148-item-gross-price)

## Related Rules

- [BR-27](/resources/kosit-validator-errors/br-27-item-net-price-not-negative)

## Validation Tools

- [Official KoSIT Validator](https://github.com/itplr-kosit/validator): Run the official KoSIT validator with the XRechnung configuration to check EN 16931 and XRechnung rules.
- [Convert PDF to XRechnung](/pdf-to-xrechnung): Find validation errors during conversion and review each correction.

## Related Resources

- [Official Specification](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/)
- [Test Suite](https://github.com/itplr-kosit/xrechnung-testsuite)
- [All validation errors](/resources/kosit-validator-errors): Overview of the EN 16931, XRechnung and Peppol validation rules explained here.
