Skip to content

BR-TMP-3: Base quantity of gross and net price (BT-149) differs

Official message

[BR-TMP-3] Wenn BT-149 (Item price base quantity) sowohl in GrossPriceProductTradePrice als auch in NetPriceProductTradePrice vorhanden ist, müssen die Werte identisch sein. Wenn BT-150 (unit of measure code) auf dem NetPrice-Pfad vorhanden ist, muss es auch auf dem GrossPrice-Pfad vorhanden und identisch sein.

XRechnung (CII) · Error · Message language: German · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
XRechnung (CII)
Affected fields
BT-149, BT-150

What does this mean?

If the item price base quantity (BT-149) is given for both the gross price and the net price of a line, both values must be identical. If a unit of measure (BT-150) is given for both prices, it must be identical as well. This is not the case in the line.
The rule applies to the CII syntax: ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity and ram:NetPriceProductTradePrice/ram:BasisQuantity. According to the rule text, a unit given for the net price should also be given for the gross price.

Typical causes

The gross price refers to a different quantity than the net price, e.g. gross price per 100 pieces, net price per piece.
The units of the two base quantities differ, e.g. KGM and GRM.

How to fix the error

Refer gross and net price to the same base quantity and unit and convert the gross price if necessary.
Give the same ram:BasisQuantity with the same unitCode in both prices or omit the base quantity of the gross price.
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, "Experte" view, section "Rechnungspositionen (BG-25)" (invoice lines), leave the fields "Basis-Menge Brutto (BT-149-1)" (gross base quantity) and "ME Bruttopreis (BT-150-1)" (gross price unit) of the line empty or enter the same values as in "Basis-Menge Netto (BT-149)" (net base quantity) and "ME Nettopreis (BT-150)" (net price unit). If left empty, the application writes the base quantity and unit of the net price for the gross price.

Example

Wrong

<ram:SpecifiedLineTradeAgreement>
  <ram:GrossPriceProductTradePrice>
    <ram:ChargeAmount>120.00</ram:ChargeAmount>
    <ram:BasisQuantity unitCode="H87">100</ram:BasisQuantity>
  </ram:GrossPriceProductTradePrice>
  <ram:NetPriceProductTradePrice>
    <ram:ChargeAmount>1.20</ram:ChargeAmount>
    <ram:BasisQuantity unitCode="H87">1</ram:BasisQuantity>
  </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>

Correct

<ram:SpecifiedLineTradeAgreement>
  <ram:GrossPriceProductTradePrice>
    <ram:ChargeAmount>1.20</ram:ChargeAmount>
    <ram:BasisQuantity unitCode="H87">1</ram:BasisQuantity>
  </ram:GrossPriceProductTradePrice>
  <ram:NetPriceProductTradePrice>
    <ram:ChargeAmount>1.20</ram:ChargeAmount>
    <ram:BasisQuantity unitCode="H87">1</ram:BasisQuantity>
  </ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
For developers: test expression per syntax

XRechnung (CII) (CII)

Context: /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem

not(ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity and ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity) or (ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity = ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity and (not(ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity/@unitCode and ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity/@unitCode) or ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice/ram:BasisQuantity/@unitCode = ram:SpecifiedLineTradeAgreement/ram:NetPriceProductTradePrice/ram:BasisQuantity/@unitCode))

Related validation rules

Last updated:
Explanation of the validation rule, not legal or tax advice.