Different VAT rates on your invoice: here’s how to process them correctly in Peppol

Anyone who sends invoices via Peppol knows that even the smallest deviation in structure can result in an error message. You especially notice this with invoices containing multiple VAT percentages, for example 6% and 21%. In theory this seems simple, but in practice many Access Points still struggle with this.

What can you read on this page?

VAT structure in Peppol

A Peppol invoice builds VAT not just on one line, but via a VAT breakdown by rate. For each VAT rate used, you create a separate TaxSubtotal with:

  • Taxable Amount: the total amount per rate (excluding VAT)
  • Tax Amount: the corresponding VAT amount
  • Tax Category: the correct code and VAT rate
    • S = standard (21%)
    • AA = reduced (6%)
    • Z = zero rate
    • E = exempt
    • AE = shifted

Important: each TaxSubtotal contains amounts rounded to two decimal places. Peppol checks this automatically.

Why multiple VAT rates are such a challenge

An invoice with different VAT rates is not exceptional. Think of a supplier invoicing both food products (6%) and packaging materials (21%).
In a classic PDF invoice, you just put two VAT lines below each other, and done. But within Peppol, it works completely differently.

Every invoice within Peppol is structured in an XML format, based on the UBL (Universal Business Language) standard.
That means that VAT percentages are not simply lines of text, but structured data elements. And there’s the rub:
many Access Points don’t structure that data correctly, causing the invoice to be rejected by the network or by the recipient.

Common mistakes

  • Calculate VAT from the header
    → Always calculate per line. Otherwise, cent differences occur between lines and totals.
  • Document discount not distributed by rate
    → A global discount should be distributed pro rata to each VAT rate.
  • Wrong VAT code
    → Always use the correct TaxCategory (S, AA, Z, E, AE).
  • More than two decimal places
    → Peppol rejects invoices with more decimal places.
  • No rounding item
    → Use PayableRoundingAmount to catch differences of €0.01.

To a person, that seems like detail work. To Peppol, it’s reason enough to reject the invoice.

Here's how to calculate VAT correctly

  1. Calculate per line
    • Line net = unit price × quantity – possible discount
    • Line VAT = line net × VAT rate
    • Round both amounts to two decimal places
  2. Apply document discounts
    • Distribute general discounts pro rata across all VAT rates
    • Then recalculate for each rate the Taxable Amount and Tax Amount
  3. Create a VAT breakdown
    • One TaxSubtotal per rate with correct amount, percentage and category code
  4. Check the totals
    • TaxExclusiveAmount = sum of all lines (after discount)
    • TaxInclusiveAmount = TaxExclusive + total VAT
    • Any rounding of the total indicate via PayableRoundingAmount

By calculating by line and then adding by VAT rate, you avoid rounding differences between header totals and line amounts.

Calculation example

Situation

  • Product A: 2 × €100.00 at 21% VAT
  • Product B: 3 × €50.00 at 6% VAT
  • General discount: 2%

Calculation

  • Line 1 net = €200.00 → VAT €42.00
  • Line 2 net = €150.00 → VAT €9.00
  • Total discount = €7.00
    • 21% share = €4.00 discount
    • 6% share = €3.00 discount

After discount

  • 21% rate: net €196.00 → VAT €41.16
  • 6% rate: net €147.00 → VAT €8.82

Invoice totals

  • Taxable = €343.00
  • VAT = €49.98
  • Total = €392.98

This invoice validates correctly in Peppol because each VAT category is broken down separately and rounded to two decimal places.

How it should be done according to Peppol

The Peppol BIS Billing 3.0 standard prescribes exactly how VAT rates should be processed.
The logic is as follows:

  • Each invoice line contains its own VAT code and percentage.
  • One <TaxSubtotal> is included in the invoice summary (<TaxTotal>) for each percentage.
  • The totals in that summary should exactly match the sum of all lines with that same percentage.

A correctly constructed XML file ensures that the invoice gets through the network without any problems – no matter how many VAT percentages are on it.

So it is not Peppol that makes this difficult, but the way some systems structure the data.
When the underlying mapping between ERP and Access Point is not correct, differences between line level and document level quickly arise.

What happens when things go wrong

If the VAT strategy is not built correctly, you notice it immediately:

  • the invoice is rejected by the Peppol network or by the customer;
  • the invoice does not arrive in the recipient’s accounts;
  • you have to manually follow up or resend;
  • payments are delayed.

And these are all processes that finance is just trying to avoid with automation.

How properly configured Access Points solve this

A good Access Point checks that the invoice structure is valid before sending. That means automatically validating the VAT summaries and checking that each percentage has been calculated correctly. Thus, the invoice is only forwarded if it truly complies with the Peppol BIS standard.

This sounds obvious, but in practice not all Access Points do this with the same care. Those with international or complex billing processes then quickly notice the difference between “sent” and “delivered correctly.”

Checklist for invoices with mixed VAT rates

  • VAT calculated and rounded per line
  • Document discounts distributed pro rata
  • One TaxSubtotal per rate
  • Header totals match exactly
  • Any rounding included via PayableRoundingAmount

Conclusion

Multiple VAT percentages on one invoice are not a problem for Peppol – as long as the structure is correct.
So make sure your Access Point performs those validations correctly. A small difference in XML structure can make the difference between an error message and smooth processing.

Peppol is strict, but predictable. On the contrary, those who apply the rules properly have a system that guarantees error-free and reliable invoice flows.

FAQ

Question
Reply
Should I charge VAT per invoice or per line?
Always per line. This is how you connect to Peppol's control logic and avoid rounding differences.
What if my client sees a different total through rounding?
Add a PayableRoundingAmount so that the difference is visible and accounting correct.
How do I process reverse charge or exempt VAT?
Use code AE for transferred and E for exempt, with VAT amount 0 and stating the legal reason.
What happens when VAT rates are not properly separated?
The invoice is rejected or enters "rejected" status within Peppol. So always split by rate and category.

Download our free e-invoicing whitepaper!

Lots of invoices, complex systems? This whitepaper is for you. In this whitepaper, you'll learn how to handle complex e-invoicing scenarios smartly without flipping everything.

HIGHLIGHTED ARTICLES

UBL BIS 3
UBL BIS 3 explained: the standard behind Peppol
Every organization in Belgium will have to deal with it sooner or later: e-invoicing and the associated...
Read more
Self-billing in Peppol
Self-billing in Peppol
E-invoicing is evolving at lightning speed. Whereas in the past it was mainly about moving from paper...
Read more
bijlagen peppol-factuur
Can I add attachments to a Peppol invoice?
When companies switch to e-invoicing via Peppol, sooner or later the question comes up: can I send attachments...
Read more