VAT Number and EU VIES Validation for WooCommerce changelog

0.8 – 2026-10-01

  • FIX The VAT number field is now added to the block checkout page only by a shop manager, never while a customer is logged in to their account, which could strip parts of the checkout page they are not allowed to publish
  • FIX An order that had VAT removed at the checkout but charged again later, for example by recalculating its totals, no longer appears on the EC Sales List (B2B), and its order screen no longer says it does
  • FIX On the plugin’s settings screen, the links in the WooCommerce menu (Orders, Customers, Settings and the rest) led to a “page not found” error
  • DEV Updater v13.6

0.7 – 2026-09-16

  • NEW New EU B2C Sales report: what you charged consumers in other EU countries, per member state and per VAT rate, which are the figures behind a One Stop Shop (OSS) return. Exports to CSV, and sits beside the EC Sales List so no order is ever on both
  • NEW New Other Sales report: where every order in a period is reported, and why the ones on neither EU report are not there, so an order you cannot find has an answer instead of an investigation. It files nothing and is not a VAT return
  • NEW Subscriptions can now be re-checked against VIES on a schedule, from monthly to yearly. The first check runs straight away
  • NEW The settings screen says when your subscriptions were last checked as a whole, and when the next check is due
  • NEW The plugin now has its own VAT & VIES menu in the sidebar, with the reports under it and a shortcut to the settings
  • TWEAK The full check copes with a large subscription base, and asks VIES once per number
  • TWEAK The custom date range on the reports now offers only dates that can hold orders, from the year of your oldest order to the end of this year
  • TWEAK The EC Sales List (B2B) now names each country instead of showing only its two letter code, the way the new B2C report does. The CSV exports still carry the code alone
  • TWEAK Both tables on the EC Sales List (B2B) now end with a totals line, so you can check a quarter without adding the column up yourself
  • TWEAK The report emails now date themselves in the YYYY-MM-DD HH:MM format
  • TWEAK The European Community Sales List is now called EC Sales List (B2B) in the menu, and says on screen that sales to consumers are reported separately
  • TWEAK Clearer wording on the settings screen, the order screen and the reports
  • FIX An order paid with Google Pay, Apple Pay or Link recorded the VAT number saved on the customer’s account instead of the one they typed at the checkout, and recorded one at all even when the field was never shown to them. Needs the official WooCommerce Stripe Gateway plugin 9.6 or above
  • FIX On a block checkout, the official WooCommerce Stripe Gateway plugin 10.9 and above refused every Google Pay, Apple Pay and Link order when the VAT number field was required, telling the customer to go to the checkout page they were already on. The plugin now works around it until the gateway is fixed, so please tell us if it comes back after a Stripe update
  • FIX A stored VAT number from a country the plugin does not recognise gained an extra country prefix with every order the customer placed
  • FIX The full check could go round the same subscriptions for ever if VIES stopped answering
  • FIX The full check called every subscription outside VIES when the licence had expired
  • FIX A VAT number removed by the customer, or by you on their behalf, could reappear on the next page load when their previous plugin still held a copy of it
  • FIX A customer’s VAT number left by a previous plugin did not appear on their profile screen in WordPress, the one place Zero-Touch Migration was not reaching
  • FIX Deactivating the plugin left its queued subscription checks behind
  • FIX The WP-CLI commands no longer run on an expired licence
  • FIX On WPML, the note telling the customer why VAT was removed could not be translated per language
  • DEV Both EU VAT reports now take the order statuses they count from a single filter, nakedcat_vat_number_completed_statuses, so a shop with renamed statuses declares them once. nakedcat_vat_number_ecsl_statuses is deprecated, still read, and now reaches both reports
  • DEV The message under the VAT number field has its CSS classes documented, and no longer sets a font weight of its own

