VAT, reverse charge and VIES
The VAT is the half of e-invoicing that decides whether a receiving system accepts the document. A structured invoice is validated on arrival, and if net, VAT and gross do not agree to the cent it can be refused.
What Zeppol decides, and from what
For each order Zeppol works out whether the sale is domestic, intra-EU B2B, or outside scope, using the buyer's country, their VAT number and its VIES status. That decision sets the VAT category on every line of the invoice and the legal note that has to accompany it.
| Situation | Treatment |
|---|---|
| Buyer in your own country | Domestic VAT at the applicable rate |
| VAT-registered business in another EU country, VAT number confirmed valid | Reverse charge, zero VAT, with the required note on the invoice |
| Buyer outside the EU VAT area | Out of scope. No e-invoice is issued and the order is marked as skipped |
Reverse charge is blocked rather than assumed
Two separate checks stand between an order and a zero-rated invoice, and both can stop it.
REVERSE_CHARGE_VAT_CHARGED means the sale looks like cross-border B2B but
VAT was charged anyway. Something in your Shopify tax configuration is treating this
buyer as domestic. Sending it would put VAT on an invoice that should not carry any.
REVERSE_CHARGE_VAT_UNVALIDATED means zero VAT was applied to a buyer whose
VAT number has never been confirmed valid. Reverse charge on an unverified number is the
liability you personally carry if it turns out to be wrong, so Zeppol will not send it
quietly.
The VIES check, and its three answers
VIES is the European Commission's VAT number validation service. It does not hold a register of its own: it forwards each check to the member state's own system and relays the answer. Those national systems go down routinely, without warning, and for hours.
So a VIES check returns three answers, never a yes or no:
| Answer | What Zeppol does |
|---|---|
valid | Stored on the buyer profile for 30 days. Reverse charge may be applied. |
invalid | Blocks with VIES_INVALID. The buyer's number is not registered for intra-EU transactions, and that is for them to correct. |
unavailable | Neither blocks nor passes. It is not information about the buyer. |
That third row is the one worth understanding. Treating an outage as "invalid" would
block lawful reverse-charge invoices and leave buyers uninvoiced against a statutory
deadline every time a national tax authority had a bad afternoon, through no fault of
anyone involved. So unavailable changes nothing: a buyer confirmed valid
last week stays valid, and a failed re-check never demotes them.
What a VIES check does not prove
It confirms the number is registered for intra-EU transactions on the day you asked. It is not a statement that the person placing the order is entitled to use it, and it is not tax advice. Zeppol records what was asked and what came back, with the date, so you can show you checked. Whether that is enough for your own circumstances is a question for your tax adviser.
Prices that include tax
If your Shopify prices include tax, net and VAT are derived by working backwards from
the gross figure, and rounding can leave a total a cent out. Zeppol runs an explicit
balance check on every invoice: net plus VAT plus rounding has to equal gross, and if it
does not, the invoice stops with BALANCE_CHECK_FAILED rather than going out
with numbers that do not add up. There is more on this in the guide to
tax-included versus tax-excluded prices.
This page describes what the software does. It is not tax advice, and VAT treatment depends on facts about your business that Zeppol cannot see. Confirm your own position with a qualified adviser.
Something missing here?
Write to me. Anything asked more than once ends up on this page.