StructureMap — Mapping entre modèles de données
Le moteur de transformation FHIR : convertir HL7 v2 en FHIR, CDA en FHIR, FHIR R4 en R5, une ressource projet en sa version standardisée. Exprimé en FHIR Mapping Language.
Objet de la ressource
StructureMap décrit une transformation entre deux modèles de données. Le
langage utilisé est le FHIR Mapping Language, conçu par HL7 pour ce besoin. La
transformation est typiquement écrite par un intégrateur, validée par un éditeur, puis exécutée
côté serveur par l'opération $transform.
Les serveurs FHIR Matchbox, HAPI Mapping Engine, IBM Mapping Server, et la plupart des intégrateurs de marché (Mirth Connect FHIR, Rhapsody) consomment StructureMap.
Champs clés
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
url | uri | 1..1 | URL canonique. |
identifier | Identifier[] | 0..* | Identifiants métier. |
version | string | 0..1 | Version. |
name | string | 1..1 | Nom technique. |
status | code | 1..1 | draft | active | retired | unknown. |
structure | BackboneElement[] | 0..* | StructureDefinitions impliquées (source/target/queried/produced). |
import | canonical[] | 0..* | Autres StructureMaps importées. |
const | BackboneElement[] | 0..* | Constantes utilisables dans les règles. |
group | BackboneElement[] | 1..* | Groupes de règles. |
group.input | BackboneElement[] | 1..* | Entrées du groupe. |
group.rule | BackboneElement[] | 0..* | Règles de mapping. |
Exemple JSON
{
"resourceType": "StructureMap",
"id": "example-pid-to-patient",
"url": "http://example.org/StructureMap/pid-to-patient",
"version": "5.0.0",
"name": "PIDToPatient",
"status": "active",
"structure": [{
"url": "http://hl7.org/fhir/StructureDefinition/Patient",
"mode": "target"
}],
"group": [{
"name": "PIDtoPatient",
"typeMode": "none",
"input": [{
"name": "source",
"mode": "source"
}, {
"name": "target",
"mode": "target"
}],
"rule": [{
"name": "pid3-to-identifier",
"source": [{
"context": "source",
"element": "PID-3"
}],
"target": [{
"context": "target",
"element": "identifier",
"transform": "create",
"parameter": [{ "valueString": "Identifier" }]
}]
}]
}]
} Opération $transform
POST /StructureMap/{id}/$transformavec une ressource source (Bundle, Parameters).- Le serveur applique les règles du StructureMap et retourne la ressource cible.
- Permet d'exposer une conversion v2 → FHIR ou cross-version comme un service REST simple.
Pièges courants
- FHIR Mapping Language en texte libre — toujours sérialiser en JSON pour exécution côté serveur.
- Pas de
structure— le serveur ne sait pas quels modèles attendre. - RuleId dupliqué — empêche les rules de relier proprement input/output.
Ressources liées
- StructureDefinition — modèle source/cible.
- ImplementationGuide.
- ConceptMap — mapping de codes.
- GraphDefinition.
- Hub FHIR R5.