Skip to main content

Rendez-vous

Pour :ParentÉlèveEnseignant Niveaux :1er degré2nd degré

Les Rendez-vous sont disponibles en natif dans l'application mobile, ouverts depuis le lanceur « Mes apps » (famille Vie de l'établissement, comme sur le portail web). C'est le cas d'usage mobile par excellence : un parent demande un rendez-vous à un enseignant depuis son téléphone, et l'enseignant accepte ou refuse depuis le sien.

Mes rendez-vous

Deux onglets, alimentés par les états du module :

  • À venir — demandes en attente et rendez-vous acceptés, du plus proche au plus lointain ;
  • Historique — rendez-vous refusés ou annulés, du plus récent au plus ancien.

Chaque carte porte le jour et le créneau horaire, l'interlocuteur (« Avec … » quand c'est vous qui avez demandé, « Demandé par … » sinon) et ses fonctions, l'état en couleur, le lieu et le commentaire public s'ils existent, et — pour un rendez-vous en visioconférence — un lien Rejoindre la visioconférence.

À venir — demande réelle d'un parent, en attente de décision
Historique (refusés et annulés)

Décider : accepter, refuser, annuler

Les actions proposées dépendent de l'état et du rôle dans le rendez-vous :

SituationActions proposées
Demande en attente, reçueAccepter / Refuser
Demande en attente, envoyée par vousAnnuler
Rendez-vous acceptéAnnuler (des deux côtés)
Refusé ou annuléaucune

Le serveur revérifie ces droits (ManageRight sur accepter / refuser) : l'application n'affiche que ce qui est légitime, elle ne l'autorise pas.

Demander un rendez-vous

Un bouton en bas de l'écran ouvre la demande, en trois temps :

  1. Rechercher une personne parmi celles avec qui l'utilisateur peut communiquer (GET /appointments/communication/to/users). La recherche démarre à 3 caractères — c'est la règle du serveur pour un ADML, appliquée à tous ici par cohérence.
  2. Choisir la grille de disponibilités si la personne en publie plusieurs ; le lieu et le commentaire public de la grille sont affichés avant réservation, et l'option en visioconférence n'apparaît que si la grille propose un lien.
  3. Choisir un créneau dans la semaine (navigation semaine précédente / suivante, créneaux groupés par jour). Quand la semaine est vide, l'application propose directement le prochain créneau disponible renvoyé par le serveur.

La réservation (POST /appointments/appointments/:timeSlotId) confirme la demande ; en cas d'échec — typiquement un créneau pris entre-temps — le message le dit et la semaine est rechargée.

Recherche d'une personne (résultats réels de l'annuaire)
Grille de disponibilités de la personne choisie

Parcours capturé en test e2e liveapps/mobile/e2e/lanceur/parcours-rendez-vous.yaml (compte enseignant réel lilit.upreti001, demande réelle du parent karim.corbett001 sur la grille Rencontres parents 501). Le test ne réserve aucun créneau.

Droits requis, et une anomalie serveur

Les Rendez-vous n'apparaissent dans « Mes apps » qu'avec le rôle appointments - Lecture (et - Gestion pour publier une grille de disponibilités). Sur l'instance de recette, ces deux rôles existaient mais étaient vides — aucune action ne leur était rattachée — si bien que les accorder ne donnait rien : ils portent désormais initViewRights et initManageRights.

Reste une anomalie à traiter côté module : la liste des rendez-vous ne répond jamais quand page et limit sont envoyés ensemble (chacun séparément fonctionne — le mobile n'envoie donc que les états). À noter aussi qu'une grille non partagée à l'utilisateur fait répondre GET /appointments/grids/:id/timeslots en 500 au lieu d'un 403 explicite.

Données réelles

  • Source : module appointments. GET /appointments/appointments?states=[…] (mes rendez-vous — sans page/limit, cf. l'anomalie ci-dessus), GET /appointments/users/:userId/grids/minimal (grilles d'une personne), GET /appointments/grids/:gridId/timeslots?beginDate&endDate (créneaux d'une semaine), PUT /appointments/appointments/:id/accept|reject|cancel.
  • Chemins : l'adresse du module est /appointments, et les routes du contrôleur s'y ajoutent — d'où le doublon /appointments/appointments pour la ressource « rendez-vous » elle-même. C'est bien l'URL servie.
  • Heure locale : les créneaux sont écrits YYYY-MM-DD HH:mm (sans fuseau) et lus en heure locale — ce sont les horaires de l'établissement, pas de l'UTC.
  • Visibilité pilotée par les droits : les Rendez-vous n'apparaissent dans « Mes apps » que si l'instance les autorise à l'utilisateur.

Tests

  • Jest : mapping pur — lecture des dates du module, libellés jour/heure en français, matrice des actions par état et par rôle, tri des deux onglets, groupement des créneaux par jour, semaine interrogée (lundi → YYYY-MM-DD) (apps/mobile/__tests__/rendez-vous-mapping.test.ts).
  • e2e Maestro live : apps/mobile/e2e/lanceur/parcours-rendez-vous.yaml (parent → « Mes apps » → Rendez-vous → à venir / historique → demande : recherche → créneaux). Le test ne réserve pas de créneau : il ne crée aucune donnée.