# Édition des absences ## Page : `/fiche` (Apprentis) ### Sélectionner un apprenti Le sélecteur en haut de la page propose une recherche en direct : tape une partie du nom, prénom ou classe pour filtrer. **Raccourcis** : - `/` ouvre directement le sélecteur - `Entrée` sélectionne le premier résultat filtré - `Échap` ferme la recherche ### Calendrier mensuel Chaque cellule représente un jour du mois. Les couleurs indiquent l'état : | Couleur de fond | Signification | |-----------------|------------------------------------------| | Blanc | Aucune absence | | Vert clair | Toutes les absences sont excusées | | Rose | Au moins une absence non excusée | | Bleu | Jour sélectionné en édition | | Bleu pâle | Aujourd'hui | Les nombres dans les cellules : - "2 ⚠️ 1" → 2 absences au total dont 1 non excusée - "5" → 5 absences toutes excusées Cliquer sur un jour avec absences ouvre le panneau d'édition. ### Panneau d'édition 10 lignes (P1 à P10) avec un **segmented control** à 3 boutons : - **Présent** (gris) — l'apprenti était là - **E** (orange) — Excusée - **N** (rouge) — Non excusée Un seul clic suffit. Le bouton **Enregistrer** sauve toutes les modifications de la journée d'un coup. Le panneau reste ouvert après l'enregistrement pour permettre un éventuel ajustement. ### Excuse rapide ("Valider toutes les absences d'une journée") Sous le calendrier, un bandeau jaune liste les jours qui ont au moins une absence non encore traitée (statut `a_traiter`). Cliquer sur un de ces boutons excuse **toutes les absences à traiter de ce jour-là** en une seule action. ## Page : `/classe` (Vue classe) ### Sélection de classe Même principe que pour les apprentis : recherche en direct avec `/`, `Entrée`, `Échap`. ### Cartes apprenti Chaque apprenti de la classe a une carte avec : - Nom + lien vers sa fiche complète - Badge "Sanction" si quota atteint (≥5 absences brutes en blocs) - KPIs : Total / Excusées / Non excusées / Blocs d'absences - Boutons de téléchargement PDF (Absences, Bulletin, Notes) - Onglets BN / Notes d'examen pour visualiser ## Audit des modifications Chaque modification d'absence est tracée dans `data/logs/operations.log` : ``` [14:32:01] [abs] prof.demo : Dupont Marc (1MAB1) — 04.02.2026 P6 : N → E [14:32:01] [abs] prof.demo : Dupont Marc (1MAB1) — 04.02.2026 P6 : N → E ``` Visible aussi sur la page `/logs`. Le champ `updated_by` de la table `Absence` enregistre le dernier utilisateur ayant modifié. ## Effet de chaque modification 1. La table `Absence` est mise à jour (ou créée/supprimée) 2. Une entrée `EscadaPending` est ajoutée pour le push ultérieur vers Escada 3. Un toast de confirmation s'affiche 4. Une ligne est ajoutée à `operations.log`