ICD-10 to SNOMED Mapping in FHIR: ConceptMap Patterns That Ship

ICD-10 to SNOMED Mapping in FHIR: ConceptMap Patterns That Ship

Diagram: ICD-10-CM to SNOMED CT ConceptMap translation with $translate

Mapping ICD-10-CM (billing) to SNOMED CT (clinical) is one of the most common terminology translation problems in US healthcare. FHIR ConceptMap provides the primitive; making it work in production takes deliberate design.

Sources for ICD-10-CM ↔ SNOMED CT maps

1. **NLM's UMLS distributions — official cross-map, requires UMLS license. 2. SNOMED International's Map Access — commercial license. 3. CMS's General Equivalence Mappings** — free, less clinically nuanced.

Production deployments use UMLS-sourced maps as the base, augment with local exceptions.

ConceptMap structure for the mapping

`` ConceptMap: source: ICD-10-CM code system target: SNOMED CT code system group.element[]: code: ICD-10 code target[]: code: SNOMED code equivalence: equivalent | wider | narrower | inexact comment: mapping rationale ``

The equivalence field is critical — analytics that treat all mappings as equivalent produce wrong counts.

Common integration mistakes

1. Treating one-to-many as one-to-one. ICD-10 codes map to multiple SNOMED codes with different equivalence. Pick primary target or handle multiplicity explicitly. 2. Ignoring equivalence field. "Wider" and "narrower" mappings aren't equivalent; analytics should filter accordingly. 3. Unversioned source/target. ICD-10-CM has annual updates; SNOMED CT quarterly. Version-pin both. 4. Manual translation in application code. Belongs in a ConceptMap resource, called via `$translate`.

Translation pattern

``` POST /ConceptMap/icd10-to-snomed/$translate?code=E11.9&system=http://hl7.org/fhir/sid/icd-10-cm

→ Returns Parameters with match[] array, each with target Coding + equivalence. ```

Vendor support

Server ConceptMap $translate Batch translation Multi-equivalence
Ontoserver Full Yes Full
HAPI terminology Full Yes Full
Aidbox terminology Full Yes Full

ICD-10 to SNOMED mapping is a solved problem given proper ConceptMap infrastructure. The pitfall is embedding mapping logic in application code instead of using the FHIR-native primitive.