EU/UK VAT Compliance Assistant for WooCommerce

Description

The European/UK VAT (IVA) laws

Since January 1st 2015, all digital goods (including electronic, telecommunications, software, ebook and broadcast services), and from 1st July 2021 physical goods sold across EU and UK borders have been liable under law to variable VAT (a.k.a. IVA) charged in the country of purchase, at the VAT rate of that country (background information: https://taxation-customs.ec.europa.eu/system/files/2016-09/explanatory_notes_2015_en.pdf). This can apply even if the seller is not based in the EU or UK. It is accompanied by various auditing/recording requirements.

How this plugin can take away the pain

This WooCommerce plugin provides features to assist with EU, UK, Norwegian and Swiss VAT law compliance. Currently, those features include:

  • Identify your customers’ locations: this plugin will record evidence of your customer’s location, using their billing or shipping address, and their IP address (via a GeoIP lookup).

  • Evidence is recorded, ready for audit: full information that was used to calculate VAT and customer location is displayed in the WooCommerce order screen in the back-end.

  • Display prices including correct VAT from the first page: GeoIP information is also used to show the correct VAT from the first time a customer sees a product. A widget and shortcode are also provided allowing the customer to set their own country.

  • Currency conversions: Most users (if not everyone) will be required to report VAT information in a specific currency. This may be a different currency from their shop currency. This feature causes conversion rate information to be stored together with the order, at order time. Currently, you can choose from official rates from the European Central Bank (ECB), Danish and Czech National Banks, the Central Bank of the Russian Federation, and HM Customs & Revenue (UK). You can also over-ride the currency and rate-provider on a per-country basis.

  • Entering and maintaining each country’s VAT rates: this plugin assists with entering EU and/or UK VAT rates accurately by supplying a single button to press in your WooCommerce tax rates settings, to add or update rates for all countries (standard or reduced) with one click.

  • Reporting: Advanced reporting capabilities, allowing you to see all the information needed to make a OSS/MOSS/IOSS (one-stop shop) VAT report. The report is sortable and broken down by country, VAT rate, VAT type (traditional/variable) and order status, and can be exported as a CSV.

  • Forbid vatable sales if any goods have VAT chargeable – for shop owners for whom VAT compliance is too burdensome, this feature will allow you to forbid customers from configured VAT territories to check-out if they have selected any goods which are subject to VAT (whilst still allowing purchase of other goods, unlike the built-in WooCommerce feature which allows you to forbid check-out from some countries entirely).

  • Central control: brings all settings, reports and other information into a single centralised location, so that you don’t have to deal with items spread all over the WordPress dashboard.

  • Mixed shops: You can sell goods subject to your chosen territories’ VAT under the customer-place-of-supply regulations and any other physical goods which are subject to traditional base-country-based VAT regulations. The plugin supports this via allowing you to identify which tax classes in your WooCommerce configuration are used for customer-place-of-supply items. Products are allocated to the correct country according to which country VAT is payable to.

  • Distinguish VAT from other taxes: if you are in a jurisdiction where you have to apply other taxes also, then this plugin can correctly distinguish which taxes are payable to which jurisdictions.

  • Add line to invoices: If VAT was paid on the order, then an extra, configurable line can be added to the footer of the PDF invoice (when using the the free WooCommerce PDF invoices and packing slips plugin, or its premium counterpart).

  • Refund support: includes information on refunded VAT, on relevant orders.

  • Same prices: Not strictly a VAT compliance issue (different pricing per-country is not illegal), but this plugin adds an option to enable WooCommerce’s hidden support for adjusting pre-tax prices to enable the same post-tax (net) price to apply in all customer locations.

  • Brexit-ready: The plugin has been audited and appropriately adapted to be usable by both “EU 27” and UK (and other) countries after the expiry of the EU and UK’s transitional period (at the end of December 2020), including the ability to report taxes in multiple currencies using different exchange rate providers. Existing users should take the time to go through their existing settings to adapt to their new situation (e.g. remove tax table entries for countries that they are no longer required to remit taxes to; check that they are using the correct exchange rate provider and reporting currency for each tax region that they remit to).

  • WooCommerce high-performance order storage: This plugin is HPOS-compatible (see: https://woocommerce.com/document/high-performance-order-storage/)

  • WooCommerce block cart/checkout: This plugin is compatible with the WooCommerce block cart and checkout (see: https://woocommerce.com/checkout-blocks/), as well as the traditional shortcode cart/checkout.

A Premium version is on sale at this link, and currently has these additional features ready:

  • VAT-registered buyers can be exempted, and their numbers validated: a VAT number can be entered at the check-out, and it will be validated (via VIES, HMRC or VatSense). Qualifying customers can then be exempted from VAT on their purchase, and their information recorded. The customer’s VAT number will be appended to the billing address where shown (e.g. order summary email, PDF invoices). An extra, configurable line specific to this situation can be added to the footer of the PDF invoice (when using the the free WooCommerce PDF invoices and packing slips plugin).

  • Partial VAT exemption: make VAT-exemption upon supply of a valid VAT number to only apply to products in tax classes specified by the shop owner (rather than to all products)

  • Optionally allow B2B sales only – for shop owners who wish to only make sales that are VAT-exempt (i.e. B2B sales only), you can require that any EU and/or UK customers (optionally including or excluding those in your country) enter a valid VAT number at the check-out. (You can have different policies for different VAT regions).

  • Change taxation rules based upon year-to-date sales thresholds: for shop owners who can or must tax differently based upon their total sales in the year so far (e.g. EU shop owners who can take advantage of a €10,000 threshold for cross-border sales before which they can treat the place of supply as being their own, not the customer’s location), you can dynamically treat products as having a different taxation class until this threshold is met.

  • CSV download: A CSV containing comprehensive information on all orders with VAT data from your configured regions can be downloaded (including full compliance information). Manipulate in your spreadsheet program to make arbitrary calculations.

  • Non-contradictory evidences: require two non-contradictory evidences of location (if the customer address and GeoIP lookup contradict, then the customer will be asked to self-certify his location, by choosing between them).

  • Show multiple currencies for VAT taxes on PDF invoices produced by the free WooCommerce PDF invoices and packing slips plugin (and on credit notes produced by its Premium counterpart).

  • Support for the official WooCommerce subscriptions extension, and for Subscriptio (a RightPress/CodeCanyon alternative), and Subscriben.

  • Value-based exemption: An order can have VAT removed if the order value passes a configured value and is for a specified country. This features was developed to support the UK’s 2021 regulations for handling VAT differently on an order depending on whether or not the order passes a £135 threshold value, and then expanded to support multiple rules for different countries and amounts.

Read more about the Premium version of this plugin at this link.

It is believed (but not legally guaranteed), that armed with the above capabilities, a WooCommerce shop owner will be in a position to fulfil the requirements of EU or UK VAT laws: identifying the customer’s location and collecting multiple pieces of evidence, applying the correct VAT rate, validating VAT numbers for B2B transactions, and having the data needed to create returns. (If in the EU or UK, then you will also need to make sure that you are issuing your customers with VAT invoices containing the information required in your jurisdiction, via a suitable WooCommerce invoice plugin).

Footnotes and legalese

This plugin is supported on, and information in this document is for, WooCommerce 4.5 up to the latest release (i.e. current version; you can still download older versions supporting previous WooCommerce release series if you wish). It fetches data on current VAT rates from Amazon S3 (using SSL if possible); or, upon failure to connect to Amazon S3, from https://raw.githubusercontent.com. If your server’s firewall does not permit this, then it will use static data contained in the plugin.

Geographical IP lookups are performed via WooCommerce’s built-in geo-location features; or, alternatively, if you use CloudFlare, then you can activate the CloudFlare feature for sending geographical information. In some situations, these lookups may be performed via the public API at https://ipapi.co – if this is undesirable for you, then add define('WC_VAT_COMPLIANCE_DO_REMOTE_IP_LOOKUPS', false); to your wp-config.php file.

Please make sure that you review this plugin’s installation instructions and have not missed any important information there.

Please note that, just as with WordPress and its plugins generally (including WooCommerce), this plugin comes with no warranty of any kind and you deploy it entirely at your own risk. Furthermore, nothing in this plugin (including its documentation) constitutes legal or financial or any other kind of advice of any sort. In particular, you remain completely and solely liable for your own compliance with all taxation laws and regulations at all times, including research into what you must comply with. Installing any version of this plugin does not absolve you of any legal liabilities, or transfer any liabilities of any kind to us, and we provide no guarantee that use of this plugin will cover everything that your store needs to be able to do.

Whether you think the EU’s treaties with other jurisdictions will lead to success in enforcing the collection of taxes in other jurisdictions is a question for lawyers and potential tax-payers, not for software developers!

Many thanks to Diego Zanella, for various ideas we have swapped whilst working on these issues. Thanks to Dietrich Ayala and other authors, whose NuSOAP library is included under the LGPLv2 licence.

Other information

Lisenziýa

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

Screenshots

  • A button is added to allow you to enter all EU VAT rates with one click. Note: Screenshots are included below from the Premium version. Please check the feature list for this plugin to clarify which features are available in which version.

  • VAT information being shown in the order details page

  • Per-country VAT reports

  • Download all compliance information in a spreadsheet.

  • Compliance dashboard, bringing all settings and information into one place

  • Currency conversions, if you sell and report VAT in different currencies.

  • Compliance report, checking a number of common essentials for configuring your store correctly for VAT.

Installation

Standard WordPress installation; either:

  • Go to the Plugins -> Add New screen in your dashboard and search for this plugin; then install and activate it.

Or

  • Upload this plugin’s zip file into Plugins -> Add New -> Upload in your dashboard; then activate it.

After installation, you will want to configure this plugin, as follows:

1) If you are selling goods to and are liable to pay taxes in the EU and/or UK for which the VAT rate should depend upon the buyer’s country (i.e. the place of supply is deemed as the customer’s location), then go to WooCommerce -> Settings -> Tax -> Standard Rates, and press the “Add / Update VAT Rates”, making sure that “Standard” is selected in the rates drop-down.

2) If you have products that are liable for VAT at a reduced rate, then also go to WooCommerce -> Settings -> Tax -> Reduced Rate Rates, and press the “Add / Update VAT Rates”, making sure that “Reduced” is selected in the rates drop-down.

You must remember, of course, to make sure that a) your WooCommerce installation is set up to apply taxes to your sales (WooCommerce -> Settings -> Tax) and b) that your products are placed in the correct tax class (choose “Products” from the WordPress dashboard menu).

