# Un système de rendez-vous multi-praticiens Elementor pour un cabinet médical

> Un cabinet de santé avait besoin d'une prise de rendez-vous par praticien, sans extension métier coûteuse. Retour sur une architecture construite avec les outils Elementor Pro déjà en place.

- Auteur : Clément Hadrot
- Publié le : 2025-01-16
- Mis à jour le : 2025-01-16
- Catégorie : Elementor
- URL : https://wpmoderne.dev.wordpress-developpement.fr/elementor/rendez-vous-multi-praticiens-elementor-sante/

## L’essentiel

- Chaque praticien est un post type distinct avec ses créneaux propres
- Le formulaire Elementor Pro filtre les disponibilités par praticien sélectionné
- Aucune donnée de santé n'est stockée, seulement des créneaux

Un cabinet regroupant quatre praticiens (deux kinésithérapeutes, une ostéopathe, un podologue) souhaitait un système de prise de rendez-vous en ligne directement sur son site, sans passer par une plateforme tierce facturée à l'utilisation et sans dépendre d'une extension métier de calendrier de rendez-vous, jugée trop coûteuse au vu du volume de rendez-vous du cabinet. Le cahier des charges excluait explicitement toute intégration Calendly, déjà écartée après un essai jugé trop rigide sur la gestion multi-praticiens.

Le défi technique principal ne tenait pas à la prise de rendez-vous en elle-même, plutôt bien gérée par le module de formulaires multi-étapes d'Elementor Pro, mais à la logique de disponibilité propre à chaque praticien, avec des plannings et des durées de consultation différentes selon la spécialité.

## Architecture retenue

Chaque praticien a été modélisé comme une entrée d'un post type personnalisé « Praticien », avec des champs ACF associés (spécialité, jours de disponibilité, durée de consultation par défaut, créneau de pause déjeuner). Une table personnalisée en base de données, créée via une simple requête `dbDelta` lors de l'activation du plugin maison du site, stocke les créneaux déjà réservés, associés à l'identifiant du praticien concerné.

### Le formulaire côté visiteur

Le formulaire multi-étapes natif d'Elementor Pro gère la première partie du parcours : sélection du praticien, puis de la spécialité si le praticien en propose plusieurs, avant d'afficher les créneaux disponibles. Cette dernière étape ne pouvait pas reposer sur un simple champ Elementor natif, puisque les créneaux affichés dépendent d'un calcul en temps réel croisant le planning du praticien et les réservations déjà enregistrées : elle a nécessité un point de terminaison REST personnalisé, interrogé en AJAX depuis un script lié au formulaire.

> L'essentiel à retenir : Chaque praticien est un post type distinct avec ses créneaux propres ; Le formulaire Elementor Pro filtre les disponibilités par praticien sélectionné ; Aucune donnée de santé n'est stockée, seulement des créneaux

## Le point sensible : aucune donnée de santé stockée

Un cabinet médical impose une vigilance particulière sur les données personnelles collectées. Le choix a été fait, dès la conception, de ne jamais demander ni stocker de motif de consultation ou toute autre information relevant du secret médical dans le formulaire de prise de rendez-vous en ligne. Seuls sont collectés : nom, prénom, téléphone, e-mail, praticien choisi et créneau. Le motif de visite, si le patient souhaite le préciser, reste géré par téléphone ou lors de la consultation elle-même, jamais via le formulaire du site.

- Formulaire Elementor Pro limité aux données de contact strictement nécessaires à la prise de rendez-vous.
- Aucun champ libre permettant de décrire un symptôme ou une pathologie.
- Confirmation par e-mail générée sans mention du motif de consultation, uniquement le praticien et le créneau retenu.
- Durée de conservation des rendez-vous passés limitée à douze mois, purgée automatiquement par une tâche planifiée WP-Cron.

## Gestion des conflits de créneaux

Deux patients ne doivent jamais pouvoir réserver le même créneau du même praticien simultanément. Le point de terminaison de réservation vérifie la disponibilité du créneau juste avant l'écriture en base, dans une transaction courte, et renvoie une erreur explicite si le créneau vient d'être pris entre l'affichage du formulaire et sa soumission, un cas rare mais réel constaté lors des tests de charge simulés avec plusieurs soumissions simultanées.

```
function reserver_creneau( $praticien_id, $date, $heure ) {
    global $wpdb;
    $table = $wpdb->prefix . 'creneaux_reserves';

    $existe = $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM {$table} WHERE praticien_id = %d AND date_rdv = %s AND heure_rdv = %s",
        $praticien_id, $date, $heure
    ) );

    if ( $existe > 0 ) {
        return new WP_Error( 'creneau_pris', 'Ce créneau vient d\'être réservé.' );
    }

    return $wpdb->insert( $table, [
        'praticien_id' => $praticien_id,
        'date_rdv'     => $date,
        'heure_rdv'    => $heure,
    ] );
}
```

> Un système de rendez-vous multi-praticiens n'est pas un formulaire compliqué, c'est un calcul de disponibilité qui se cache derrière un formulaire simple. La complexité mérite d'être traitée là où elle se trouve réellement.

## En résumé

Pour un cabinet médical de taille modeste, un système de rendez-vous multi-praticiens sur mesure, construit autour des formulaires Elementor Pro et d'un point de terminaison REST léger, offre une alternative crédible aux extensions métier onéreuses, à condition de traiter avec le sérieux nécessaire la question des données personnelles collectées et la logique de disponibilité par praticien, qui reste le cœur technique réel du projet.