0.6 – 2026-09-08

  • NEW WooCommerce Subscriptions is now fully supported: the VAT number, its proof and the exemption carry to every renewal and appear on the subscription itself
  • NEW Every renewal has its VAT number checked against VIES again and you are emailed if it stops confirming, with nothing ever re-priced
  • NEW wp nakedcat-vat recheck-subscriptions checks your whole subscription base at once, in the background if you prefer, and emails you the report
  • NEW The VAT number column and the number search now work on the subscriptions list, not only on orders
  • NEW The European Community Sales List now includes the orders your previous VAT plugin judged, so the quarter you switched in is not short
  • NEW An order judged by a previous VAT plugin now shows everything that plugin recorded, on the order screen
  • NEW The check digit is now verified for all 31 countries the plugin knows, up from 26, so a typo is caught on your own server before it reaches VIES
  • NEW A British VAT number given for a Northern Ireland delivery is now offered the XI prefix at the checkout, which is what lets the VAT come off
  • NEW The readiness check warns when your checkout stops asking for the postcode and state that several EU territories need
  • NEW The WooCommerce System Status Report now carries every readiness check and what your checkout collects
  • NEW wp nakedcat-vat validate <number> checks a single VAT number from the command line and changes nothing
  • TWEAK The VAT number field is now shown to customers in every country by default, instead of only the EU. Nothing outside the EU is ever exempted, and the old default hid the field from Northern Ireland
  • TWEAK French VAT numbers whose key begins with a letter now have their check digit tested too, instead of going straight to VIES
  • TWEAK The check about which address decides no longer warns a shop that sells only downloads
  • TWEAK The migration says how many subscriptions it touched, since those are what carry the number to future renewals
  • TWEAK wp nakedcat-vat migrate --list-sources now shows the value to type after --from for each plugin
  • FIX The message under the VAT number field on the classic checkout vanished as soon as you clicked away, which is exactly when you look at the total
  • FIX On a shop with both checkouts, typing a VAT number on the classic one did not refresh the totals until an address field was touched
  • FIX On the blocks checkout, a delivery address in a territory outside the EU VAT area had VAT wrongly removed
  • FIX On a shop selling only downloads, the blocks checkout charged VAT on a valid EU business number
  • FIX Greek, Monaco and Isle of Man VAT numbers read as a different country from the delivery address, wrongly flagging orders for review
  • FIX Orders with nothing physical on them are no longer offered as possible triangular supplies, which only apply to goods
  • FIX A renewal showed the original order’s VIES check as if it had been made for the renewal itself
  • FIX Pasting a VAT number into the orders search found nothing on shops using WooCommerce’s new order tables
  • FIX That search now also finds numbers stored by your previous VAT plugin, which the VAT number column was already showing
  • FIX wp nakedcat-vat migrate --from accepted different values depending on the language your site runs in
  • DEV Tested up to WordPress 7.2-alpha-63509 and WooCommerce 11.1.0

0.5 – 2026-09-05

  • NEW Orders with the VAT removed now tell the customer why, in a line under their VAT number on the order confirmation page, in their account and on the order emails. Reword it or turn it off under WooCommerce > Settings > Tax > VAT number
  • NEW Correcting an address on an unpaid order now warns you when it changes whether the sale qualifies, with a button to apply the new decision. It only speaks when the answer really changes, and nothing changes until you press it
  • NEW The readiness check now offers to put the VAT number block back on a blocks checkout that is missing it, in one click. Useful if you moved to the blocks checkout after installing, or removed the block and changed your mind
  • NEW The European Community Sales List points out orders whose address was changed after they were judged, separating the ones now on the statement that should not be from the ones missing that should be there. Check them before you file
  • NEW The order panel points out when the VAT number’s country, the billing country and the country the customer connected from all disagree with each other. One difference is ordinary and stays silent; all three is worth a glance. It changes nothing and never blocks an order
  • TWEAK The VAT number column on the orders list now says whether VAT was removed, not only what VIES answered. A confirmed number on an order that was still taxed, a sale to the Canary Islands for instance, no longer shows the same green tick as an exempted one
  • TWEAK The VAT number block on the checkout can no longer be deleted by accident. It can still be moved anywhere in the form, and unlocked from its own options menu if you really want it gone
  • TWEAK The VAT number block can now be found in the block inserter by searching VAT, VIES, IVA, NIF or contribuinte, whatever language your admin is in. The settings screen also says where the block lives, because it only appears in the inserter once your cursor is inside the checkout form
  • FIX An order now records which VAT number of yours was used to obtain its VIES reference. Before this, changing your own VAT number left older orders unable to say which registration the exemption was claimed under
  • FIX The REST endpoint and the Ability could not tell a VIES confirmation made seconds ago from one reused during an outage, up to 30 days old. They now report from_cache, from_stale_cache and checked_at, and checks.vies says confirmed_stale for a reused answer. checked_at is ISO 8601 in UTC whichever layer answered
  • FIX Two labels on the European Community Sales List could not be translated correctly
  • DEV The note explaining why VAT was removed is filterable: nakedcat_vat_number_exemption_note for the text, nakedcat_vat_number_exemption_note_row for the whole row including its label. Neither of the VAT number row’s own filters affects it

0.4 – 2026-08-27

  • NEW European Community Sales List report under WooCommerce, with the proof behind every line, the triangular supplies you mark, and a CSV export
  • NEW Readiness check on the settings screen: eight checks that say whether this shop can actually remove VAT from an order
  • NEW The settings screen asks you to accept that the tax decisions are yours, and the plugin does nothing until you do
  • NEW Sales of goods to Northern Ireland on a confirmed XI VAT number are exempted, as the Windsor Framework requires. Orders carrying anything virtual are not
  • FIX The Canary Islands, Ceuta and Melilla (Spain), the Åland Islands (Finland), Heligoland and Büsingen am Hochrhein (Germany), Livigno and Campione d’Italia (Italy) and Mount Athos (Greece) are outside the EU VAT area and are no longer treated as ordinary EU, whether you sell to one or trade from one
  • FIX The order panel ran the date and the time together, showing “27 August 2026 14:45” instead of “27 August 2026 at 14:45”
  • FIX The published licence state never reported “expired”
  • TWEAK The shop’s own VAT number is still checked on every settings save, but the result is only reported when it changes

