How do you calculate a mixed-VAT-rate tax breakdown?
When an invoice has lines taxed at more than one rate, each rate needs its own row: the net of only the lines at that rate, and the tax that net produces at that rate. The table below is the exact fixture the checker's own test suite uses to confirm rule INV-037/INV-038 pass a correct breakdown.
Two lines, two rates
| Line | Qty × price | Rate | Net | Tax |
|---|---|---|---|---|
| Consulting | 2 × €100.00 | 19% | €200.00 | €38.00 |
| Books | 1 × €100.00 | 7% | €100.00 | €7.00 |
| tax_percent | taxable | tax |
|---|---|---|
| 19 | €200.00 | €38.00 |
| 7 | €100.00 | €7.00 |
Per rate: taxable = sum of net for every line at that rate. tax = taxable × rate ÷ 100, rounded half-up to the cent. The invoice totals are the sum across rates: €300.00 net, €45.00 tax, €345.00 gross — not one rate applied to the whole invoice.
A single blended calculation would get this wrong. Applying 19% to the full €300.00 net gives €57.00 tax, €12.00 more than the correct €45.00, because the books line is only taxed at 7%. The checker does not average or infer a rate; it groups lines by their own tax_percent first, and every row in the breakdown has to reconcile to that grouping exactly — a row for a rate no line uses, a missing row for a rate that is used, or a taxable/tax figure that does not match the summed lines each produce their own finding (INV-037 for a missing breakdown on a mixed-rate invoice, INV-038 for a supplied one that does not reconcile).
Open the checker and drop your own invoice to see its breakdown validated line by line. Nothing you drop is uploaded.
This page is arithmetic, not tax or legal advice. It does not determine the correct VAT rate for a line or replace review by a qualified professional.
Common questions
How do you calculate a mixed-VAT-rate tax breakdown?
Group the invoice lines by their tax rate, sum each group's net amount, then multiply that group's net by its rate and round to the nearest cent. Two consulting lines totalling €200.00 net at 19% produce €38.00 tax; one books line of €100.00 net at 7% produces €7.00 tax. Each rate gets its own row: 19% / €200.00 / €38.00 and 7% / €100.00 / €7.00. The invoice total (€345.00 gross) is the sum of every line's net plus every line's tax, not a single blended rate applied once.
What happens if a mixed-rate invoice has no tax breakdown?
The preflight checker flags rule INV-037: an invoice mixes tax rates without a per-rate breakdown. If a tax_breakdown is supplied but a row's taxable or tax amount does not match what the lines at that rate actually sum to, or a row's tax is not its taxable amount times its own percentage, it flags INV-038 instead, naming the exact row and the figure it expected.