FAQ

Is this plugin only for shops based on the EU? Or in the UK?

It is suitable for shops in either, or neither, of the above. That is to say, you can configure the settings appropriately for wherever you are based.

How can I display a widget allowing a visitor to pre-select their country, when viewing products (and thus set VAT accordingly)?

There is a widget for this; so, look in your dashboard, in Appearance -> Widgets. You can also display it anywhere in page content, using a shortcode, shown here with the default values for the available parameters: [euvat_country_selector include_notaxes=”1″ classes=”” include_which_countries=”all”]. The ‘include_notaxes’ parameter controls whether to include a “I am not liable to VAT” option. The ‘classes’ parameter allows you to add CSS classes to the resulting container. The ‘include_which_countries’ parameter can take the values “all”, “shipping” (those countries that your store ships to, as indicated by the WooCommerce settings) or “selling” (those that it sells to), to indicate which countries should be included in the list. N.B. The “eu_” in the shortcode name is due to the plugin’s history; it does not mean that only EU countries are choosable.

I want to make everyone pay the same prices, regardless of VAT

This is not strictly an EU/UK VAT compliance issue, and as such, does not come under the strict remit of this plugin. (Suggestions that can be found on the Internet that charging different prices in difference countries breaks non-discrimination law have no basis in fact at the time of writing). However, WooCommerce does include experimental support for this (see: https://github.com/woocommerce/woocommerce/wiki/How-Taxes-Work-in-WooCommerce#prices-including-tax—experimental-behavior), and so we have provided an option in the settings to tell WooCommerce to turn this on.

Reviews

dekabr 23, 2023
This plugin has been around for a while and transitioned with woo for compliance to EU V.A.T law. Since 21, eShops may charge VAT on a per country basis, based on delivery adress. And how the h*** would you administer this, if it wasn’t for David’s master code. This plugin adds VAT tables to your site incl all vat rates for EU Countries. Then you can add any and all other rates, you wish, such as Zero, reduced, artist,services and you can even add other countries. So this can easily work for rules in Aussieland, that I am not even aware of. But hold on….. this plugin can if you set it, display next to the price that this is ex vat / incl vat / Incl VAT Denmark or Luxembourg and then show nothing if no VAT is added for trade beyond EU. A country like Denmark has one of the highest rates at 25%. That addition is a competitive disadvantage for sales to fx Tunisia. That’s why this function is vital. For anonymous users it will geolocate, once adding shipping address it will recalculate seamlessly. Under Danish B2C law you must at all times present pricing incl. of VAT. Now if a user lies about their location behind a VPN, what can anyone do? Let the dice roll and take it to court. Cudos to David for making life so easy for so many in the middle of anarchy. Thx a ton and merry X-mas.
ýanwar 21, 2022
Such plug-in does exactly what’s expected and is really useful to be compliant with such new VAT regulation. David is a great professional, coder and support engineer. When I was in trouble (in migrating from Aelia version to Simba version of such VAT EU plug-in), he was really available and willing-full to help to solve, also in late evening. Thanks ! Great product ! Great support ! Great people !
Read all 26 reviews

Contributors & Developers

“EU/UK VAT Compliance Assistant for WooCommerce” is open source software. The following people have contributed to this plugin.

Contributors

“EU/UK VAT Compliance Assistant for WooCommerce” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “EU/UK VAT Compliance Assistant for WooCommerce” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.31.4 – 2024-11-14

  • TWEAK: Resolve dynamic property deprecations in WC_VAT_Compliance_Preselect_Country
  • TWEAK: Resolve premature language domain loading in WP 6.7
  • FIX: Fix regressions in order recording in the short-lived 1.31.2

1.31.1 – 2024-10-04

  • FIX: Prevent unwanted VAT number/address substitutions happening on the block checkout page
  • FIX: Avoid using an unavailable variable in the block checkout
  • TWEAK: Prevent an unwanted JavaScript console message
  • TWEAK: Update Finnish standard VAT rate (now 25.5%)
  • TWEAK: Update URL for Russian Central Bank’s exchange rates

1.31.0 – 2024-08-27

  • FEATURE: Block checkout support. Since this is a new feature, tested internally and by a small number of existing customers, for the next couple of months or so you should consider this as being in “beta” status, and perform your own testing (since the plugin has a large variety of different configuration combinations possible)
  • FIX: Caching of cart totals should allow variation based upon the current shipping method(s)
  • TWEAK: Mark as supporting WooCommerce 4.5+ (nothing has been changed to remove WC 3.8-4.4 support, but this is our official support requirement; WooCommerce 4.5 was released in September 2020)

1.30.3 – 2024-08-06

  • FIX: The “VAT number valid” column in the detailed CSV download could display an incorrect value
  • TWEAK: When checking tax tables for recognised rates, ignore any entries that are for specific postcodes or cities (consistent with how entries for specific states are already ignored)
  • TWEAK: When parsing results from the VATSense rates API, exclude any zero rates, for consistency with existing rates format

1.30.2 – 2024-04-13

  • FIX: A regression in version 1.27.21 (released 7th Feb 2023) meant that if your shop sold orders in a different currency to your configured VAT reporting currency in the plugin settings, then conversions were carried out incorrectly in the summary report table in “WooCommerce -> VAT Compliance -> VAT Reports”. Consequently, the reports contained incorrect totals. As such, shops selling in multiple currencies may wish to re-run these reports after updating to this version, and compare them with the VAT payments they made to see if they need to adjust past reports.
  • TWEAK: Update updater library (Premium version) to latest version

1.30.0 – 2024-02-01

  • FEATURE: Added experimental support for Switzerland (which is not a part of the EU). VAT number lookup support is via vatsense.com. Users can choose their preferred combination of zones (EU/UK/Norway/Switzerland)
  • TWEAK: Add filter woocommerce_vat_compliance_log_woocommerce_customer_taxable_address_exceptions to stop logging exceptions raised by WooCommerce core in that method if desired

1.29.11 – 2023-01-04

  • TWEAK: Update VAT rates for Luxembourg and Estonia

1.29.10 – 2023-12-29

  • TWEAK: Add missing context check before calling wc_add_notice() when reporting on VAT number validity in the back-end with too-short numbers
  • TWEAK: Update updater library version

1.29.8 – 2023-12-13

  • TWEAK: Some minor refactoring within the VAT number and shortcode checkout classes to enable future improvements
  • TWEAK: Move description of HPOS compatibility to the correct part of the readme.txt to avoid ambiguity about which versions this applied to (it applies to both free and paid versions)
  • TWEAK: Prevent a PHP notice being logged if the add_meta_boxes is called from the front-end (e.g. UpdraftCentral)
  • TWEAK: Update updater library to current series

1.29.7 – 2023-11-03

  • FIX: HMRC (UK) again moved the URL at which they provide their official exchange rate XML data

1.29.6 – 2023-10-05

  • FIX: Fix a regression in the 1.29.2 release which could improperly prevent the VAT number field being displayed on the checkout

1.29.3 – 2023-10-03

  • FIX: Fix a regression in reporting in yesterday’s 1.29.2 release which could result in incomplete data being used to build the report
  • TWEAK: Adjust how reporting queries are logged to make them easier to read

1.29.2 – 2023-10-02

  • REFACTOR: All JavaScript for the checkout is now abstracted into a static (and cacheable) file, instead of being generated inline. Developers who have written custom PHP code should test their code carefully, and adjust where needed.
  • TWEAK: Add a constant WC_VAT_REPORTING_LOG_QUERIES to aid with report generation debugging
  • TWEAK: Increase speed of report generation by not running a final query if the previous query result set was between empty and matching the full page size
  • TWEAK: The filter for the checkout message stating that the VAT number is not long enough has been changed to wc_vat_msg_not_long_enough (as the previous filter name was unintentionally duplicated)
  • TWEAK: Mark as requiring WP 5.0+; nothing explicit has been done to remove compatibility with earlier versions, but this is the updated support requirements)
  • TWEAK: Fix invalid nesting of HTML tags on the checkout

