The short answer
BR-S-05 fails on each line whose cac:Item/cac:ClassifiedTaxCategory has cbc:ID of S and a cbc:Percent that is not above zero. Write the Standard rate that applies to the item in cbc:Percent, 20 in the recorded example; if no VAT is due on the item, give it the category that says why instead.
Category S with a 0% rate is a contradiction the rule will not accept. Zero rated, exempt and reverse-charge supplies each have their own category code and their own breakdown.
What the rule checks
The rule visits every item tax category with cbc:ID of S under the VAT scheme, in cac:InvoiceLine or cac:CreditNoteLine, and reports at that cac:ClassifiedTaxCategory. Two offending lines give two findings.
It passes when cbc:Percent is a number greater than zero, so 0, 0.00 and negative rates all fail. Leaving the element out fails too: when tried, a Standard rated line with no cbc:Percent reported this rule and BR-S-08.
No list of national rates is consulted. Any positive figure satisfies this rule, and whether it is the right rate for the item is not something the validator can know.
Document-level allowances and charges are outside its scope. When tried, a Standard rated document allowance at 0 was reported as BR-S-06, with BR-S-08, rather than as this rule.
A negative line gets no exception. The recorded example fails on a correction line with quantity -1 and a net amount of -2.00; the amount carries the sign and the rate stays positive.
| Term | Meaning | UBL element |
|---|---|---|
| BT-151 | Invoiced item VAT category code | cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:ID in a credit note) |
| BT-152 | Invoiced item VAT rate | cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent (cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent in a credit note) |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The line rate is derived by dividing a tax amount by the net amount, and a line with no separately calculated tax, such as a correction, comes out at 0.
- Correction, discount or goodwill lines are created with a blank rate while the category falls back to
Sby default. - Source tax codes are distinguished only by rate, and the mapping sends all of them to
S, including a 0% code meant for zero-rated or exempt sales. - An empty rate field is serialised as
0, or thecbc:Percentelement is skipped. - The item was reclassified in the source system and the category and rate were updated separately, leaving them out of step.
How to fix it
- Use the location of each finding to find the line: it points at the
cac:ClassifiedTaxCategoryinside the line item. - Establish the VAT treatment of that item from the tax code in the source system. If it is charged at a Standard rate, write that rate to
cbc:Percent. A correction or return line takes the rate of the supply it corrects. - If no VAT is due on the item, change
cbc:IDto the category that states the reason, such asZorE, and move the line amount into the breakdown for that category. That category brings its own requirements, for example an exemption reason forE. - Rebuild the Standard rated breakdown for the rate from the corrected lines, then recalculate its tax amount and the VAT total.
BR-S-08andBR-S-09check those figures.
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: the correction line is Standard rated at 0, and the breakdown at 20 still counts it
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="GBP">58.50</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="GBP">11.70</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<!-- tax scheme omitted from this fragment -->
</cac:TaxCategory>
</cac:TaxSubtotal>
<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>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Fragment of the corrected invoice: the correction line carries the same 20 rate as the sale
<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>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Only the cbc:Percent of line 3 differs: 0 in the failing invoice, 20 in the corrected one. The failing document also reports BR-S-08 on the Standard rated breakdown at 20, because with line 3 no longer at that rate the content at 20 nets to 58.00 + 3.50 - 1.00 = 60.50, while the breakdown says 58.50. That gap of 2.00 is outside the tolerance of BR-S-08, and putting the rate back returns the -2.00 to the sum and clears both findings.
What the validator reported
- The failing invoice reports BR-S-05 and BR-S-08. 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 UBL
InvoiceandCreditNote. A credit note line in categorySat rate 0 reported this rule andBR-S-08when tried. - Reported by the EN 16931 layer as a fatal finding at the line's
cac:ClassifiedTaxCategory. - The nil-rate categories have the opposite line rule:
BR-Z-05andBR-AE-05require exactly 0 on Zero rated and reverse-charge lines. - A line with no category at all is a different failure, reported by
BR-CO-04.
Related rules
- BR-S-08 fails alongside this rule when the line drops out of the breakdown at its real rate
- BR-Z-05 is the Zero rated line rule, which requires a rate of exactly 0
- BR-CO-04 requires every line to carry a VAT category in the first place
- BR-S-01 requires a Standard rated breakdown for the Standard rated lines
- Browse every rule in the reference
- Background: Understanding EN 16931 validation errors
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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.
The official definition of BR-S-05 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.
