MessageHeader — En-tête de routage messaging
L'équivalent FHIR du segment MSH de HL7 v2. Toujours en première position d'un Bundle
de type message, il porte émetteur, destinataire, événement et données
de routage.
Objet de la ressource
Le messaging FHIR est l'un des quatre paradigmes d'interopérabilité (avec REST,
documents, services). Il consiste à transporter dans un Bundle de type
message un événement métier — typiquement un événement clinique ou
administratif — depuis un système émetteur vers un récepteur, avec acquittement
asynchrone.
MessageHeader est obligatoirement la première entry de ce Bundle. Il
porte la sémantique de routage : code d'événement, source, destination, sujet
(focus), raison, et éventuellement la réponse asynchrone à un message
précédent.
Champs clés
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
event[x] | Coding | canonical(MessageDefinition) | 1..1 | Obligatoire. Code d'événement (équivalent MSH-9). |
destination | BackboneElement[] | 0..* | Récepteur(s) du message. |
destination.endpointUrl | url | 0..1 | URL FHIR du récepteur. |
destination.receiver | Reference(Organization | Device | Practitioner | PractitionerRole) | 0..1 | Organisation/device récepteur. |
sender | Reference(Practitioner | PractitionerRole | Organization) | 0..1 | Émetteur logique. |
author | Reference(Practitioner | PractitionerRole | Device | Organization) | 0..1 | Auteur (clinicien à l'origine de l'événement). |
source | BackboneElement | 1..1 | Obligatoire. Système source technique. |
source.endpointUrl | url | 1..1 | URL technique de l'émetteur. |
responsible | Reference(Practitioner | PractitionerRole | Organization) | 0..1 | Responsable légal du contenu. |
reason | CodeableConcept | 0..1 | Raison du message (ex : admit, transfer). |
response | BackboneElement | 0..1 | Pour les messages de réponse : ack de l'original. |
response.identifier | Identifier | 1..1 | ID du message acquitté. |
response.code | code | 1..1 | ok | transient-error | fatal-error. |
response.details | Reference(OperationOutcome) | 0..1 | Détail d'erreur. |
focus | Reference(Any)[] | 0..* | Ressources concernées par l'événement (Patient, Encounter…). |
definition | canonical(MessageDefinition) | 0..1 | MessageDefinition qui décrit cet événement. |
Pattern Messaging FHIR
Le flot type d'un échange messaging FHIR :
- Le système A construit un Bundle
type=messageavec MessageHeader en première position et les ressources cliniques en suivantes. - A POST le Bundle vers
[base]/$process-messagedu récepteur B. - B retourne soit :
- Synchrone : un Bundle message-response immédiat avec MessageHeader
response.code=ok. - Asynchrone : un 202 Accepted, puis plus tard B POST un Bundle réponse vers l'URL
source.endpointUrlde A.
- Synchrone : un Bundle message-response immédiat avec MessageHeader
Exemple JSON
Un MessageHeader pour notifier l'admission d'un patient (admin-notify),
avec un Encounter en focus :
{
"resourceType": "MessageHeader",
"id": "example",
"eventCoding": {
"system": "http://example.org/fhir/message-events",
"code": "admin-notify"
},
"destination": [{
"name": "PMS",
"endpointUrl": "https://pms.example.org/fhir/messaging",
"receiver": { "reference": "Organization/pms-org" }
}],
"sender": { "reference": "Organization/hospital-1" },
"author": { "reference": "Practitioner/dr-jones" },
"source": {
"name": "HIS",
"software": "Acme HIS v3.4",
"version": "3.4.1",
"endpointUrl": "https://hospital-1.example.org/fhir/messaging"
},
"responsible": { "reference": "Organization/hospital-1" },
"reason": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/message-reasons-encounter",
"code": "admit"
}]
},
"focus": [{ "reference": "Encounter/example" }]
} Pièges courants
- MessageHeader pas en première position — un Bundle
type=messagedoit avoir MessageHeader enentry[0].resource. Sinon rejet. - Pas de
source.endpointUrl— sans URL technique de retour, l'acquittement asynchrone est impossible. event[x]non typé — le code d'événement doit être typé par un Coding ou un canonical MessageDefinition.focusnon résolvable — toute Reference dansfocusdoit être présente dans le même Bundle.- Mélanger REST et messaging — le pattern messaging est asynchrone et orienté événement. Ne pas l'utiliser pour des CRUD courants : préférer le REST.
Ressources liées
- Bundle — enveloppe obligatoire
type=message. - MessageDefinition — décrit l'événement et le contenu attendu.
- OperationOutcome — détails d'erreur dans
response.details. - HL7 v2 ADT^A01 — équivalent legacy pipe-delimited.