StructureDefinition — Méta-modèle de FHIR
La grammaire de FHIR. Chaque ressource, type primitif, type complexe, extension, profil national est défini par une StructureDefinition. Le moteur de tout ce qui est sémantiquement typé en FHIR.
Objet de la ressource
StructureDefinition définit la forme de toute chose typée en FHIR : les ressources publiées par HL7 (Patient, Observation, Bundle…), les types primitifs (string, date), les types complexes (HumanName, Address, Identifier), les extensions personnalisées et les profils nationaux (US Core, FR Core, NL Core…).
Une StructureDefinition est composée d'éléments décrivant chaque chemin
(Patient.name.given) avec sa cardinalité, son type, son binding terminologique,
ses contraintes FHIRPath, ses slicings, ses examples.
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. |
title | string | 0..1 | Titre humain. |
status | code | 1..1 | draft | active | retired | unknown. |
fhirVersion | code | 0..1 | Version FHIR cible. |
kind | code | 1..1 | primitive-type | complex-type | resource | logical. |
abstract | boolean | 1..1 | Type abstrait ou instanciable. |
type | uri | 1..1 | Type FHIR sous-jacent (Patient, Observation…). |
baseDefinition | canonical | 0..1 | StructureDefinition parente. |
derivation | code | 0..1 | specialization | constraint. |
snapshot | BackboneElement | 0..1 | Vue complète résolue. |
differential | BackboneElement | 0..1 | Différentiel par rapport au parent (utilisé pour les profils). |
Exemple JSON
{
"resourceType": "StructureDefinition",
"id": "us-core-patient",
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient",
"version": "7.0.0",
"name": "USCorePatientProfile",
"title": "US Core Patient Profile",
"status": "active",
"publisher": "HL7 International — US Realm",
"fhirVersion": "5.0.0",
"kind": "resource",
"abstract": false,
"type": "Patient",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Patient",
"derivation": "constraint",
"differential": {
"element": [{
"id": "Patient.identifier",
"path": "Patient.identifier",
"min": 1
}, {
"id": "Patient.name",
"path": "Patient.name",
"min": 1
}]
}
} Profils et extensions
- Profil —
derivation=constraintrestreint une ressource (US Core Patient = Patient + identifier 1..*). - Extension —
kind=complex-type+type=Extensionajoute un champ ad-hoc à une ressource. - Logical model —
kind=logicaldéfinit un modèle conceptuel (FHIR Shorthand, ABMD). - Slicing — découpe d'un champ multiple en sous-types (ex. identifier.use=usual vs official).
Pièges courants
- Pas de
baseDefinitionpour un profil — l'éditeur ne sait pas par rapport à quoi valider. - Snapshot pas synchronisé — toujours générer le snapshot quand le différentiel change.
- Slicing mal discriminé — sans
discriminatorclair, les outils ne peuvent pas trier.
Ressources liées
- ImplementationGuide — emballe les StructureDefinitions.
- StructureMap — transformation.
- ValueSet, CodeSystem.
- CapabilityStatement.
- Hub FHIR R5.