# BR-AE-08: Recalculate the reverse-charge taxable amount from the AE lines, charges and allowances

The `AE` VAT breakdown taxable amount must be exactly the reverse-charge line net amounts, plus `AE` document charges, minus `AE` document allowances.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: VAT, Totals
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-AE-08/
- Explanation last updated: 2026-09-28

## The short answer

`BR-AE-08` fails when the `cbc:TaxableAmount` beside the `AE` tax category does not equal the reverse-charge content of the document: the line net amounts in category `AE`, plus the root-level charges in `AE`, minus the root-level allowances in `AE`. In the recorded example that is 25.00 + 5.00 - 1.50 = 28.50, and the invoice sent 31.50.

The 31.50 comes from adding the discount instead of taking it off. Recalculate the figure from the document, write it to the breakdown, and leave the reverse-charge tax amount at 0.00.

## What the rule checks

The rule runs on each `cac:TaxCategory` with `cbc:ID` of `AE` under the `VAT` scheme in the root `cac:TaxTotal`, reads the `cbc:TaxableAmount` of its `cac:TaxSubtotal`, and reports at the tax category.

Nothing is split by rate. Lines and root-level allowances and charges count when their category is `AE`, whatever `cbc:Percent` they carry: when tried, the reverse-charge discount at 20 left 28.50 acceptable here and was reported only by `BR-AE-06`.

Allowances and charges inside a line are already part of that line's `cbc:LineExtensionAmount`, so only `cac:AllowanceCharge` elements directly under the document root enter the reverse-charge sum.

There is no tolerance, unlike the margin under 1.00 in `BR-S-08`. When tried, 28.51 failed this rule. Writing 28.500 satisfied it, since the values are compared as numbers, but three decimals broke `BR-DEC-19` and `UBL-DT-01`.

Each reverse-charge breakdown is compared with the whole sum. When tried, splitting the 28.50 into breakdowns of 25.00 and 3.50 reported this rule on both, together with `BR-AE-01`, which allows only one reverse-charge breakdown.

| Term | Meaning | UBL element |
|---|---|---|
| BT-116 | VAT category taxable amount | `cac:TaxTotal/cac:TaxSubtotal/cbc:TaxableAmount` |
| BT-118 | VAT category code | `cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:ID` |
| BT-131 | Invoice line net amount | `cac:InvoiceLine/cbc:LineExtensionAmount (cac:CreditNoteLine/cbc:LineExtensionAmount in a credit note)` |
| BT-99 | Document level charge amount | `cac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:Amount` |
| BT-92 | Document level allowance amount | `cac:AllowanceCharge[cbc:ChargeIndicator = false]/cbc:Amount` |

## How an integration ends up here

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

- Allowances are added to the taxable amount with the same sign as charges, as in the recorded example.
- The taxable amount is copied from the sum of the line net amounts, before document-level discounts and fees are applied.
- A reverse-charge fee or discount takes a Standard rated category from the document default, while its amount is still counted in the `AE` breakdown.
- Reverse-charge content is summarised in one breakdown per source, one for the lines and one for the fees, so neither holds the full figure.
- The breakdown is built from stored order totals and not refreshed after a line or fee changed on the invoice.

## How to fix it

1. Add up `cbc:LineExtensionAmount` for every line whose `cac:Item/cac:ClassifiedTaxCategory/cbc:ID` is `AE`, keeping the sign of any negative line.
2. Add the `cbc:Amount` of each root-level `cac:AllowanceCharge` in category `AE` with `cbc:ChargeIndicator` of `true`, and subtract each one with `false`.
3. Write the result, with two decimals, as the `cbc:TaxableAmount` of the one `AE` `cac:TaxSubtotal`. Its `cbc:TaxAmount` remains `0.00` under `BR-AE-09`.
4. Compare the result with `cbc:TaxExclusiveAmount` when the whole document is reverse charge: both are built from the same lines, allowances and charges, and in the recorded example both should read 28.50.

The recorded example has one reverse-charge line, a reverse-charge discount and a reverse-charge call-out charge, all at 0%.

```text
Reverse-charge line net amount: 25.00
Document-level charge in AE: + 5.00
Document-level allowance in AE: - 1.50
Expected taxable amount: 25.00 + 5.00 - 1.50 = 28.50
Sent: 31.50, which is 25.00 + 5.00 + 1.50, so the rule fails
```

## Before and after

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

Fragment of the failing invoice: a reverse-charge taxable amount of 31.50 beside a discount of 1.50 and a charge of 5.00

```xml
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <!-- reason code and reason omitted from this fragment -->
  <cbc:Amount currencyID="GBP">1.50</cbc:Amount>
  <!-- tax category AE at 0 omitted from this fragment -->
</cac:AllowanceCharge>
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <!-- reason omitted from this fragment -->
  <cbc:Amount currencyID="GBP">5.00</cbc:Amount>
  <!-- tax category AE at 0 omitted from this fragment -->
</cac:AllowanceCharge>
<cac:TaxTotal>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxSubtotal>
    <cbc:TaxableAmount currencyID="GBP">31.50</cbc:TaxableAmount>
    <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
    <cac:TaxCategory>
      <cbc:ID>AE</cbc:ID>
      <cbc:Percent>0</cbc:Percent>
      <cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:TaxSubtotal>
</cac:TaxTotal>

<!-- reverse-charge line: LineExtensionAmount 25.00 -->
```

Fragment of the corrected invoice: 25.00 + 5.00 - 1.50 = 28.50

```xml
<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="GBP">28.50</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
  <cac:TaxCategory>
    <cbc:ID>AE</cbc:ID>
    <cbc:Percent>0</cbc:Percent>
    <cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
    <cac:TaxScheme>
      <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
  </cac:TaxCategory>
</cac:TaxSubtotal>
```

Only the reverse-charge `cbc:TaxableAmount` differs: 31.50 in the failing invoice, 28.50 in the corrected one. The failing document reports only `BR-AE-08`; its tax amount of 0.00 and its total without VAT and amount due of 28.50 are the same in both documents.

### What the validator reported

- The failing invoice reports **BR-AE-08**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-AE-08-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/reverse-charge-adjustments-valid.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`; in a credit note the lines summed are `cac:CreditNoteLine`. The failing invoice converted to a credit note reported the same rule when tried.
- Reported by the EN 16931 layer as a fatal finding at each reverse-charge breakdown that does not match.
- Exempt, intra-community and Standard rated breakdowns have their own taxable amount rules: `BR-E-08`, `BR-IC-08` and `BR-S-08`.
- The monetary totals are checked separately: `BR-CO-13` compares the total without VAT with the line total, allowances and charges.

## Related rules

- [BR-AE-01 allows only one reverse-charge breakdown, which is what this sum is compared with](https://ironfang.com/docs/finance/rules/BR-AE-01.md)
- [BR-AE-09 keeps the tax amount beside this taxable amount at zero](https://ironfang.com/docs/finance/rules/BR-AE-09.md)
- [BR-E-08 builds the exempt taxable amount the same way, also without a tolerance](https://ironfang.com/docs/finance/rules/BR-E-08.md)
- [BR-IC-08 is the taxable amount check for the intra-community breakdown](https://ironfang.com/docs/finance/rules/BR-IC-08.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-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.

[The official definition of BR-AE-08](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-AE-08/) 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.com/docs/finance/rules/BR-AE-08)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
