CompartmentDefinition — Compartiments FHIR
Le périmètre Patient : toutes les ressources qui parlent de lui, par
quel paramètre les retrouver. La règle qui rend GET /Patient/123/$everything
déterministe.
Objet de la ressource
Un compartiment FHIR regroupe les ressources liées à un sujet commun : le compartiment Patient contient toutes les ressources cliniques du patient, le compartiment Practitioner toutes les ressources où le praticien agit. La spec FHIR définit 5 compartiments : Patient, Practitioner, Encounter, Device, RelatedPerson. CompartmentDefinition formalise quels paramètres de recherche permettent de retrouver les ressources d'un compartiment.
Champs clés
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
url | uri | 1..1 | Obligatoire. URL canonique. |
identifier | Identifier[] | 0..* | Identifiants externes. |
version | string | 0..1 | Version. |
name | string | 1..1 | Obligatoire. Nom machine. |
title | string | 0..1 | Titre lisible. |
status | code | 1..1 | Obligatoire. draft, active, retired, unknown. |
experimental | boolean | 0..1 | Si expérimental. |
date | dateTime | 0..1 | Date. |
publisher | string | 0..1 | Éditeur. |
description | markdown | 0..1 | Description. |
useContext | UsageContext[] | 0..* | Contexte d'usage. |
purpose | markdown | 0..1 | Objectif. |
code | code | 1..1 | Obligatoire. Code compartiment : Patient, Encounter, RelatedPerson, Practitioner, Device. |
search | boolean | 1..1 | Obligatoire. Si le serveur supporte la recherche par compartiment. |
resource | BackboneElement[] | 0..* | Pour chaque ressource : code (resourceType) + param[] (paramètres de search permettant de lier au compartiment) + documentation. |
Usage en API et sécurité
Le compartiment permet la recherche scoped : GET [base]/Patient/123/Observation
renvoie toutes les Observations du compartiment Patient 123. C'est aussi un
primitif de sécurité : SMART on FHIR utilise les scopes
patient/*.read qui sont implémentés via les compartiments.
Exemple JSON
Définition du compartiment Patient :
{
"resourceType": "CompartmentDefinition",
"id": "patient",
"url": "http://hl7.org/fhir/CompartmentDefinition/patient",
"version": "5.0.0",
"name": "PatientCompartment",
"title": "Compartiment Patient",
"status": "active",
"experimental": false,
"date": "2023-03-26",
"publisher": "HL7 (FHIR Project)",
"description": "Compartiment qui englobe toutes les ressources cliniques associées à un patient : Observation, Condition, Encounter, MedicationRequest, etc.",
"code": "Patient",
"search": true,
"resource": [{
"code": "Observation",
"param": ["subject", "performer"]
}, {
"code": "Condition",
"param": ["patient", "asserter"]
}, {
"code": "Encounter",
"param": ["patient", "subject"]
}, {
"code": "MedicationRequest",
"param": ["subject"]
}, {
"code": "AllergyIntolerance",
"param": ["patient", "recorder"]
}, {
"code": "Procedure",
"param": ["patient", "performer"]
}, {
"code": "ImagingStudy",
"param": ["patient"]
}, {
"code": "DiagnosticReport",
"param": ["subject"]
}, {
"code": "AuditEvent",
"param": ["patient"]
}]
} Pièges courants
- Définir un compartiment custom non standard — la spec liste 5 codes valides : Patient, Encounter, RelatedPerson, Practitioner, Device. Custom = non interopérable.
- Paramètres
paraminexistants — chaque param doit exister comme SearchParameter de la ressource cible. - Confondre
search=trueet l'implémentation —search=trueannonce la capacité ; le serveur doit l'implémenter (souvent oublié). - Pas d'
$everything—GET /Patient/123/$everythingdépend du compartiment Patient ; sans CompartmentDefinition, indéterminé. - Versionnage de CompartmentDefinition — la spec FHIR évolue, les compartiments aussi. Garder en synchro avec la version FHIR du serveur.
Ressources liées
- SearchParameter — paramètres utilisés.
- CapabilityStatement — déclare les compartiments supportés.
- OperationDefinition —
$everythingopère sur un compartiment. - AuditEvent — souvent indexé par compartiment Patient pour les exports HIPAA.