Système de prise de rendez-vous simplifié
Système basé sur Laravel Zap pour la gestion des disponibilités, avec génération automatique de créneaux et gestion simplifiée des plannings.
Prendre rendez-vous
Concept du système
Architecture simplifiée
Le système utilise Laravel Zap comme moteur de gestion des disponibilités. Au lieu de créer manuellement chaque créneau, le système génère automatiquement les créneaux disponibles à partir de plages horaires définies.
- Horaires de travail : Définition d'une plage horaire continue (ex: 09:00-17:00) avec paramètres de division
- Génération automatique : Les créneaux sont générés dynamiquement via
getBookableSlots() - Gestion des pauses : Les pauses bloquent automatiquement les créneaux dans les horaires de travail
- Modèle Appointment : Wrapper léger autour des schedules Zap pour les données spécifiques
Gestion des plannings
Interface simplifiée en 3 sections pour gérer les disponibilités.
- 1. Horaires de travail : Jours, heures, durée créneaux, buffer
- 2. Heures de pause : Pauses récurrentes (ex: déjeuner)
- 3. Périodes d'inactivité : Dates spécifiques bloquées
Génération automatique
Les créneaux sont générés dynamiquement à partir des paramètres définis.
- • Division automatique selon la durée
- • Application du buffer entre créneaux
- • Exclusion des pauses et périodes bloquées
- • Filtrage des créneaux passés
Flux utilisateur
Processus simplifié de prise de rendez-vous.
- Sélection de l'agent et de la date
- Affichage des créneaux générés
- Ouverture de la modale
- Sélection du service
- Confirmation et paiement
Types de schedules
Trois types de schedules Zap utilisés dans le système.
- AVAILABILITY : Horaires de travail
- BLOCKED : Pauses et inactivités
- APPOINTMENT : Rendez-vous réservés
Modèle Appointment
Wrapper léger autour des schedules Zap.
- • Stocke les données spécifiques (statut, message, etc.)
- • Délègue les infos de date/heure au Schedule
- • Accesseurs pour date, start_time, end_time
- • Relation avec Invoice pour la facturation
Administration
Interface Filament pour gérer les rendez-vous.
- • Liste et édition des rendez-vous
- • Gestion des statuts
- • Visualisation des créneaux
Détails techniques
Architecture du système
1. Gestion des plannings (Admin)
app/Livewire/Admin/ManageSchedules.php
- Section 1 - Horaires de travail : Crée un schedule AVAILABILITY récurrent avec une plage horaire continue
- Section 2 - Heures de pause : Crée un schedule BLOCKED récurrent pour bloquer des créneaux
- Section 3 - Périodes d'inactivité : Crée des schedules BLOCKED pour des dates spécifiques
Les paramètres slot_duration et slot_buffer sont stockés dans les métadonnées du schedule.
2. Génération des créneaux (Public)
app/Livewire/Appointments/AppointmentPublicPage.php
- Utilise
getBookableSlots($date, $duration, $buffer)sur le modèle User - Récupère les paramètres depuis les métadonnées du schedule
- Filtre les créneaux passés et non disponibles
- Affiche les créneaux générés dynamiquement
3. Réservation (Modal)
app/Livewire/Appointments/AppointmentModal.php
- Crée un schedule APPOINTMENT via
CreateAppointmentWithZap - Crée le modèle Appointment comme wrapper
- Gère la facturation via Invoice
Modèles et relations
Zap\Models\Schedule
- AVAILABILITY : Horaires de travail récurrents (nom: "Office Hours")
- BLOCKED : Pauses récurrentes (nom: "Break Hours") ou périodes d'inactivité
- APPOINTMENT : Rendez-vous réservés (créés lors de la réservation)
- Métadonnées :
slot_duration,slot_buffer
App\Specifics\Appointments\Models\Appointment
- Wrapper léger autour du Schedule APPOINTMENT
- Stocke : statut, type, messages, facture
- Accesseurs :
date,start_time,end_time - Relations :
schedule(),period(),invoice()
App\Models\User
- Implémente
Schedulablede Zap - Méthode
getBookableSlots($date, $duration, $buffer)fournie par Zap - Génère automatiquement les créneaux en tenant compte des schedules AVAILABILITY, BLOCKED et APPOINTMENT
Exemples de code
1. Création des horaires de travail :
Zap::for($doctor)
->named('Office Hours')
->availability()
->from(now()->toDateString())
->weekly(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'])
->addPeriod('09:00', '17:00')
->withMetadata([
'slot_duration' => 60, // Durée des créneaux en minutes
'slot_buffer' => 15, // Temps entre les RDV en minutes
])
->save();
2. Génération des créneaux disponibles :
$slots = $doctor->getBookableSlots('2025-01-15', 60, 15);
// Retourne un tableau de créneaux :
// [
// ['start_time' => '09:00', 'end_time' => '10:00', 'is_available' => true],
// ['start_time' => '10:15', 'end_time' => '11:15', 'is_available' => true],
// ...
// ]
3. Création d'un rendez-vous :
$schedule = Zap::for($doctor)
->named('Appointment - ' . $patient->name)
->appointment()
->from($date)
->addPeriod($startTime, $endTime)
->withMetadata(['patient_id' => $patient->id])
->noOverlap() // Empêche les conflits
->save();
$appointment = Appointment::create([
'user_id' => $patient->id,
'schedule_id' => $schedule->id,
'schedule_period_id' => $schedule->periods()->first()->id,
'status' => AppointmentStatus::PENDING,
]);
Flux de données
1. Configuration (Admin)
L'admin définit les horaires de travail (09:00-17:00, lundi-vendredi) avec durée de créneaux (60 min) et buffer (15 min). Ces paramètres sont stockés dans les métadonnées du schedule AVAILABILITY.
2. Génération (Public)
Quand un utilisateur sélectionne une date, le système appelle getBookableSlots()
avec les paramètres du schedule. Zap génère automatiquement les créneaux (09:00-10:00, 10:15-11:15, etc.)
en excluant les pauses et les rendez-vous existants.
3. Réservation (Modal)
Lors de la réservation, un schedule APPOINTMENT est créé pour bloquer le créneau. Le modèle Appointment est créé comme wrapper pour stocker les données spécifiques (statut, facture, etc.).
Avantages de cette approche
- Simplicité : Pas besoin de créer manuellement chaque créneau, juste définir les plages horaires
- Flexibilité : Modification des paramètres (durée, buffer) sans recréer tous les créneaux
- Performance : Génération à la volée uniquement quand nécessaire
- Cohérence : Zap gère automatiquement les conflits et les chevauchements
- Maintenabilité : Code simplifié, moins de logique métier à maintenir
Prêt à utiliser le système ?
Le système de rendez-vous est entièrement fonctionnel avec une gestion simplifiée des plannings et une génération automatique des créneaux.