# BR-S-05: Give a Standard rated line a VAT rate above zero

A line in VAT category `S` needs a rate greater than zero in its item tax category. A rate of 0, a negative rate or no rate at all fails.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT, Lines and prices
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-S-05/
- Explanation last updated: 2026-09-24

## 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 `S` by 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 the `cbc:Percent` element 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

1. Use the location of each finding to find the line: it points at the `cac:ClassifiedTaxCategory` inside the line item.
2. 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.
3. If no VAT is due on the item, change `cbc:ID` to the category that states the reason, such as `Z` or `E`, and move the line amount into the breakdown for that category. That category brings its own requirements, for example an exemption reason for `E`.
4. Rebuild the Standard rated breakdown for the rate from the corrected lines, then recalculate its tax amount and the VAT total. `BR-S-08` and `BR-S-09` check those figures.

## 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

```xml
<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

```xml
<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](https://ironfang.uk/docs/finance/rules/BR-S-08.md). The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/BR-S-05-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/finance/rule-examples/invoice-rich.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 `Invoice` and `CreditNote`. A credit note line in category `S` at rate 0 reported this rule and `BR-S-08` when 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-05` and `BR-AE-05` require 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](https://ironfang.uk/docs/finance/rules/BR-S-08.md)
- [BR-Z-05 is the Zero rated line rule, which requires a rate of exactly 0](https://ironfang.uk/docs/finance/rules/BR-Z-05.md)
- [BR-CO-04 requires every line to carry a VAT category in the first place](https://ironfang.uk/docs/finance/rules/BR-CO-04.md)
- [BR-S-01 requires a Standard rated breakdown for the Standard rated lines](https://ironfang.uk/docs/finance/rules/BR-S-01.md)

## 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](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/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.

## Links

- [This rule as a web page](https://ironfang.uk/docs/finance/rules/BR-S-05)
- [Free Peppol invoice validator](https://ironfang.uk/tools/peppol-validator)
- [Rule index](https://ironfang.uk/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.uk/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.uk/mcp
