ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

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 :

CodeSémantique
related-toLien sémantique sans précision.
equivalentSignification identique entre source et cible.
source-is-narrower-than-targetSource plus spécifique que cible.
source-is-broader-than-targetSource plus large que cible.
not-related-toPas 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=E11
  • POST /ConceptMap/$translate avec un corps Parameters contenant sourceCoding, 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)

json conceptmap-icd10-snomed.json
{
  "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 version source et cible dans group.
  • Relationship manquante — un target sans relationship est invalide.
  • Cycles via dependsOn — éviter les maps circulaires entre ConceptMaps.
  • Cardinalité 1:N non documentée — préciser dans comment pourquoi un code source produit plusieurs cibles.

Ressources liées