ConceptMap — détail : mappings et $translate
Page compagnon orientée implémenteur pour industrialiser les mappings terminologiques : ICD-10 vers SNOMED CT, LOINC vers pCLOCD, codes locaux vers référentiels nationaux.
Structure group/element/target
ConceptMap utilise une hiérarchie à trois niveaux : group (couple système
source/cible), element (code source), target (un ou plusieurs
codes cibles avec relation). Un element peut avoir 0..N target
selon le type de mapping : équivalence stricte (1:1), explosion (1:N), agrégation (N:1).
Codes d'équivalence (relationship)
R5 a renommé equivalence en relationship. Valeurs :
| Code | Sémantique |
|---|---|
related-to | Lien sémantique sans précision. |
equivalent | Signification identique entre source et cible. |
source-is-narrower-than-target | Source plus spécifique que cible. |
source-is-broader-than-target | Source plus large que cible. |
not-related-to | Pas de lien : équivalence négative. |
Opération $translate
L'opération REST $translate applique un ConceptMap pour traduire un code.
Exemples d'appels :
GET /ConceptMap/icd10-to-snomed-diabetes/$translate?system=http://hl7.org/fhir/sid/icd-10&code=E11POST /ConceptMap/$translateavec un corps Parameters contenantsourceCoding,targetSystem,reverse.GET /ConceptMap/$translate?url=...&system=...&code=...— référence par URL canonique au lieu d'id.
Le serveur retourne une ressource Parameters avec result (bool),
match[] (chaque match porte relationship + concept).
Gestion unmapped
Le champ unmapped définit le comportement quand aucun match n'est trouvé :
mode=provided— retourne le code source tel quel.mode=fixed— retourne un code par défaut.mode=other-map— délègue à un autre ConceptMap (chaînage).
Exemple ICD-10 -> SNOMED CT (diabète)
{
"resourceType": "ConceptMap",
"id": "icd10-to-snomed-diabetes",
"url": "http://example.org/fhir/ConceptMap/icd10-to-snomed-diabetes",
"version": "1.0.0",
"name": "ICD10ToSnomedDiabetes",
"status": "active",
"sourceScopeUri": "http://hl7.org/fhir/sid/icd-10",
"targetScopeUri": "http://snomed.info/sct",
"group": [{
"source": "http://hl7.org/fhir/sid/icd-10",
"target": "http://snomed.info/sct",
"element": [{
"code": "E11",
"display": "Type 2 diabetes mellitus",
"target": [{
"code": "44054006",
"display": "Diabetes mellitus type 2",
"relationship": "equivalent"
}]
}, {
"code": "E11.9",
"display": "Type 2 diabetes mellitus without complications",
"target": [{
"code": "313436004",
"display": "Type 2 diabetes mellitus without complication",
"relationship": "equivalent"
}]
}]
}],
"unmapped": {
"mode": "fixed",
"code": "UNMAPPED",
"display": "Concept not mapped"
}
} Pièges courants
- Mappings sans version — SNOMED CT change tous les 6 mois. Épingler
versionsource et cible dansgroup. - Relationship manquante — un
targetsansrelationshipest invalide. - Cycles via dependsOn — éviter les maps circulaires entre ConceptMaps.
- Cardinalité 1:N non documentée — préciser dans
commentpourquoi un code source produit plusieurs cibles.