1.29.1 – 2023-09-30

  • FIX: Fix a regression in 1.29.0 that caused the self-certify radios to display incorrectly

1.29.0 – 2023-09-28

  • FEATURE: Provide an option to always use the customer IP address for complete determination of the taxation country – potentially suitable for shops that are subject to special provisions only requiring one evidence of location (and who do not with to use the billing country)
  • TWEAK: Remove unwarranted specificity from the default message when a cart is forbidden
  • TWEAK: Add $cart_exempt parameter to wc_vat_woocommerce_product_get_tax_class_zero_rate_class filter
  • TWEAK: Add filter wc_vat_exempt_shipping_rate_taxes to allow modification of empty final output of WC_EU_VAT_Compliance_VAT_Number::woocommerce_shipping_rate_taxes()
  • TWEAK: Declare class variables explicitly because of deprecation of dynamic properties on PHP 8.2
  • TWEAK: Declare class variables in nusoap library explicitly because of deprecation of dynamic properties on PHP 8.2
  • TWEAK: Do not allow a default country (from the customer object or store) to be used during checkout processing
  • TWEAK: Tweak settings tip for VAT Number message
  • TWEAK: Replaced strftime(), which is deprecated since PHP 8.1
  • TWEAK: Supply any checkout VAT number through the woocommerce_checkout_posted_data filter

