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.

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

ChampTypeCardinalitéRôle
urluri1..1Obligatoire. URL canonique.
identifierIdentifier[]0..*Identifiants externes.
versionstring0..1Version.
namestring1..1Obligatoire. Nom machine.
titlestring0..1Titre lisible.
statuscode1..1Obligatoire. draft, active, retired, unknown.
experimentalboolean0..1Si expérimental.
datedateTime0..1Date.
publisherstring0..1Éditeur.
descriptionmarkdown0..1Description.
useContextUsageContext[]0..*Contexte d'usage.
purposemarkdown0..1Objectif.
codecode1..1Obligatoire. Code compartiment : Patient, Encounter, RelatedPerson, Practitioner, Device.
searchboolean1..1Obligatoire. Si le serveur supporte la recherche par compartiment.
resourceBackboneElement[]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 :

json compartmentdefinition-patient.json
{
  "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 param inexistants — chaque param doit exister comme SearchParameter de la ressource cible.
  • Confondre search=true et l'implémentationsearch=true annonce la capacité ; le serveur doit l'implémenter (souvent oublié).
  • Pas d'$everythingGET /Patient/123/$everything dé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