Service d'Accès aux Soins
1.2.0 - ci-build
Service d'Accès aux Soins - version de développement local (v1.2.0) construite par les outils de publication FHIR (HL7® FHIR® Standard). Voir le répertoire des versions publiées
Les échanges avec les éditeurs de LRM se font au travers d'une liaison avec le Hub Santé. La plateforme numérique du SAS, ainsi que les éditeurs de LRM sont raccordés au Hub.
Le schéma ci-dessous illustre l'échange de données entre la PTF SAS et les éditeurs de LRM
Le protocole utilisé pour la connexion des applications (PTF SAS et éditeurs de LRM) avec le Hub est le protocole AMQP, en version 0-9-1.
Les messages seront transmis sous la forme d'un fichier json contenant les différentes données permettant aux LRM de traiter le message.
Les messages sont transmis avec un entête permettant au Hub de router le message vers le bon SAMU et la solution LRM associée au SAS de destination. Les règles de nommage et de routage associées ainsi que l’enveloppe EDXL-DE permettant de porter ces informations d’adressage dans les messages sont décrites ci-après.
Le mode de communication est basé sur un mode d'échange point à point (PTP) via des files de messages.
Chaque client (Plateforme numérique SAS et les solutions de LRM) dispose de 3 files d’écoute selon la typologie des messages reçus :
La structuration du nom des files est {𝑖𝑑𝑒𝑛𝑡𝑖𝑓𝑖𝑎𝑛𝑡𝐶𝑙𝑖𝑒𝑛𝑡}.{𝑡𝑦𝑝𝑜𝑙𝑜𝑔𝑖𝑒} donnant, par exemple, fr.health.samu001.message
En l'occurrence, les LRM écouteront sur leur file « message » et la plateforme SAS écoutera sur les files "ack" et "info".
Le schéma ci-dessous détaille cette cinématique d'échange entre les différents acteurs
Tous les messages transitant par l’intermédiaire du Hub Santé contiendront un entête de type "EDXL-DE" (cf. spécifications techniques (DST) du Hub Santé §3.4 et 3.4.3) dans lequel sera encapsulé le détail du message.
Le tableau ci-dessous précise les balises de l’enveloppe EDXL-DE qui doivent être envoyées et qui sont nécessaires au routage des messages.
| Élément | Champ | Type | Description | Commentaire / valeur |
|---|---|---|---|---|
| Entête EDXL-DE | distributionID | string | Identifiant unique du message attribué par l’expéditeur | Format <senderId>_<internalId> où <internalId> est un identifiant garanti unique |
| Entête EDXL-DE | senderID | string | Identifiant de l'émetteur | fr.health.ptfsas, fr.health.samuXXX |
| Entête EDXL-DE | dateTimeSent | Date time | Date et heure d'envoi du message | Ex : 2025-08-24T14:15:22+02:00 |
| Entête EDXL-DE | dateTimeExpires | Date time | Date et heure d'expiration du message : les données ne doivent pas être délivrées au-delà de cette date | Ex : 2025-08-24T14:19:22+02:00 |
| Entête EDXL-DE | distributionStatus | string | Statut du message | Valeur fixe : Actual |
| Entête EDXL-DE | distributionKind | string | Type du message | Report, Ack, Error |
| Entête EDXL-DE | descriptor.language | string | Langue du message échangé | Valeur fixe : fr-FR |
| Entête EDXL-DE | descriptor.explicitAddress.explicitAddressScheme | string | Identifiant du SI pilotant le Hub | Valeur fixe : Hubex |
| Entête EDXL-DE | descriptor.explicitAddress.explicitAddressValue | string | Identifiant du destinataire | fr.health.ptfsas, fr.health.samuXXX |
| Contenu | content.contentObject.JsonContent.embeddedJsonContent | json | Contenu du message json encapsulé dans l'entête | Fichier json contenant les données transmises |
Le contenu des messages transmis pourra également être encapsulé dans un entête RC-DE au sein de l’enveloppe EDXL-DE. L'entête RC-DE contient un nombre de champs communs à l'entête EDXL-DE, ce qui permet de rendre le message autoportant sans l'entête EDXL-DE selon le modèle et les balises précisées dans le tableau ci-dessous (cf spécifications du Hub Santé §3.4.5).
| Élément | Champ | Type | Description | Commentaire / valeur |
|---|---|---|---|---|
| Entête RC-DE | messageId | string | Identifiant du message interne. Identique au champ distributionID de l'enveloppe EDXL-DE |
Égal à distributionId du message initial dans le cas d'un acquittement |
| Entête RC-DE | sender.name | string | Identifiant de l'émetteur | fr.health.ptfsas, fr.health.samuXXX |
| Entête RC-DE | sender.URI | string | URL de l'émetteur | hubex:fr.health.ptfsas, hubex:fr.health.samuXXX, |
| Entête RC-DE | sentAt | Date time | Date et heure d'envoi du message | Ex : 2025-08-24T14:15:22+02:00 |
| Entête RC-DE | status | string | Statut du message | Valeur fixe : Actual |
| Entête RC-DE | kind | string | Type du message | Report, Ack |
| Entête RC-DE | recipient.name | string | Identifiant du SI pilotant le Hub | hubex:fr.health.ptfsas, hubex:fr.health.samuXXX |
| Entête RC-DE | recipient.URI | string | Identifiant du destinataire | fr.health.ptfsas, fr.health.samuXXX |
Le message de référence permet de faire référence à un message précédemment partagé (spécifications du Hub Santé §3.4.6). Il est utilisé en cas d'acquittement final, cf. ci-dessous.
Sa structure est la même que celle d'un message RC-DE, avec l'ajout d'un champ supplémentaire reference qui reprend le distributionId du message acquitté.
Le message contenant les informations de RDV pris par le régulateur pour le compte du patient est envoyé instantanément par la plateforme numérique SAS au HubSanté. Le message est transmis avec un entête de type "EDXL-DE" (cf Enveloppe EDXL-DE) encapsulant un entête de type RC-DE (cf Enveloppe RC-DE) et les contenus des messages au format Json (cf Données transmises au LRM).
Il s'agit d'un message où les champs distribution.kind (entête EDXL-DE) et kind (entête RC-DE) sont valorisés à Report.
Un acquittement technique sera transmis du Hub vers la plateforme SAS afin d'informer de la bonne prise en charge du message et de l'inscription dans sa file d'envoi (file « message » du LRM). Cette fonctionnalité est intégrée au protocole AMQ sous la forme de Consumer Acknowledgement (cf. spécifications du Hub Santé §3.3.1).
Les échanges entre le Hub Santé et la plateforme numérique SAS incluent également les acquittements de réception finale et la gestion des messages d’erreurs transmis par les éditeurs de LRM. Une fois le message intégré dans le système du client destinataire (Editeur LRM), ce dernier peut en informer la plateforme numérique SAS (transitant par le Hub) en lui envoyant un acquittement de réception finale sur un deuxième type de file dédié fr.health.ptfsas.𝑎𝑐k permettant de remonter les accusés de réception finale. Le cheminement est similaire au message envoyé mais pris en sens inverse.
Un troisième type de file, fr.health.ptfsas.𝑖𝑛𝑓𝑜, est mis en place pour remonter des informations et de potentielles erreurs aux émetteurs et destinataires des messages. A noter qu'il existe deux types d'erreur :
Il s'agit de messages où le champ distribution.kind est valorisé à Error (entête EDXL-DE, les messages d'erreur ne comportent pas d'entête RC-DE)
L'erreur sera présente dans le contenu du message json qui respecte le modèle suivant, cf. spécifications du Hub Santé, §3.4.7 :
| Champ | Description | Commentaire / valeur |
|---|---|---|
| errorCode | Code de l'erreur ayant conduit au rejet du message | Cf. tableau des erreurs ci-après |
| errorCause | Cause de l'erreur | La cause de l’erreur. Le distributionID de l’enveloppe EDXL-DE y est précisé si le message a pu être désérialisé, ainsi que des éléments plus précis suivant l’erreur relevée. |
| sourceMessage | Contenu du message rejeté | Contenu du message initial avec son entête |
A titre d'exemple, les codes d'erreur suivants pourront être envoyés du Hub vers la plateforme SAS :
| statusCode | statusString | description |
|---|---|---|
| 102 | UNRECOGNIZED_MESSAGE_FORMAT | Le message n’a pas pu être désérialisé. |
| 300 | INVALID_MESSAGE | Le message n’est pas conforme aux spécifications techniques (JSON Schema) |
| 400 | EXPIRED_MESSAGE_BEFORE_ROUTING | Le message n’a pas été reçu par son destinataire, il a expiré sur le Hub avant de lui être délivré. |
| 500 | DEAD_LETTERED_QUEUE | Le message n’a pas été reçu par son destinataire, il a expiré avant qu’il ne le dépile. |
Cet acquittement correspond à la validation auprès de l’émetteur (plateforme numérique SAS) de la bonne réception du message par le destinataire (Editeur LRM).
Le format des acquittements de réception finale est contenu dans une enveloppe de type "EDXL-DE" (cf Enveloppe EDXL-DE) et un message de type "RC-REF" (cf Message RC-REF)
En résumé, le message doit :
AckAckdistributionID)En cas d'erreur, un message est posté sur la file « info » de la plateforme SAS (cf. spécifications du Hub Santé 3.3.4). Le message est transmis avec un entête de type "EDXL-DE" (cf Enveloppe EDXL-DE) où distribution.kind est valorisé à Error, encapsulant le contenu du message json qui respecte le modèle suivant (cf. spécifications du Hub Santé 3.4.7) :
| Champ | Description | Commentaire |
|---|---|---|
| errorCode | Code de l'erreur ayant conduit au rejet du message | Cf. ci-après |
| errorCause | Cause de l'erreur | La cause de l’erreur. Le distributionID de l’enveloppe EDXL y est précisé si le message a pu être désérialisé, ainsi que des éléments plus précis suivant l’erreur relevée. |
| sourceMessage | Contenu du message rejeté | Contenu du message initial avec son entête |
Le LRM pourra envoyer des messages de type :
Lorsqu’un régulateur prend RDV pour un patient via la plateforme numérique SAS, celle-ci transmet un message de création de RDV qui suivra les modalités suivantes :
Le message json contenant les données et encapsulé dans l'entête EDXL-DE (et dans l'entête RC-DE) respecte le format suivant :
| ID | Objet | Balise | Description | Exemple | Cardinalité | Type |
|---|---|---|---|---|---|---|
| 1 | appointmentId | Identifiant technique unique du RDV | 1efc111e-ce11-1d11-a111-11c1f11c111e12348 | 1..1 | string | |
| 2 | method | Indique un message de création ou de modification du rendez-vous | createAppointment | 1..1 | string | |
| 3 | created | Date et heure de la prise de RDV | 2025-06-17T10:15:56+01:00 | 1..1 | datetime | |
| 4 | start | Date et heure de début du rendez-vous | 2025-06-17T14:00:00+01:00 | 1..1 | datetime | |
| 5 | end | Date et heure de fin du rendez-vous | 2025-06-17T14:20:00+01:00 | 0..1 | datetime | |
| 6 | status | Statut du rendez-vous | booked | 1..1 | string | |
| 7 | orientationCategory | Indique la catégorie de l’orientation SAS identifiée | SOS | 0..1 | string | |
| 8 | practitioner | Professionnel de santé | Représente le professionnel de santé associé au rendez-vous | 0..1 | practitioner | |
| 9 | practitioner | rppsId | Identifiant national (RPPS avec préfixe) du PS effecteur de soins | 810002909371 | 1..1 | string |
| 10 | practitioner | lastName | Nom du professionnel de santé | Dupont | 1..1 | string |
| 11 | practitioner | firstName | Prénom du professionnel de santé | Jean | 1..1 | string |
| 12 | practitioner | specialityCode | Code de la spécialité du professionnel de santé | SM54 (pour médecine générale) | 0..1 | string |
| 13 | practitioner | specialityUrl | Url de la terminologie utilisée pour la spécialité | https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale | 0..1 | string |
| 14 | practitioner | professionUrl | Url de la terminologie utilisée pour la profession | https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante | 0..1 | string |
| 15 | practitioner | professionCode | Code de la profession du professionnel de santé | 10 (pour médecin) | 0..1 | string |
| 16 | organization | Représente la structure du PS ou la structure associée au rendez-vous si le PS n'est pas connu | 0..1 | organization | ||
| 17 | organization | organizationId | Identifiant national de la structure (avec préfixe) | 334173748400020 | 1..1 | string |
| 18 | organization | name | Nom de la structure | SOS Médecins de Rennes | 1..1 | string |
| 19 | regulator | Représente le régulateur ayant pris le RDV | 1..1 | regulator | ||
| 20 | regulator | regulatorId | Identifiant associé au compte SAS du régulateur ayant pris le RDV | 3620100057/70326SR | 0..1 | string |
| 21 | regulator | regulatorName | Nom du régulateur ayant pris le RDV | Ricart | 1..1 | string |
| 22 | regulator | regulatorFirstname | Prénom du régulateur ayant pris le RDV | Pauline | 1..1 | string |
| 23 | regulator | regulatorEmail | Adresse email associée au compte SAS du régulateur ayant pris le RDV | pauline.ricart@ghsas.fr | 1..1 | string |
Cf. exemple ci-dessous de message de création
{
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "CreateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "booked",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
},
"regulator":{
"regulatorId": "3620100057/70326SR",
"regulatorName": "RICART",
"regulatorFirstname": "Pauline",
"regulatorEmail": "pauline.ricart@ghsas.fr"
}
}
}
S'agissant d'une création de message, le champ method est valorisé à `CreateAppointment'
La mise à jour des données du RDV peut porter sur chacun des éléments décrits avec modifications de données (dates du créneau, statut du RDV, etc.).ou bien ajout d'un objet (practitioner ou organization) et des attributs associés.
Le message transmis pour la mise à jour du RDV devra suivre les modalités suivantes :
Le fichier json encapsulé dans l'entête aura le champ method valorisé à UpdateAppointment et contiendra les données modifiées / ajoutées / supprimées par rapport au message de création (selon le format décrit au paragraphe précédent) afin que les données pour un même identifiant de RDV puissent être mises à jour
L’identifiant technique SAS du RDV (champ appointmentId) transmis sera stocké par la solution éditeur LRM pour identification du RDV sur lequel porte les mises à jour éventuelles.
En cas de réception d'un message de mise à jour sur un identifiant inconnu, la solution LRM devra pouvoir gérer le message en tant que création avec les données contenues dans le message à l'instant t.
Cf. exemple ci-dessous de message de modification
{
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "UpdateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "fulfilled",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
},
"regulator":{
"regulatorId": "3620100057/70326SR",
"regulatorName": "RICART",
"regulatorFirstname": "Pauline",
"regulatorEmail": "pauline.ricart@ghsas.fr"
}
}
}
Il n’y aura pas de message spécifique pour l’annulation d’un RDV. Une annulation de RDV est modélisée par un message de type « mise à jour du RDV » avec la modification du statut du RDV à « annulé ».
Cf. exemple ci-dessous de message d'annulation.
{
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "UpdateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "cancelled",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
},
"regulator":{
"regulatorId": "3620100057/70326SR",
"regulatorName": "RICART",
"regulatorFirstname": "Pauline",
"regulatorEmail": "pauline.ricart@ghsas.fr"
}
}
}
Cette section détaille les champs à utiliser afin de renseigner les différents éléments codifiés de la requête.
identifiant de la PTF SAS : Utilisé dans les entêtes EDXL-DE et RC-DE. Valeur fixe par environnement. Pour l'environnement de PROD, sera valorisé à fr.health.ptfsas. Pour un environnement hors PROD, la valeur sera fr.health.test.ptfsas.
appointmentId : Un identifiant technique unique par RDV est transmis. Cet ID est défini par la plateforme numérique SAS et peut prendre la forme d’un UUID par exemple. La solution éditeur devra s’appuyer sur cet ID pour la gestion des requêtes de mises à jour.
practitioner.rppsId : RPPS avec préfixe « 8 »
practitioner.specialtyCode : Code issu de la nomenclature des spécialités ordinales du NOS (https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale/)
practitioner.professionCode : Code issu de la nomenclature des professions de santé du NOS (https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante/)
organizationId : Identifiant unique propre à chaque structure de soins. Les champs sont valorisés comme suit : numéro du FINESS avec préfixe « 1 » ou numéro du SIRET avec préfixe « 3 »
regulatorId : Identifiant unique du régulateur ayant pris le RDV. Il s'agira uniquement d'un identifiant national "IDNPS"(identifiant présent sur la carte CPx du régulateur). En effet, certains régulateurs n’ayant pas encore d’identifiant national à date, un identifiant technique de type uuid est créé. Cet identifiant étant connu uniquement de la PTF SAS, il ne sera pas transmis dans le flux.
Exemple d'identifiant national : 3620100057/70326SR
Message PTF SAS -> SAMU 33
{
"distributionID": "fr.health.ptfsas_30c8e00d-68b2-4092-a4f2-a9cb19b416e9",
"senderID": "fr.health.ptfsas",
"dateTimeSent": "2025-10-28T17:05:54+01:00",
"dateTimeExpires": "2072-09-27T08:23:34+02:00",
"distributionStatus": "Actual",
"distributionKind": "Report",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.samu330"
}
},
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"messageId": "fr.health.ptfsas_30c8e00d-68b2-4092-a4f2-a9cb19b416e9",
"sender": {
"name": "fr.health.ptfsas",
"URI": "hubex:fr.health.ptfsas"
},
"sentAt": "2025-10-28T17:05:54+01:00",
"status": "Actual",
"kind": "Report",
"recipient": [
{
"name": "fr.health.samu330",
"URI": "hubex:fr.health.samu330"
}
],
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "CreateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "booked",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
}
}
}
}
}
}
]
}
Détail du message
{
//entête EDXL-DE
"distributionID": "fr.health.ptfsas_30c8e00d-68b2-4092-a4f2-a9cb19b416e9",
"senderID": "fr.health.ptfsas",
"dateTimeSent": "2025-10-28T17:05:54+01:00",
"dateTimeExpires": "2072-09-27T08:23:34+02:00",
"distributionStatus": "Actual",
"distributionKind": "Report",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.samu330"
}
},
"content": [
{
//contenu au format json
"jsonContent": {
"embeddedJsonContent": {
"message":
//entête RC-DE
{
"messageId": "fr.health.ptfsas_30c8e00d-68b2-4092-a4f2-a9cb19b416e9",
"sender": {
"name": "fr.health.ptfsas",
"URI": "hubex:fr.health.ptfsas"
},
"sentAt": "2025-10-28T17:05:54+01:00",
"status": "Actual",
"kind": "Report",
"recipient": [
{
"name": "fr.health.samu330",
"URI": "hubex:fr.health.samu330"
}
],
//données de RDV
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "CreateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "booked",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
}
}
}
}
}
}
]
}
Message acquittement final SAMU 33 -> PTF SAS
{
"distributionID": "fr.health.samu330_cf21c600-3bd2-49e6-8651-c97dac05d021",
"senderID": "fr.health.samu330",
"dateTimeSent": "2025-10-28T17:06:30+01:00",
"dateTimeExpires": "2072-09-27T08:23:34+02:00",
"distributionStatus": "Actual",
"distributionKind": "Ack",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.ptfsas"
}
},
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"messageId": "fr.health.samu330_cf21c600-3bd2-49e6-8651-c97dac05d021",
"sender": {
"name": "fr.health.samu330",
"URI": "hubex:fr.health.samu330"
},
"sentAt": "2025-10-28T17:06:30+01:00",
"kind": "Ack",
"status": "Actual",
"recipient": [
{
"name": "fr.health.ptfsas",
"URI": "hubex:fr.health.ptfsas"
}
],
"reference": {
"distributionID": "fr.health.ptfsas_30c8e00d-68b2-4092-a4f2-a9cb19b416e9"
}
}
}
}
}
]
}
Message d'erreur retourné par le Hub suite à un envoi PTF SAS -> SAMU 330
{
"distributionID": "fr.health.hub_29055e53-46e5-4a70-843c-335e7e058829",
"senderID": "fr.health.hub",
"dateTimeSent": "2025-10-29T14:37:15+00:00",
"dateTimeExpires": "2025-10-30T14:37:15+00:00",
"distributionStatus": "Actual",
"distributionKind": "Error",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.test.ptfsas"
}
},
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"error": {
"errorCode": {
"statusCode": 300,
"statusString": "INVALID_MESSAGE"
},
"errorCause": "Could not validate message against schema : errors occurred. \nIssues found on the $.content[0].jsonContent.embeddedJsonContent.message content: \n - appointment.orientationCategory: does not have a value in the enumeration [CPTS, MSP, CDS, SOS, PS, PDM]\n",
"sourceMessage": {
"distributionID": "fr.health.ptfsas_c461338a-97ea-41e5-b9fa-af87840890ff",
"distributionKind": "Report",
"senderID": "fr.health.ptfsas",
"dateTimeSent": "2025-10-29T15:37:15+01:00",
"distributionStatus": "Actual",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.samu330"
}
},
"dateTimeExpires": "2072-09-27T08:23:34+02:00",
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"messageId": "fr.health.ptfsas_c461338a-97ea-41e5-b9fa-af87840890ff",
"sender": {
"name": "fr.health.ptfsas",
"URI": "hubex:fr.health.ptfsas"
},
"sentAt": "2025-10-29T15:37:15+01:00",
"status": "Actual",
"kind": "Report",
"recipient": [
{
"name": "fr.health.samu330",
"URI": "hubex:fr.health.samu330"
}
],
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "CreateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "booked",
"orientationCategory": "Medecin",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
}
}
}
}
}
}
]
},
"referencedDistributionID": "fr.health.ptfsas_c461338a-97ea-41e5-b9fa-af87840890ff"
}
}
}
}
}
]
}
Dans ce cas, le type d'orientation est incorrect car il ne respecte pas la nomenclature établie.
Message d'erreur retourné par le LRM suite à un envoi PTF SAS -> SAMU 330
{
"distributionID": "fr.health.hub_cb0f6f14-6b57-4fb5-a635-97705c8d31e8",
"senderID": "fr.health.samu330",
"dateTimeSent": "2025-10-28T16:29:59+00:00",
"dateTimeExpires": "2025-10-29T16:29:59+00:00",
"distributionStatus": "Actual",
"distributionKind": "Error",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.ptfsas"
}
},
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"error": {
"errorCode": {
"statusCode": 409,
"statusString": "CONFLICT"
},
"errorCause": "Impossible de créer ce RDV. L'identifiant du RDV à créér '30c8e00d-68b2-4092-a4f2-a9cb19b416e9' existe déjà dans la solution",
"sourceMessage": {
"distributionID": "fr.health.ptfsas_44fce1e7-461e-4b15-91e2-b4168bed531e",
"distributionKind": "Report",
"senderID": "fr.health.ptfsas",
"dateTimeSent": "2025-10-28T17:29:59+01:00",
"distributionStatus": "Actual",
"descriptor": {
"language": "fr-FR",
"explicitAddress": {
"explicitAddressScheme": "hubex",
"explicitAddressValue": "fr.health.samu330"
}
},
"dateTimeExpires": "2072-09-27T08:23:34+02:00",
"content": [
{
"jsonContent": {
"embeddedJsonContent": {
"message": {
"messageId": "fr.health.ptfsas_44fce1e7-461e-4b15-91e2-b4168bed531e",
"sender": {
"name": "fr.health.ptfsas",
"URI": "hubex:fr.health.ptfsas"
},
"sentAt": "2025-10-28T17:29:59+01:00",
"status": "Actual",
"kind": "Report",
"recipient": [
{
"name": "fr.health.samu330",
"URI": "hubex:fr.health.samu330"
}
],
"appointment": {
"appointmentId": "2d2db05f-e2b0-4169-be8f-891806da2c74",
"method": "UpdateAppointment",
"created": "2025-06-17T10:15:00+02:00",
"status": "booked",
"orientationCategory": "PS",
"start": "2025-06-17T14:00:00+02:00",
"end": "2025-06-17T14:20:00+02:00",
"practitioner": {
"rppsId": "810005681340",
"lastName": "MOREL",
"firstName": "Didier",
"specialityCode": "SM54",
"specialityUrl": "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale",
"professionUrl": "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante",
"professionCode": "10"
}
}
}
}
}
}
]
},
"referencedDistributionID": "fr.health.ptfsas_44fce1e7-461e-4b15-91e2-b4168bed531e"
}
}
}
}
}
]
}
Divers évènements dans la plateforme numérique SAS peuvent déclencher de manière instantanée le flux. À titre d’exemple, une liste non exhaustive de ces évènements est présentée ci-dessous :
Le paragraphe ci-dessous détaille les différentes règles de gestions attendues par les éditeurs à la suite du déclenchement du flux et la transmission d’un message :