Documentation — Réservation / Créneaux
Réservation de ressources partagées (salles de réunion) : modèle de données, règles de conflit et intégration calendrier.
Modèle de données
Trois entités. Une ressource décrit ce qui se réserve (capacité, équipements). Un créneau est une unité de temps réservable — ici un pas d'1 h entre 09:00 et 18:00, du lundi au vendredi, soit 45 créneaux par ressource et par semaine. Une réservation pose un titre, un organisateur et une durée (1 ou 2 créneaux consécutifs) sur une ressource.
// Ressource
{
"id": "hugo",
"nom": "Salle Hugo",
"capacite": 8,
"equipements": ["Écran", "Visio"]
}
// Créneau (implicite : grille jour × heure)
{ "jour": "Lundi 15", "debut": "09:00", "fin": "10:00" }
// Réservation
{
"id": "rsv-1",
"ressourceId": "hugo",
"jour": 0, // 0 = Lundi … 4 = Vendredi
"heure": 9, // créneau de départ (09:00)
"duree": 2, // en heures (1 ou 2)
"titre": "Comité de direction",
"organisateur": "Claire Morel",
"participants": 7
}Règles de conflit
- Unicité du créneau — une case (ressource × jour × heure) ne peut porter qu'une seule réservation : seules les cases libres sont cliquables pour réserver.
- Durée de 2 h — la réservation occupe deux créneaux consécutifs ; elle est refusée (message d'erreur dans le modal) si le créneau suivant est déjà occupé ou s'il dépasse 18:00.
- Annulation — seules vos propres réservations sont annulables, après confirmation explicite (
bpm.confirmModal) ; tous les créneaux occupés sont alors libérés. - Lecture seule — les réservations des autres collaborateurs sont consultables (titre, organisateur, participants) mais jamais modifiables.
Indicateurs
Le taux d'occupation rapporte le nombre d'heures réservées de la salle affichée aux 45 créneaux de la semaine. « Réservations cette semaine » et « Salle la plus demandée » agrègent l'ensemble des ressources. Les trois indicateurs sont recalculés à chaque réservation ou annulation.
Intégration calendrier
Le simulateur fonctionne en local (état React seedé). En production : persister ressources et réservations (tables resources / bookings avec contrainte d'exclusion sur l'intervalle ressource × plage horaire), publier chaque réservation comme événement dans l'agenda de l'organisateur (invitation aux participants, salle en tant que ressource invitée) et synchroniser les annulations dans les deux sens. Le module Calendrier fournit la vue semaine correspondante côté agenda.