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.
| Term | Meaning | UBL element |
|---|---|---|
| BT-146 | Item net price | cac:InvoiceLine/cac:Price/cbc:PriceAmount |
| BT-146 | Item 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
- Find the line from the finding location and look at
cac:Price/cbc:PriceAmount. - Make the price positive and put the sign on
cbc:InvoicedQuantity(orcbc:CreditedQuantity): quantity 1 at -2 becomes quantity -1 at 2. - Leave
cbc:LineExtensionAmountas it was. Quantity times price is the same figure, so the line net amount and every total built from it stay put. - 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.
- 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
- The failing invoice reports BR-27. The corrected document passes every layer with no findings.Download the failing XMLDownload the corrected XML
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:InvoiceLinein anInvoiceandcac:CreditNoteLinein aCreditNote. 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-R120as well asBR-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.
Related rules
- PEPPOL-EN16931-R120 checks that the line net amount equals quantity times price, less allowances plus charges
- PEPPOL-EN16931-R046 checks the net price against the gross price and its discount
- BR-CO-10 checks the sum of the line net amounts, negative lines included
- Browse every rule in the reference
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.
