Module: EuVatRatesData
- Defined in:
- lib/eu_vat_rates_data.rb,
lib/eu_vat_rates_data/version.rb
Overview
VAT rates for 44 European countries (EU-27 + 17 non-EU).
EU rates sourced from the European Commission TEDB (Taxes in Europe Database), checked daily. Non-EU rates maintained manually.
Usage:
require "eu_vat_rates_data"
EuVatRatesData.get_rate("FI")
# => {"country"=>"Finland", "currency"=>"EUR", "eu_member"=>true,
# "standard"=>25.5, "reduced"=>[10.0, 13.5], "super_reduced"=>nil, "parking"=>nil}
EuVatRatesData.get_standard_rate("DE") # => 19.0
EuVatRatesData.eu_member?("NO") # => false
EuVatRatesData.eu_member?("FR") # => true
EuVatRatesData.data_version # => "2026-03-18"
Constant Summary collapse
- DATA_FILE =
File.("../../data/eu-vat-rates-data.json", __dir__)
- VERSION =
"2026.3.18"
Class Method Summary collapse
-
.all_rates ⇒ Hash{String => Hash}
Return all 44 country rate hashes keyed by ISO country code.
-
.data_version ⇒ String
Return the ISO 8601 date when EU data was last fetched from EC TEDB.
- .dataset ⇒ Object
-
.eu_member?(country_code) ⇒ Boolean
Return true if the country is an EU-27 member state.
-
.get_rate(country_code) ⇒ Hash?
Return the full rate hash for a country, or nil if not found.
-
.get_standard_rate(country_code) ⇒ Float?
Return the standard VAT rate for a country, or nil if not found.
- .rates ⇒ Object
Class Method Details
.all_rates ⇒ Hash{String => Hash}
Return all 44 country rate hashes keyed by ISO country code.
50 51 52 |
# File 'lib/eu_vat_rates_data.rb', line 50 def self.all_rates rates.dup end |
.data_version ⇒ String
Return the ISO 8601 date when EU data was last fetched from EC TEDB.
65 66 67 |
# File 'lib/eu_vat_rates_data.rb', line 65 def self.data_version dataset["version"] end |
.dataset ⇒ Object
25 26 27 |
# File 'lib/eu_vat_rates_data.rb', line 25 def self.dataset @dataset ||= JSON.parse(File.read(DATA_FILE, encoding: "utf-8")) end |
.eu_member?(country_code) ⇒ Boolean
Return true if the country is an EU-27 member state. Returns false for non-EU countries (GB, NO, CH, etc.) and unknown codes.
58 59 60 61 |
# File 'lib/eu_vat_rates_data.rb', line 58 def self.eu_member?(country_code) rate = get_rate(country_code) rate ? rate["eu_member"] == true : false end |
.get_rate(country_code) ⇒ Hash?
Return the full rate hash for a country, or nil if not found.
36 37 38 |
# File 'lib/eu_vat_rates_data.rb', line 36 def self.get_rate(country_code) rates[country_code.upcase] end |
.get_standard_rate(country_code) ⇒ Float?
Return the standard VAT rate for a country, or nil if not found.
43 44 45 46 |
# File 'lib/eu_vat_rates_data.rb', line 43 def self.get_standard_rate(country_code) rate = get_rate(country_code) rate&.fetch("standard") end |
.rates ⇒ Object
29 30 31 |
# File 'lib/eu_vat_rates_data.rb', line 29 def self.rates dataset["rates"] end |