1.28.2 – 2023-06-14

  • FIX: Correct an SQL query used as an update task on HPOS order meta items
  • TWEAK: Allow HPOS status to be checked during plugins_loaded

1.28.1 – 2023-06-05

  • FIX: When the shop was based in a VAT region for which the settings did not indicate that VAT accounting should take place (which is an erroneous setting; all countries require VAT accounting to take place in their own country), B2B VAT exemptions were not performed correctly for cross-border sales into a different VAT region.

1.28.0 – 2023-05-29

  • FEATURE: Supports WooCommerce high-performance order storage (https://woocommerce.com/document/high-performance-order-storage/). Since HPOS is a large and invasive change, we recommend you test your site on it carefully. Developers should note the changelog items below.
  • FEATURE: Support currency conversions in the PDF invoice templates of PDF Invoices & Packing Slips for WooCommerce – Premium Templates (WP Overnight) – https://wpovernight.com/downloads/woocommerce-pdf-invoices-packing-slips-premium-templates/
  • DEVELOPERS: (Potentially breaking change): The sixth parameter to the filter woocommerce_vat_compliance_get_report_sql has changed – it is now an array – and the seventh has been removed entirely. If you had written custom code that uses this filter, then you should review and test it to ensure that it still works.
  • DEVELOPERS: Because of adding compatibility for WooCommerce High Performance Order Storage, the SQL query received by each of the woocommerce_vat_compliance_get_refunds_sql and woocommerce_vat_compliance_get_report_sql filters is now different. If using these filters, you will need to re-work them for HPOS compatibility.
  • DEVELOPERS: The filter wc_eu_vat_compliance_report_meta_fields is deprecated, and has been replaced with the filter wc_eu_vat_compliance_report_extra_meta_fields. Please adapt your code to use the new filter; the old one will be removed in a future release. See: https://www.simbahosting.co.uk/s3/faqs/when-downloading-a-detailed-csv-how-can-i-add-an-extra-column/

1.27.27 – 2023-05-06

  • FEATURE: If a VAT Sense API key has been added (Premium version), then VAT Sense will be used as the preferred source for up-to-date VAT rate information
  • TWEAK: Update Luxembourg’s current VAT rate (should also be pulled from the Internet by existing installs before updating to this release)
  • TWEAK: Remove no-longer maintained Aelia data-source for VAT rates
  • TWEAK: Provide a filter woocommerce_vat_widget_without_vat_on_address_save_with_vat_number to allow site owners to turn off the default behaviour of showing prices without VAT when the customer saves a VAT number in their profile.
  • TWEAK: Adjust behaviour of setting the visitor’s preference to show prices without VAT upon saving an address with a VAT number to not do so if the customer was in the store base country and is not deducting VAT from such customers

1.27.26 – 2023-04-07

  • FIX: The “Order number” column in the detailed CSV download was empty (since 1.27.21); it now has this capitalisation instead of “Order Number”, so if any developers have written customer PHP code to target this column, they will need to adjust
  • FIX: If the site was running in a non-English language, then (since 1.27.21) in the detailed CSV spreadsheet (Premium feature) any columns which had translated headings would have empty values
  • TWEAK: Handle Cloudflare’s “T1” and “XX” pseudo-country codes (recognise as not referring to any actual country)

1.27.25 – 2023-04-03

  • TWEAK: Get the selected drop-down country over AJAX, in order to make the drop-down country selector compatible with per-country page-caching.

1.27.24 – 2023-03-29

  • FIX: When the store’s base country is in one of the UK/Isle of Man, France/Monaco pairs, then a transaction should be subject to base country rules if the taxation country is the other member of the pair
  • TWEAK: Prevent a potential PHP notice when running under cron

1.27.23 – 2023-03-21

  • FEATURE: When checkout orders are recorded with the final taxable address determined with the aid of self-certification, this information is now recorded explicitly and displayed in the dashboard order page metabox (previously it as implicit)
  • TWEAK: Use data from WC’s get_posted_data() method rather than $_POST directly in a couple of places
  • TWEAK: Remove superceded internal “deduction setting” code
  • TWEAK: Add wc_vat_compliance_log_no_line_total filter to suppress potentially unwanted logging
  • TWEAK: Update Premium version’s updater library to latest version
  • TWEAK: Settings in the “Other WooCommerce tax options potentially relevant for VAT compliance” section are now read-only, to avoid user confusion about which component implements the settings

1.27.22 – 2023-02-25

  • FIX: Country pre-selection was erroneously not using GeoIP lookups if the legacy plugin option was inactivate but the WooCommerce core option was active
  • FIX: Fix regression in 1.27.21 which resulted in zero-rating no longer being applied for partial exemptions and value-based exemptions
  • TWEAK: Update .pot file
  • TWEAK: Move registration of action that outputs VAT number field until init, to allow shop owners to access the associated filters in child theme code
  • TWEAK: Add page output time to debugging footer when activated
  • TWEAK: In one specific situation, the debugging footer could include incorrect information on how the visitor country was determined
  • TWEAK: Avoid unintended use of deprecated dynamic property in WC_VAT_Compliance_Preselect_Country class

1.27.21 – 2023-02-07

  • TWEAK: Add filter wc_vat_woocommerce_product_get_tax_class_zero_rate_class to allow a different tax class to the WooCommerce default one to be used as the designated zero-rate class.
  • TWEAK: Rename internal “Date” column in detailed CSV download to “Date (local)” to match the spreadsheet column heading; any developers who had written custom PHP code targetting this column will need to adjust their code.
  • TWEAK: Filters related to the detailed CSV download did not allow removal of columns from the base spreadsheet; now they do.
  • TWEAK: Filters related to the detailed CSV download now allow columns to be re-ordered.
  • TWEAK: wc_eu_vat_compliance_csv_data_entries filter now has an extra parameter available containing order details after currency conversion

1.27.20 – 2023-01-20

  • FIX: Prevent a potential infinite recursion (since 1.27.15) on the cart page when ascertaining the taxation country
  • FIX: Fix a regression (since 1.27.17) which could prevent the customer-chosen conflict resolution choice from takin effect
  • TWEAK: Log a message if a cart item has no line_item_total key.

1.27.18 – 2023-01-11

  • FIX: Work around a problem in 1.27.17 when renewing subscription orders that were created when the plugin wasn’t active caused by a function needed by WooCommerce’s tax methods only being loaded on the front-end.

1.27.17 – 2023-01-09

  • TWEAK: When creating subscription renewal orders, set the current WooCommerce customer to the order customer, to work around the WooCommerce filter woocommerce_customer_taxable_address not passing any customer identifier

1.27.16 – 2022-12-01

  • FEATURE: Add support for exchange rates from the Romanian National Bank

1.27.15 – 2022-11-26

  • TWEAK: Always run the country calculation during the woocommerce_checkout_process action, to fix a site with a custom checkout flow where session retrieval sometimes failed at this stage
  • TWEAK: Do not allow use of request variable during checkout processing
  • TWEAK: Allow woocommerce_admin_billing_fields method to be called from a front-end context, to avoid a problem caused by a third-party extension doing that
  • TWEAK: Change how saving of meta-data is performed in woocommerce_process_shop_order_meta hook to prevent conflicting with an issue in a currency switcher plugin.

1.27.14 – 2022-10-28

  • FIX: The last release introduced an accidental requirement for PHP 7.3+

1.27.13 – 2022-10-26

  • TRANSLATION: Updated nl_NL translation, thanks to Robin De Winter

1.27.12 – 2022-10-19

  • TWEAK: Fine-tune VatSense result handling for Norwegian VAT numbers
  • TWEAK: Add filter woocommerce_vat_show_prices_without_vat_on_login allowing site owner to not cause prices to be shown without VAT upon login even if the customer stored a VAT number without profile
  • TWEAK: Prevent WooCommerce core raising a PHP notice due to no CSS class on user profile checkbox
  • TWEAK: Update update checker library to latest version
  • TWEAK: Add filters woocommerce_vat_compliance_get_items_sql, woocommerce_vat_compliance_get_refunds_sql and woocommerce_vat_compliance_get_report_sql to allow modification of the SQL used to fetch relevant data for building reports
  • TWEAK: Add filter wp_ajax_wceuvat_vatnumber_response to the AJAX action response for users who want to adapt messages returned from the VAT-number checking service
  • TWEAK: If a subscription renewal order is created where the original order does not have previous information present for the taxable country, then an attempt to add this information will be made.
  • TWEAK: Move HTML entity outside of translation string and regenerate POT file to correct previous error

1.27.11 – 2022-09-24

  • FEATURE: When a new order is created in the WooCommerce admin dashboard screen, any VAT number entered will be validated; if valid, the customer will be set as tax-exempt (VAT number validation is a Premium feature).
  • TWEAK: The “Load billing address” link when editing an order manually will import the customer’s saved VAT number
  • TWEAK: Settings export now includes WooCommerce base country
  • TWEAK: Remove debugging lines related to base rate fetching that were accidentally left in a previous version
  • TWEAK: Also display invalid entered VAT numbers in an order’s VAT compliance meta-box (including the information that it was invalid)
  • TWEAK: Include the “standard rates” tax table in the list of quick links in the “Tax tables” section

1.27.10 – 2022-09-08

  • TWEAK: Update .pot file
  • TWEAK: Add “Moms” to the list of labels used for VAT taxes
  • TWEAK: Adjust the description for the list of VAT taxes setting to reflect its current use, improve the layout and add a link to the tax tables for clarity
  • TWEAK: Update the link to the official EU list of VAT rates
  • TWEAK: Update to latest version of the plugin updater library (Premium)

1.27.9 – 2022-09-05

  • FIX: After adding a new VAT region over-ride to the settings and saving it, attempts to remove it failed

1.27.8 – 2022-09-03

  • FIX: At least one third-party PayPal express checkout needed extra code to retain the VAT number and other details in the session for the order to record it at the end of the off-suite flow
  • TWEAK: Removed debugging log message included in 1.27.7

1.27.7 – 2022-08-27

  • TWEAK: Run the woocommerce_get_price_suffix filter when DOING_AJAX is true also (for plugins that fetch front-end content snippets over AJAX)
  • TWEAK: Lower priority of a couple of hooks which record audit data, so that they are more likely to run successfully if there is another plugin on the site which uses the same hooks and causes a fatal error before our code got to run

1.27.6 – 2022-07-04

  • TWEAK: Adjust default filename for saving short summary reports
  • TWEAK: Add new filters (wc_vat_compliance_currency_converted_order_data_use_order_saved_data, wc_vat_compliance_currency_converted_order_data_use_conversion_time, wc_vat_compliance_currency_converted_order_data_use_rate, wc_vat_compliance_currency_converted_order_data_use_provider) which allow developers to modify the date used for currency conversion lookups for reporting data.

1.27.5 – 2022-06-20

  • FIX: Fix incorrect JSON parsing of the new IP address lookups from https://ipapi.co introduced in 1.27.4

1.27.4 – 2022-06-18

  • FEATURE: Handle admin-area editing of taxes – save the new tax information if updates are applied in the admin area (and also save the original non-admin information for audit purposes)
  • FEATURE: If WooCommerce has saved an IP address for the order, but the plugin (for whatever reason – e.g. order created through custom means) has not recorded a GeoIP lookup for the IP address, then this will now be performed if viewing the order’s dashboard page. These lookups may be performed via the public API at https://ipapi.co – if this is undesirable for you, then add define('WC_VAT_COMPLIANCE_DO_REMOTE_IP_LOOKUPS', false); to your wp-config.php file.
  • TWEAK: Adjust the “No further information recorded” message for greater precision.
  • TWEAK: Add the WC_Order to the parameters of the wc_eu_vat_compliance_meta_country_info filter

1.27.3 – 2022-06-11

  • TWEAK: Introduce filter wc_vat_order_reporting_currency, useful for providing reports in other currencies
  • TWEAK: Prevent type error when taxation country is set but an empty string
  • TWEAK: Remove no-longer-relevant help message from WooCommerce’s “Default Customer Address:” setting

1.27.2 – 2022-05-10

  • FIX: Fix a logic error in what country was saved in the session upon order review when taxation was based on shipping country and it differed from the billing country
  • TWEAK: Suppress premature “The VAT number entered is not long enough to be valid for the chosen country” message that appears in recent WC versions
  • TWEAK: Upgraded the .pot file
  • TWEAK: Added filter wc_vat_compliance_include_order_in_report upon user request to allow programmer-controlled removal of orders from VAT reports

1.27.0 – 2022-04-26

  • FEATURE: The capability to use the plugin’s GeoIP resolution on all relevant pages is now exposed as an option, defaulting to off for new installs (since WooCommerce now has its own GeoIP resolution), and on for upgrades (reflecting the previous default behaviour). As part of the related changes, the country-selection widget and/or dropdown can now be used without having to accept the plugin’s own GeoIP resolution.
  • TWEAK: The class WC_EU_VAT_Compliance_Preselect_Country has been renamed to WC_VAT_Compliance_Preselect_Country; if you had hand-written PHP code that interacted with it, you will want to review it
  • TWEAK: The constant WC_EU_VAT_LOAD_ALL_CLASSES has been renamed to WC_VAT_LOAD_ALL_CLASSES
  • TWEAK: Mark as requiring WP 4.7+; nothing explicit has been done to remove compatibility with earlier versions, but this is the updated support requirements)
  • TWEAK: Mark as supporting WooCommerce 3.8+ (nothing has been changed to remove WC 3.5-3.7 support, but this is our official support requirement)

