Slot — Créneau de réservation
La brique atomique du scheduling FHIR. Un Slot est un intervalle de temps dans un
Schedule, avec un statut free / busy et la possibilité
d'être consommé par un Appointment.
Objet de la ressource
Slot représente un intervalle de temps dans un Schedule pouvant être réservé
pour un Appointment. C'est la granularité minimale du modèle FHIR : un
Slot porte une plage start–end, un statut, et une référence
au Schedule parent. Un Appointment peut consommer un Slot unique (15 min de
consultation) ou plusieurs Slots consécutifs (une intervention de 90 min consomme six
Slots de 15 min).
Slot fonctionne en miroir étroit avec Schedule
(le conteneur) et Appointment
(la réservation qui le consomme). La règle de cohérence cruciale : dès qu'un
Appointment passe en booked, tous les Slot qu'il référence doivent passer
en busy. Si l'Appointment est annulé, les Slot reviennent à
free.
Champs clés
La StructureDefinition R5 publie onze éléments de premier niveau :
| Champ | Type | Cardinalité | Rôle |
|---|---|---|---|
identifier | Identifier[] | 0..* | Identifiants externes du créneau. |
serviceCategory | CodeableConcept[] | 0..* | Catégorie globale du service offert sur ce Slot. Hérite typiquement du Schedule parent. |
serviceType | CodeableReference[] | 0..* | Type de service précis (premier rendez-vous, suivi, urgence…). |
specialty | CodeableConcept[] | 0..* | Spécialité médicale (SNOMED CT). |
appointmentType | CodeableConcept[] | 0..* | Type d'Appointment éligible (WALKIN, ROUTINE, EMERGENCY… — v2-0276). |
schedule | Reference(Schedule) | 1..1 | Référence obligatoire au Schedule parent. |
status | code | 1..1 | État du créneau. Modifier. |
start | instant | 1..1 | Datetime de début du Slot (précision seconde + timezone obligatoire). |
end | instant | 1..1 | Datetime de fin du Slot. |
overbooked | boolean | 0..1 | Indique qu'un Slot autorise la surréservation (deux Appointment peuvent référencer le même Slot). |
comment | string | 0..1 | Notes lisibles à l'usage du secrétariat / de l'app. |
Statuts du créneau
Le code status est obligatoire. ValueSet officiel
SlotStatus, binding Required :
| Code | Sens |
|---|---|
busy | Le créneau est occupé : il a déjà été réservé par un ou plusieurs Appointment. |
free | Le créneau est libre : l'app cliente peut proposer ce créneau à la réservation. |
busy-unavailable | Le créneau ne peut pas être réservé — congé, pause déjeuner, fermeture exceptionnelle. Distinct de busy (qui implique qu'il y a un Appointment). |
busy-tentative | Le créneau a une réservation provisoire — un Appointment en pending ou proposed. |
entered-in-error | Slot créé par erreur. À ignorer. |
Exemple JSON
Créneau libre de 15 minutes dans le Schedule du Dr Adam Careful, le 22 mai 2026 à 09:15 (heure de Paris). Catégorie « General Practice », type « Walk-in ».
{
"resourceType": "Slot",
"id": "example",
"identifier": [{
"system": "http://example.org/identifiers/slots",
"value": "123"
}],
"serviceCategory": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/service-category",
"code": "17",
"display": "General Practice"
}]
}],
"serviceType": [{
"concept": {
"coding": [{
"system": "http://example.org/service-type",
"code": "57",
"display": "Immunization"
}]
}
}],
"appointmentType": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v2-0276",
"code": "WALKIN",
"display": "A previously unscheduled walk-in visit"
}]
}],
"schedule": { "reference": "Schedule/example" },
"status": "free",
"start": "2026-05-22T09:15:00+02:00",
"end": "2026-05-22T09:30:00+02:00",
"comment": "Créneau de 15 minutes — premier RDV de la matinée."
} À noter dans cet exemple :
scheduleest en cardinalité1..1— un Slot orphelin n'existe pas : il appartient toujours à un Schedule.- Les champs
serviceCategory,serviceType,specialtysont en doublon avec le Schedule parent — leur présence ici permet d'indexer finement (par exemple un Schedule « Médecine générale » qui ouvre quelques Slots à vocation « Vaccination »). appointmentTypecontraint le type d'Appointment qui peut consommer ce Slot — utile pour réserver une bande horaire aux nouveaux patients.statusestfree: l'app patient peut proposer ce créneau.
Recherche d'un créneau
Quelques requêtes typiques d'une app de prise de rendez-vous :
GET /Slot?schedule=Schedule/example&status=free&start=ge2026-05-22— créneaux libres d'un Schedule donné à partir d'une date.GET /Slot?schedule.actor=Practitioner/example&status=free— créneaux libres tous Schedules confondus pour un praticien (chaînage de recherche FHIR).GET /Slot?service-type=57&specialty=394814009&status=free— recherche par type de service et spécialité, indépendante du praticien.GET /Slot?_count=20&_sort=start&status=free&start=ge2026-05-22&start=lt2026-05-29— pagination + tri + fenêtre temporelle d'une semaine.
Les profils Argonaut Scheduling et US Core Scheduling encapsulent ces recherches dans
l'opération $find exposée à la racine du serveur ou sur Schedule.
Pièges courants
- Slot sans
schedule— cardinalité1..1obligatoire. Refusé par le validateur. - Slot dont
end<start— invariant slt-1 : le moment de fin doit être postérieur au moment de début. Erreur silencieuse dans certains serveurs. - Slot et Appointment désynchronisés — un Appointment
bookedqui référence un Slotfreeest une incohérence métier. La synchronisation est à la charge du serveur — c'est typiquement implémenté par un trigger en base ou un PreCreate hook FHIR. - Slot
busysans Appointment — l'inverse : un Slot marqué occupé sans qu'aucun Appointment ne le référence. Cas légitime uniquement avecstatus=busy-unavailable(pause, congé). - Chevauchements de Slots — FHIR n'interdit pas deux Slots qui se chevauchent dans le temps. Cas légitime pour modéliser un binôme (« deux soignants sur la même heure ») mais à éviter quand on cherche à modéliser un agenda mono-praticien.
- Timezone manquante — type FHIR
instant: l'offset est obligatoire.2026-05-22T09:15:00est rejeté. overbooked=truemaisstatus=busy— incohérence sémantique. Un Slot surréservé ne devrait pas basculer enbusytant qu'il accepte des réservations additionnelles.
Ressources liées
- Schedule — le conteneur parent du Slot.
- Appointment — la réservation qui consomme un ou plusieurs Slots.
- Practitioner, PractitionerRole, Location, Device — les acteurs du Schedule parent.
Voir aussi : l'index FHIR R5.