Two shared services: terminology and patient identity
A data platform needs two answers that no single source system can give it. Are these two records the same patient? Do these two codes mean the same thing? The first is patient identity, the second terminology. Every count the platform publishes rests on both, and when either answer is wrong nothing fails: the query runs, the dashboard fills, and the number is quietly different from the truth.
Why both arrive last, after storage, pipelines and models, is set out in What a healthcare data platform is made of, which names them as the platform’s two shared services. This piece starts where that one stops: from one pair of records to the whole population of pairs, and from the release calendar to what a release does to a value set.
One CMS measure shows both failures in its own text. For the Hybrid Hospital-Wide Readmission measure, hospitals send the first vital signs and laboratory results of each stay, and CMS joins them to the Medicare claim to adjust for case mix, using four linking variables: the hospital’s CMS Certification Number, the patient’s Medicare Beneficiary Identifier, and the admission and discharge dates. The specification asks hospitals whose laboratory systems use local codes to map them to the LOINC codes in the measure’s value sets. A stay whose identifiers do not join and a result whose code is not in the value set are both simply missing, and CMS replaces a missing value with the median for the patient’s cohort.
From the July 2025 to June 2026 performance period, a hospital has to send linking variables for at least 70% of discharges, and no more than 30% of discharges may lack more than two lab results or more than two vital signs. In CMS’s analysis of the 2024 voluntary reporting, three-quarters of the hospitals that took part missed the earlier thresholds of 90% and 95%. A hospital below the line loses a quarter of its annual payment update.
Two failures in one published measure
A stay whose identifiers do not join, and a result whose code is not mapped. Neither raises an error. Pick the US measure or the Canadian indicator; every count is an input, and the rules are each body’s own.
Cohort
CCN, MBI, admission date and discharge date. Illustrative input.
Illustrative input.
- Linking variables
- 92%
- At or above 70%
- Lab results missing per discharge
- 1
- Within the two allowed
- Values set to the median
- 1,104
- 1 on each of 1,104 linked stays
- Reporting rule
- Met
- No error was raised either way
Medicine cohort. Meets the reporting rule. 1,104 values set to the cohort median.
The rules applied
- Linking variables for 70% or more of eligible discharges, from the July 2025 to June 2026 performance period.
- No more than 30% of discharges with more than two missing lab results or more than two missing vital signs. An unmapped lab is missing on every discharge in the cohort.
- An admission missing more than half of its cohort’s elements leaves the calculation; for the rest, each missing value becomes the cohort median.
- A stay sent without its linking variables cannot be joined to its claim, so its values cannot be used. It is counted once, against the linking line.
CMS529 v6, the measure’s specification for discharges from July 2026; the measure’s methodology report v1.3 (2024); the FY 2026 IPPS/LTCH PPS final rule; and CMS’s 2026 Hybrid Measures FAQ, Q9, Q56 and Table 4, read at CMS and QualityNet on 17 October 2026. Every count is an input; nothing here predicts a hospital’s score.
Illustrative input.
Illustrative input.
CIHI excludes these from the numerator. Illustrative input.
Starts at 1.4%, the share of acute abstracts CIHI found with a missing or invalid health card number in 2025–26.
The local pipeline’s chemotherapy code
- True rate
- 11.44%
- 1,144 of 10,000
- Reported rate
- 12.82%
- +1.38 pts against the true rate
- Missed links
- −0.16 pts
- Lowers the rate: the readmission is never found
- Unmapped exclusion
- +1.54 pts
- Raises the rate: a planned readmission is counted
True rate 11.44%, reported 12.82%.
The arithmetic
reported = [ (R − C) × (1 − s) + C × (1 − s) × unmapped ] ÷ N
N index episodes, R readmissions, C of them chemotherapy, s the share of readmission records that do not link. Here the readmission side only is modelled; CIHI also drops an index stay whose own number is invalid before any episode is built.
CIHI, Medical Patients Readmitted to Hospital and the Indicator Library’s General Methodology Notes (September 2026); CIHI, DAD data quality documentation 2025–2026. Read at cihi.ca on 17 October 2026.
Not every readmission measure works this way. The Hospital Readmissions Reduction Program is computed by CMS from Medicare claims and Medicare Advantage encounter data, and a readmission counts at any short-term acute care hospital. A hospital’s own record linkage and its local code maps do not enter it. The failures in this piece bite where an organisation computes or submits a number from its own data: its dashboards and registries, an electronic measure, a hybrid one.
Canada shows the two failures pointing opposite ways. CIHI’s Medical Patients Readmitted to Hospital links stays across facilities by encrypted health card number and province, drops records with an invalid number before it builds episodes, and excludes chemotherapy readmissions, coded Z51.1, from the numerator. A platform recomputing it from its own data lowers the rate for every readmission it fails to link, and raises it for every chemotherapy admission whose local code it never mapped to Z51.1. Doidge and Harron call the first kind of error “the merging and splitting of people”.
The FHIR terminology architecture and runtime operations
In FHIR, terminology is a service. Code systems, value sets and maps are resources, CodeSystem, ValueSet and ConceptMap, and the resource model with its first surprises is covered in FHIR implementation: what a project involves beyond the API. What a platform needs from the service is a handful of operations, and each one is a question.
$lookup asks what a code is. $validate-code asks whether a code belongs to a value set, which is the check a profile’s binding implies at ingest. $expand asks what a value set contains, which is how a value set becomes a table for a warehouse query. $subsumes asks whether one concept is an ancestor of another. $translate asks what a code maps to under a given map. All but $translate are normative in FHIR R4.
Two more are the ones most often missing. $closure maintains a client-side table of which codes subsume which, so a warehouse can answer is-a questions with a join, and $find-matches finds a code from its properties. On 17 October 2026, HL7’s reference server answered that $closure has to be turned on by its administrator, and did not recognise $find-matches. HL7’s own test suite for terminology servers does not test $find-matches at all.
Every operation answers under a release, and the answer changes when the release does. Each takes a parameter that pins it: version for $lookup and $subsumes, systemVersion for $validate-code, system-version for $expand, with check-system-version to fail rather than drift. The exchanges below were run against the reference server on the date shown, and each names the release it ran under.
Seven terminology operations
Each operation as the question it answers, the parameter that pins its release, and a real exchange with HL7’s reference server, tx.fhir.org, run on 2026-10-17.
What is this code, in this release?
- $lookup on CodeSystem
- Show a display name at ingest, read a concept’s properties, check that a code exists at all.
- Pins the release
version, the code system edition and release- Status
- R4: Normative · R5: Normative
What is SNOMED CT 73211009, in the 2025-02-01 International release?
Request · tx.fhir.org/r4
GET /CodeSystem/$lookup?system=http://snomed.info/sct
&code=73211009
&version=http://snomed.info/sct/900000000000207008/version/20250201
&property=parentWhat came back · HTTP 200
{
"status": 200,
"name": "SNOMED CT International Edition",
"version": "http://snomed.info/sct/900000000000207008/version/20250201",
"display": "Diabetes mellitus",
"parents": [
"126877002",
"362969004"
]
}What the run showed
Asked for SNOMED CT’s normal form as well, the same server returned the concept’s other properties and no normal form. A property a server does not return is a question to ask of it.
Is this code a member of this value set?
- $validate-code on ValueSet or CodeSystem
- A quality gate before a record is stored: reject or flag a code a profile’s binding does not allow.
- Pins the release
systemVersion, or a versioned value set- Status
- R4: Normative · R5: Normative
Is 44054006 a member of “descendants of Diabetes mellitus”, under the 2025-02-01 release?
Request · tx.fhir.org/r4
GET /ValueSet/$validate-code?url=http://snomed.info/sct?fhir_vs=isa/73211009
&system=http://snomed.info/sct
&code=44054006
&systemVersion=http://snomed.info/sct/900000000000207008/version/20250201What came back · HTTP 200
{
"status": 200,
"result": true,
"display": "Type 2 diabetes mellitus",
"version": "http://snomed.info/sct/900000000000207008/version/20250201"
}And 22298006, Myocardial infarction?
Request · tx.fhir.org/r4
GET /ValueSet/$validate-code?url=http://snomed.info/sct?fhir_vs=isa/73211009
&system=http://snomed.info/sct
&code=22298006
&systemVersion=http://snomed.info/sct/900000000000207008/version/20250201What came back · HTTP 200
{
"status": 200,
"result": false,
"message": "The provided code 'http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20250201#22298006' was not found in the value set 'http://snomed.info/sct?fhir_vs=isa/73211009'"
}What the run showed
Addressed with the release in its URL, the same implicit value set was refused. The version went in a parameter instead.
What is in this value set, under this release?
- $expand on ValueSet
- Materialise a value set as a table for a warehouse query, or fill a pick list.
- Pins the release
system-version, andcheck-system-versionto fail rather than drift- Status
- R4: Normative · R5: Normative
Everything that is a Diabetes mellitus, under the 2024-02-01 release (first three shown)
Request · tx.fhir.org/r4
POST /ValueSet/$expand
{
"resourceType": "Parameters",
"parameter": [
{
"name": "valueSet",
"resource": {
"resourceType": "ValueSet",
"status": "active",
"compose": {
"include": [
{
"system": "http://snomed.info/sct",
"filter": [
{
"property": "concept",
"op": "is-a",
"value": "73211009"
}
]
}
]
}
}
},
{
"name": "system-version",
"valueCanonical": "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20240201"
},
{
"name": "count",
"valueInteger": 3
}
]
}What came back · HTTP 200
{
"status": 200,
"total": 133,
"used": [
"http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20240201"
],
"first": [
"73211009 Diabetes mellitus",
"2751001 Fibrocalculous pancreatic diabetes",
"4783006 Maternal diabetes mellitus with hypoglycemia affecting fetus OR newborn"
]
}The same definition under the 2025-02-01 release
Request · tx.fhir.org/r4
POST /ValueSet/$expand
{
"resourceType": "Parameters",
"parameter": [
{
"name": "valueSet",
"resource": {
"resourceType": "ValueSet",
"status": "active",
"compose": {
"include": [
{
"system": "http://snomed.info/sct",
"filter": [
{
"property": "concept",
"op": "is-a",
"value": "73211009"
}
]
}
]
}
}
},
{
"name": "system-version",
"valueCanonical": "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20250201"
},
{
"name": "count",
"valueInteger": 3
}
]
}What came back · HTTP 200
{
"status": 200,
"total": 124,
"used": [
"http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20250201"
],
"first": [
"73211009 Diabetes mellitus",
"2751001 Fibrocalculous pancreatic diabetes",
"4783006 Maternal diabetes mellitus with hypoglycemia affecting fetus OR newborn"
]
}What the run showed
The same definition, a year apart: 133 concepts, then 124. Nobody edited the value set.
Is one concept an ancestor of the other?
- $subsumes on CodeSystem
- Group detailed codes under a broader one without listing every descendant.
- Pins the release
version- Status
- R4: Normative · R5: Normative
Does 73211009 Diabetes mellitus subsume 44054006 Diabetes mellitus type 2?
Request · tx.fhir.org/r4
GET /CodeSystem/$subsumes?system=http://snomed.info/sct
&version=http://snomed.info/sct/900000000000207008/version/20250201
&codeA=73211009
&codeB=44054006What came back · HTTP 200
{
"status": 200,
"outcome": "subsumes"
}And 22298006 Myocardial infarction against 128139000 Inflammatory disorder?
Request · tx.fhir.org/r4
GET /CodeSystem/$subsumes?system=http://snomed.info/sct
&version=http://snomed.info/sct/900000000000207008/version/20250201
&codeA=22298006
&codeB=128139000What came back · HTTP 200
{
"status": 200,
"outcome": "not-subsumed"
}What does this code map to, under this map?
- $translate on ConceptMap
- Turn a local or source code into the target standard’s code as data arrives.
- Pins the release
- The map’s own version; the code system versions it was built against
- Status
- R4: Trial use, maturity 3 · R5: Trial use, maturity 1
What is FHIR administrative gender “unknown” in HL7 v2 table 0001?
Request · tx.fhir.org/r4
GET /ConceptMap/$translate?url=http://hl7.org/fhir/ConceptMap/cm-administrative-gender-v2
&system=http://hl7.org/fhir/administrative-gender
&code=unknownWhat came back · HTTP 200
{
"status": 200,
"result": true,
"matches": [
"U (equal)"
],
"issue": null
}What the run showed
The map used is one a patient index needs: sex arrives as an HL7 v2 code from one feed and a FHIR code from another. The server held no SNOMED CT to ICD-10 map.
Which of the codes I have seen subsume each other?
- $closure on Server
- Keep a client-side transitive closure table, so a warehouse can answer is-a questions with a join.
- Pins the release
versionof the closure table- Status
- R4: Trial use, maturity 3 · R5: Trial use, maturity 1
Start a closure table
Request · tx.fhir.org/r4
POST /$closure
{
"resourceType": "Parameters",
"parameter": [
{
"name": "name",
"valueString": "dexpra-wp13-1792271775250"
}
]
}What came back · HTTP 501
{
"status": 501,
"resourceType": "OperationOutcome",
"issue": "This server does not support $closure (it has to be turned on by the administrator)"
}What the run showed
Often missing. HL7’s reference server answered that it has to be turned on by the administrator.
Which code has these properties?
- $find-matches on CodeSystem
- Find a code from its parts, such as a finding and a body site, when nobody knows the code.
- Pins the release
version- Status
- R4: Trial use, maturity 0 · R5: Trial use, maturity 0
Ask for codes matching a set of properties (an R4 operation at maturity 0)
Request · tx.fhir.org/r4
POST /CodeSystem/$find-matches
{
"resourceType": "Parameters",
"parameter": [
{
"name": "system",
"valueUri": "http://snomed.info/sct"
},
{
"name": "version",
"valueString": "http://snomed.info/sct/900000000000207008/version/20250201"
},
{
"name": "property",
"part": [
{
"name": "code",
"valueCode": "363698007"
},
{
"name": "value",
"valueCode": "39607008"
}
]
},
{
"name": "exact",
"valueBoolean": false
}
]
}What came back · HTTP 404
{
"status": 404,
"resourceType": "OperationOutcome",
"matches": 0,
"issue": "Unknown operation on this server: POST /r4/CodeSystem/$find-matches"
}What the run showed
The least implemented operation in the module. The reference server does not offer it, and HL7’s own test suite does not test it.
FHIR R4 and R5 operation definitions, read at hl7.org. Every exchange was sent to tx.fhir.org/r4 on 2026-10-17 by a script kept with this article’s sources. A later run may answer differently, because the server loads new releases; that is the reason to pin one. Only the parts of each answer shown here are kept.
SNOMED CT adds a way to define a value set without listing its members. FHIR’s implicit value sets address everything below a concept, everything in a reference set, or everything an Expression Constraint Language query selects, and ECL is at version 2.3. An implicit value set has no fixed membership. It is whatever the named release says is below the concept today.
Maps changed most between FHIR versions. R5 calls its ConceptMap an “extensive redesign”: the equivalence of each mapping became a relationship with five codes, unmatched rows moved to an element of their own, and a row can now map a whole value set. A map held as R4 is converted, not copied.
ConceptMap, R4 to R5
The changes HL7 lists in R5’s implementation note, and what each means for a map a platform already holds in R4.
R4 · The R4 resource
R5 · An “extensive redesign”, with metadata fields added
A map held as R4 is converted, not copied. Plan it as a migration with a check of every row.
R4 · source[x], target[x]
R5 · sourceScope, targetScope
Renamed “for clarity”. Anything that reads the map’s scope by name needs changing.
R4 · group.element.target.equivalence
R5 · group.element.target.relationship
Renamed, and the codes simplified to five: related-to, equivalent, source-is-narrower-than-target, source-is-broader-than-target, not-related-to. Each R4 value has to be re-expressed.
R4 · equivalence = unmatched
R5 · noMap
A row that said “no target” in R4 moves to its own element in R5.
R4 · (none)
R5 · target.property
A target can carry properties, so a map can say more than which code.
R4 · dependsOn.property
R5 · dependsOn.attribute
Renamed. A conditional row, “only if this other element says that”, keeps its meaning.
R4 · (none)
R5 · group.element.valueSet, target.valueSet
A row can map a whole value set rather than one code.
R4 · group.unmapped
R5 · unmapped gains relationship and valueSet; mode is use-source-code, fixed or other-map
What happens to a code nobody mapped is stated, rather than left to the reader.
FHIR R5 ConceptMap, implementation note and ConceptMapRelationship, read at hl7.org on 17 October 2026. ConceptMap is at maturity 3, Trial Use, in R5; R5’s $translate is at maturity 1.
A platform consumes terminology in one of two ways. It calls the service as data arrives and as queries run, or it loads a release into tables, often with a closure table of every ancestor pair, and joins against them. Both need to record which release they used. The first gets it back in every response; the second has it only if someone writes it down when the tables are loaded.
Global standards and the US and Canadian code systems
A US platform meets two families of code systems. The HIPAA code sets are the ones claims carry: ICD-10-CM and ICD-10-PCS, HCPCS with CPT, the National Drug Code and the dental code. The clinical vocabularies are the ones US Core binds: SNOMED CT, LOINC and RxNorm, with CVX for vaccines and UCUM for units. Their terms differ. CPT needs a licence from the American Medical Association for every product that contains it, while HCPCS Level II, ICD-10-CM, the NDC directory and CVX are free downloads. SNOMED CT costs nothing in the US, where NLM distributes it under the UMLS licence, which is free and needs an account; RxNorm’s codes are in the public domain, but its full release needs that licence too.
Value sets have a home of their own in the US. The Value Set Authority Center, run by NLM with ONC and CMS, holds the value sets behind CMS’s electronic measures, and each value set has a steward who reviews, approves, publishes and maintains it. Reading one needs a free UMLS account and an API key. US Core’s own terminology page says so, because its medication, immunisation, allergy and vital-sign bindings point at VSAC value sets. The UMLS Metathesaurus links these vocabularies concept by concept: its 2026AA release counts 3,530,466 concepts from 195 sources.
A Canadian platform carries a different set. SNOMED CT’s Canadian Edition comes from Canada Health Infoway, free with an Infoway account after accepting two licence agreements every year, released quarterly in February, May, August and November, with French translations. Infoway also publishes pCLOCD, the pan-Canadian LOINC observation code database, in English and French each March and September. Hospitals report diagnoses and interventions to CIHI in ICD-10-CA and CCI, licensed by category and frozen at the 2022 version while CIHI assesses ICD-11. The Canadian Clinical Drug Data Set is Health Canada’s, under the Open Government Licence. And ATC, which PS-CA lists among its candidate drug code systems, does not allow commercial copying or distribution without the WHO Collaborating Centre.
Outside both countries, ICD-11 is licensed under Creative Commons with no derivatives, and WHO’s terms say mapping or crosswalks between ICD-11 and other terminologies need a separate written agreement, which matters to anyone building a ConceptMap to it. England’s dictionary of medicines and devices, dm+d, is released weekly under the Open Government Licence for TRUD. In a country that is not a SNOMED International member, use has to be registered before it starts, and fees may apply.
The code systems a platform carries
Each code system with its steward and its terms as the steward states them, US first, then Canada, then international. Filter by where you meet it, by licence or by use; every row stays in the page. The second tab is what the national guides bind.
Where you meet it
Licence
Used for
Showing 20 of 20
US · Clinical terms
SNOMED CT, US Edition
Free with an account- Steward
- SNOMED International; NLM is the US Member and release centre
- Terms, as stated
- No charge in the US and other Member territories. Access is through the UMLS Metathesaurus licence, which carries the SNOMED CT Affiliate Licence
- Distributed
- NLM’s UMLS Terminology Services. The US Edition combines the US Extension with the International release · March and September
US · Drugs
RxNorm
Free with an account- Steward
- National Library of Medicine
- Terms, as stated
- The names and codes are in the public domain. A free UMLS licence is needed to download the full monthly and weekly releases
- Distributed
- NLM downloads, monthly and weekly
US · Billing and claims
ICD-10-CM
Free- Steward
- CDC’s National Center for Health Statistics, under WHO’s authorisation
- Terms, as stated
- A HIPAA code set from 1 October 2015. NCHS offers a no-cost browser and the files; its page states no licence
- Distributed
- cdc.gov, by fiscal year
US · Billing and claims
ICD-10-PCS
Free- Steward
- Centers for Medicare & Medicaid Services
- Terms, as stated
- A HIPAA code set for hospital inpatient procedures, from 1 October 2015
- Distributed
- cms.gov
US · Billing and claims
CPT
Licence fee- Steward
- American Medical Association
- Terms, as stated
- A HIPAA code set, with HCPCS, for physician and other services. Any organisation using CPT content anywhere must hold a licence for each product that contains it
- Distributed
- The AMA, under licence
US · Billing and claims
HCPCS Level II
Free- Steward
- Centers for Medicare & Medicaid Services
- Terms, as stated
- Products, supplies and services not in CPT, which is HCPCS Level I. A HIPAA code set; CMS’s page states no licence
- Distributed
- CMS’s HCPCS file updates
US · Drugs
National Drug Code
Free- Steward
- FDA; each entry is the labeler’s responsibility
- Terms, as stated
- A HIPAA code set for retail pharmacy. The directory is a free download; an NDC does not denote FDA approval. A uniform 12-digit format takes effect on 7 March 2033
- Distributed
- FDA’s NDC Directory, updated daily
US · Vaccines
CVX
Free- Steward
- CDC’s National Center of Immunization and Respiratory Diseases
- Terms, as stated
- Vaccines administered, active and inactive. Paired with an MVX code it names the product. No licence is stated
- Distributed
- CDC downloads: Excel, PDF, flat file and XML
US · Value sets and crosswalks
VSAC value sets
Free with an account- Steward
- NLM, with ONC and CMS; each value set has its own steward
- Terms, as stated
- A free UMLS account and API key. Stewards review, approve, publish and maintain their own value sets
- Distributed
- The VSAC website, an SVS API and a FHIR server; eCQM and US Core value sets live here
US · International · Value sets and crosswalks
UMLS Metathesaurus
Free with an account- Steward
- National Library of Medicine
- Terms, as stated
- A free UMLS licence, whose Appendix 1 lists the vocabularies included. 2026AA: 3,530,466 concepts from 195 sources
- Distributed
- UMLS Terminology Services
Canada · Clinical terms
SNOMED CT, Canadian Edition
Free with an account- Steward
- Canada Health Infoway, for a founding Member country
- Terms, as stated
- Free with an Infoway account, after accepting the SNOMED CT Affiliate Agreement and the Canadian National License Agreement, renewed every year. Only those who accept both may use the Canadian Edition
- Distributed
- Infoway’s Terminology Server and syndication feed · Quarterly: February, May, August, November
- French
- French translations, by Infoway’s release notes
Canada · Laboratory and observations
pCLOCD
Free with an account- Steward
- Canada Health Infoway
- Terms, as stated
- Free with an Infoway account. The pan-Canadian LOINC observation code database
- Distributed
- Infoway’s Terminology Server · 31 March and 30 September
- French
- Core attributes in English and Canadian French
Canada · Billing and claims
ICD-10-CA and CCI
Licence fee- Steward
- Canadian Institute for Health Information
- Terms, as stated
- Licensed by category. Core Plan health care licensees may download one 100-user licence at no cost; others buy one. For non-commercial use related to the Canadian health system
- Distributed
- CIHI’s eStore · ICD-10-CA frozen at 2022; new CCI postponed to 2027–2028
Canada · Drugs
Canadian Clinical Drug Data Set (CCDD)
Free- Steward
- Health Canada, developed with Infoway
- Terms, as stated
- Open Government Licence – Canada
- Distributed
- open.canada.ca, and hosted on Infoway’s Terminology Server · Monthly
Canada · Billing and claims
Ontario Schedule of Benefits
Free- Steward
- Ontario Ministry of Health
- Terms, as stated
- The fees and requirements for payment of insured physician services under OHIP. Ontario pays physicians against its own schedule; other provinces were not checked
- Distributed
- ontario.ca, with fee master files for billing software
US · Canada · International · Laboratory and observations
LOINC
Free with an account- Steward
- Regenstrief Institute
- Terms, as stated
- Free in perpetuity for any purpose, on terms: the core table is not changed, local codes carry a leading X, and LOINC is not used to build a different standard. Downloads need a free account
- Distributed
- loinc.org · February and August
International · Billing and claims
ICD-11
Needs permission- Steward
- World Health Organization
- Terms, as stated
- CC BY-ND 3.0 IGO, so no adaptations. Mapping or crosswalks to other terminologies, and translations, need a separate written agreement with WHO. The ICD-API has its own royalty-free licence
- Distributed
- WHO’s ICD-API, as REST and FHIR, hosted or deployed locally · No Canadian implementation date; CIHI is assessing readiness
International · Canada · Drugs
ATC/DDD
Needs permission- Steward
- WHO Collaborating Centre for Drug Statistics Methodology, Norway
- Terms, as stated
- Use requires reference to the Centre. Copying and distribution for commercial purposes, and changing the material, are not allowed
- Distributed
- atcddd.fhi.no
International · Drugs
dm+d
Free with an account- Steward
- NHS Business Services Authority, with NHS England
- Terms, as stated
- Open Government Licence for TRUD, with a TRUD account
- Distributed
- TRUD, weekly. Release 10.1.0 on 12 October 2026 · Weekly
International · Clinical terms
SNOMED CT outside a Member country
Licence fee- Steward
- SNOMED International
- Terms, as stated
- Use must be registered with SNOMED International before it starts, and fees may apply. A Canadian affiliate may allow it after notifying SNOMED International and Infoway
- Distributed
- Through the licensing affiliate
What each strength means, in FHIR R4’s words
- RequiredThe code SHALL come from the value set.
- ExtensibleThe code SHALL come from the value set if one there applies; otherwise another code or text may be used.
- PreferredEncouraged, not required to conform.
- ExampleNot expected or even encouraged; the value set gives examples.
US Core 9.0.0
Condition.code
ExtensibleUS Core Condition Codes: SNOMED CT findings, situations and events; ICD-10-CM
Observation.code (laboratory)
ExtensibleUS Core Laboratory Test Codes: LOINC, laboratory class
Medication.code
ExtensibleVSAC “Medication Clinical Drug” (UMLS API key to expand)
Immunization.vaccineCode
ExtensibleVSAC “CVX Vaccines Administered Vaccine Set”
Procedure.code
ExtensibleUS Core Procedure Codes: CPT, SNOMED CT, HCPCS, ICD-10-PCS, CDT, LOINC
Vital signs Observation.code
ExtensibleVSAC “Vital Sign Result Type”; values in UCUM
PS-CA 2.3.0 ballot
Condition.code
PreferredInfoway healthconditioncode (SNOMED CT, Canadian Edition)
Medication.code
PreferredInfoway prescriptionmedicinalproduct (CCDD)
Observation.code (laboratory)
ExamplepCLOCD
Immunization.vaccineCode
PreferredInfoway vaccineadministeredtradenamecode
CA Core+ 1.2.1 draft
The same elements
PreferredThe same Infoway value sets as PS-CA, at preferred strength
Each steward’s own licence and distribution pages, read in October 2026: NLM, CDC, CMS, FDA, the AMA, Regenstrief, Infoway, CIHI, Health Canada, Ontario, WHO, the WHO Collaborating Centre and NHSBSA. Bindings read from the US Core 9.0.0, PS-CA 2.3.0 and CA Core+ 1.2.1 packages. The terms are stated, not interpreted: whether they cover a particular use is the steward’s to say.
Binding strength decides how much a guide’s value set constrains what arrives. US Core binds conditions, procedures, laboratory results, medications and vaccines at extensible strength: a code from the value set when one applies, something else only when none does. Canada’s PS-CA ballot and the CA Core+ draft bind Infoway’s value sets at preferred strength, which encourages them without requiring them, and PS-CA gives pCLOCD for laboratory results only as an example. The release dates of six of these code systems across a year are drawn in WP-11’s release calendar.
Terminology servers and mapping error vulnerabilities
Terminology goes wrong without an error in three ways. A map lives in a spreadsheet with no record of who made it or under which release. A value set is expanded under a release nobody wrote down. And a release changes a value set by itself.
The third is the least visible. On 17 October 2026 the same definition, everything that is a Diabetes mellitus in SNOMED CT, expanded to 133 concepts under the International release of February 2024 and to 124 under February 2025. Nine concepts had been inactivated in between, among them Type 2 diabetes mellitus without complication and Type 1 diabetes mellitus without complication; one had moved out from below Diabetes mellitus; one had arrived. A count built on the newer expansion no longer finds records coded with the retired concepts unless the platform follows the release’s history, and nobody edited anything.
SNOMED CT is also changing how it records inactivation. Its March 2026 release notes deprecate the Concept Non Current indicators, over 374,000 of them, and remove them from the release files from January 2027. A pipeline that reads that reference set to follow retired concepts has a date to work to.
A map that records only a source code and a target code loses what a reviewer needs: how close the match is, which release the target was chosen in, who made it, when, its status and who checked it. A FHIR ConceptMap element carries all of them.
Mapping errors are real and mostly small. In 2010 Lin, Vreeman, McDonald and Huff reviewed 884 voluntary LOINC mappings at three US institutions: four went to totally unrelated codes, and 36 had an error on at least one of LOINC’s six axes. They named four kinds of systematic error, from human slips to not knowing LOINC’s naming rules, and counted none of them. The sharper finding was that for 562 of the 880 tests the reviewers could not tell the specimen from the local name at all. A 2025 study of research-use codes at seven Korean university hospitals found more than 15% inconsistent, mostly in the analyte and the method.
A server is easier to choose on what can be checked than on what is claimed. HL7 publishes a terminology test suite of 1,209 tests in 38 suites that its validator runs against any endpoint, and approves servers that pass it for the modes they claim. On 17 October 2026 the approved servers were its own reference server, FHIRsmith, and CSIRO’s Ontoserver. HL7 publishes approvals, not per-test results, and no response time for any server was found at a primary source. Snowstorm Lite holds one release at a time, so it cannot compare two, and VSAC’s FHIR server states which version of HL7’s tests it meets.
Terminology servers, on what can be checked
Eight servers and public services, each from its own documentation, read in October 2026. “Not checked” means the point was not read, not that the server lacks it. No speeds and no ranking: none was found at a primary source.
Kind
Showing 8 of 8
HAPI FHIR (JPA server)
Open source- Steward
- The HAPI FHIR project
- Licence
- Apache-2.0
- Version read
- v8.12.1, 15 September 2026; documentation for 8.14.0
- Code systems
- Loaded as CodeSystem, ValueSet and ConceptMap resources, by REST or the CLI’s upload-terminology
- Releases held
- “Each version of a given code system, value set and concept map will have a separate resource entity”
- ECL
- Not mentioned in its terminology documentation
- Syndication
- Not checked
- FHIR
- Not checked
- Operations
- Not checked beyond loading terminology
- HL7 status, and who runs it
- Not on HL7’s approved list. Two Taiwanese services in HL7’s registry run it
Snowstorm
Open source- Steward
- SNOMED International
- Licence
- Apache 2.0. SNOMED International does not offer commercial support
- Version read
- 11.0.0, 2 September 2026
- Code systems
- SNOMED CT, LOINC, ICD-10, ICD-10-CM and others
- Releases held
- Multiple extensions alongside the International Edition
- ECL
- “Fully ECL v2.0 compliant”, by its own account; ECL is now at v2.3
- Syndication
- Not checked
- FHIR
- Implements the terminology module
- Operations
- The terminology module, on Elasticsearch
- HL7 status, and who runs it
- Not on HL7’s approved list; no endpoint in HL7’s registry
Snowstorm Lite
Open source- Steward
- SNOMED International
- Licence
- Apache 2.0
- Version read
- 2.7.0, 18 September 2026
- Code systems
- One SNOMED CT edition
- Releases held
- “Only supports one release of SNOMED CT Edition at this time”
- ECL
- “ECL Core, a subset of ECL”
- Syndication
- Not checked
- FHIR
- Selected operations
- Operations
- $lookup, $validate-code, ValueSet $expand and $validate-code, ConceptMap $translate
- HL7 status, and who runs it
- “Not suitable as a national terminology server”, in its own words
Ontoserver
Commercial- Steward
- CSIRO
- Licence
- Commercial; free to use in Australia through the Australian Digital Health Agency
- Version read
- Documentation 6.30.1
- Code systems
- SNOMED CT and LOINC, indexed with Lucene (2018 paper)
- Releases held
- Not checked
- ECL
- Not checked
- Syndication
- Yes, including SNOMED International’s MLDS feed
- FHIR
- R4, some R5 features as extensions
- Operations
- The terminology module, on PostgreSQL
- HL7 status, and who runs it
- Approved by HL7, test cases 1.9.0, mode flat. Runs national services in Australia, France, Canada, Germany, New Zealand, Estonia and the Nordic countries
FHIRsmith (tx.fhir.org)
Public service- Steward
- Health Intersections, for HL7
- Licence
- Not checked
- Version read
- Approved against test cases 1.9.4
- Code systems
- SNOMED CT, LOINC and others; approved in its SNOMED CT, OMOP and ICD-11 modes
- Releases held
- Two International releases and two LOINC versions on 17 October 2026
- ECL
- Not checked
- Syndication
- Not checked
- FHIR
- R4 and R5 endpoints
- Operations
- The module; on 17 October 2026 $closure was not turned on and $find-matches was unknown
- HL7 status, and who runs it
- Approved by HL7, modes snomed, omop, mimetypes, icd-11 and closure. HL7’s reference implementation
Snow Owl
Open source- Steward
- IQVIA, which took over B2i Healthcare
- Licence
- Apache-2.0
- Version read
- v10.3.0, 11 September 2026
- Code systems
- Not checked beyond the project page
- Releases held
- Not checked
- ECL
- Not checked
- Syndication
- Not checked
- FHIR
- Not checked
- Operations
- Not checked
- HL7 status, and who runs it
- Not on HL7’s approved list
VSAC’s FHIR server
Public service- Steward
- National Library of Medicine
- Licence
- A free UMLS account; HTTP Basic with the account’s API key
- Version read
- vsac-fhir 2.26.14, 8 October 2026, on HAPI FHIR
- Code systems
- VSAC’s value sets and the code systems they draw on
- Releases held
- Value set versions and expansion profiles
- ECL
- Not checked
- Syndication
- Not checked
- FHIR
- R4 (4.0.1)
- Operations
- ValueSet $expand and $validate-code; CodeSystem $lookup, $validate-code, $subsumes
- HL7 status, and who runs it
- Declares HL7’s terminology tests at version 1.9.1, modes VSAC and flat
Infoway Terminology Server
Public service- Steward
- Canada Health Infoway
- Licence
- Free with an Infoway account; API access needs a system account and a client-credentials token
- Version read
- Ontoserver
- Code systems
- SNOMED CT CA, LOINC, pCLOCD, UCUM, the pan-Canadian value sets, the CCDD
- Releases held
- On Infoway’s release schedule
- ECL
- Not checked
- Syndication
- Yes: RF2, Excel, CSV, JSON and XML
- FHIR
- R4 (4.0.1)
- Operations
- $expand and $validate-code named; Ontoserver’s module
- HL7 status, and who runs it
- In HL7’s registry, status OK, authoritative for Canadian SNOMED CT and Infoway code systems
Project pages and documentation for HAPI FHIR, Snowstorm, Snowstorm Lite, Ontoserver, Snow Owl, VSAC and Infoway; HL7’s approved-servers page and server registry, read on 17 October 2026; and DEXPRA’s own exchanges with tx.fhir.org the same day. A vendor’s statement about its own product is the vendor’s.
HL7’s runner checks a server against HL7’s cases. A platform’s own value sets need runs of their own: the operations its pipelines call, at the releases it pins, compared release to release for every value set that feeds a published number.
Patient identity services and the Fellegi–Sunter framework
A patient identity service keeps an index of the people a platform’s records belong to: a master patient index inside one organisation, an enterprise index across several, a registry across a region. Its errors have names. A duplicate is two entries for one person in one facility’s index, and an overlap is one person with entries in two facilities that were never linked; both are missed links. An overlay is one entry holding more than one person, from a wrong selection, an interface or a merge of two people: a false link.
Linking and merging are different decisions. A link keeps both records and relates them; a merge retires one. In FHIR the retired record carries a Patient.link of type replaced-by, HL7 v2 sends an A40 merge event, and IHE’s Patient Master Identity Registry profile sends the merge to every subscriber. Undoing a wrong merge has to travel the same paths. The IHE profiles that cross-reference and query identities, PIXm and PDQm, are introduced in IHE Radiology profiles: how imaging systems work together.
Matching comes in three kinds. Deterministic matching applies rules, such as the same identifier, or the same name, birth date and ZIP code. Probabilistic matching weighs each field by how often it agrees for the same person and how often it agrees by chance, which is the Fellegi–Sunter model; the match weights panel in WP-11 works one pair through it, field by field. Referential matching compares each record against a third party’s reference file of identities, which GAO describes as data from non-health care sources such as credit bureaus. Privacy-preserving linkage is a constraint on any of the three, not a fourth algorithm.
Four ways to decide two records are one person
What each strategy compares, what it needs, where it fails and who tunes it, with the same invented pair taken through each. Privacy-preserving linkage is a constraint on any of the other three, not a fourth algorithm.
Record A · invented
- Name
- Ann Marie Kowalski
- Born
- 1984-03-14
- ZIP
- 60614
- Sex
- Female
Record B · invented
- Name
- Anne-Marie Kowalski
- Born
- 1984-03-14
- ZIP
- 60614
- Sex
- Female
- Compares
- Fields against rules: the same identifier, or the same name, birth date and ZIP code
- Needs
- An identifier both records carry, or fields stable enough to agree exactly
- Fails
- On a typo, a missing identifier, a changed name or address. It never says “maybe”
- Who tunes it
- Whoever writes the rules
The pair above, this way
The two names are not spelled the same, so a rule on name, birth date and ZIP code says no link.
- Compares
- Each field, weighted by how often it agrees for the same person (m) and by chance (u)
- Needs
- Estimated m and u, and two thresholds, one for links and one for no link
- Fails
- Where fields do not disagree independently: twins, families, a newborn and a parent
- Who tunes it
- The organisation sets the thresholds; AHIMA puts them with information governance
The pair above, this way
Birth date, ZIP code and sex agree; the names are close. The total lands between the thresholds, so a person reviews it.
- Compares
- Each record against a third party’s reference file of identities
- Needs
- A vendor, and reference data that covers the people being matched
- Fails
- For people the reference data covers poorly, which Pew and the evaluators name: children, people who are homeless
- Who tunes it
- The vendor
The pair above, this way
If both records resolve to the same reference identity, for example through an address history, they link. If the person is not in the reference file, nothing changes.
- Compares
- Encodings of the fields, such as Bloom filters, or identifiers held only by a separate linkage unit
- Needs
- The same encoding at every source, and a key no recipient holds
- Fails
- When the encoding can be reversed by frequency attacks, or when hardening it costs links
- Who tunes it
- The parties to the linkage, and its linkage unit
The pair above, this way
The names are encoded before they leave each site; their filters share most bits, so the comparison still works without either site seeing the other’s names.
Fellegi and Sunter as WP-11 sets it out; AHIMA 2014 on who sets thresholds; Grannis et al. 2022, Pew 2018 and GAO 2019 on referential matching; the vendors’ own descriptions of their reference data; ICES and Statistics Canada on separated linkage; Schnell et al. 2009 and Franke et al. 2021 on Bloom filters. The pair is invented.
FHIR’s Patient/$match operation asks a server for candidates and, through the draft match-grade extension, gets each one back graded certain, probable, possible or certainly-not. The operation itself “does not specify any particular algorithm, nor a minimum set of information”. HL7’s FAST identity guide adds example input weights and a scoring scale, and says its scoring “has not been widely implemented/tested”.
{
"resourceType": "Bundle",
"type": "searchset",
"entry": [
{
"resource": { "resourceType": "Patient", "id": "example-1" },
"search": {
"mode": "match",
"score": 0.97,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/match-grade",
"valueCode": "certain"
}
]
}
},
{
"resource": { "resourceType": "Patient", "id": "example-2" },
"search": {
"mode": "match",
"score": 0.71,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/match-grade",
"valueCode": "probable"
}
]
}
}
]
}Record matching is not identity proofing. NIST’s Digital Identity Guidelines, SP 800-63-4, final since July 2025, govern how a person proves who they are to a system; a matcher decides whether two records already held describe the same person. The digital health identifier added to Ontario’s PHIPA in 2025, created through validation and verification services, is the first kind of thing, not the second.
A probabilistic matcher produces a score, and two thresholds turn it into a decision: link above the upper one, no link below the lower one, and a person decides in between. Where the two sit trades merging strangers against splitting one patient in two, and the band between them is a queue that somebody staffs. No instrument found sets them. HL7’s FAST guide gives example input weights, TEFCA’s technical framework says matching algorithms vary today, and AHIMA puts thresholds with the organisation’s information governance.
The model behind the score assumes that fields agree or disagree independently. Twins, families at one address and a newborn sharing a parent’s details break that assumption, and they are part of why the review band exists. The panel below scores a month of candidate pairs exactly under the model, for inputs you set, and puts its estimate beside the one measurement a third party has published.
From two thresholds to a staffed queue
Illustrative inputsA month of candidate pairs, every agreement pattern of the fields scored under Fellegi–Sunter and weighted by how often it occurs, so the counts are exact for the inputs. Every input is illustrative and editable; none describes a real index.
Fields
m values
After blocking.
Sets the prior weight.
Missing on either side, it weighs nothing.
No published figure was found.
- Linked automatically
- 996
- 0 false links: two people joined
- Sent to review
- 4
- 0.3 hours of review a month
- Missed links
- 1
- One person left as two, never seen by anyone
- Precision of automatic links
- >99.99%
- Recall, automatic links only
- 99.60%
- Recall if every review is right
- 99.94%
- An assumption, stated
996 linked automatically, 0 of them false; 4 to review, 0.3 hours; 1 missed.
Where every pair goes
- Link
- Review
- No link
- False link
996 of 1,000 true matches linked automatically, 3 in review, 1 missed. Of 19,000 pairs of two people, 0 were linked and 1 sent to review.
The fields, their m and u, and the weights they give
Health number
Provincial. Rarely shared by chance, sometimes mistyped
agree +13.21 · disagree −4.32
Last name
Changes on marriage
agree +6.52 · disagree −3.63
First name
Nicknames, spellings
agree +5.46 · disagree −3.03
Date of birth
Shared by twins
agree +10.92 · disagree −5.06
Sex
Agrees half the time by chance
agree +0.97 · disagree −4.64
Postal code
People move
agree +7.32 · disagree −2.31
What the model believes, and what was measured
At these inputs the model expects to link 99.94% of true matches once the queue is worked. It gets there by assuming every field agrees or disagrees independently, which twins, families at one address and a newborn sharing a parent’s details do not. The one published third-party evaluation measured a production probabilistic matcher against 30,000 hand-reviewed pairs in Indiana: it found 64% of the true matches (Grannis et al., 2022). The model’s figure is an estimate under its own assumptions. Your own is measured on a sample of your own pairs, reviewed by hand, including pairs the system did not link.
Fellegi and Sunter (1969) as WP-11 sets it out, every pattern enumerated; the Canadian m and u are WP-11’s; the US fields are USCDI v6’s demographic elements plus SSN, which is not one of them. Grannis SJ et al., JAMIA 2022;29(8):1409–1415, Table 2. No published figure for minutes per review was found.
Privacy-preserving record linkage and cryptanalysis
Some records have to be linked by organisations that may not share identifiers. Two designs exist. In separated linkage, identifiers go to a linkage unit and content to the analyst, with a key between them: ICES converts each Ontario health number into one anonymous ICES identifier, and at Statistics Canada linkage staff see identifiers while file builders see data without them. In token linkage, each source turns identifiers into tokens and the tokens are compared. Why matching has to happen while identifiers are still inside the building is set out in the on-premises and hybrid clinical AI framework.
The best-known token method encodes names as Bloom filters. Schnell, Bachteler and Reiher’s 2009 method splits a name into pairs of letters, sets bits in a filter for each pair, and compares filters by the Dice coefficient, so Smith and Smyth still look alike without either side seeing the name. In 2014 Niedermeyer and colleagues showed a manual attack on Bloom-filter-encoded surnames that needed nothing more than a public list of common surnames.
What a Bloom filter compares
DemonstrationType two names. Each becomes padded pairs of letters, each pair sets two bits in a 64-bit filter, and the filters are compared without the names. A demonstration of the method only: it has no secret key, so it protects nothing.
Site A bigrams
- _S, shared
- SM, shared
- MI, not shared
- IT, not shared
- TH, shared
- H_, shared
Site B bigrams
- _S, shared
- SM, shared
- MY, not shared
- YT, not shared
- TH, shared
- H_, shared
Filter A · 11 of 64 bits set
Filter B · 11 of 64 bits set
Filled squares are bits both filters set; outlined squares are set in one only. The numbers beside each bigram are the 2 positions it sets.
- Dice on the bigrams
- 0.67
- What the names share
- Dice on the filters
- 0.73
- What the linkage unit sees: 2 × shared bits ÷ (bits in A + bits in B)
Bigram similarity 0.67, filter similarity 0.73.
Why this one is not safe
Without a secret key anyone can build the same filter from a list of common surnames and read the names back, which is the attack published in 2014. NIST SP 800-188 says Bloom-filter linkage lets the parties re-identify each other’s data, and HHS treats a hash made without a secret key as an identifier. Real deployments key the hashes and harden the filters, at a cost in links found.
Schnell, Bachteler and Reiher, BMC Med Inform Decis Mak 2009; Niedermeyer et al., J Priv Confid 2014; NIST SP 800-188 (2023), §4.3; HHS OCR de-identification guidance, Q3.5. Hashes here are FNV-1a with double hashing, chosen to be short and deterministic.
The US rules on tokens are specific. HHS’s de-identification guidance says codes derived from protected health information, cryptographic hashes included, may be disclosed under expert determination as long as the keys are not, including to the recipients, and that a hash made without a secret key counts as an identifying element. NIST SP 800-188 describes keyed hashing with a 256-bit random key, warns that organisations sharing one pseudonymisation scheme can re-identify each other’s data, and does not recommend hashing direct identifiers. It sets out no technique for strengthening Bloom filters.
Strengthening a filter costs links. A 2021 evaluation by Franke and colleagues tested nine techniques on two US voter files with real errors between snapshots. Several “drastically reduce linkage quality”, while salting and XOR-folding flattened the bit frequencies an attack needs and kept quality high. The authors had not yet tested them against modern attacks.
Nine ways to harden a Bloom filter, and what each cost
Franke, Sehili, Rohde and Rahm tested them on two US voter files, North Carolina’s and Ohio’s, with real errors between two snapshots and none inserted. Linkage quality is F-measure, precision and recall.
Random hashing
Replaces double hashing, which attacks have exploited, with a keyed random number generator
“No attacks against this method are known at present”
Described, not scoredSalting
Keys the hash with a salt per attribute, or per record
Attribute salts cost about 1% of F-measure and flattened the bits. A year-of-birth record salt cut recall from 89.2% to 63.6%; a Soundex first-name salt kept it
Quality keptAttribute weighting
Gives each attribute its own number of hash functions
Fewer for city raised F-measure by over 6% and 2% on the two datasets
Quality keptBalancing
Concatenates each filter with its negation and permutes the bits
Precision fell 7% and 45% at the base threshold, recovered at a higher one, and the bits became less uniform
Depends on the settingXOR-folding
Folds the filter in half and XORs the halves
Under 1% of F-measure once tuned, with the bit distribution flattened by about 10%: “performs the best”
Quality keptRule 90
Replaces each bit with the XOR of its neighbours
Recall down about 12.5% and 7.6%; bits flattened by about 10%
Quality lostRe-hashing
Re-hashes windows of bits into new positions
Recall down more than 16% at the smallest window: “we can not recommend this method”
Quality lostRandom noise
Flips or sets bits at random
Little flattening; at high noise, “an unacceptable loss in linkage quality”
Quality lostFake injections
Adds artificial records with rare bigrams to flatten frequencies
Adds computation, can match a real record by chance, and has to be “winnowed”
Described, not scored
Franke M et al., “Evaluation of Hardening Techniques for Privacy-Preserving Record Linkage”, EDBT 2021, §§3, 6–7. The authors say testing against modern attacks is still to come. Two datasets are not your data.
Identity ecosystems and privacy rules in the US, Canada and Europe
The United States has no national patient identifier, and Congress keeps renewing the bar. The 2026 appropriations act again forbids spending federal funds on adopting a unique health identifier “until legislation is enacted specifically approving the standard”, as every such act has since 1999. US matching therefore rests on demographics. USCDI v6’s patient elements are names, previous name, birth date, sex, current and previous address, phone and email, with addresses to the Project US@ specification, and include no Social Security number. TEFCA’s technical framework requires every available demographic in a query and leaves the algorithm to each network. Inside its own programmes, Medicare links by its own identifier, the MBI, which is why the hybrid measure can join EHR data to claims at all.
Canada shows the other case. A provincial health number, ten digits for life in Ontario with a version code on the card, settles most matches inside a province. CIHI’s data quality documentation puts the share of hospital abstracts with a missing or invalid number at 1.40% for acute care and 1.41% for emergency and ambulatory care in 2025–26, counting a number shared by a child and its mother as invalid. What a number leaves out is specific: newborns before their own number arrives, people who have just moved between provinces, refugee claimants on federal coverage, people treated outside their province. None of them is what US reference data was built to cover, and no referential vendor found documents Canadian reference data.
Who arrives without a usable number
In Canada a provincial health number settles most matches inside a province. These are the people it does not cover, each with the rule that creates the gap. A US and an English row close it.
Canada
Newborns
Ontario pre-prints a newborn’s health number on the infant registration form; the card arrives within eight weeks
CIHI counts a number shared by a child and mother as invalid
Canada
People moving between provinces
The Canada Health Act allows a waiting period of up to three months, with the old province paying meanwhile. British Columbia’s is the rest of the month plus two; Ontario’s has gone
Care in the new province in the first months may carry the old province’s number
Canada
Refugee claimants and some newcomers
The Interim Federal Health Program covers them “until you’re eligible for provincial or territorial insurance”
No provincial number until then
Canada
Members of the Canadian Forces
Excluded from “insured person” under the Canada Health Act; British Columbia waives the wait on discharge
No provincial coverage while serving
Canada
People in a federal penitentiary
Excluded from “insured person” under the Canada Health Act
No provincial coverage while serving the term
Canada
People treated outside their province
ICES: care given to non-Ontarians in Ontario is “not linkable to other data in most cases”
Present in the hospital’s data, missing from the linked picture
Canada
Married people in Quebec
Civil Code art. 393: both spouses keep their own names
A name change on marriage is not the pattern a matcher should expect
US
Newborns in a US hospital
The Joint Commission has required distinct newborn identification since 2019; temporary names such as “Babyboy Smith” persist
A temporary name, changed before discharge, and sequential record numbers for babies born close together
International
Babies in England
The NHS number’s trace status has a code for “trace postponed (baby under six weeks old)”
A number may be present and not yet verified
Ontario Ministry of Health; ontario.ca; gov.bc.ca; the Canada Health Act; IRCC; ICES; the Civil Code of Québec; CIHI; the Joint Commission; the NHS Data Dictionary. Read in October 2026. Quebec’s waiting period could not be read at RAMQ.
Ontario’s PHIPA s. 34 governs who other than a custodian may collect, use or disclose a health number, and since 2020 it lets a custodian providing care use the number, with consent, to identify the person’s records, verify their identity or link their records. Ontario’s Provincial Client Registry, which its operator says covers 98% of Ontarians, offers a probabilistic match that returns a score and refuses queries below its minimum criteria. Whether a particular use complies is not this article’s to say.
Europe sets its linkage rules around the dataset. GDPR’s research article says safeguards “may include pseudonymisation”, a listed safeguard rather than a requirement. The European Health Data Space regulation, whose secondary-use rules apply from March 2029, releases data anonymised where that serves the purpose and pseudonymised otherwise, keeps the key that reverses it with the health data access body or a trusted third party, and gives people a right to opt out of secondary use. England makes recording the NHS number mandatory, with exceptions, records whether it was traced and verified, and makes secure data environments the default route to NHS data for research.
Identifiers and privacy rules, four jurisdictions
The same five questions asked of the US, Canada, the EU and England: the identifier, the rule for using data without names, who holds the key, where linkage happens, and what the person can refuse. Each answer is the text’s, with who decides; none is advice.
- The identifier
No national patient identifier, and federal funds still may not be spent adopting one. Medicare links its own records by the Medicare Beneficiary Identifier. A Social Security number is not a USCDI element.
- The rule for using data without names
HIPAA de-identification: remove eighteen kinds of identifier (safe harbor), or have a qualified expert determine the risk is very small and document it.
- Who holds the key
Under expert determination, codes derived from PHI, keyed hashes included, may be disclosed if the keys are not, “including to the recipients”. An unkeyed hash counts as an identifier.
- Where linkage happens
Wherever the tokens are compared. NIST notes some linkage runs inside a secure enclave; N3C used a linkage honest broker.
- What the person can refuse
Not covered by the sources this piece read.
- The identifier
A provincial health number: in Ontario, ten digits for life, with a version code on the card. PHIPA s. 34 governs who other than a custodian may collect, use or disclose it.
- The rule for using data without names
Custodians may disclose to prescribed entities, among them CIHI and ICES, for analysis of the health system.
- Who holds the key
At ICES, each OHIP number becomes one anonymous ICES identifier. At Statistics Canada, linkage staff see identifiers only and file builders see data without them.
- Where linkage happens
Inside the linkage body: ICES’s registry spine, CIHI’s encrypted health number, Statistics Canada’s linkage environment.
- What the person can refuse
Not covered by the sources this piece read.
- The identifier
Not covered by the sources this piece read.
- The rule for using data without names
GDPR Article 89: research safeguards “may include pseudonymisation”. Under the EHDS, data go out anonymised where that serves the purpose, otherwise pseudonymised.
- Who holds the key
The information to reverse pseudonymisation is available only to the health data access body or a trusted third party (EHDS Article 66(3)).
- Where linkage happens
Through a health data access body, which each Member State designates. The secondary-use rules apply from 26 March 2029.
- What the person can refuse
A right to opt out of secondary use “at any time, and without providing any reason”, with national exceptions for public-health bodies.
- The identifier
The NHS number, ten digits with a Modulus 11 check. Recording it is mandatory, with exceptions, and a trace status says whether it was verified.
- The rule for using data without names
Secure data environments are to be “the default way to access NHS Health and Social Care Data for research and analysis”.
- Who holds the key
Not covered by the sources this piece read.
- Where linkage happens
Inside the environment: users “access and analyse data without the data leaving”.
- What the person can refuse
Not covered by the sources this piece read.
The Further Consolidated Appropriations Act, 2026; 45 CFR 164.514 and HHS’s de-identification guidance; NIST SP 800-188; PHIPA and O. Reg. 329/04 on e-Laws; ICES and Statistics Canada; GDPR and Regulation (EU) 2025/327 on EUR-Lex; the NHS Data Dictionary and DHSC’s secure data environment guidelines. Read in October 2026.
Algorithmic bias in patient identity
Linkage error does not fall evenly. A 2010 review of 33 studies that compared matched and unmatched records found incomplete linkage associated with age, gender, race, setting, and socioeconomic and health status. The 2018 GUILD guidance on linked data says linkage error “disproportionately affects disadvantaged groups”.
Two studies put numbers on it. At ICES, Ontario’s permanent resident records from 1985 to 2012 linked to the provincial registry at 86.4% overall, 78.0% for people born in Eastern Asia and 61.4% for people aged 85 or over. In Indiana in 2026, a probabilistic matcher’s sensitivity ran from 0.70 to 0.97 across age groups, lowest where fields were missing or disagreed. When linkage misses more people in one group, every rate computed over linked records is biased for that group, and nothing raises an error.
Newborns show the mechanism. The Joint Commission has required distinct newborn identification since 2019, and its safety notice on the subject still describes temporary names such as Babyboy Smith, record numbers assigned in sequence to babies born close together, and names changed before discharge. The remedy is the same as for any linkage error: measure it by group on your own data, and report it.
Comparing products and testing them on your own data
Identity services come in kinds: matching built into the EHR, enterprise index products, referential services, open-source indexes, linkage libraries and, in Canada, provincial registries. What can be checked about each is its licence, how it is deployed, which standards it documents and what it says it covers. What cannot be checked from outside is accuracy.
Published matching accuracy is almost all vendor-reported. One third-party evaluation of a commercial matcher exists. In 2022 Grannis and colleagues measured a referential and a probabilistic algorithm against 30,000 hand-reviewed pairs from the Indiana Network for Patient Care, and found sensitivity of 0.94 and 0.64 at almost identical precision. Its funder, the California HealthCare Foundation, holds a minority stake in the referential vendor, Verato, and the paper says so. No comparison of identity products against each other published since 2020 was found, and every referential vendor that states its coverage states US identities.
Kinds of identity service, on what can be checked
Thirteen options in six kinds, from each operator’s own documentation, read in October 2026. What each says it covers is its own claim, quoted. Accuracy is the column nobody can fill from outside.
Kind
Showing 13 of 13
EHR-native
Epic’s patient matching
Part of the EHR
- Deployment
- With the EHR
- Standards
- Documentation on fhir.epic.com needs a login
- What it says it covers
- Not public
- Accuracy
- No independent figure published
Enterprise index product
InterSystems EMPI
Vendor product
- Deployment
- Not checked
- Standards
- Not checked
- What it says it covers
- Renamed from HealthShare Patient Index at version 2025.1. Its referential service is “powered by LexisNexis LexID”
- Accuracy
- No independent figure published
Enterprise index product
Rhapsody EMPI with Autopilot
Vendor product
- Deployment
- “On your infrastructure or in the cloud”
- Standards
- “API, FHIR, and HL7”
- What it says it covers
- NextGate’s index, after the 2022 merger. “1,900+ healthcare teams in 31 countries”; Canada not mentioned
- Accuracy
- The vendor quotes one customer’s 98% “data match rate”; not independently checked
Enterprise index product
IBM Match 360
Vendor product
- Deployment
- Not checked
- Standards
- Can ingest InfoSphere MDM data
- What it says it covers
- No healthcare-specific statement from IBM found
- Accuracy
- No independent figure published
Referential service
Verato
Vendor product
- Deployment
- A service against the vendor’s reference file
- Standards
- Not checked
- What it says it covers
- “Over 300 million identities” of US people, from “commercially-sourced demographic data”; no other country named
- Accuracy
- One third-party evaluation of a commercial referential matcher, on Indiana records; its funder holds a minority stake in Verato
Referential service
Experian Health Universal Identity Manager
Vendor product
- Deployment
- Not checked
- Standards
- Not checked
- What it says it covers
- Combines “probabilistic and referential matching”, using Experian demographic data; no coverage stated outside the US
- Accuracy
- No independent figure published
Referential service
LexisNexis LexID for Healthcare
Vendor product
- Deployment
- A service
- Standards
- Not checked
- What it says it covers
- No sources, counts or countries stated; its data “may contain errors”, by its own notice
- Accuracy
- No independent figure published
Open source index
SanteMPI (SanteDB)
Apache-2.0
- Deployment
- Not checked
- Standards
- A FHIR module
- What it says it covers
- Owner SantéSuite Inc., origin Canada; active in October 2026
- Accuracy
- No independent figure published
Open source index
OpenCR
MIT
- Deployment
- Not checked
- Standards
- Not checked
- What it says it covers
- Last change 1 April 2025
- Accuracy
- No independent figure published
Open source index
JeMPI
MPL-2.0
- Deployment
- Not checked
- Standards
- Not checked
- What it says it covers
- Last change 16 April 2025
- Accuracy
- No independent figure published
Enterprise index product
OpenEMPI
Commercial, by annual subscription: no longer open source
- Deployment
- An older community edition shipped as an Amazon machine image (2021)
- Standards
- Not checked
- What it says it covers
- Version 4.4.3, 31 July 2026, for customers with a subscription
- Accuracy
- No independent figure published
Linkage library
Splink, fastLink and Zingg
MIT; no licence asserted on GitHub; AGPL-3.0
- Deployment
- Libraries inside your own pipeline, not services
- Standards
- None: they link tables
- What it says it covers
- Splink and Zingg changed in October 2026, fastLink in February 2026
- Accuracy
- Whatever you measure on your own data
Provincial registry
Ontario’s Provincial Client Registry
Access for authorised providers after onboarding
- Deployment
- A provincial service
- Standards
- Queries in HL7 FHIR, V3 and V2; PIXm
- What it says it covers
- “Covering 98% of Ontarians”, by its operator; a probabilistic match that returns a score, and refuses queries below its minimum criteria
- Accuracy
- No independent figure published
Each operator’s own pages, read in October 2026; Grannis SJ et al., JAMIA 2022, for the one third-party evaluation, which names its funder’s stake. A vendor’s figure is the vendor’s. Nothing here ranks one option above another.
The figures most often repeated about patient matching do not survive being traced. Match rates “as low as 50%” was one organisation’s self-reported rate between separate EHR instances, from a 2014 interview. Eight per cent of records being duplicates comes from an EMPI vendor’s white paper about indexes from 2000 to 2003. Eighteen per cent comes from a crowdsourced poll in a press release that also ranked vendors. On the terminology side, 6% to 19% of laboratory tests that cannot be mapped to LOINC is a 2006 study of five Indian Health Service facilities.
The figures most often quoted, traced to where they came from
Twelve statistics that travel through patient matching and mapping writing, each followed back to its origin: who measured it, how, who paid, and whether it supports the way it is usually quoted.
- Identity
Match rates “as low as 50%”
Kaiser Permanente, interviewed for ONC’s 2014 report
One organisation’s self-reported rate when sharing between separate Epic instances; above 90% within each
Paid · ONC contract (Audacious Inquiry)
Retold as “a study” of records “accurately matched”. It was neither
- Identity
Match rates “from 14 to 90 percent”
OCHIN, interviewed for the same report
An interview answer, no method given
Paid · ONC contract
A range from one interview
- Identity
“8% of records are duplicates”
An Initiate Systems white paper, 2008, cited by RAND and ONC
112 master patient indexes, 2000 to 2003
Paid · An EMPI vendor; RAND’s report was sponsored by health IT companies
A vendor’s figure about indexes twenty years old
- Identity
“8 to 12 percent” duplicates
Just et al., 2016
“Industry experts estimate”, no citation
Paid · Two authors from an MPI services firm
No source
- Identity
“15 to 16 percent” in large systems
Attributed to RAND by Just et al.
RAND gives 9.4% for files of a million records or more
Paid · —
Not in the source cited
- Identity
“18% of records are duplicates”, “$1,950 per stay”
Black Book Market Research press release, 2018
A “crowdsourced poll” of 1,392 managers and EMPI users, self-reported
Paid · A market research firm whose release also ranks EMPI vendors
Estimates from a vendor-satisfaction poll
- Identity
“$96 per duplicate”, “22 percent to .14 percent”
Children’s Medical Center Dallas, a case study
One hospital’s clean-up
Paid · Written by the firm that did the clean-up
One case, told by its contractor; the case study itself was not read
- Identity
7,613 wrong-patient events
ECRI Institute PSO, 2016
Events submitted by 181 organisations, found by keyword search
Paid · ECRI
A count of reported events, not a rate
- Identity
“A 5 to 10 percent rate being the norm”
AHIMA practice brief, 1997
No source given
Paid · AHIMA
An unsourced statement, nearly thirty years old
- Identity
Basic algorithms find “10 to 40 percent” of duplicates
AHIMA practice brief, 2014
No source given
Paid · AHIMA
Unsourced
- Terminology
“6% to 19%” of lab tests cannot be mapped to LOINC
Khan et al., JAMIA, 2006
Five Indian Health Service facilities
Paid · —
Real, about five facilities in 2006; repeated in 2026 as “studies show”
- Terminology
“An inconsistency rate of over 15%” in LOINC mappings
Park et al., J Korean Med Sci, 2025
Research-use codes at seven Korean university hospitals
Paid · —
Real, about research codes in Korea; usually quoted without saying so
The originals, read: ONC’s 2014 report, RAND’s 2008 report, Just et al. 2016, Black Book’s 2018 release (archived copy), ECRI’s 2016 summary, AHIMA’s 1997 and 2014 briefs, Khan et al. 2006 and Park et al. 2025. A secondary citation is never treated as an origin.
So the honest evaluation is local. For terminology, run the operations your pipelines call against your own value sets at pinned releases, and compare them release to release. For identity, have two people review a sample of your own candidate pairs, with a third settling disagreements, and include pairs the system did not link, because those are where missed links hide. Measure precision and recall at several thresholds and cost the queue at your own minutes per pair. In the Indiana evaluation the two reviewers agreed on 96.1% of pairs inside the blocking schemes and 86.8% outside them, so the review needs its tie-breaker.
Platform governance and the RECORD statement
Both services are governed as releases. A value set’s content, a map, the adoption of a new release, each threshold, a merge and an unmerge are decisions with an owner, a date and a record. For a VSAC value set the owner is its steward. For thresholds, AHIMA puts the decision with information governance, and no instrument found sets them. For the rest the owner is the organisation, and what matters is that someone is named.
Who owns each decision, and what is recorded
The decisions that move a number, in both services. A role is named only where a source names one; otherwise it is the organisation’s. The last column is what lets a published number say what it was computed under.
Terminology
What a value set contains
Who decides · The organisation. For a VSAC value set, its steward, who reviews, approves, publishes and maintains it
Released · As a versioned value set with a canonical URL
Recorded · Its version, and the release each expansion ran under
Terminology
A map from a local code
Who decides · The organisation; for LOINC, local codes carry an X and new terms go to Regenstrief
Released · As a reviewed ConceptMap row, not a spreadsheet cell
Recorded · Relationship, author, date, status, review, and the target release
Terminology
Adopting a new release
Who decides · The organisation
Released · On a date, after the value sets it changes have been compared
Recorded · Which release every published number was computed under
Identity
The two match thresholds
Who decides · The organisation’s information governance, in AHIMA’s words; no standard sets them
Released · As a configuration change, with its expected effect on the queue
Recorded · The thresholds in force when each link was made
Identity
A merge
Who decides · The organisation, often after review by health information management
Released · To every downstream system: HL7 v2 A40, IHE PMIR, Patient.link replaced-by
Recorded · Which record replaced which, when, and on whose decision
Identity
An unmerge
Who decides · The organisation
Released · The same paths, in reverse; v2 has its own unlink event
Recorded · What was undone, and which numbers computed in between are affected
AHIMA 2014 on thresholds and governance; VSAC on stewards; Regenstrief’s LOINC licence on local codes; FHIR Patient.link and R5 $merge; HL7 v2 events; IHE PMIR. No standard sets the thresholds or the release a number uses.
The test of governance is whether a published number can say what it was computed under: which release each value set was expanded in, which version of each map, which thresholds were in force when its links were made. A number that cannot say that is a number nobody can reproduce.
Researchers meet the same requirement from the other side. The RECORD statement, a reporting guideline for studies that use routinely collected health data, asks authors to say whether databases were linked, to list the codes and algorithms that select the population and define its variables, and to describe “the methods of linkage and methods of linkage quality evaluation”. RECORD is a guideline for authors and grades nothing. It is, in effect, a list of what an analyst has to be able to get from the platform.
What an analyst needs from the platform for RECORD
Ten RECORD items that touch codes or linkage, each with what the platform has to hand over so it can be answered. Tick the ones your study reports; the list below becomes the request. RECORD is a reporting guideline: there is no score.
0 of 10 items in the request
Nothing ticked yet. The request lists what to ask for, item by item.
Benchimol EI et al., “The REporting of studies Conducted using Observational Routinely-collected health Data (RECORD) Statement”, PLoS Med 2015;12(10):e1001885. The items are paraphrased; the request column is DEXPRA’s reading of what each needs.
What governs each part of the two services is uneven. The core terminology operations are normative in FHIR R4; maps, closure and the identity operations are trial use; IHE’s identity profiles are trial implementations; and the FAST guide, a standard for trial use, leaves the matching method out of scope. Where the two thresholds sit, which release a value set was expanded under and who approved a map are set by nothing outside the organisation.
That is where a platform’s own decisions go, and the case for owning them. Both services are built from settled parts. The decisions that move a published number are local, and the only evidence that they were made well is measured on the organisation’s own data and written down beside the number.

