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.

SituationTreatment
Buyer in your own countryDomestic VAT at the applicable rate
VAT-registered business in another EU country, VAT number confirmed validReverse charge, zero VAT, with the required note on the invoice
Buyer outside the EU VAT areaOut 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:

AnswerWhat 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.