REDA One Help Center
EN
Language
English EN Español ES Português PT Italiano coming soon Français FR Deutsch coming soon العربية coming soon
reda.one ↗
Home / REDA Financials AI / Tax Management / Tax Engine Foundations / Tax Jurisdictions

Tax Jurisdictions

A Tax Jurisdiction is a place that levies tax — a country, a state or province, a city. It is the foundation of the whole tax engine, because every tax question starts with “where?”: where is the seller, where is the buyer, and therefore which taxes apply. Get the jurisdictions right and the rules above them practically write themselves.

The clever part — and the thing to understand before anything else — is that jurisdictions form a hierarchy. The United Kingdom contains England, Scotland, Wales, and Northern Ireland. Brazil contains São Paulo, Rio de Janeiro, and 25 other states. The engine uses that parent-child structure so a rule set once at country level automatically applies to every place inside it.

Getting there. Open the App Launcher (the grid icon at the top-left of any page) → REDA Financials Admin → the Tax Jurisdictions tab. In practice the Tax Seeding Wizard creates these for you; open the tab to review or maintain a record.
Access you'll need. Setting up and maintaining jurisdictions requires the Accounting Admin v2 or Accounting Controller v2 permission set. The Accounts Payable v2, Accounts Receivable v2, and Read Only v2 sets can view them but not change them.
Why this matters in one sentence. Because jurisdictions nest, you write a UK VAT rule against “GB” once, and it fires for a customer in England, Scotland, or anywhere in the UK — no need to repeat the rule for each nation. The hierarchy is what keeps the rulebook small.

The hierarchy — and ancestry matching

Each jurisdiction can point to a parent. Country records have no parent; a state points to its country; a city points to its state. That produces a tree:

GB (United Kingdom)
  ├─ GB-ENG (England)  → parent GB
  ├─ GB-SCT (Scotland)  → parent GB
  ├─ GB-WLS (Wales)  → parent GB
  └─ GB-NIR (Northern Ireland)  → parent GB

When the engine evaluates a transaction, it doesn’t just look at the exact jurisdiction — it walks up the tree and collects the place plus all its ancestors. A customer in England produces the set {GB-ENG, GB}. A rule then matches if its jurisdiction is anywhere in that set. So:

  • A rule targeting GB matches the England customer (because GB is an ancestor).
  • A rule targeting GB-ENG matches too (exact hit).
  • A rule targeting GB-SCT does not match (Scotland isn’t in the set).

This “ancestry matching” is why one country-level rule covers a whole nation, while you can still drop to a state-level rule when a single state differs (exactly how Brazil’s per-state ICMS rates work).

The fields — with UK & Brazil values

A jurisdiction is a small, deliberate record. Here is every field, what it does, and a real value from the shipped seed packs — a UK record (England) beside a Brazil record (São Paulo), both at State/Province level so you can compare like for like.

FieldTypeRequiredWhat it’s for🇬🇧 England🇧🇷 São Paulo
Jurisdiction NameTextYesDisplay nameEnglandSão Paulo
CodeText(20) · Unique · External IDYesThe engine’s match key — stable, human-readableGB-ENGBR-SP
LevelPicklistYesHierarchy tier — drives ancestry matchingState/ProvinceState/Province
Parent JurisdictionLookup (self)For non-countryThe place above this one in the treeGBBR
Authority TypePicklistNoThe body that administers the taxState Tax DepartmentState Tax Department (SEFAZ-SP)
Country CodePicklist (ISO 3166-1)For country levelISO country codeGBBR
Currency CodePicklist (ISO 4217)NoReference currency for seedingGBPBRL
Is ActiveCheckbox (default true)YesUnchecked → excluded from all matchingtruetrue
NotesLong Text(500)NoFree notes — treaties, thresholds, deadlines—“SP — largest economy. ICMS 18% standard.”

The Code is the key — treat it with care

Of all these fields, Code is the one that matters most. It’s the engine’s matching key, the seed’s upsert key, and an External ID — which means it’s stable across org refreshes and package upgrades in a way Salesforce record IDs are not. The convention is strict and enforced:

LevelFormatExamples
CountryISO country codeGB, BR, US, IN
State / ProvinceCountry‑StateGB-ENG, BR-SP, US-CA, IN-MH
City / MunicipalityCountry‑State‑CityBR-SP-SAO
Codes are UPPERCASE, no spaces, hyphen-separated. This isn’t a style preference — the engine derives the country and state from the code by splitting on the hyphen (more below), and two validation rules enforce uppercase and no-spaces. br-sp or BR SP will be rejected on save.

How the engine uses jurisdictions

When an invoice posts, jurisdictions do four jobs. You don’t configure any of this — it’s the engine reading your records — but knowing it explains why your codes and parents have to be right.

1 · It walks the ancestry of both parties

The engine loads every jurisdiction once, then for the seller and the buyer it builds the place-plus-ancestors set. Seller in São Paulo → {BR-SP, BR} (the origin set). Buyer in Rio → {BR-RJ, BR} (the destination set).

2 · It matches rules against those sets

A Tax Rule fires only if its origin and destination jurisdictions fall in the matching sets (a blank on the rule means “any”). This is the ancestry mechanism in action — a BR rule matches both SP and RJ; a BR-RJ rule matches only Rio.

