Subscription — Abonnements FHIR temps réel
R5 a réécrit Subscription autour du concept de topic. Plus de critères de recherche en clair, mais des SubscriptionTopic réutilisables — pour des notifications fiables, déclaratives et auditables.
Objet de la ressource
Subscription décrit un abonnement à un flux d'événements FHIR : création, mise à jour ou suppression de ressources matchant un topic. R5 a remplacé les anciens criteria R4 (chaîne de search) par des SubscriptionTopic référencés via canonical : les topics sont définis une fois côté serveur ou dans un IG, et réutilisés par chaque Subscription.
Le serveur, lorsqu'un événement matche un Subscription actif, envoie une notification
par le canal demandé (channelType) : REST hook (webhook), email,
SMS, WebSocket, message FHIR.
Champs clés
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
status | code | 1..1 | Obligatoire. requested | active | error | off | entered-in-error. |
topic | canonical(SubscriptionTopic) | 1..1 | Obligatoire. Topic auquel s'abonner. |
reason | string | 0..1 | Motif lisible humain. |
end | instant | 0..1 | Date d'expiration. |
managingEntity | Reference(CareTeam | HealthcareService | Organization | RelatedPerson | Patient | Practitioner | PractitionerRole) | 0..1 | Entité responsable du Subscription. |
contact | ContactPoint[] | 0..* | Contacts en cas d'erreur. |
filterBy | BackboneElement[] | 0..* | Filtres additionnels sur le topic. |
channelType | Coding | 1..1 | Obligatoire. Canal de livraison. |
endpoint | url | 0..1 | URL ou adresse cible. |
parameter | BackboneElement[] | 0..* | Paramètres du canal (en-têtes HTTP, etc.). |
heartbeatPeriod | unsignedInt | 0..1 | Période heartbeat (sec). |
timeout | unsignedInt | 0..1 | Timeout livraison (sec). |
contentType | code | 0..1 | MIME type du payload. |
content | code | 0..1 | empty, id-only, full-resource. |
maxCount | positiveInt | 0..1 | Nombre max d'événements par notification. |
Canaux supportés
rest-hook— POST HTTPS versendpoint. Le plus utilisé.websocket— connexion WebSocket persistante.email— envoi e-mail à l'adresseendpoint.sms— SMS au numéroendpoint.message— Bundle FHIRtype=messageauendpoint.
Exemple JSON
Abonnement aux admissions du service Cardiologie, livraison par REST hook avec Bearer token :
{
"resourceType": "Subscription",
"id": "admission-monitor",
"status": "active",
"topic": "http://example.org/SubscriptionTopic/admission",
"reason": "Suivi des admissions du service Cardiologie en temps réel",
"end": "2026-12-31T23:59:59Z",
"managingEntity": { "reference": "Organization/hospital-1" },
"contact": [{
"system": "email",
"value": "ops@hospital-1.example.org"
}],
"filterBy": [{
"resourceType": "Encounter",
"filterParameter": "class",
"comparator": "eq",
"value": "IMP"
}, {
"resourceType": "Encounter",
"filterParameter": "service-provider",
"comparator": "eq",
"value": "Organization/cardiology-dept"
}],
"channelType": {
"system": "http://terminology.hl7.org/CodeSystem/subscription-channel-type",
"code": "rest-hook"
},
"endpoint": "https://app.example.org/fhir/subscriptions/notify",
"parameter": [{
"name": "Authorization",
"value": "Bearer eyJhbGciOiJSUzI1NiIs..."
}],
"heartbeatPeriod": 60,
"timeout": 30,
"contentType": "application/fhir+json",
"content": "id-only",
"maxCount": 20
} Pièges courants
- Pas de
topic— R5 exige un canonical SubscriptionTopic. Les anciennescriteriaR4 ne sont plus supportées sans backport. - Endpoint non-HTTPS — fortement déconseillé : les notifications transportent des données patient.
- Pas de
contact— si l'endpoint cesse de répondre, le serveur passe la Subscription enstatus=erroret tente de notifiercontact[]. - Volume non maîtrisé — sans
maxCountetfilterBystricts, une Subscription peut générer des milliers de notifications/heure. content=full-resourcesur données sensibles — préférerid-onlyet laisser le client GET la ressource via OAuth pour traçabilité.
Ressources liées
- SubscriptionTopic — définition du topic abonné.
- SubscriptionStatus — état d'une livraison (handshake, heartbeat, event-notification).
- Bundle — format des notifications (
type=subscription-notification). - CapabilityStatement — déclare les canaux supportés.