Apparence
Recette
Comment vérifier qu'un ticket a été livré comme demandé.
Chaque chapitre couvre un écran et contient des scénarios numérotés : un objectif, le rôle qui l'exécute, les données à mettre en place, les étapes, et le résultat observable attendu. La table Traçabilité par ticket part du ticket et renvoie vers les scénarios à rejouer ; elle est générée, ne la modifiez pas à la main.
Avant de rejouer un scénario à la main, regardez Couverture automatisée : ce que les suites de tests prouvent déjà n'a pas besoin d'être repassé.
Les chapitres
Éléments variables de paie — consultation par mois et établissement pour la saisie manuelle en paie (APAJH-91).
Astreintes — consultation collaborative, périodes continues, enregistrement groupé et périmètre temporaire des managers.
Connexion — se connecter, échouer proprement, assumer une identité depuis le back-office.
Mot de passe oublié — demander un lien, le consommer, gérer un lien expiré.
Portail — navigation, bascule Manager / Mon espace, topbar, et le cloisonnement d'un compte salarié.
Tableau de bord manager — synthèse, éléments à traiter, décisions d’absence et états de disponibilité ; tickets APAJH-89 et APAJH-90.
Annuaire Utilisateurs — effectifs, recherche, filtre, ouverture d'une fiche.
Annualisation — relevés manager/RH et personnel, échéances quotidiennes et fraîcheur.
Mes compteurs — consultation personnelle par période, cartes et détails en lecture seule.
Fiche salarié — les six volets et qui peut écrire dans chacun.
Bibliothèque Postes — le catalogue de modèles d'horaires d'un encadrant, et son cloisonnement par compte.
Bibliothèque ▸ Trames — la bibliothèque personnelle de cycles de travail d'un manager, composés à partir de ses postes.
Bibliothèque ▸ Équipes — la recherche des membres à la création d'une équipe.
Planification — l'assistant qui rattache une trame à des salariés réels, datés.
Planning manager — la grille salariés × jours, ses panneaux et ses filtres. Le seul chapitre qui se joue en deux modes : sur les données réelles pour la lecture d'une semaine planifiée et pour l'unique bouton qui écrit — l'Enregistrer de « Modifier la journée » — et sur un jeu simulé pour les situations que la base ne sait pas encore produire (absences, journée coupée, astreintes, collision de codes). Chaque scénario dit lequel des deux il demande.
Absences — le catalogue des types d'absence, son classement à deux niveaux et ses plafonds, paramétrés au back-office ; puis la déclaration d'une absence depuis le calendrier du planning ; la file de validation du manager — décider une demande sur l'API, et la lire dans Activité ▸ Demandes ; enfin la demande déposée par le salarié, qui est ce qui remplit cette file, l'écran Mon espace ▸ Mes demandes où il la suit et l'annule (§ 19), et le formulaire Demander une absence qui la dépose (§ 22) ; et l'annulation d'un congé accordé, que le salarié demande et que le manager tranche (§ 26). Plusieurs de ses scénarios partent d'une demande « en attente » : le 18 est celui qui en fabrique une depuis l'application, les autres la demandent au back-office.
Demandes de modification — la demande qu'un salarié dépose pour changer une de ses journées : le dépôt, la relecture et le retrait sur l'API (§ 1), la décision sur l'API (§ 2) et au back-office (§ 3), son suivi dans Mon espace ▸ Mes demandes (§ 4), son formulaire (§ 5), puis la cloche du décideur et du salarié (§ 6), et la file de l'encadrant, Activité ▸ Demandes, où il la lit (§ 7) et la tranche (§ 8).
Évènements et formations — l'agenda autonome, la saisie des participants et les alertes de conflit avec une absence.
Référentiel organisationnel — le seul chapitre qui se joue dans le back-office : créer et modifier un établissement sans intervention technique.
Monter un environnement de recette
La nouvelle seed s'applique à une base de développement neuve, séparément après intégration. Ne relancez pas l'ancienne dev pour préparer cette recette : aucune purge ni reprise de sa cohorte n'est prévue. Sur l'environnement neuf, make up applique les migrations, puis les sources et leurs calculs au démarrage. Le mode DJANGO_DEBUG=true est obligatoire ; les commandes refusent les autres modes.
La date de référence est celle de la première seed de la base : au démarrage, la date locale. Elle fixe l'année précédente et l'année courante, les semaines d'alertes et l'ancrage des absences ; un make seed-all ultérieur ne la change plus. Pour rejouer la recette sur la référence du 7 octobre 2026, seedez une base neuve avant son premier démarrage :
bash
make down -v
docker compose run --rm --entrypoint sh backend -c "python manage.py migrate \
&& python manage.py seed_all --reference-date 2026-10-07 \
&& python manage.py prepare_demo_calculations --reference-date 2026-10-07"
make upL'exemple couvre 2025 et 2026. Les calculs métier progressent jusqu'à la date réelle du jour.
La première écrit les sources et les soldes manuels CET/RC/HS. La seconde applique les droits paie définitifs, les acquisitions, la consommation des absences, le réalisé déclaré et la consolidation annuelle avec les services métier. Les droits paie sont synthétiques (source=DEV-SEED), réservés à la recette, sans intérimaires ni stagiaires. Les référentiels métier complets restent disponibles.
Population de référence
Tous les comptes initiaux utilisent demo1234. i.aubert est l'Admin technique, sans fiche salariée. Les onze fiches donnent donc douze comptes au total.
| Site principal | Compte | Personne | Contrat | Cycle |
|---|---|---|---|---|
| FAM Les Cigales | k.mokrani | Karim Mokrani | CDI 35 h | Matin, après-midi, soir et week-end |
| FAM Les Cigales | é.chen | Émilie Chen | CDD 28 h | Quatre matinées de 7 h |
| FAM Les Cigales | annualization.demo | Camille Annualisation | CDI 35 h | Journées sur FAM et IME |
| MAS Glycines | h.lefèvre | Hugo Lefèvre | CDI 35 h | Nuits de 10 h, semaines de 40 h et 30 h |
| MAS Glycines | a.bernard | Alice Bernard | Contrat d'accompagnement 35 h | Roulement de soins |
| MAS Glycines | j.dubois | Julien Dubois | Intérim 35 h | Journées |
| IME Les Tilleuls | s.martin | Sophie Martin | CDI 21 h | Lundi, mercredi, vendredi |
| IME Les Tilleuls | i.fabre | Inès Fabre | Stagiaire 35 h | Journées coupées |
| IME Les Tilleuls | m.nasri | Malik Nasri | Agent polyvalent 35 h | Journées, hors CCN-66 |
| FAM Les Cigales | l.martins | Léa Martins | CDI 35 h | Journées ; Manager n1 FAM/MAS |
| IME Les Tilleuls | m.rousseau | Mathieu Rousseau | CDI 35 h | Journées ; Manager n1 MAS/IME |
Chaque site a une équipe Encadrement et une équipe Accompagnement. Léa appartient aux Encadrement du FAM et de la MAS ; Mathieu à ceux de la MAS et de l'IME. Les trois salariés principaux de chaque site sont dans Accompagnement. Camille appartient aussi à Accompagnement de l'IME, son lieu secondaire : lundi, mardi et jeudi au FAM ; mercredi et vendredi à l'IME, par modulation de lieu uniquement les jours travaillés. Les deux managers le voient dans leur périmètre. Les contrats temporaires se succèdent sans trou entre les deux années.
Calendrier et scénarios
Les six cycles sont continus au changement d'année : matin 06 h–13 h, après-midi 13 h–20 h, soir 16 h–23 h, journée en deux créneaux 08 h–12 h puis 13 h–16 h, nuit 21 h–07 h avec pause rémunérée, journée coupée 06 h–10 h puis 16 h–19 h. Repos et repos hebdomadaires sont présents. Le cycle de nuit évite la nuit du dimanche avant la semaine de quatre nuits : le moteur répartit une nuit à cheval sur deux semaines selon les heures civiles, et non selon sa seule date de début. Il conserve ainsi l'alternance de 40 h et 30 h. Le FAM et la MAS ouvrent tous les jours ; l'IME du lundi au vendredi. Les journées et les managers ne travaillent pas les fériés, les soins et nuits le peuvent. Les onze fériés métropolitains de chacune des deux années sont chargés sans dépendre du réseau.
Avec la référence du 7 octobre 2026, les semaines du 10 mars 2025 et du 5 octobre 2026 portent chacune quatre anomalies isolées, sans férié :
| Personne | Construction | Alerte |
|---|---|---|
| Camille | Cinq journées de 8 h et samedi de 6 h | warn : dépassement de 44 h CCN-66 (AL-A06) |
| Malik | 35 h et samedi de 2 h | block : 37 h > 35 h hors CCN-66 |
| Karim | Mardi jusqu'à 23 h, mercredi à 07 h | warn : repos de 8 h < 11 h |
| Inès | Vendredi 06 h–10 h puis 16 h–20 h | warn : amplitude de 14 h |
Le moteur applique l'ensemble des règles actives : d'autres alertes peuvent accompagner ces quatre anomalies, y compris sur les cycles habituels. Les tests vérifient ces quatre règles et leur absence sur les semaines voisines, sans désactiver les autres règles.
Les absences comprennent congés passés et futurs accordés, maladie, absence non rémunérée, refus historiques et actuels, deux demandes en attente dont une demi-journée « Examen ou jury » d'Émilie. Elles sont ancrées sur des jours planifiés et écartées des semaines d'alerte. Les réunions de site et une formation transversale complètent chaque année. Camille dispose de deux journées de réalisé déclaré par année, 8 h et 6 h pour 7 h prévues, lorsqu'elles sont passées.
Réexécution
La seed ajoute les éléments manquants sans remettre à zéro les mots de passe, décisions, trames, planifications, modulations ni corrections existantes. Les scénarios créés gardent leurs dates, même si la référence change dans la même année. Le registre interne conserve leurs identités même après une modification de commentaire ou de titre. Les soldes manuels viennent de l'identité de la cohorte et non des identifiants SQL. Les bibliothèques personnelles sont dupliquées pour les deux managers, selon le modèle actuel de propriété.
make reset-demo-calculations reste une action explicite : elle supprime les résultats calculés, temps déclarés et corrections locales des comptes connus avant de recalculer. Elle préserve leurs sources et soldes manuels CET/RC/HS ; elle n'est jamais appelée automatiquement.
Adresses
Les hôtes sont définis par votre .env, pas figés : FRONTEND_HOST pour l'application, API_HOST pour l'API et le back-office (/admin/). Les valeurs livrées par .env.example sont monoutil.localhost et api.monoutil.localhost ; une installation existante peut en avoir d'autres. En cas de doute : grep HOST .env.
Comptes et rôles
Les droits ne viennent pas d'un champ sur le compte mais de rôles attribués par établissement (apps/roles). Trois profils suffisent à couvrir ce que les scénarios distinguent :
| Profil | Rôle | Ce qui le caractérise |
|---|---|---|
| Administrateur | Admin | l'écriture sur tous les volets de la fiche ; le back-office en plus s'il a le Statut équipe |
| Encadrant | Manager n1 | ouvre l'annuaire et toutes les fiches — n'écrit que sur Urgence et Lieux de travail & équipes |
| Salarié | Salarié | Mon espace seulement : ni annuaire, ni fiche d'autrui |
make seed-workforce crée Léa Martins (l.martins, FAM/MAS) et Mathieu Rousseau (m.rousseau, MAS/IME) avec le rôle Manager n1. Leur établissement commun permet de comparer les lectures ; Camille est visible des deux côtés.
Viewports
Les scénarios marqués mobile se jouent en 390 × 844, la référence tenue par les tests end-to-end. Le seuil de bascule est 768 px — au-dessus, l'écran est en version bureau.
Exemptions
Ce que la recette ne couvre pas volontairement. make docs-check lit cette liste : une entrée retirée d'ici doit gagner un scénario.
e2e/gallery.spec.ts— la galerie du design system (/__gallery) est un outil de développement, pas un écran du produit. Elle n'a pas de recette manuelle ; sa spec garde les composants sous surveillance.APAJH-192— la planification quotidienne de l'import CEGI est un comportement d'exploitation sans interaction d'écran. Pytest vérifie son horaire et son innocuité sans nouveau fichier ; les journaux Celery confirment son exécution.APAJH-233— l'alerte des échecs d'import CEGI est un comportement d'exploitation sans interaction d'écran. Pytest vérifie les destinataires, le contenu des versions texte et HTML du courriel, la propagation de l'erreur et l'absence de doublon pendant les reprises Celery.APAJH-229— la sauvegarde et la rotation de MySQL sont un comportement d'exploitation sans interaction d'écran. Le test Compose vérifie la création, la restauration, la rétention et la sécurité en cas d'échec sur une base isolée.APAJH-60— le moteur et l'endpoint du tableau d'annualisation sont un comportement backend sans écran SPA dans ce ticket. Pytest couvre le barème, le calcul journalier et mensuel, les corrections et le cloisonnement salarié/manager.APAJH-257— l'ouverture de/api/absences/et/api/planning/à la lecture de sa propre fiche est un élargissement d'autorisation sans écran SPA dans ce ticket : aucun compte salarié n'atteint encore ces données par l'interface, la première vue arrivant avec « Mon espace ▸ Mes demandes » (APAJH-43). Pytest couvre les deux périmètres — ses propres lignes, l'invisibilité d'un collègue du même établissement puis de la même unité, le 404 sur une ligne étrangère, le refus des écritures et le justificatif qui reste masqué.