The VAT calculations for the European semantic EN 16931 guidelines can be a little tricky. This page describes the way they are calculated in the Finvoice 3.0 invoicing standard.
How to calculate the VAT breakdown
In Finvoice 3.0 the VAT breakdown is located in the VatSpecificationDetails-element. To calculate the VAT amount correctly there are few steps you can follow:
The long way
- Match all the following calculations with the VatRatePercent and VatCode -elements (highlighted with orange in the picture). Do them separately for different combinations.
- If there are payment level discounts, use the total sum of all (with the matching elements, see step 1) RowVatExcludedAmount-elements as the base amount.
- Calculate the discount amount with the base amount and the discount percent.
- If there are payment level charges, use the matching discount information to calculate the base amount. It is calculated by removing the discount amount from the base amount.
- Calculate the charge amount with the base amount and the charge percent.
- The VatBaseAmount is calculated by adding the charge amount to the charge base amount.
- The VatRateAmount can be calculated with the VatRatePercent- and the VatBaseAmount-elements.
The shorter way
The BaseAmount- and Percent-elements are not mandatory for discount or charge details so it might be that they are not populated and you'll have to use only the Amount-elements. You can calculate the VatBaseAmount-element also by calculating the sum of RowVatExcludedAmount of the matching instances (see 1. step of the long way) and removing the matching discount amount and adding the matching charge amount. The VatRateAmount can be calculated with the VatRatePercent- and the VatBaseAmount-elements. VatRatePercent is devided by 100 because it is populated with an integer and not with a decimal (e.g. 20% = 20).
sum(RowVatExcludedAmount)- Discount Amount + Charge Amount = VatBaseAmount
VatBaseAmount * (VatRatePercent / 100) = VatRateAmount
- There is a margin of one currency unit in the calculation of the VAT rate amount and VAT base amount. This allows the individual RowVatAmount-elements to match the VatRateAmount as there might be a little error due to rounding the RowVatAmount-elements. Likewise, when calculating the VatBaseAmount-element from the discount and charge amounts.