1.26.6 – 2022-03-29

  • TWEAK: Add “Aelia EU VAT Assistant” as description of source of IP/country data when the data stored so indicates
  • TWEAK: The debugging constant WC_EU_VAT_DEBUG has been replaced with WC_VAT_DEBUG
  • TWEAK: Do not register certain hooks related to country pre-selection in an admin context

1.26.5 – 2022-03-15

  • FEATURE: Any customer-entered VAT number (available in the Premium version) is now editable in the ‘billing address’ section of the WooCommerce order admin screen

1.26.4 – 2022-03-09

  • TWEAK: Change columns headings “VAT is variable” to the more precise “VAT is based on customer location” in detailed CSV spreadsheet download
  • TWEAK: Make sure that the first parameter to round() is converted to a float, to prevent PHP 8.0+ type errors
  • TWEAK: Update the detection of buggy third-party plugins calling woocommerce_checkout_order_processed with insufficient actions for PHP 8.0 compliance

1.26.3 – 2022-02-05

  • TWEAK: Change the multi-select HTML control for forbidding VAT checkout in specified regions into a list of checkboxes, to eliminate support requests from users unfamiliar with multi-selects and unable to succeed even with the attached help-text. Also improves UI consistency with the controls used elsewhere.
  • TWEAK: Update to latest version of the paid plugin updater library

