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.

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

ChampTypeCardinalitéRôle
statuscode1..1Obligatoire. requested | active | error | off | entered-in-error.
topiccanonical(SubscriptionTopic)1..1Obligatoire. Topic auquel s'abonner.
reasonstring0..1Motif lisible humain.
endinstant0..1Date d'expiration.
managingEntityReference(CareTeam | HealthcareService | Organization | RelatedPerson | Patient | Practitioner | PractitionerRole)0..1Entité responsable du Subscription.
contactContactPoint[]0..*Contacts en cas d'erreur.
filterByBackboneElement[]0..*Filtres additionnels sur le topic.
channelTypeCoding1..1Obligatoire. Canal de livraison.
endpointurl0..1URL ou adresse cible.
parameterBackboneElement[]0..*Paramètres du canal (en-têtes HTTP, etc.).
heartbeatPeriodunsignedInt0..1Période heartbeat (sec).
timeoutunsignedInt0..1Timeout livraison (sec).
contentTypecode0..1MIME type du payload.
contentcode0..1empty, id-only, full-resource.
maxCountpositiveInt0..1Nombre max d'événements par notification.

Canaux supportés

  • rest-hook — POST HTTPS vers endpoint. Le plus utilisé.
  • websocket — connexion WebSocket persistante.
  • email — envoi e-mail à l'adresse endpoint.
  • sms — SMS au numéro endpoint.
  • message — Bundle FHIR type=message au endpoint.

Exemple JSON

Abonnement aux admissions du service Cardiologie, livraison par REST hook avec Bearer token :

json subscription-admission.json
{
  "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 anciennes criteria R4 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 en status=error et tente de notifier contact[].
  • Volume non maîtrisé — sans maxCount et filterBy stricts, une Subscription peut générer des milliers de notifications/heure.
  • content=full-resource sur données sensibles — préférer id-only et 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.