Heatmap et score de créneau
Vérifié contre le produit le .
Route de l’application : /planning, une fois la détection lancée
À quoi sert cet écran
Section intitulée « À quoi sert cet écran »La heatmap La coloration de la grille qui montre d'un coup d'œil, semaine entière sous les yeux, où un cours se poserait le mieux. répond à une seule question, et elle y répond pour un cours précis : « où puis-je poser celui-ci, et à quel prix ? » Elle colore chaque créneau de la semaine selon la qualité du placement qu’il permettrait, chiffre à l’appui, pour qu’un planificateur choisisse en regardant plutôt qu’en essayant.
Qui y a accès
Section intitulée « Qui y a accès »Permission requise : .
La portent Administrateur, Planificateur — plus, le cas échéant, les rôles personnalisés de votre établissement qui la contiennent.
Sans cette permission, l'entrée n'existe pas dans le menu. Elle n'y figure ni grisée ni cadenassée : la navigation est filtrée sur les droits résolus, pas désactivée. Une section absente n'est donc pas une panne — et au tout premier affichage, le menu peut être plus court une fraction de seconde, le temps que les permissions arrivent.
Une permission peut être limitée à certains campus ou formations. Dans ce cas l'écran s'ouvre, mais les ressources hors périmètre en sont absentes — voir Portée.
La heatmap n’a pas de permission propre : elle fait partie de la grille et suit la sienne. Sa lecture n’expose rien de plus que la grille elle-même.
Ce qu’on y voit
Section intitulée « Ce qu’on y voit »Rien, tant qu’aucun cours n’est choisi
Section intitulée « Rien, tant qu’aucun cours n’est choisi »La heatmap n’existe pas dans l’absolu. Un score de créneau Une note de 0 à 100 qui dit à quel point poser ce cours ici, dans cette salle, serait un bon choix. qualifie un triplet (cours, créneau, salle) — jamais un créneau seul. Tant que le panneau « Créer un cours » n’a pas de cours sélectionné et que « Détecter les créneaux éligibles » n’a pas été actionné, la grille reste nue. C’est ce qui surprend le plus souvent : il n’y a pas de heatmap « du lundi matin », il y a une heatmap de ce cours-là.
La bande d’un créneau
Section intitulée « La bande d’un créneau »Une fois la détection lancée, chaque créneau Une bande horaire de la trame hebdomadaire — lundi 08:00–10:00, par exemple — sur laquelle un cours peut être posé. de la trame porte une
bande colorée. Sa hauteur n’est pas celle du créneau : c’est celle de la fenêtre réellement
évaluée, [début du créneau, début + durée du cours). Un cours de trois heures posé sur un
créneau de 90 minutes affiche donc une bande qui déborde sur le suivant — vous voyez l’empreinte
vraie, pas la case.
Chaque bande porte deux modalités, jamais la couleur seule :
- la couleur de la rampe de score ;
- le score en chiffres, en haut à droite de la bande, dans un contraste calculé pour rester lisible sur sa propre couleur.
Le survol d’une bande notée ouvre une infobulle : « Score 78/100 », la fenêtre réelle (« 08:00 – 11:00 »), « Meilleure salle : B-204 — Amphithéâtre Nord » et, en récurrence, « Agrégé sur 12 semaines (pire semaine) ».
La légende, qui est le contrat de lecture
Section intitulée « La légende, qui est le contrat de lecture »Elle est permanente, au-dessus de la grille, et décrit cinq états. Chacun se reconnaît par son motif autant que par sa teinte.
| État de la légende | Ce qu’il signale | Comment il se reconnaît sans la couleur |
|---|---|---|
| « Score du créneau » | la rampe continue de 0 à 100 | les chiffres 0 et 100 encadrent la rampe, et chaque bande porte le sien |
| « Impossible » | le placement est refusé, quel qu’en soit le prix | hachures obliques + icône d’interdiction |
| « Occupé » | quelque chose occupe déjà cette plage à l’écran | semis de points + icône d’horloge |
| « Hors trame » | la journée n’a pas de créneau à cette hauteur | aplat neutre, sans motif |
| « Libre » | en mode Occupation seulement : rien n’occupe la plage | aplat sans motif |
La bascule Heatmap / Occupation, dans la barre d’actions, choisit lequel des deux calques s’affiche. Le mode Occupation ne note rien : il montre les plages déjà prises, aux minutes réelles, y compris hors trame. C’est la lecture à faire quand la question n’est pas « quel est le meilleur créneau ? » mais « qu’est-ce qui bloque ? ».
Une bande notée et occupée existe : elle garde sa couleur et son chiffre, et reçoit le semis de points par-dessus. Ce n’est pas une contradiction — la salle proposée est libre, la plage contient déjà autre chose à l’écran.
Le classement « Meilleurs créneaux »
Section intitulée « Le classement « Meilleurs créneaux » »Sous le panneau de détection, une liste ordonnée : « 1. Mardi 08:00–10:00 · 92 · B-204 », avec jusqu’à trois salles de remplacement par ligne. Survoler une ligne cerne la cellule correspondante dans la grille, et survoler la cellule surligne la ligne ; un clic amène le focus sur la cellule.
Comment un score se fabrique
Section intitulée « Comment un score se fabrique »C’est le cœur du produit, et cela tient en trois phrases.
- Les contraintes dures passent en premier. Si l’une d’elles est violée, le placement est impossible : la cellule est exclue, et aucune contrainte souple n’est même évaluée.
- Les contraintes souples se partagent 100 points. Chaque contrainte souple active reçoit
une part proportionnelle à son poids Le chiffre de 0 à 10 qui dit combien il est gênant de ne pas respecter une règle souple, comparé aux autres. :
part = 100 × poids ÷ somme des poids actifs. La somme des parts fait donc exactement 100. - Chaque contrainte souple pénalisée reprend une fraction de sa part. L’évaluateur produit
une pénalité entre 0 et 1 ; le malus vaut
part × pénalité. Le score est100 − somme des malus, arrondi à une décimale.
C’est cette arithmétique que le panneau de détail rend visible, ligne par ligne, sous la forme « 100 − 22 de pénalités = 78/100 ». Le détail est décrit sur Pastilles de contrainte et explicabilité.
Ce que 0 et 100 veulent dire
Section intitulée « Ce que 0 et 100 veulent dire »- 100 : aucune contrainte souple n’est pénalisée. Le créneau est parfait pour ce cours, et avec les poids réglés par votre établissement — les deux réserves comptent autant que le chiffre.
- Un score bas : une ou plusieurs contraintes souples coûtent cher. Le placement reste possible, il est simplement moins bon, et le détail dit lesquelles.
- 0 ne se lit presque jamais : il faudrait que toutes les contraintes souples soient pénalisées au maximum. Un créneau vraiment inutilisable n’est pas noté 0, il est exclu.
« Exclu » n’est pas « mal noté »
Section intitulée « « Exclu » n’est pas « mal noté » »C’est la distinction qui rend la heatmap lisible, et la première source de malentendu. Une contrainte dure Une règle qui ne se négocie pas : tant qu'elle est violée, le placement est impossible — une salle déjà prise, un enseignant absent. oppose un veto ; une contrainte souple Une préférence que l'on cherche à respecter sans y être obligé : la violer coûte des points, elle n'interdit rien. se contente de faire payer.
| Contrainte dure | Contrainte souple | |
|---|---|---|
| Effet | rend le créneau impossible | rend le créneau moins bon |
| Rendu | hachures + icône d’interdiction, aucun chiffre | couleur + score chiffré |
| Réglable ? | non — elle n’a pas de poids | oui, par son poids de 0 à 10 |
| Exemple | « La salle B-204 est déjà occupée de 10:00 à 11:30 (séance planifiée). » | « Crée un trou de 120 min dans la journée du groupe L1 A. » |
Le catalogue compte huit contraintes dures et huit souples. Une cellule exclue ne porte donc jamais de score : la question « pourquoi 0 et pas 20 ? » n’a pas lieu d’être, il n’y a pas de note du tout.
Deux cas où le score n’est pas celui qu’on croit
Section intitulée « Deux cas où le score n’est pas celui qu’on croit »Un cours ne se bloque jamais lui-même
Section intitulée « Un cours ne se bloque jamais lui-même »Les séances du cours en cours de placement sont ignorées par les contraintes d’occupation : salle occupée, groupe déjà en cours, enseignant déjà en cours. La heatmap répond à « où puis-je (re)placer ce cours ? », y compris quand il est déjà posé quelque part. Cliquer une séance placée rouvre donc exactement la même évaluation, sans que la séance se refuse à elle-même.
La récurrence agrège sur la pire semaine
Section intitulée « La récurrence agrège sur la pire semaine »Un cours avec récurrence La règle qui répète un cours ou une réservation à intervalle régulier — chaque semaine, ou une semaine sur deux. n’est pas évalué sur la semaine affichée mais sur toutes les semaines de sa série. Le panneau l’annonce : « Récurrence : agrégation sur 12 semaines (pire semaine). »
- La cellule porte le pire score hebdomadaire des meilleures salles : elle vaut ce que vaut la semaine la plus contrainte, puisque c’est elle qui décidera.
- Une cellule n’est valide que si chaque semaine de la série a au moins une salle valide.
- Une cellule agrégée peut être valide sans proposer la moindre salle de remplacement : une salle ne qualifie au classement que si elle est tenable toutes les semaines, ce qui est plus exigeant que le score de la cellule.
- Une bande exclue peut porter « Valide 11/12 semaines — une autre semaine bloque ce créneau. » : la semaine que vous regardez va très bien, une autre non.
Ce qu’on peut y faire
Section intitulée « Ce qu’on peut y faire »| Action | Permission | Où c’est expliqué |
|---|---|---|
| Lancer la détection sur un cours | Placement d'une séance | |
| Basculer entre Heatmap et Occupation | cette page | |
| Ouvrir le détail chiffré d’une cellule | Pastilles de contrainte et explicabilité | |
| Régler les poids qui produisent ces scores | Contraintes |
La procédure complète — choisir un cours, lire la heatmap, poser la séance — est dans le guide du planificateur.
États particuliers
Section intitulée « États particuliers »| Ce que vous voyez | Ce que ça veut dire |
|---|---|
| La grille reste nue, sans couleur | aucun cours n’est sélectionné, ou la détection n’a pas été lancée : il n’y a pas de heatmap sans cours de référence |
| « Détection en cours… » | le calcul des cellules est en route ; en attendant, les couleurs de la détection précédente restent affichées |
| « Impossible de calculer les créneaux éligibles. » | le calcul a échoué : aucune cellule n’est colorée, et les compteurs de possibles et d’exclus n’existent pas |
| « Raison indisponible » au survol d’une bande hachurée | la cellule est bien exclue, mais le détail qui porte la raison n’a pas pu être chargé |
| « Dépasse les heures d’ouverture (08:00 – 20:00) » | la fenêtre du cours sortirait de la plage d’ouverture : la cellule est écartée avant toute évaluation, elle n’a jamais eu de score |
| Une bande grise, sans motif ni chiffre | il n’y a pas de créneau de trame à cette hauteur, ce jour-là |
| « Valide 11/12 semaines — une autre semaine bloque ce créneau. » | récurrence : la semaine affichée est bonne, une autre ne l’est pas |
| Les couleurs changent sans que vous ayez rien fait | quelqu’un a modifié le planning ou les poids : les scores sont recalculés et la grille suit |
Sur le chargement pendant un geste : lors d’un glisser-déposer, la heatmap est recalculée pour le cours déplacé. Le résultat est presque toujours déjà en cache — c’est son usage principal — mais lorsqu’il ne l’est pas, les calques apparaissent en cours de geste sans jamais le bloquer.
Sur la fraîcheur : les scores sont mis en cache et invalidés par les événements du produit — placement, déplacement, réservation, indisponibilité de salle, changement de poids. Vous ne voyez donc jamais un score périmé ; vous pouvez voir un score absent le temps qu’il se recalcule.
Écrans liés
Section intitulée « Écrans liés »- Grille de planning — la grille dont la heatmap est un calque.
- Pastilles de contrainte et explicabilité — le détail chiffré d’un score, contrainte par contrainte : la suite naturelle de cette page.
- Placement d'une séance — ce qu’on fait d’une cellule une fois qu’on l’a choisie.
- Panneau d'optimisation — les mêmes scores, appliqués à des dizaines de séances d’un coup.
- Publication du planning — l’étape d’après, une fois les séances posées.
- Contraintes — les poids qui décident de ces scores.
- Score de créneau et Heatmap — les définitions courtes.