1.26.2 – 2022-01-25

  • FIX: Fix a couple of cases in which it was possible for the VAT-exemption tatus to change without the checkout summary updating
  • TWEAK: Update to latest version of the paid plugin updater library

1.26.1 – 2022-01-20

  • FIX: Incorrect checking of the results of jQuery.inArray() led to mishandling of a case for deciding whether to display self-certification fields (regression)
  • TWEAK: If WP_DEBUG is active, then show more information about failed VAT numbers at the checkout

1.26.0 – 2022-01-07

  • FEATURE: Add a new possibility, “United Kingdom (excluding Northern Ireland)” to the list of territories selectable for the “VAT exemption based on value” feature, allowing correct implementation of cross-border sales with value exemptions to stores selling from the EU to both Northern Ireland and the remainder of the UK.
  • TWEAK: Cart value-based VAT exemptions are not henceforth applied during product listing, so that VAT display/non-display on products is not dependent upon the current cart (even though the eventual cart and checkout values will be). It is judged that it is potentially confusing to have VAT display on listings change in this way. This behaviour can be controlled using the filter wc_vat_product_tax_class_pass_through_during_filters.
  • TWEAK: Remove debugging logging line
  • TWEAK: Do not crash if wc_euvat_compliance_wpo_wcpdf_footer is called without an order number having been set (log a PHP error and pass through)
  • TWEAK: Improve detection of current order in wpo_wcpdf_footer_text filter
  • TWEAK: Avoid using deprecated array access method on WC_Order_Item_Tax objects
  • TWEAK: Mark as compatible with WP 5.9

