Peppol conflict: VAT and 'Roerende Voorheffing' on one invoice line in Odoo
Odoo may let you combine Belgian VAT and roerende voorheffing logic on one line, but the Peppol UBL export can still fail when that tax structure does not map cleanly to one invoice item.
What is usually actually broken
The accounting intent is valid, but the exported Peppol line structure cannot represent both tax behaviors on the same invoice item in the way Odoo is trying to emit it.
Do these before you resend
- Inspect whether the VAT and RV effects need to be represented as separate lines or adjustments rather than a stacked tax set on one item.
- Compare the failing line structure with a simplified export that sends successfully.
- Change the source invoice design in Odoo and regenerate the invoice instead of patching the XML by hand.
The fastest path from this page is a prefilled diagnosis. It opens the analyzer with this exact issue pattern already loaded and immediately prepares the EUR 9 fix-pack preview when the route looks blocked or risky.
Buy the rescue kit for this exact issue
If this page matches the exact blocker, you can unlock the issue-specific rescue kit directly without running the analyzer first.
Current public evidence for this exact failure
Odoo forum · March 2026
Open sourceWhat people ask right before they get blocked
Not necessarily. The conflict is usually between the business intent and how the Peppol line-level tax structure can be expressed in the exported UBL.
Restructuring the invoice in Odoo so the withholding effect is represented in a way the export can emit cleanly is usually safer than patching the XML after the fact.
Go one level deeper before you resend
A field-by-field guide for totals mismatches, payable amount drift, and rounding side effects in e-invoice exports.
Read the guide