Rendez-vous
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.
Décider : accepter, refuser, annuler
Les actions proposées dépendent de l'état et du rôle dans le rendez-vous :
| Situation | Actions proposées |
|---|---|
| Demande en attente, reçue | Accepter / Refuser |
| Demande en attente, envoyée par vous | Annuler |
| 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 :
- 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. - 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.
- 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.
Parcours capturé en test e2e live —
apps/mobile/e2e/lanceur/parcours-rendez-vous.yaml(compte enseignant réellilit.upreti001, demande réelle du parentkarim.corbett001sur la grille Rencontres parents 501). Le test ne réserve aucun créneau.
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 — sanspage/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/appointmentspour 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.