1.25.11 – 2021-12-02

  • TWEAK: Change default settings export filename to remove reference to plugin’s historically narrower scope
  • TWEAK: Adjustment to prevent a couple of possible PHP notices when looking up a region

1.25.10 – 2021-11-01

  • FIX: Fix wrong variable reference when looking up VAT region which could cause an execution error in one combination of circumstances

1.25.8 – 2021-10-30

  • FIX: When the user had chosen partial VAT exemptions (Premium feature) (i.e. some tax classes and not others), exemption was not being applied to relevant shipping cost classes
  • TWEAK: Update updater library in Premium version to latest version
  • TWEAK: Add a filter wc_vat_start_session_for_geoip to allow store owners to disable sessions for not-logged-in users before the checkout

1.25.7 – 2021-09-16

  • TWEAK: Upon login, if the user has a saved billing/shipping country and WooCommerce settings are to use the same for tax calculations, then set this in the session as the chosen taxation country
  • TWEAK: This update renames an internal session variable to remove the historic “eu_” prefix. Consequently, when you update, customers who had begun sessions in your store and had chosen a VAT country (e.g. via a widget or shortcode that you added) will have that choice forgotten.
  • TWEAK: Correct the ‘You can see your year-to-date sales in the “Reports” tab’ link in the ‘Tax class translations’ settings section
  • TWEAK: Prevent PHP coding notices if the cart contents are invalid

1.25.6 – 2021-09-07

  • FIX: Saving settings after deleting all previously created and saved tax class translation rules did not remove them
  • FIX: When getting the VAT region for an order refund for a credit note (when integrating with WP Overnight’s professional version), identify using the parent order

1.25.5 – 2021-08-17

  • FIX: If the order and reporting currencies for an order were the same, then the “VAT refunded (X, reporting currency)” column in the detailed CSV download was zero
  • TWEAK: Remove the not necessarily pertinent “eu-” prefix from the default filename for downloaded detailed CSV files

1.25.4 – 2021-08-10

  • TWEAK: When displaying meta-box information about value-based exemptions, ensure that currency symbols are displayed correctly (i.e. don’t get double-encoded), in case there was an extension installed that did not follow the convention of get_woocommerce_currency_symbol() in WC core.

