Tax regions, taxable groups and rates
Tax Rules holds four kinds of thing. A tax region is where a store is. A taxable group is the kind of goods an item is. A tax rule joins the two and holds the rates, each with the date it applies from. An exemption is a kind of customer who pays no tax at all.
Tax regions
A tax region is an area where one set of rates applies. Most countries have one, and its id is the country code:
SE, FI, DE. A country with areas that have rates of their own has a region for each, named after the country
code: Spain has ES, ES-CN (the Canary Islands), ES-CE (Ceuta) and ES-ML (Melilla), and Portugal has PT,
PT-MA (Madeira) and PT-AC (the Azores).
Every store is in exactly one tax region. It is set as taxRegionId on the store's business unit, in
Business Unit Management. A company with stores in several countries,
or on the Spanish mainland and in the Canary Islands, sets a different region on each.
GET /tax-regions lists every region with its country. See Tax Rules API.
Tax-exempt regions
Every region has a tax-exempt twin, named with -TE at the end: SE-TE, ES-CN-TE, PT-MA-TE. It has the same
taxable groups as its region, and every one of them is at 0 %.
A business unit that sells without tax is put in the tax-exempt region. Its items keep their ordinary taxable group, so nothing on the items has to change, and every one of them gets 0 %.
The twins are created by Tax Rules itself, from the regions they mirror. So when a taxable group is added to a region, its twin gets the same group at 0 % at the same time, and the two can never drift apart. Each twin rule applies from the earliest date of the rule it mirrors.
Taxable groups
A taxable group is the kind of goods, independent of the rate: Standard, Reduced, ReducedLow. Every
item's price carries one, as taxableGroupId. The rate for a group is set by each region, so the same group can
have a different rate in each country.
There is one global list of taxable groups, the same for every tenant, named after the EU's VAT rate types:
| Taxable group | Meaning |
|---|---|
Standard | the country's standard rate |
Reduced | the country's reduced rate |
ReducedLow | a second, lower reduced rate |
SuperReduced | a rate below the reduced rates |
ParkingRates | a transitional rate some EU countries are allowed to keep |
Zero | taxable, at a rate of 0 % |
NonTax | outside the tax altogether |
Zero and NonTax both give 0 %. The difference is in reporting: a Zero sale is a taxed sale at 0 %, a NonTax
sale is not taxed at all. Where a fiscal integration needs that difference, the
fiscal tax group shows it: in Portugal Zero is EXEMPT and NonTax is NS.
A region can also have groups of its own, used nowhere else: the Canary Islands' IGIC-Tobacco, IGIC-High
and IGIC-Increased, Ceuta's and Melilla's IPSI-8 to IPSI-0.5, and Germany's Special-Rate-1 and
Special-Rate-2. The country pages list them.
🛑 A group has a rate only where the region has a rule for it
Every global group is a valid name everywhere, but a group only has a rate in a region that has a rule for
it. Today, only Spain's mainland has SuperReduced, no country has ParkingRates, and Ceuta and Melilla have no
Reduced.
| Taxable group | AD | DE | ES | ES-CN | ES-CE | ES-ML | FI | IE | NL | NO | PT | PT-MA | PT-AC | SE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Standard | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Reduced | ✓ | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ReducedLow | ✓ | – | ✓ | – | – | – | ✓ | ✓ | – | ✓ | ✓ | ✓ | ✓ | ✓ |
SuperReduced | – | – | ✓ | – | – | – | – | – | – | – | – | – | – | – |
ParkingRates | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
Zero | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
NonTax | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | – | ✓ | ✓ | ✓ | ✓ | ✓ |
An item whose group has no rule in its store's region has no rate there. A price is not checked against the tax rules when it is saved, so the problem only shows at the till: the sale cannot be taxed correctly, and a fiscal signing integration may refuse the receipt. This happens most often when a company opens in a new country and copies its items from an existing one. See The same item in another country.
Tax rules and rates
A tax rule is one taxable group in one region, such as ES_Standard: the Standard group in region ES. It holds
a list of rates, and each rate has the date it applies from, validFrom.
| Field on a rate | Means |
|---|---|
id | the rate's own id, such as FI_Reduced_2026, usually the rule and the year it starts |
rate | the percentage: 25 is 25 %, 13.5 is 13.5 % |
validFrom | the date the rate applies from, such as 2026-01-01 |
status | Deactivated on a rate that must not be used. Missing on every rate today. |
The rate on a given day is the one with the latest validFrom on or before that day, leaving out any
Deactivated rate. A rate is never edited in place: a new rate is added with a new date, and the old one stays,
so a sale is always taxed at the rate of its own date, also when it is returned or corrected later.
A rate can be added before it applies. Tax Rules then holds it and sends it out at once, and it starts to apply on its date without anything more happening. See How rates change.
Exemptions
An exemption is a kind of customer who pays no tax, whatever the item: a customer from outside the EU, for
example. It belongs to a region and applies to every taxable group there. Sweden and Germany have two each, EU
and NonEU.
An exemption has no rate, because it is always 0 %. Like a rate, it has a validFrom date and can be
Deactivated.
Exemptions and tax-exempt regions both give 0 %, for different reasons: an exemption is about the customer in a single sale, a tax-exempt region is about the store and every sale in it.
Fiscal tax groups
Some countries require each sale to be signed by a fiscal device or service, which uses tax codes of its own. A rule
can carry the code for its group as fiscalTaxGroupId. Germany and Portugal have them: in Portugal, Standard
is STANDARD, Reduced is INTERMEDIATE, ReducedLow is REDUCED, Zero is EXEMPT and NonTax is NS.
Countries without a fiscal integration leave it out.
Tenant aliases
Aliases are a migration aid. Some companies had their own codes for tax groups, such as 1, 2 and 3,
before they moved to Hii Retail, and their items and systems still use them. An alias lets such a company keep
its code while it moves over: it is set on a taxable group for that one tenant, and can differ by country.
A company starting on Hii Retail uses the global group ids and has no aliases. Every alias is one more id that the company's own systems and every receiver of its data have to know about, so set the global ids on your prices from the start.
When that company asks the Tax Rules API for rules, it gets each rule twice: once with the global group id and once with its alias, at the same rate. Other companies see only the global id. Extenda sets an alias up for a company migrating from codes of its own.