Clinical terminologies
Last reviewed: 2026-06-28 — see the freshness policy.
Learning objectives
After this chapter you will be able to:
- Name the major clinical code systems and what each one codes.
- Explain why terminology binding is the hardest part of clinical data integration.
- Design a value-set and code-mapping strategy for a FHIR or OMOP data platform.
Why terminologies matter more than you expect
A FHIR Condition resource that says the patient has "diabetes" is nearly useless for analytics. A Condition coded as SNOMED CT 44054006 (Diabetes mellitus type 2) is queryable, mappable, and comparable across institutions. The code is the data; the human-readable text is just a label.
Every serious HLS data task — interoperability, analytics, AI, quality measures — depends on data being coded with the right standard terminology. Getting terminology binding wrong is the most common reason a data integration "works" in a demo and fails in production.
The major code systems
flowchart TB
subgraph Clinical["What is coded"]
Dx["Diagnoses / problems"]
Labs["Lab tests & observations"]
Meds["Medications"]
Proc["Procedures"]
Units["Units of measure"]
end
Dx --> SNOMED["SNOMED CT<br/>(clinical) "]
Dx --> ICD["ICD-10-CM<br/>(billing)"]
Labs --> LOINC["LOINC"]
Meds --> RxNorm["RxNorm"]
Proc --> CPT["CPT / HCPCS<br/>(billing)"]
Proc --> SNOMED
Units --> UCUM["UCUM"]
| System | Codes | Maintained by | Used for |
|---|---|---|---|
| SNOMED CT | Diagnoses, findings, procedures, body structures — the broadest clinical vocabulary | SNOMED International | FHIR Condition, Procedure (clinical meaning) |
| ICD-10-CM | Diagnoses (US clinical modification) | CDC / CMS | Billing, claims, reporting. The US is still onICD-10-CM; ICD-11 is not yet adopted (projected 2025–2027, no firm date). |
| LOINC | Lab tests, vital signs, survey instruments | Regenstrief Institute | FHIR Observation.code, DiagnosticReport.code |
| RxNorm | Medications (normalized drug names) | US NLM | FHIR MedicationRequest, Medication |
| CPT / HCPCS | Procedures and services (billing) | AMA (CPT) / CMS (HCPCS) | Claims, reimbursement |
| UCUM | Units of measure (mg, mmol/L) | Regenstrief | FHIR Quantity.code — the unit on every numeric value |
Note the recurring split: SNOMED CT / LOINC / RxNorm carry clinical meaning;ICD-10-CM/ CPT carry billing meaning. A single diabetes diagnosis is often coded twice — once in SNOMED for the chart, once inICD-10-CMfor the claim. Your data platform usually needs both.
All of SNOMED CT, LOINC, and RxNorm are integrated in the US NLM's UMLS Metathesaurus, which maps equivalences between them — invaluable when you need to cross-walk codes.
US Core terminology requirements
The US Core Implementation Guide (required for ONC-certified EHRs) binds specific resources to specific code systems:
Condition(problems) → SNOMED CT orICD-10-CMObservation(labs, vitals) → LOINC, with UCUM unitsMedicationRequest→ RxNormProcedure→ SNOMED CT, CPT, or HCPCS
When you build a FHIR API, validate that codes come from the bound value set, not just any code system. A Condition coded in a proprietary local system will fail US Core conformance and break downstream interoperability.
Value sets and bindings
A value set is a curated list of codes drawn from one or more code systems for a specific purpose (e.g., "the set of LOINC codes that count as an HbA1c result"). A binding ties a FHIR element to a value set, with a strength:
- required — the code must come from the value set.
- extensible — use the value set if a suitable code exists, otherwise another code is allowed.
- preferred / example — guidance only.
The VSAC (Value Set Authority Center) at the NLM is the US canonical source for value sets used in quality measures and US Core.
Terminology services
Don't hard-code terminology logic. Use a terminology server (the FHIR $validate-code, $expand, $lookup, and $translate operations) to validate codes, expand value sets, and map between systems. Options:
- Cloud-native: GCP Cloud Healthcare API terminology features; managed FHIR servers with terminology support.
- Open-source: HAPI FHIR terminology server, Snowstorm (SNOMED CT), Ontoserver.
Mapping strategy for a data platform
When building an OMOP lakehouse or a FHIR analytics layer, codes from source systems rarely match your target standard. Plan for mapping:
- Standardize on target vocabularies — OMOP uses SNOMED CT as the standard for conditions; mapICD-10-CMsource codes to SNOMED via the OMOP vocabulary tables.
- Use published crosswalks — UMLS, OMOP vocabulary, VSAC, and NLM mappings exist; do not invent your own.
- Track unmapped codes — every ETL must report the percentage of source codes that failed to map. Unmapped clinical codes are silently lost evidence.
- Version your vocabularies — code systems are updated (often quarterly). Pin the version used in any reproducible analysis.
See OMOP Common Data Model for how this mapping plays out in a real schema.
Check yourself
- A patient's lab result arrives as "glucose, 95 mg/dL." Which two code systems do you need to represent this fully in FHIR, and for what part of the value?
- Why might a single diabetes diagnosis be coded in both SNOMED CT andICD-10-CMin the same record?
- Your ETL maps 82% of source diagnosis codes to OMOP standard concepts. What must you do about the other 18%, and why is ignoring them dangerous?