0.3 – 2026-08-27

  • NEW The order says when a missing or expired licence was the reason a VAT number went unchecked, rather than showing the same message as a VIES outage
  • FIX The VAT number field no longer appears on the “My Account > Addresses > Billing address” form, where editing it did nothing. It is changed on the “My Account > VAT number” page
  • TWEAK A subscription renewal carries the VAT number and its country, and the VIES proof copied onto it is marked as inherited from the original order
  • TWEAK The “Strictness” setting is now called “Conditions for removing VAT”
  • TWEAK The System Status Report section carries the plugin’s full name
  • DEV The licence state is published as nakedcat_vat_number_license_state (active, expired or inactive), so a plugin integrating with us can read it before this one has booted

0.2 – 2026-08-26

  • First public (but silent) release
  • NEW Shop as Client PRO 8.2 fills in a customer’s VAT number when a manager orders on their behalf, on both checkouts, reading it the same way the customer’s own checkout does
  • NEW The REST endpoint and the WordPress Ability now report what each layer of validation decided, as a closed set of codes the ability’s schema explains, so an AI client can tell a mistyped number from a well-formed one that is simply not registered in VIES. Both are invalid and they call for opposite responses
  • NEW The registered address VIES holds for a number, shown on the order beside the registered name. Several member states withhold it, Germany among them, so it appears only when VIES returns one
  • NEW Settings and documentation reachable from the WordPress command palette
  • TWEAK The country prefix setting says it is recommended, and why: without the prefix the stored number carries no country of its own, so anything reading it afterwards has to guess
  • TWEAK The settings screen now names the plugin and the version it is running
  • FIX Translations for the checkout block’s own strings could never load. The .pot described src/, while WordPress looks for a translation file named after the built script it actually loads
  • FIX Too many to enumerate here 🙂
  • DEV Tested up to WordPress 7.2-alpha-63347 and WooCommerce 11.1.0-beta.2

0.1 – 2026-08-25

  • First development release
  • NEW VAT number field on both the classic and the Blocks checkout, in My Account, and on the order screen
  • NEW Local validation before anything leaves the server: country format for 31 territories, and a verified check digit for 26 of them
  • NEW Northern Ireland (XI) supported like any other EU number
  • NEW VIES validation over the European Commission’s REST API, with no SOAP extension required
  • NEW The VIES consultation number, the timestamped proof that the check was made, stored on the order as evidence
  • NEW Checks the shop’s own VAT number when it is saved, because without one VIES returns no consultation number and there is no proof
  • NEW VAT removed on qualifying intra-Community B2B orders, at one of three strictness levels, with every input behind the decision recorded on the order
  • NEW Zero-Touch Migration: numbers left by your previous plugin migrate themselves as customers return, with nothing to export, import or schedule, and nothing belonging to the other plugin changed or deleted. Reads numbers already stored by WooCommerce EU VAT Number, Aelia EU VAT Assistant, EU VAT Compliance (Simba), EU/UK VAT Validation Manager (WPFactory), Teamwant VIES VAT, InvoiceXpress and NIF Português, so switching loses nothing and imports nothing
  • NEW wp nakedcat-vat migrate consolidates the lot in one go when you would rather not wait for Zero-Touch Migration to get there, dry run by default
  • NEW Says when another VAT plugin is still active, names it, explains what running both costs, and offers to deactivate it
  • NEW Orders list column and an order panel showing what was checked, when, and whether VAT came off
  • NEW Re-checking an order writes an order note and never overwrites the original proof
  • NEW Search the orders list, and the users list, by VAT number
  • NEW Column on the users list, and the number editable on the customer’s profile screen in WP Admin
  • NEW Shown to the customer on the order confirmation page, in My Account and on order emails
  • NEW A VAT number section in My Account, so a customer can add or correct theirs without placing an order
  • NEW Three cache layers with asymmetric lifetimes, so a confirmed number is reused and a rejected one is not held against a customer who fixes their typo
  • NEW If VIES is unreachable when an order is placed, the most recent stored answer for that number is used rather than refusing the sale, and an outage is never cached or recorded as invalid
  • NEW Rate limited so the field cannot be used to hammer a free public service, with the limits filterable
  • NEW WPML ready, including translating the field label per language, and multi-domain setups in the licensing too
  • NEW REST endpoint and a WordPress Ability, both thin wrappers over the same validator, so a VAT number can also be validated from an MCP or AI client
  • DEV Hooks for other plugins to mirror the number onto their own meta
  • DEV Updater v13.4