Guide Interactif
Sélectionnez votre rôle dans la barre latérale pour adapter le guide à vos fonctions.
⚡ En résumé
Connexion & Accès
- Ouvrez le lien de l'application fourni par votre direction.
- Saisissez votre email et votre mot de passe.
- Cliquez sur « Se connecter ». Vous êtes redirigé vers votre espace personnel.
En mode Démo, un sélecteur rapide s'affiche — cliquez simplement sur votre nom pour entrer sans mot de passe. Ce mode est désactivé en production.
Si vous avez oublié votre mot de passe, contactez votre administrateur pour un reset manuel.
L'authentification utilise un token JWT Bearer stocké en mémoire React (non persisté dans localStorage pour des raisons de sécurité). Si vous fermez l'onglet, vous devrez vous reconnecter.
Body: { "username": "[email protected]", "password": "***" }
Réponse: { "access_token": "eyJ...", "token_type": "bearer",
"user": { "id": 1, "role": "agent", "display_name": "..." } }Poser un Congé
Sur la grille du planning, cliquez sur votre cellule à la date souhaitée. Un menu contextuel apparaît avec les types disponibles :
L'icône ⏳ apparaît sur la cellule tant que la demande attend une réponse.
Desiderata = vous exprimez un souhait. Le solveur en tient compte mais peut l'ignorer si les contraintes légales l'imposent. Il n'a pas de statut "validé/refusé" — c'est informatif.
CA et RTT = demandes formelles qui nécessitent une validation explicite du manager. Sans validation, elles restent en ⏳.
Il est impossible de poser deux demandes du même type sur la même date — le système vérifie les doublons avant insertion. Si vous voulez modifier une demande en attente, annulez-la d'abord depuis le panneau « Mes Demandes ».
Body: { "planning_id": "uuid", "employee_name": "Prénom NOM",
"day_index": 4, "request_type": "ca" }
Types valides: "ca" | "rtt" | "desiderata" | "desiderata_on"Panneau « Mes Demandes »
Cliquez sur l'icône Valise 💼 en haut à droite. Ce panneau regroupe toutes vos demandes de congés :
Une demande En attente peut être annulée par vous en cliquant dessus. Une demande déjà Approuvée ne peut pas être annulée seul — contactez votre manager.
Les demandes Refusées restent visibles à titre d'historique mais n'ont aucun impact sur le planning.
Si vous annulez une demande refusée, le système la supprime proprement et vous permet d'en reposer une nouvelle pour la même date. Le compteur de jours CA/RTT n'est décrémenté qu'au moment de la validation par le manager.
Annule une demande en attente appartenant à l'utilisateur connecté.
Échange de Jour entre Agents
Cette fonctionnalité permet à deux agents de permuter leurs jours de travail. Elle est accessible depuis les cellules du planning :
- Cliquez sur votre cellule et choisissez « Proposer un échange ».
- Sélectionnez l'agent cible et le jour à échanger.
- L'agent reçoit une notification et peut Accepter ou Refuser.
- Si l'agent accepte, le manager doit encore valider l'échange définitif.
Une demande d'échange expire automatiquement si le jour concerné est passé, ou si la demande n'a pas été répondue à temps.
Body: { "planning_id": "uuid", "requester_day": 10,
"recipient_name": "Prénom NOM", "recipient_day": 15 }Messagerie & Conversations
Cliquez sur l'icône Bulle 💬 pour ouvrir la messagerie interne. Vous pouvez avoir des échanges privés (1-à-1) ou des conversations de groupe.
Les Tags permettent de filtrer les conversations par thème : Renforts, Congés, Échanges, Général... Utilisez-les pour ne pas noyer les infos importantes dans le flux de messages.
Un point rouge 🔴 sur l'icône signale des messages non lus. Il disparaît dès que vous ouvrez la conversation concernée.
Certaines notifications système (ex : demande de renfort) créent automatiquement une conversation liée. Vous pouvez y répondre directement depuis cette conversation ou depuis le panneau de notifications.
Body: { "recipient_id": 5, "content": "Bonjour ..." }
Compte non lus: GET /api/messages/unread-countCentre de Notifications
La Cloche 🔔 centralise toutes vos alertes en temps réel :
- Réponses à vos demandes de congés (validé ✅ / refusé ❌)
- Appels au renfort lancés par la direction
- Demandes d'échange de jour reçues
- Nouveaux messages non lus
Un renfort est une demande de la direction pour qu'un agent travaille un jour supplémentaire (hors contrat). Vous pouvez l'Accepter ou le Refuser directement depuis la notification — aucune navigation requise.
Types de renfort : Jour Normal (payé), Récupération (compensé en repos), Heure supplémentaire.
Les notifications utilisent SSE (Server-Sent Events) — elles arrivent en push sans rechargement de page. Le badge sur la cloche se met à jour instantanément.
Si vous avez plusieurs onglets ouverts, chacun reçoit les notifications indépendamment.
(SSE) Flux temps réel — événement "refresh" déclenche le rechargement des données
Profil & Préférences
Via l'icône Engrenage ⚙️, accédez à vos préférences personnelles :
- Thème Sombre / Clair — mémorisé sur ce navigateur
- Langue (FR par défaut)
- Densité d'affichage de la grille (compact / normal)
Le thème sombre est particulièrement recommandé pour les agents de nuit — il réduit la fatigue oculaire lors de la consultation en environnement sombre.
Vos préférences sont sauvegardées côté serveur et synchronisées si vous vous connectez depuis un autre appareil.
Body: { "theme": "dark" | "light", "density": "compact" | "normal" }Mon Récapitulatif Mensuel
Cliquez sur l'icône Graphique 📊 en haut à droite pour accéder à votre récap personnel du mois :
- ⏱️ Heures effectuées vs cible contrat
- 📅 Jours travaillés / repos / congés
- 🌙 Heures de nuit (si applicable)
- ⬆️ Heures supplémentaires accumulées
Le récap n'est disponible que sur les plannings validés. Si votre planning du mois est encore en brouillon, les compteurs restent à zéro.
L'écart positif (heures en trop) correspond à des heures sup comptabilisées. L'écart négatif signifie qu'il manque des heures à compléter.
Réponse: { "hours_worked": 168.5, "target_hours": 151.67,
"days_worked": 21, "night_hours": 42.0, "overtime": 16.83 }Crédits d'Équité
Le système de crédits d'équité garantit une répartition juste des contraintes (week-ends, nuits, jours fériés). Chaque agent accumule ou utilise des crédits selon les plannings.
Vous gagnez des crédits lors des week-ends ou nuits travaillés. Ces crédits influencent les propositions automatiques du solveur — il favorise les personnes avec le moins de crédits pour les prochaines contraintes.
Votre solde actuel et l'historique des transactions sont visibles dans le panneau de récap.
Grille de Service
Accédez à la vue complète de l'équipe sur le mois. Chaque ligne est un agent, chaque colonne un jour. Les cellules affichent : M (Matin), S (Soir), N (Nuit), T (Travail générique), R (Repos).
Les demandes de congés en attente (⏳) sont visibles directement dans la grille. Cliquez dessus pour les approuver ou les refuser sans quitter la vue planning.
La colonne Total à droite indique le nombre de jours travaillés cumulés. Les cellules rouges signalent une anomalie légale détectée.
Modification directe : cliquez sur une cellule libre et tapez le code horaire (M/S/N/T/R). Le score de planning (conformité, confort) se recalcule automatiquement.
Solveur IA Automatique
Le bouton Baguette Magique 🪄 lance l'algorithme d'optimisation qui génère automatiquement le planning selon les règles légales et les préférences des agents.
- Ouvrez un brouillon (ou créez-en un).
- Cliquez sur la baguette magique.
- Attendez la génération (quelques secondes).
- Vérifiez le score de couverture avant de valider.
Le solveur prend en compte : desiderata des agents, congés approuvés, quotas légaux (max jours consécutifs, repos obligatoire), crédits d'équité, et couverture minimale requise.
Le solveur utilise OR-Tools (Google). S'il ne trouve pas de solution satisfaisante (contraintes trop strictes), il signale l'infaisabilité et propose d'assouplir les règles de confort (pas les règles légales).
Body: { "respect_desiderata": true, "equity_weight": 7 }
Status 200: { "success": true, "score": 0.92, "grid": {...} }
Status 422: { "detail": "Infeasible — contraintes trop strictes" }Couverture & Score
Sous la grille, une barre de couverture indique si le staffing respecte les quotas minimums pour chaque jour :
- 🟢 Vert — couverture suffisante
- 🟡 Orange — couverture limite (vigilance)
- 🔴 Rouge — sous-effectif détecté
Le Score Global (ex : 92%) combine la conformité légale + le confort des agents + la couverture. Un planning à 100% respecte toutes les règles sans compromis.
Le score de Confort reflète le respect des desiderata. Il peut être inférieur si le staffing l'a imposé.
Validation des Congés d'Équipe
Via la cloche 🔔 ou directement sur la grille, approuvez ou refusez les demandes de vos agents :
- Cliquez sur la cellule ⏳ → menu contextuel → Valider ou Refuser
- Ou via le panneau Notifications → onglet Congés → action rapide
Validation en masse : un bouton permet d'approuver toutes les demandes en attente du mois en un clic. Utile en début de mois après diffusion du planning.
Body: { "planning_id": "uuid" } ← approve toutes les demandes du planningDemande de Renfort
Quand un agent est absent (maladie) et que le service est en sous-effectif, le manager ou l'administrateur peut demander un renfort aux agents disponibles :
- Un point rouge 🔴 apparaît sur les jours en sous-effectif (maladie non couverte).
- Cliquez sur le bouton « Demander renfort » en haut à droite de la grille.
- Choisissez le type de renfort : Jour Normal (payé), Récupération (repos compensé), ou Heure supplémentaire.
- Sélectionnez les agents à contacter — le système affiche leur score de compatibilité.
- Envoyez la demande : chaque agent reçoit une notification en temps réel.
L'agent qui reçoit la demande peut Accepter ou Refuser directement depuis sa notification ou depuis la cellule du planning (le jour en question s'allume avec un badge spécial).
Quand un agent accepte, le jour redevient couvert et le compteur de sous-effectif diminue. Si personne n'accepte, vous pouvez relancer la demande avec un autre type de renfort ou d'autres agents.
Les stats de renforts par agent sont visibles dans le Panel Agents : nombre de renforts acceptés / proposés par type (Jour Normal, Récup, HS). Cela permet de répartir équitablement les sollicitations.
Un renfort accepté modifie visuellement la cellule du planning : le jour de repos devient un jour travaillé avec un badge spécial (icône renfort) dans le coin.
Body: { "planning_id": "uuid", "day_index": 8,
"recipient_ids": [5, 12, 23], "overtime_type": "normal" | "recovery" | "overtime_hours" }
Réponse: { "sent_count": 3, "overtime_ids": ["uuid1", "uuid2", "uuid3"] }
POST/api/overtime/{id}/accept
POST/api/overtime/{id}/refuseJours Spéciaux (Maladie / Formation)
Clic droit sur une cellule de la grille → menu contextuel → choisissez :
- 🤒 Marquer Maladie — le jour est exclu des compteurs d'heures contractuelles
- 📚 Marquer Formation — compte comme jour travaillé mais catégorisé séparément
Les jours maladie apparaissent dans l'export CSV paie dans une colonne dédiée. Ils ne sont pas déduits du solde CA ou RTT de l'agent.
Body: { "planning_id": "uuid", "employee_name": "Prénom NOM", "day_index": 5 }Récapitulatif d'Équipe
Ouvrez l'onglet Récap (graphique) pour un tableau consolidé de toute l'équipe : heures effectuées, cible, écart, jours maladie, CA posés.
La colonne Écart (± heures) signale immédiatement les agents en dérive. Un écart positif = heures sup à récupérer. Un écart négatif = jours manquants à planifier.
Le Manager ne voit que son propre service. L'Admin voit tous les services simultanément.
Brouillons & Versions
L'icône ➕ en haut du planning crée un nouveau brouillon. Vous pouvez choisir 3 modes de duplication :
- 📋 Copie complète — duplique la grille et tous les prérequis
- 📝 Desiderata seulement — copie les prérequis admin, pas la grille
- ⬜ Brouillon vide — page blanche, avec agents du service
Un seul planning peut être Validé Public à la fois par mois et par service. Les brouillons sont privés — les agents ne les voient pas tant que vous ne validez pas.
La validation rend le planning visible à toute l'équipe et déclenche les notifs push. La dévalidation est possible pour corrections urgentes.
Les demandes de congés sont partagées entre tous les brouillons du même mois/service — elles survivent à la suppression d'un brouillon.
Le versionning utilise des labels automatiques (v1, v2...) pour vous permettre de tracer l'évolution.
Body création: { "name": "IDE Jour", "month": 5, "year": 2026,
"source_planning_id": "uuid", "copy_mode": "full|desiderata|empty" }Panel Global des Agents
Accédez au tableau complet de tous les agents de l'établissement depuis le menu principal :
- 🔍 Recherche par nom, service, grade
- ➕ Création d'un compte agent (permanent ou temporaire)
- 🔄 Mutation inter-services (déplace l'agent vers un autre type de planning)
- ⚙️ Modification du temps partiel (% de travail)
Un agent temps partiel (ex : 80%) a ses quotas d'heures ajustés proportionnellement. Le solveur en tient automatiquement compte pour la planification.
La mutation d'un agent change ses allowed_planning_types. Elle prend effet immédiatement pour les brouillons futurs ; elle n'altère pas les plannings déjà validés.
Les crédits d'équité d'un agent peuvent être ajustés manuellement si nécessaire (ex : reprise après congé maternité). Cette action est tracée dans l'historique.
Body mutation: { "allowed_planning_types": ["IDE Nuit"],
"work_time_percentage": 80 }Gestion Centralisée des Demandes
Depuis le menu Équipe → Demandes des agents, l'administrateur a une vue globale de toutes les demandes de tous les agents :
- 🟡 En attente — à traiter (filtrage par défaut)
- ✅ Approuvé — demandes acceptées
- ❌ Rejeté — demandes refusées
- 📋 Tout — vue complète de l'historique
Chaque ligne affiche : nom de l'agent, type de demande (Repos souhaité, CA, RTT), date demandée, date de dépôt, et actions rapides (✓ approuver / ✗ refuser).
La colonne Jour chaud signale si le jour demandé est déjà en tension (faible couverture). Cela aide à identifier les refus nécessaires.
Le badge rouge 882 sur l'onglet représente le compteur de demandes en attente tous types confondus. Il se met à jour en temps réel via SSE.
Un lien « voir le planning » permet de sauter directement au planning concerné pour vérifier la couverture avant de valider ou refuser.
Body: { "ids": [1, 2, 5, 8] }
Approuve en masse les demandes sélectionnées.Export Paie CSV
Depuis l'onglet Récap d'un planning validé, cliquez sur Exporter CSV. Le fichier contient une ligne par agent avec les colonnes :
- 📊 Heures totales effectuées
- 🌙 Heures de nuit
- ☀️ Heures de dimanche
- ⬆️ Heures supplémentaires (HS)
- 🤒 Jours maladie
- 🏖️ Congés posés (CA + RTT)
- 📚 Jours de formation
Le format CSV est compatible avec les logiciels RH courants (Excel, SAGE, HR Access). Les valeurs numériques utilisent le point comme séparateur décimal.
Les exports sont consolidés sur le mois entier — même si plusieurs brouillons ont été créés pour ce mois, seul le planning validé est comptabilisé.
Headers: Authorization: Bearer {token}
Réponse: text/csv — attachment; filename="recap_mai_2026.csv"Conventions Légales
Dans les Paramètres globaux, sélectionnez la convention applicable à votre établissement :
- 🏥 FPH — Fonction Publique Hospitalière (7,5h/j, 35h/sem.)
- 🏥 FPH 12h — Variante postes 12 heures (max 2 nuits consécutives)
- 🏢 CCN 51 — Convention collective nationale FEHAP
- ⚙️ Personnalisé — Saisie manuelle de tous les paramètres
Changer de convention modifie immédiatement les seuils légaux utilisés par le solveur : heures/mois, repos minimum entre deux postes, maximum de nuits consécutives, etc.
En mode Personnalisé, vous configurez librement : nb d'heures journalières, jours de weekend, plafonds d'HS, etc.
Body: { "convention_id": "fph" | "fph_12h" | "ccn51" | "custom",
"hours_per_day": 7.5, "max_consecutive_days_hard": 6 }Système d'Invitation
Depuis le menu Équipe → Invitations, générez un lien d'accès pour qu'un nouvel agent crée son compte :
- Cliquez Générer un lien ou QR Code.
- Envoyez le lien par email ou affichez le QR Code.
- L'agent s'inscrit lui-même (nom, email, mot de passe).
- Vous recevez une notification pour approuver l'inscription.
Les liens d'invitation ont une durée de validité configurable (24h, 72h, 7 jours). Passé ce délai, le lien expire et doit être regénéré.
En cas de doublon (l'agent existe déjà avec un autre email), une option de fusion de comptes permet de consolider les deux entrées. Attention : la fusion est irréversible.
Vous pouvez pré-configurer le rôle et le service dans le lien d'invitation — l'agent arrive directement assigné sans intervention manuelle supplémentaire.
Body: { "expires_in_hours": 72, "role": "agent",
"allowed_planning_types": ["IDE Jour"] }Questions fréquentes
reset_demo.sh sur le serveur (fichier dans /docs/). Il recrée tous les utilisateurs, plannings et conversations de démo sans affecter les données de production.