Skip to content

BR-27Fix a negative item net price by moving the sign to the quantity

The item net price on a line is below zero. Prices must be zero or positive: express a credit or correction with a negative quantity.

EN 16931Fatal: the document is invalidLines and prices

The short answer

BR-27 fails when cac:Price/cbc:PriceAmount on a line is less than zero. A price says what one unit costs, and that is never negative. When a line takes money off the document, such as a return, a correction or a reversal, keep the price positive and make the quantity negative.

The line net amount does not change. In the recorded example the line is worth -2.00 either way; what the rule objects to is reaching it as 1 at a price of -2 when it should be -1 at a price of 2.

What the rule checks

For each cac:InvoiceLine or cac:CreditNoteLine, the rule reads cac:Price/cbc:PriceAmount and requires it to be greater than or equal to zero. It looks at nothing else on the line: not the quantity, not the line net amount.

A price of zero passes. A fully consistent invoice with a price of 0 and a line net amount of 0.00 validates cleanly.

A negative quantity and a negative line net amount are both allowed by this rule. The corrected example has exactly that.

Write zero without a sign. When tried, a price of -0.00 was reported by this rule.

A line with no cbc:PriceAmount at all also reports BR-27, alongside BR-26, the rule that requires the price. Supplying the price clears both.

TermMeaningUBL element
BT-146Item net pricecac:InvoiceLine/cac:Price/cbc:PriceAmount
BT-146Item net price (credit note)cac:CreditNoteLine/cac:Price/cbc:PriceAmount

How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

  • The source system stores a credit or correction line as quantity 1 with a negative unit price, and the mapping copies both fields as they are.
  • The price is derived by dividing the line amount by an absolute quantity, so the sign of the amount ends up on the price.
  • A discount is modelled as its own line with a negative price, where an allowance on the line or the document would describe it better.
  • A sign flip meant for credit notes is applied to every numeric field on the line, the price included.

How to fix it

  1. Find the line from the finding location and look at cac:Price/cbc:PriceAmount.
  2. Make the price positive and put the sign on cbc:InvoicedQuantity (or cbc:CreditedQuantity): quantity 1 at -2 becomes quantity -1 at 2.
  3. Leave cbc:LineExtensionAmount as it was. Quantity times price is the same figure, so the line net amount and every total built from it stay put.
  4. If the line is really a discount on other goods and not a quantity of something being reversed, consider sending it as an allowance on the line or the document instead. That is a modelling decision about the transaction, not something this rule forces.
  5. Do not switch the document to a credit note just to avoid the negative line. An invoice may carry a negative line, as the corrected example shows.

Validate your corrected invoice

Before and after

These are fragments, not complete documents. The complete synthetic documents they come from are linked below.

Fragment of the failing invoice: line 3 is quantity 1 at a net price of -2

<cac:InvoiceLine>
  <cbc:ID>3</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">-2.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example correction</cbc:Name>
    <!-- tax category omitted from this fragment -->
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">-2</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Fragment of the corrected invoice: the same line as quantity -1 at a net price of 2

<cac:InvoiceLine>
  <cbc:ID>3</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">-1</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">-2.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Name>Example correction</cbc:Name>
    <!-- tax category omitted from this fragment -->
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="GBP">2</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>

Two values differ on line 3: cbc:InvoicedQuantity goes from 1 to -1 and cbc:PriceAmount from -2 to 2. The line net amount is -2.00 in both. The failing document reports only BR-27. The Peppol layer passes, because its line calculation check, PEPPOL-EN16931-R120, still finds that 1 times -2 equals -2.00.

What the validator reported

Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.

Where it applies

  • Applies to cac:InvoiceLine in an Invoice and cac:CreditNoteLine in a CreditNote. A negative price on a credit note line was reported in the same way.
  • A credit note does not need negative figures to mean a credit. The credit note fixtures carry positive quantities, prices and amounts and validate cleanly; a correction inside a credit note uses a negative quantity in the same way as on an invoice.
  • The rule covers the net price only. The gross price, cac:Price/cac:AllowanceCharge/cbc:BaseAmount, has its own rule, BR-28, which was reported when a negative gross price was tried.
  • When the negative price also disagrees with the line net amount, the document reports PEPPOL-EN16931-R120 as well as BR-27. That happened when only the price was made negative, and when both the price and the quantity were negative against a negative line net amount.

Scope and source

Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-20.1: source checked 2026-09-20, explanation last updated 2026-09-20.

The official definition of BR-27 carries the normative wording and test. This page is our explanation of it, not a copy.

Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.