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.

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 startend, 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 :

ChampTypeCardinalitéRôle
identifierIdentifier[]0..*Identifiants externes du créneau.
serviceCategoryCodeableConcept[]0..*Catégorie globale du service offert sur ce Slot. Hérite typiquement du Schedule parent.
serviceTypeCodeableReference[]0..*Type de service précis (premier rendez-vous, suivi, urgence…).
specialtyCodeableConcept[]0..*Spécialité médicale (SNOMED CT).
appointmentTypeCodeableConcept[]0..*Type d'Appointment éligible (WALKIN, ROUTINE, EMERGENCY… — v2-0276).
scheduleReference(Schedule)1..1Référence obligatoire au Schedule parent.
statuscode1..1État du créneau. Modifier.
startinstant1..1Datetime de début du Slot (précision seconde + timezone obligatoire).
endinstant1..1Datetime de fin du Slot.
overbookedboolean0..1Indique qu'un Slot autorise la surréservation (deux Appointment peuvent référencer le même Slot).
commentstring0..1Notes lisibles à l'usage du secrétariat / de l'app.

Statuts du créneau

Le code status est obligatoire. ValueSet officiel SlotStatus, binding Required :

CodeSens
busyLe créneau est occupé : il a déjà été réservé par un ou plusieurs Appointment.
freeLe créneau est libre : l'app cliente peut proposer ce créneau à la réservation.
busy-unavailableLe 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-tentativeLe créneau a une réservation provisoire — un Appointment en pending ou proposed.
entered-in-errorSlot 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 ».

json slot-example.json
{
  "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 :

  • schedule est en cardinalité 1..1 — un Slot orphelin n'existe pas : il appartient toujours à un Schedule.
  • Les champs serviceCategory, serviceType, specialty sont 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 »).
  • appointmentType contraint le type d'Appointment qui peut consommer ce Slot — utile pour réserver une bande horaire aux nouveaux patients.
  • status est free : 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..1 obligatoire. 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 booked qui référence un Slot free est 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 busy sans Appointment — l'inverse : un Slot marqué occupé sans qu'aucun Appointment ne le référence. Cas légitime uniquement avec status=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:00 est rejeté.
  • overbooked=true mais status=busy — incohérence sémantique. Un Slot surréservé ne devrait pas basculer en busy tant qu'il accepte des réservations additionnelles.

Ressources liées

Voir aussi : l'index FHIR R5.