
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.