3 · It derives the fiscal operation from the codes

The engine compares the two codes to classify the transaction — entirely from the text:

ComparisonResultExample
Same country, same stateIntrastateBR-SP → BR-SP
Same country, different stateInterstateBR-SP → BR-RJ
Different countryExportGB → FR

That derived operation feeds straight into Fiscal Operations and decides, for Brazil, whether you’re on the interstate rule set (and thus whether DIFAL applies).

4 · It gates nexus

Before any tax is charged, the engine checks whether your entity is registered to collect tax in the buyer’s jurisdiction — and it accepts a registration at any ancestor. A single US-TX registration covers a buyer in a Texas city; a GB registration covers all four UK nations. (See Entity Tax Registration.)

Real data: UK and Brazil jurisdictions

Here is what the seed packs actually create.

🇬🇧 United Kingdom — 5 records

CodeNameLevelParentCurrency
GBUnited KingdomCountry—GBP
GB-ENGEnglandState/ProvinceGBGBP
GB-SCTScotlandState/ProvinceGBGBP
GB-WLSWalesState/ProvinceGBGBP
GB-NIRNorthern IrelandState/ProvinceGBGBP

VAT is UK-wide, so the four nations exist mainly for completeness and the few cases that differ (Northern Ireland follows EU VAT rules for goods under the Windsor Framework). The VAT rules all sit at GB level.

🇧🇷 Brazil — 28 records (a sample)

CodeNameLevelParentNote (from seed)
BRBrazilCountry—Receita Federal (RFB)
BR-SPSão PauloState/ProvinceBRICMS 18% standard
BR-RJRio de JaneiroState/ProvinceBRICMS 20%; FCP 2% applies
… plus MG, RS, BA and the other 22 states

Brazil needs every state because ICMS rates and surcharges genuinely differ by state — SP at 18%, RJ at 20% with a 2% poverty-fund surcharge. The hierarchy lets each state carry its own rules while shared federal taxes (IPI, PIS, COFINS) sit at BR level.

Worked example: why São Paulo → Rio is “interstate”

A São Paulo seller invoices a Rio de Janeiro customer. Watch the jurisdictions do their work:

Ancestry sets. Origin (seller) = {BR-SP, BR}; Destination (buyer) = {BR-RJ, BR}.
Code comparison. Both start BR (same country) but the state segments differ — SP vs RJ — so the engine classifies the sale as Interstate.
Rule matching. The interstate ICMS rule (12%) fires, and — because the buyer is an end consumer — the Rio DIFAL rule (8%, destination BR-RJ) and Rio FCP rule (2%, destination BR-RJ) fire too, all because BR-RJ is in the destination set. The federal rules (IPI, PIS, COFINS) match with no jurisdiction restriction at all.
Result. Six taxes, decided entirely by two jurisdiction codes. Change the buyer to a São Paulo address and it becomes intrastate — the 18% internal ICMS fires instead, and DIFAL drops away.

That single change — the buyer’s jurisdiction — reshapes the whole tax outcome. It’s why getting the Tax Jurisdiction on each customer Account right is so important.

Built-in guardrails

Four validation rules keep jurisdiction data clean — because the engine depends on it:

RuleWhat it blocks
Code must be uppercasebr-sp — the code derivation is case-sensitive
Code cannot contain spacesBR SP — use a hyphen
Parent required for non-countryA state/city with no parent — it would float free of the hierarchy
Cannot be its own parentA record pointing to itself — would loop the ancestry walk

Setting up & maintaining

  • You usually don’t create these by hand. The Tax Seeding Wizard creates a country’s full jurisdiction set — countries first, then their children — in the right order so parents always exist before the records that point to them.
  • Deactivate, don’t delete. Unchecking Is Active removes a jurisdiction from matching while preserving history on past invoices. Deleting one that historical records rely on would orphan them.
  • Add a tier only when a tax needs it. The seed uses Country and State/Province levels; Municipality, District, and Region exist for city taxes (Brazil’s ISS, US special districts) — add them when a rule actually targets that level.

Where to go next

  1. Tax Types — the taxes a jurisdiction levies.
  2. Tax Rules — rules scoped to a jurisdiction.
  3. Entity Tax Registration — registering to collect in a jurisdiction.
  4. Tax Seeding Wizard — load jurisdictions automatically.

Frequently asked questions

Only the ones your rules need. For the UK, the country record alone carries the VAT rules — the four nations are optional. For Brazil, you need each state whose ICMS rate or surcharge differs (which, in practice, is most of them). The seed gives you the full set so you don’t have to decide up front.

Because the code is doing real work: it’s the engine’s match key, the seed’s upsert key, and the basis for deriving intrastate/interstate/export. A stable text code survives org refreshes and upgrades; a record ID does not. That’s why the format is enforced.

The Tax Jurisdiction field on the customer’s Account (and on your Entity for the seller side). The engine reads those two to get origin and destination. Covered in Party Tax Profiles.

Yes — that’s the whole point of the hierarchy. Keep the shared rule at country level, and add a more specific rule at the state level for the exception. Both can match; the engine applies the rules that fit (tax rules don’t “stop at the first match”). How to scope that precisely is covered in Tax Rules.

Was this article helpful?