1.25.3 – 2021-08-04

  • FEATURE: In the PDF invoice integration, when adding B2B/reverse charge text, you can include that is displayed only for a B2B (via VAT number) exemption, using the format {b2b_exemption}conditional content{/b2b_exemption}.
  • FIX: Local pickup methods are now handled correctly in terms of VAT number entry on the checkout page
  • FIX: At some point from 1.24.0, there was a regression in the display of the customer VAT number in invoice footers for at least some stores* TWEAK: Update bundled file with Slovenian e-book reduced VAT rate (5%). (N.B. This data was previously updated online – the bundled file is only used if the online version cannot be fetched).
  • TWEAK: If you were using the constant WC_EU_VAT_NOCOUNTRYPRESELECT, then this is now deprecated; you should switch to using WC_VAT_NO_COUNTRY_PRESELECT
  • TWEAK: The constant WC_EU_VAT_Compliance_Disable_Append_To_Billing has been renamed to WC_VAT_COMPLIANCE_DISABLE_APPEND_TO_BILLING

1.25.2 – 2021-07-01

  • FEATURE: Added experimental support for support for Norway (which is not a part of the EU). VAT number lookup support is via vatsense.com. Users can choose their preferred combination of zones (EU/UK/Norway)
  • FEATURE: Add support for VAT exemption based upon cost of a single item, rather than all items (used in the Norwegian VAT system)
  • FEATURE: Add support for currency conversions via the rates provided by the Norwegian central bank (Norges bank)
  • TWEAK: Add link to min/max plugin for users who want to forbid orders over a certain value to avoid the need for compliance
  • TWEAK: Update bundled German reduced VAT rate
  • TWEAK: Remove unwanted storing of VIES output in temporary folder

1.24.0 – 2021-06-11

  • FEATURE: Handling of the “Invoice footer text (B2B exemption)” has changed; it is now used for value-and-destination based exemptions (e.g. orders above £135 to the UK), if you have configured any (if you have not, then nothing has changed). You can now also include text that is displayed only for a value/destination-based exemption, using the format {value_exemption}conditional content{/value_exemption}.
  • FIX: Update nusoap library (used for VIES lookups) for PHP 8 compatibility
  • FIX: Fix a bug which resulted in failure to calculate the order’s VAT region for including the store VAT number in an invoice footer for a VAT-exempt order
  • TWEAK: Increase cacheing time for main WSDL download from https://ec.europa.eu

1.23.2 – 2021-06-09

  • FIX: Fix a regression with saving the VAT exemption currency selection (Premium version)
  • TWEAK: Introduce a constant WOOCOMMERCE_VAT_PARSE_SUFFIXES_ALSO_WHEN_VARIABLE which, if defined as true, will allow a price suffix to be displayed even on variable products with dynamic elements (which by default WooCommerce disables)
  • TWEAK: Remove debugging log entry included in 1.23.1

1.23.1 – 2021-05-19

  • TWEAK: Catch an error thrown by wc_get_chosen_shipping_method_ids() when it tries to access a non-existent session

1.23.0 – 2021-05-18

  • FEATURE: Partial VAT exemption (Premium version) – make VAT exemption upon supply of a valid VAT number to only apply to products in tax classes specified by the shop owner (rather than to all products)
  • FIX: Prevent fatal error (recent regression) in admin product display if no WC Customer object has been initialised.
  • TWEAK: In the ‘Tax tables’ accordion, list all existing tax tables (not just standard ones)

1.22.1 – 2021-05-17

  • FIX: Reporting currency conversions were not being made on PDF invoices when the taxable country and reporting country differed and a custom converson currency override existed.
  • TWEAK: Remove an inconsistent use of italics in the settings.
  • TWEAK: Because of the number of WooCommerce PDF invoicing plugins with similar names, add a hyperlink to the intended plugin.
  • TWEAK: Tweak a label in the VAT meta info box and a couple of labels in the settings for greater precision, given the possibility for country of supply to differ from the customer’s taxable address country.

1.22.0 – 2021-05-13

  • FEATURE: The ‘reports’ screen now allows the user to choose whether they wish to aggregate the reports by customer taxation country or the country that payment is due to (which can differ in the case of cross-border local pickups and cross-border threshold schemes)
  • FEATURE: “This year” has been added as a report option, to show the year-to-date figures; useful when operating under a regime which applies an annual threshold after which the rules change
  • FEATURE: (Premium version): Change product taxation rules based upon year-to-date sales thresholds – allows automated handling and compliance with July 2021+ EU cross-border trading thresholds (see: https://www.simbahosting.co.uk/s3/faqs/please-explain-the-tax-class-translations-feature-to-me/)
  • TWEAK: All use of “digital” terminology has been updated in light of the coming new EU VAT regulations which will henceforth apply “place of supply deemed as the customer location” to non-digital goods also.
  • TWEAK: A new “readiness test” has been added, checking for the existence of the default “Zero Rates” tax class. (It will exist unless the store owner manually deleted it).
  • TWEAK: The filter wc_eu_vat_cart_is_vat_exempt has been renamed to wc_vat_cart_has_value_based_exemption
  • TWEAK: Replace one use of ‘zone’ with the otherwise-used ‘region’

1.21.0 – 2021-05-07

  • FEATURE: It is now possible to configure multiple “VAT exemption based on value” rules for different countries, calculated in different currencies, as more countries consider adding such rules.
  • FEATURE: The VAT information meta-box in the order screen will now indicate if an order was exempted because of a destination/value-based rule.
  • TWEAK: Country selector dropdown widgets for the “VAT exemption based on value” feature are now enhanced using WooCommerce’s enhanced select library
  • TWEAK: The plugin’s settings are no longer appended to the WooCommerce ‘tax’ settings tab; instead, just a link to the plugin’s own settings …