import { JURISDICTIONS, jurisdiction, resolve, knownJurisdictions, AS_OF } from 'ts-prorm-orm';
knownJurisdictions(); // ['EU', 'EU-AT', …, 'US-CA', …, 'TW']
jurisdiction('EU-FR'); // France: GDPR, consent age 15, …
resolve(['EU', 'UK', 'IN']); // the strictest combination of the three
AS_OF; // the month the table was last checked against its sources[!IMPORTANT]
The registry is a reference table, not legal advice. It records what each
regime's instruments say about the questions a schema can answer, as ofAS_OF; your counsel decides which regimes you are held to.
Unknown jurisdiction "EU-XX". Known: AE, AR, AU, BR, CA, CH, CN, EU, HK, …
Member states and provinces are written as EU-FR, CA-QC.interface JurisdictionRule {
code: string; // 'EU', 'US-CA', 'CA-QC'
name: string;
law: string[]; // the instruments it is drawn from
digitalConsentAge: number; // below this a parent consents
minimumAge?: number; // below this the processing is not permitted at all (rare)
requiresBasis: 'always' | 'special-only' | 'never';
lawfulBases: LawfulBasis[]; // the bases this regime recognises
specialCategories: PersonalCategory[]; // need a basis AND a purpose regardless
prohibited: PersonalCategory[]; // may not be held without a statutory exemption
retention: Partial<Record<PersonalCategory | 'default', Duration>>; // ceilings, where the law states one
rights: SubjectRight[];
requestDeadlineDays?: number;
breachNotificationHours?: number;
residency: {
localize: 'none' | 'copy' | 'primary';
regions: string[]; // 'eu', 'us', … — the vocabulary @Database({ region }) uses
transferRequires: 'nothing' | 'adequacy' | 'safeguards' | 'consent' | 'approval';
};
variants?: Record<string, Partial<Pick<JurisdictionRule, 'name' | 'law' | 'digitalConsentAge' | 'breachNotificationHours'>>>; // member states, provinces: 'FR', 'QC'
}Duration is an ISO 8601 period string — 'P5Y', 'P18M', 'P30D' — anddurationMs() turns one into milliseconds. Most regimes state no numericretention is usually empty; you@Personal(…, { retention }) and the regime's ceiling,@Personal:| Category | Covers | Special under |
|---|---|---|
identifier | name, username, account or customer id | — |
contact | email, phone, postal address | — |
government-id | SSN, passport, national insurance, tax id | US states, AU, JP, KR, CN, SG, PH, HK |
financial | card or account numbers, income, credit | US, CA, CN, SG, IL, AE, SA, ID, VN |
health | medical, mental health, disability | everywhere that has a special list |
biometric | fingerprints, face geometry, voiceprints | most |
genetic | most | |
protected | race, ethnicity, religion, politics, union, sex life or orientation | most |
location | precise geolocation | US states, CN, SA, VN |
behavioural | browsing, usage, inferred interests | — |
demographic | age, gender, nationality | — |
employment | — | |
education | PH | |
communications | message content | — |
credential | passwords, tokens, keys — must be declared protected (hashed or encrypted) | — |
child | any data about a known minor | US, CA, IN, CN, SG, ZA, ID |
consent, contract, legal-obligation, vital-interests, public-task,legitimate-interests. India does not recognise contract or legitimateaccess, rectification, erasure, restriction,portability, objection, automated-decisions, and the US-state familyopt-out-sale, opt-out-profiling, limit-sensitive, non-discrimination.2026-09. Member states and provinces follow.| Code | Regime | Law | Consent age | Basis needed | Request deadline | Breach clock | Residency | Transfer needs |
|---|---|---|---|---|---|---|---|---|
EU | European Union | Regulation (EU) 2016/679 (GDPR) | 16 | always | 30 days | 72 h | — | adequacy |
UK | United Kingdom | UK GDPR; Data Protection Act 2018 | 13 | always | 30 days | 72 h | — | adequacy |
US | United States (federal) | COPPA (15 U.S.C. §§ 6501–6506); HIPAA (where health data); GLBA (where financial data) | 13 | never | — | — | — | nothing |
US-CA | California | CCPA as amended by CPRA (Cal. Civ. Code § 1798.100 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 16 | special-only | 45 days | 720 h | — | nothing |
US-VA | Virginia | VCDPA (Va. Code § 59.1-575 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-CO | Colorado | CPA (C.R.S. § 6-1-1301 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-CT | Connecticut | CTDPA (Conn. Gen. Stat. § 42-515 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-UT | Utah | UCPA (Utah Code § 13-61-101 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-TX | Texas | TDPSA (Tex. Bus. & Com. Code ch. 541); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-OR | Oregon | OCPA (ORS 646A.570 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-MT | Montana | MCDPA (Mont. Code § 30-14-2801 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-IA | Iowa | ICDPA (Iowa Code ch. 715D); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 90 days | 720 h | — | nothing |
US-IN | Indiana | ICDPA (Ind. Code § 24-15); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-TN | Tennessee | TIPA (Tenn. Code § 47-18-3201 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-DE | Delaware | DPDPA (6 Del. C. ch. 12D); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-NJ | New Jersey | NJDPA (N.J.S.A. 56:8-166.4 et seq.); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
US-NH | New Hampshire | NHPA (RSA 507-H); COPPA (15 U.S.C. §§ 6501–6506) | 13 | special-only | 45 days | 720 h | — | nothing |
CA | Canada | PIPEDA | 13 | always | 30 days | — | — | nothing |
CA-QC | Quebec (Canada) | Law 25 (Act respecting the protection of personal information in the private sector) | 14 | always | 30 days | — | — | nothing |
BR | Brazil | LGPD (Lei nº 13.709/2018) | 12 | always | 15 days | 72 h | — | adequacy |
AU | Australia | Privacy Act 1988 (Cth); Notifiable Data Breaches scheme | 15 | special-only | 30 days | 720 h | — | safeguards |
NZ | New Zealand | Privacy Act 2020 | 16 | special-only | 20 days | 72 h | — | safeguards |
JP | Japan | Act on the Protection of Personal Information (APPI) | 15 | special-only | — | — | — | adequacy |
KR | South Korea | Personal Information Protection Act (PIPA) | 14 | always | 10 days | 72 h | — | consent |
IN | India | Digital Personal Data Protection Act 2023 | 18 | always | — | 72 h | — | nothing |
CN | China | Personal Information Protection Law (PIPL); Data Security Law; Cybersecurity Law | 14 | always | — | — | primary | approval |
SG | Singapore | Personal Data Protection Act 2012 | 13 | always | 30 days | 72 h | — | safeguards |
ZA | South Africa | Protection of Personal Information Act (POPIA) | 18 | always | — | — | — | adequacy |
CH | Switzerland | Federal Act on Data Protection (revised, 2023) | 16 | special-only | 30 days | — | — | adequacy |
IL | Israel | Protection of Privacy Law, 5741-1981 (Amendment 13) | 14 | always | — | — | — | adequacy |
AE | United Arab Emirates | Federal Decree-Law No. 45 of 2021 (PDPL) | 18 | always | — | — | — | adequacy |
SA | Saudi Arabia | Personal Data Protection Law (Royal Decree M/19) | 18 | always | — | 72 h | — | adequacy |
RU | Russia | Federal Law No. 152-FZ on Personal Data | 14 | always | — | 24 h | primary | approval |
TR | Turkey | Law No. 6698 on the Protection of Personal Data (KVKK) | 18 | always | 30 days | 72 h | — | adequacy |
MX | Mexico | Ley Federal de Protección de Datos Personales en Posesión de los Particulares | 18 | always | 20 days | — | — | consent |
AR | Argentina | Ley 25.326 de Protección de los Datos Personales | 13 | always | 10 days | — | — | adequacy |
NG | Nigeria | Nigeria Data Protection Act 2023 | 18 | always | — | 72 h | — | adequacy |
KE | Kenya | Data Protection Act 2019 | 18 | always | — | 72 h | copy | safeguards |
TH | Thailand | Personal Data Protection Act B.E. 2562 (2019) | 10 | always | 30 days | 72 h | — | adequacy |
ID | Indonesia | Law No. 27 of 2022 on Personal Data Protection | 18 | always | — | 72 h | — | adequacy |
PH | Philippines | Data Privacy Act of 2012 (RA 10173) | 18 | always | — | 72 h | — | safeguards |
VN | Vietnam | Decree 13/2023/ND-CP on Personal Data Protection | 16 | always | — | 72 h | copy | approval |
HK | Hong Kong | Personal Data (Privacy) Ordinance (Cap. 486) | 18 | special-only | 40 days | — | — | nothing |
TW | Taiwan | Personal Data Protection Act | 18 | always | — | — | — | nothing |
PARENT-CODE and inherit everything from the| Consent age | Member states |
|---|---|
| 13 | Belgium (EU-BE), Denmark (EU-DK), Estonia (EU-EE), Finland (EU-FI), Latvia (EU-LV), Malta (EU-MT), Portugal (EU-PT), Sweden (EU-SE) |
| 14 | Austria (EU-AT), Bulgaria (EU-BG), Cyprus (EU-CY), Italy (EU-IT), Lithuania (EU-LT), Spain (EU-ES) |
| 15 | Czechia (EU-CZ), France (EU-FR), Greece (EU-GR), Slovenia (EU-SI) |
| 16 | Croatia (EU-HR), Germany (EU-DE), Hungary (EU-HU), Ireland (EU-IE), Luxembourg (EU-LU), Netherlands (EU-NL), Poland (EU-PL), Romania (EU-RO), Slovakia (EU-SK) |
CA-QC) overrides Canada with Law 25 and a consent age of 14. TheUS-CA) is the strict one,| Code | Special categories | Rights |
|---|---|---|
EU | health, biometric, genetic, protected | access, rectification, erasure, restriction, portability, objection, automated-decisions |
UK | health, biometric, genetic, protected | access, rectification, erasure, restriction, portability, objection, automated-decisions |
US | health, financial, child | access, erasure |
US-CA | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination, limit-sensitive |
US-VA | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-CO | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-CT | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-UT | health, biometric, genetic, protected, location, government-id, child | access, erasure, portability, opt-out-sale, non-discrimination |
US-TX | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-OR | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-MT | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-IA | health, biometric, genetic, protected, location, government-id, child | access, erasure, portability, opt-out-sale, non-discrimination |
US-IN | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-TN | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-DE | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-NJ | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
US-NH | health, biometric, genetic, protected, location, government-id, child | access, rectification, erasure, portability, opt-out-sale, opt-out-profiling, non-discrimination |
CA | health, financial, biometric, genetic, protected, child | access, rectification, erasure |
CA-QC | health, financial, biometric, genetic, protected, child | access, rectification, erasure |
BR | health, biometric, genetic, protected | access, rectification, erasure, portability, objection, automated-decisions |
AU | health, biometric, genetic, protected, government-id | access, rectification |
NZ | health, biometric, genetic, protected | access, rectification |
JP | health, protected, government-id | access, rectification, erasure, restriction |
KR | health, biometric, genetic, protected, government-id | access, rectification, erasure, restriction, portability |
IN | child | access, rectification, erasure |
CN | health, biometric, genetic, protected, financial, location, child, government-id | access, rectification, erasure, portability, restriction |
SG | health, financial, government-id, child | access, rectification, portability |
ZA | health, biometric, protected, child | access, rectification, erasure, objection |
CH | health, biometric, genetic, protected | access, rectification, erasure, portability, objection |
IL | health, biometric, genetic, protected, financial | access, rectification, erasure |
AE | health, biometric, genetic, protected, financial | access, rectification, erasure, restriction, portability, objection |
SA | health, biometric, genetic, protected, financial, location | access, rectification, erasure, portability |
RU | health, biometric, protected | access, rectification, erasure |
TR | health, biometric, genetic, protected | access, rectification, erasure, objection |
MX | health, biometric, genetic, protected | access, rectification, erasure, objection |
AR | health, biometric, genetic, protected | access, rectification, erasure |
NG | health, biometric, genetic, protected | access, rectification, erasure, portability, objection |
KE | health, biometric, genetic, protected | access, rectification, erasure, portability, objection |
TH | health, biometric, genetic, protected | access, rectification, erasure, restriction, portability, objection |
ID | health, biometric, genetic, protected, financial, child | access, rectification, erasure, portability, objection |
PH | health, biometric, genetic, protected, government-id, education | access, rectification, erasure, portability, objection |
VN | health, biometric, genetic, protected, financial, location | access, rectification, erasure, restriction, objection |
HK | health, biometric, government-id | access, rectification |
TW | health, genetic, protected | access, rectification, erasure, restriction |
resolve() produces the one combination that satisfies| Dimension | Rule |
|---|---|
| Consent age | the highest |
| Minimum age | the highest that is set |
| Basis required | always > special-only > never |
| Lawful bases | the intersection — a basis every named regime recognises |
| Special categories | the union |
| Prohibited categories | the union |
| Retention ceilings | per category, the shortest |
| Rights | the union — every right any regime grants is owed |
| Request deadline, breach clock | the shortest |
| Residency | localizes if any regime does; then only that regime's regions count; the strictest transfer requirement |
@Jurisdiction('EU', 'UK', 'IN') gates at 18 (India), cannot rely on@Jurisdiction('EU-FR', 'EU-DE') gates at 16, not 15.import { resolve, durationMs } from 'ts-prorm-orm';
const today = resolve(['EU', 'UK']);
const withIndia = resolve(['EU', 'UK', 'IN']);
withIndia.digitalConsentAge; // 18: the age gate moves up from 16
withIndia.lawfulBases; // ['consent', 'legal-obligation', 'vital-interests', 'public-task']
withIndia.specialCategories; // ['health', 'biometric', 'genetic', 'protected', 'child']
withIndia.requestDeadlineDays; // 30: India states none, so the others' stands
withIndia.residency; // { localize: 'none', regions: ['eu', 'eea', 'uk', 'gb', 'in'], transferRequires: 'adequacy' }
// Bases that stop working: every field declared on one of these fails to load.
const lost = today.lawfulBases.filter((b) => !withIndia.lawfulBases.includes(b));
// ['contract', 'legitimate-interests']
durationMs('P18M') / 86_400_000; // 540: months are 30 days, years 365contract or legitimate-interests is abasis-not-recognised refusal the day 'IN' is added, so moving them ontoadvisory: true while you do, comes first. A regime thatimport { resolve } from 'ts-prorm-orm';
resolve(['EU', 'RU']).residency; // { localize: 'primary', regions: ['ru'], transferRequires: 'approval' }
resolve(['EU', 'RU']).breachNotificationHours; // 24const r = resolve(['EU', 'US-CA']);
r.digitalConsentAge; // 16
r.requiresBasis; // 'always'
r.lawfulBases; // ['consent', 'contract', 'legal-obligation', 'legitimate-interests']
r.rights; // GDPR's seven plus CPRA's opt-outs
r.requestDeadlineDays; // 30
r.breachNotificationHours; // 72JURISDICTIONS in theresolve() and the decorators need nothing else.