PrepaStrat · Aide

Le board de suivi des écoles

Ce que voit un administrateur d'école, d'où viennent les chiffres, ce qu'ils veulent dire exactement — et ce qui reste entre vos mains.

← Retour au configurateur
1 Le principe

Le board est un écran unique où l'administrateur d'une école partenaire voit où en est sa promotion : combien d'étudiants, qui avance, qui n'a jamais validé son adresse, quels contenus accrochent.

Il ne montre qu'une école : la sienne. Le nom de l'école n'est jamais lu dans l'adresse de la page, ni dans quoi que ce soit que le navigateur envoie : il est retrouvé dans la base au moment de la connexion, puis scellé dans la session. Autrement dit, un administrateur qui modifierait l'adresse à la main pour voir une autre école n'obtiendrait rien — c'est ce qui empêche une école de lire les chiffres d'une autre, et un test le vérifie : une session dont on change l'école est refusée.
2 Ce que l'écran montre

L'écran répond à une question dans l'ordre où elle se pose : où la promotion se perd-elle, puis que faire, puis qui et quoi.

1

Le parcours, plutôt que des chiffres sans lien

Quatre marches — comptes rattachés, adresse validée, ont commencé, ont terminé un cours — et la perte affichée entre chacune. Chaque marche est un sous-ensemble de la précédente : c'est ce qui autorise à parler de perte. Les invitations n'y figurent donc pas — un invité n'est pas encore un compte, et la marche remonterait.

Une perte nulle ne s'affiche pas : la signaler partout transformerait un parcours sain en suite d'alertes, et l'œil cesserait de distinguer celle qui compte.

2

« À faire » : chaque carte porte un verbe

Adresses à valider, étudiants à relancer, cours auxquels il manque un accès, invitations sans réponse. Un constat sans action est une inquiétude ; avec le bouton, c'est une tâche. Le bloc entier disparaît quand il n'y a rien à faire — un « tout va bien » permanent apprend à ne plus regarder la zone.

« À relancer » croise deux signaux au lieu d'en trier un seul : absent depuis 30 à 60 jours et moins de la moitié du parcours. Absent depuis 40 jours mais à 90 %, il a fini ce qu'il avait à faire ; à 10 % mais connecté hier, il travaille. Au-delà de 60 jours, ce n'est plus un risque mais un départ déjà consommé : le mélanger noierait la liste sur laquelle l'école peut encore agir.

3

Une répartition, parce qu'une moyenne ne suffit pas

30 % décrit aussi bien une promotion groupée autour de 30 qu'une promotion coupée en deux — et les deux n'appellent pas la même réaction. L'histogramme montre la forme ; la moyenne reste à côté, avec sa fiabilité, qui ne s'affiche que si elle est en défaut.

4

Trois onglets : Étudiants, Cours, Qui a ouvert quoi

Cours : une barre par cours, découpée sur l'effectif de l'école — terminé, commencé, jamais ouvert. « Commencé par 2 » ne disait pas 2 sur combien, et c'était le défaut : 2 sur 4 est une alerte, 2 sur 200 en est une autre.

Qui a ouvert quoi : la seule vue qui montre le croisement. Une ligne entièrement vide est un étudiant qui n'a pas démarré ; une colonne entièrement vide, un cours que la promotion n'a pas lancé. Ni la liste des étudiants ni celle des cours ne fait apparaître cela.

🔴 Trois zéros qui ne disent pas la même chose. Un cours du parcours que personne n'a ouvert garde sa barre vide : c'est celui qu'il faut relancer. Un cours auquel aucun étudiant de l'école n'a accès n'a pas de barre du tout, mais une phrase — il n'est pas délaissé, il n'est pas le sien. Et un écart d'accès (un étudiant privé de ce que ses camarades ont) s'affiche en pastille ambre : sa valeur normale est zéro, c'est ce qui le rend utile.
3 Comment on entre

Pas de mot de passe. L'administrateur saisit son adresse, reçoit un code à six chiffres, et le saisit. C'est tout.

1

L'adresse doit figurer dans la liste

Une adresse qui n'y figure pas ne reçoit aucun code. Mais l'écran affiche exactement le même message dans les deux cas, que l'adresse ait accès ou non. Répondre « cette adresse n'a pas accès » reviendrait à confirmer, à qui essaierait des adresses au hasard, lesquelles sont celles des administrateurs.

2

Le code vaut 3 heures et ne sert qu'une fois

Cinq tentatives au maximum : à la cinquième erreur, le code est détruit et il faut en redemander un.

C'est ce plafond de cinq essais qui protège, pas la durée de vie du code. Un code à six chiffres, ce sont 900 000 combinaisons possibles ; en cinq essais, la probabilité de tomber sur la bonne est de 5 sur 900 000 — soit une sur 180 000. Allonger la durée n'y changerait rien : celui qui essaie n'a que cinq coups à jouer, que le code reste valable dix minutes ou trois heures.

3

La session dure 12 heures

Passé ce délai, il faut redemander un code. Ce n'est pas figé : si c'est trop court à l'usage, la durée se change en une ligne.

🟢 L'envoi des codes fonctionne depuis le 10 août. La clé du service d'e-mail (Brevo) est en place, et les deux parcours ont été éprouvés : un code reçu sur le board comme sur le configurateur.

⚠️ Contrepartie à connaître : le mode d'installation, qui déposait le code dans le journal de la base faute de pouvoir l'envoyer, ne s'active plus. Si Brevo refuse un envoi, c'est son motif qui est consigné — jamais le code en clair. Un code qui n'arrive pas se cherche donc dans le journal des incidents (« État du système »), pas dans la base.
🔴 Un mot de passe a été envisagé, puis écarté. Il n'aurait rien changé au fond : il faut de toute façon un e-mail pour le choisir la première fois, et un autre pour le réinitialiser quand il est oublié — l'adresse reste donc le point de passage obligé. En échange, il aurait fallu demander à des directeurs d'école de retenir un mot de passe de plus, et traiter les oublis.
🟢 « Se connecter avec Google » ou « Microsoft » reste possible en plus, comme bouton supplémentaire : tout ce qui suit la connexion ne dépend que d'une adresse prouvée. Le jour où on l'ajoutera, il faudra n'accepter qu'une adresse vérifiée par le fournisseur — sinon un compte créé avec admin@ecole.fr chez un fournisseur laxiste ouvrirait le board de cette école.
4 D'où viennent les chiffres

Le board ne calcule rien quand on l'ouvre : il lit un relevé déjà calculé. Et il affiche toujours de quand il date.

1

Une collecte chaque nuit à 3 h

Elle interroge LearnWorlds école par école et écrit un relevé.

2

Et un rafraîchissement quand quelqu'un regarde

Si le relevé a plus de 15 minutes, le board sert l'existant immédiatement et relance une collecte en arrière-plan. Des chiffres quasi frais pour qui consulte, zéro requête quand personne ne consulte.

3

Un verrou de 5 minutes

Cinq administrateurs qui ouvrent le board à la même minute ne lancent pas cinq collectes.

🔴 Pourquoi pas du temps réel. Le plafond de l'API LearnWorlds est de 30 requêtes toutes les 10 secondes, et il est partagé avec le site. Une grosse collecte en pleine journée ralentirait l'annuaire et les pages que vos étudiants utilisent au même moment. Mesuré le 8 août sur la promotion d'alors (4 étudiants) : ~10 requêtes et 10 secondes, soit environ deux requêtes par étudiant. À ce rythme, une promotion de 600 coûterait ~1 200 requêtes, soit une dizaine de minutes. C'est cela qui justifie la nuit, pas la lenteur du board.
5 Ce que les chiffres veulent dire

Trois règles, et elles sont écrites à un seul endroit dans le code pour qu'un graphique ne puisse pas contredire le chiffre du haut de page.

1

Un invité et un accès retiré sont listés, mais hors des chiffres

Compter un invité à 0 % ferait baisser la moyenne de l'école à chaque invitation envoyée — cela punirait exactement le geste qu'on veut encourager. Un accès retiré n'est plus de la promotion, mais sa progression est conservée : l'action est réversible.

2

0 % et « inconnu » ne sont pas la même chose

Un étudiant à 0 % est un fait sur la promotion : il pèse dans la moyenne. Un étudiant dont la progression n'a pas pu être lue est une lacune de mesure : il en sort, et l'encart annonce alors sur quelle part de la promotion la moyenne porte.

3

« Jamais connecté » n'est pas « actif ce mois »

Un étudiant qui n'a jamais ouvert son compte n'a aucune date de dernière connexion. L'absence de date se laisse facilement confondre avec une date récente, et il se retrouverait alors compté parmi les actifs du mois — le chiffre que l'école regarde en premier serait gonflé par ceux qui ne sont jamais venus. Ce cas est traité à part, et un test empêche l'erreur de revenir.

🔴 Sur quoi les pourcentages sont calculés — et cela change de sens. Si l'école a un programme attitré, tous ses étudiants sont mesurés sur la même base. Sinon — cas de l'ESSEC aujourd'hui, où l'appartenance est portée par une simple étiquette — chacun est mesuré sur les cours auxquels il est inscrit. La moyenne devient alors une moyenne de taux individuels calculés sur des bases différentes, et non un taux d'avancement global. Le board annonce donc en clair, sous le titre, sur quelle base il a compté : deux moyennes qui s'affichent pareil ne disent pas la même chose, et une école a le droit de savoir laquelle on lui montre.
6 Les pages et les programmes

Les cours sont regroupés comme sur le site : Cours, Études de cas, Fiches secteur, Fiches cabinet, S'entraîner, Compétences, Webinars. Un administrateur d'école ne connaît pas les programmes LearnWorlds ; il connaît les pages que ses étudiants ouvrent.

Ce regroupement se vérifie tout seul. Les totaux par page tombent exactement sur les cartes comptées page par page. Relevé le 24 août : Cours 6 + 4 = 10, Compétences 5, Fiches cabinet 21, Fiches secteur 24, S'entraîner 3, Études de cas 106. Ce sont les mêmes nombres que ceux affichés sur le site.

⚠️ Ces chiffres changent à chaque publication : ils sont recomptés à chaque collecte, personne ne les saisit. Ceux qui figurent ici ne sont qu'un repère de lecture.

Presque tout se met à jour tout seul. Les noms de cours, les cours ajoutés à un programme, les nouveaux cours, les étudiants qui arrivent ou partent : tout est relu à chaque collecte. Rien n'est figé dans le code.

Une seule chose se déclare à la main : quelle page affiche quel programme. Et ce n'est pas un oubli. Cette correspondance n'existe nulle part ailleurs que dans le Site Builder : chaque page compose ses cartes au moment où l'étudiant l'ouvre, si bien qu'aucune lecture automatique de LearnWorlds ne peut la retrouver. Il faut donc la déclarer une fois — et une seule, puisqu'elle ne change que si vous réorganisez le site.

Elle est rangée dans la base plutôt que dans le code, ce qui veut dire qu'elle se modifie sans nous et sans mise à jour du site :

Où taper ces lignes. Dans le tableau de bord Cloudflare du compte qui héberge le board, ouvrir la base de données prepa-lw (rubrique D1), puis son onglet Console : on y colle le texte et on l'exécute, sans rien installer.

L'effet est immédiat et il n'y a rien à redémarrer : la collecte suivante en tient compte.

⚠️ C'est le seul réglage du board qui passe encore par du SQL. Créer une école ou un accès, lui, se fait à l'écran (chapitre 8) — cette table-ci n'a pas d'écran parce qu'elle change une fois par réorganisation du site, pas une fois par client.

Si vous préférez la ligne de commande, l'équivalent est npx wrangler d1 execute prepa-lw --remote --command "…".
-- ranger un nouveau programme sur une page
INSERT INTO pages (programme_id, page, ordre) VALUES ('mon-programme', 'Cours', 1);

-- le déplacer
UPDATE pages SET page = 'Compétences' WHERE programme_id = 'mon-programme';

-- voir l'état actuel
SELECT page, programme_id FROM pages ORDER BY ordre, page;
🔴 programme_id est le champ id de l'API d'administration, pas titleId : ce dernier est vide en lecture (mesuré sur 12 programmes sur 12). S'y tromper met tous les programmes « sans page ».

🔴 Deux identifiants dont le nom trompe : etudes-de-cas est « Tout Savoir sur les Études de Cas », qui vit sur Compétences et non sur la page Cas ; et introduction est « Business Sense ».
🟢 Un programme absent de cette table est signalé, jamais rangé au hasard. Vous n'avez donc rien à surveiller : le board vous dira quand il faut ajouter une ligne.
7 Les versions anglaises

Un cours et sa version anglaise forment une seule ligne, avec deux jeux de chiffres. Présenter deux lignes reviendrait à montrer deux fois le même contenu à une école, et un étudiant inscrit aux deux versions pèserait double.

L'appariement se déduit, sans table à maintenir, par deux règles :

1

Le nom du programme

X EN est la version anglaise de X. À l'intérieur, les cours s'apparient par leur numéro de niveau, présent dans les deux titres (Niveau #1 ↔ Level #1).

2

Le suffixe du titre

Un cours nommé … EN rejoint celui du même nom sans le suffixe.

Ce que l'appariement n'attrape pas reste visible. Un cours anglais que les deux règles ne rattachent à rien garde sa propre ligne, et il est signalé — le faire disparaître ferait perdre du travail réel, puisque des progressions touchent les versions anglaises. Mesuré le 8 août sur les six paires d'alors : cinq rattachées automatiquement, une signalée.
🔴 Pourquoi pas simplement le titre : les titres anglais ont été retraduits (« Level #1 - Introduction to Strategy Consulting »), ce qui est un bon choix produit — un étudiant anglophone ne veut pas lire un titre français — mais supprime toute règle à leur niveau. Seule la règle du programme tient encore.

⚠️ C'est aussi ce qui explique le chiffre du chapitre 10 : au 24 août, la plupart des 44 cours hors programme sont des versions anglaises. Sans programme, la première règle ne s'applique pas ; leurs titres étant traduits, la seconde non plus.
8 Ajouter une école, un administrateur
🟢 Cela ne demande plus de SQL depuis le 11 août. Tout se fait dans l'écran Boards écoles du configurateur (colonne de gauche, « Administration ») : « + Nouveau board », et les champs se remplissent à l'écran. Le SQL de la version précédente de cette page ne fonctionnerait d'ailleurs plus : la table a gagné des colonnes depuis (les domaines sont devenus une liste, l'accès direct est arrivé), et la ligne qui y était écrite serait refusée.

Ce que l'écran demande, dans l'ordre :

1

Le nom affiché et l'identifiant

L'identifiant est l'étiquette LearnWorlds qui définit la promotion (ecole-escp). Il ne se modifie plus ensuite : c'est l'identité du board. Votre automatisation doit poser exactement cette étiquette ; si les deux diffèrent, le board reste vide et rien ne le signalera.

2

Les adresses de l'école

Les domaines e-mail, séparés par des virgules. Ce sont les adresses que l'école a le droit d'inviter depuis son board. Inutile d'écrire les sous-domaines : student.essec.edu est reconnu par essec.edu. Sans domaine, aucune invitation n'est possible.

3

« L'école prend en charge ses étudiants »

Cochée, ces adresses partent vers l'inscription gratuite sur la page d'entrée du site. Décochée, l'école peut toujours inviter, mais chacun paie son abonnement. Cette case oriente, elle n'ouvre aucun cours : l'accès vient de l'étiquette posée par l'automatisation.

4

Le programme de référence — ou rien

Laissé vide, cela signifie « cette école n'a pas de programme attitré » : c'est le cas de l'ESSEC aujourd'hui, et cela change la base de calcul des pourcentages (voir « Ce que les chiffres veulent dire »).

5

Qui peut s'y connecter

Une ou plusieurs adresses. Une même personne peut avoir plusieurs boards — un directeur qui suit deux écoles est une seule adresse, deux accès.

🔴 C'est l'étiquette qui fait foi, jamais le champ « école » du profil. Ce champ est saisi par l'étudiant : mesuré, un filtre sur sa valeur rendait 1 membre sur 7, parce que six avaient écrit la réponse autrement. Une étiquette, elle, ne se reformule pas.

🔴 On désactive un accès, on ne le supprime pas : on garde la trace de qui l'avait. Attention toutefois — une session déjà ouverte reste valable jusqu'à son expiration (12 h).

⏳ Un changement de domaine ou de case met jusqu'à 5 minutes à être pris en compte par le site.
9 Emporter les chiffres

Trois sorties, et elles portent le même tableau : il est écrit une seule fois, à la collecte. Trois calculs séparés finiraient par diverger, et c'est le client qui lirait l'écart en recoupant son classeur avec son e-mail.

1

Recevoir le rapport par e-mail

Un bouton, et le rapport part. Aucune adresse n'est demandée : il est envoyé à celle de la session. Si le navigateur pouvait choisir le destinataire, une session valide suffirait à expédier les chiffres d'une école n'importe où, depuis un domaine signé — et si le navigateur pouvait fournir le texte, le board deviendrait un relais d'envoi. Le corps est donc construit côté serveur.

Dix minutes entre deux envois : de quoi renvoyer après une faute de frappe, pas de quoi inonder une boîte.

2

Le classeur Excel et le PDF

Le classeur ouvre sur la feuille « Compte rendu » et contient ensuite le détail par étudiant et par cours. Le PDF est la même chose, mise en page pour être transmise.

3

Le compte rendu, en cours commencés

Sept lignes : combien d'inscrits, combien ont commencé au moins un cours, combien en ont commencé au moins trois (« apprenant actif »), et les totaux et moyennes correspondants.

On compte des cours, pas des pages. Une page est une unité au poids variable — nos cours vont de quelques unités à plusieurs dizaines — si bien que « 40 pages vues » ne dit ni combien de sujets ont été abordés, ni quelle part du parcours a été touchée. Un cours compte comme commencé dès qu'une de ses pages est terminée, exactement comme dans l'onglet Cours.

🔴 Ce tableau est un cumul, pas une période. Un modèle daté — « entre le 1er juillet et le 30 avril » — ne peut pas être reproduit : LearnWorlds répond « où en est cet étudiant aujourd'hui », jamais « ce qu'il a fait entre deux dates ». Le seul filtre possible porte sur la date de création du compte. La réserve est affichée avec le tableau, et non en note de bas de page : servir ces nombres sous un titre daté serait un faux.
Le seuil de l'« apprenant actif » — trois cours — est un choix, pas une mesure. Il se change à un seul endroit dans le code.
10 Ce qui peut casser
!

Des comptes de test dans une vraie promotion

Une automatisation associe le domaine boks.app à l'étiquette ESSEC, pour pouvoir éprouver le parcours gratuit sans compte universitaire. Relevé le 24 août : 7 comptes @boks.app portent cette étiquette, contre 3 adresses @essec.edu — la promotion ESSEC est donc majoritairement composée de comptes de test, et ils tirent sa moyenne vers le bas. À retirer dans l'automatisation LearnWorlds avant qu'une vraie école ne regarde.

!

Des cours hors programme

Un cours qu'aucun programme ne contient n'apparaît sur aucune page du site : aucun étudiant ne peut le trouver. Le board les compte, ce qui permet de s'en apercevoir. Relevé le 24 août : 44 cours sur 229 n'appartiennent à aucun programme — pour l'essentiel des versions anglaises (fiches secteur et cabinet traduites, entraînements). Elles ne sont donc visibles nulle part sur le site, et l'appariement automatique ne les rattache à aucune version française puisque leurs titres ont été retraduits. Elles apparaissent en lignes séparées plutôt que d'être rattachées au hasard.

!

Une clé manquante

Sans la clé d'envoi d'e-mail, aucun code ne part. Elle est en place depuis le 10 août, et les deux parcours ont été éprouvés : un code reçu sur le board comme sur le configurateur. Contrepartie à connaître : le mode installation, qui déposait le code dans le journal faute de pouvoir l'envoyer, ne s'active plus — un refus de Brevo est désormais consigné avec son motif, jamais le code en clair. Sans la clé qui signe les sessions, aucune connexion n'est acceptée du tout : devant une configuration incomplète, le board se ferme au lieu de s'ouvrir par accident.

11 Qui fait quoi
Ce qu'il faut faireQuiOù
Créer les cours et les programmes, poser les étiquettes d'école VousLearnWorlds
Corriger l'automatisation qui associe boks.app à l'ESSEC VousLearnWorlds
Créer une école, ses domaines, ses accès, ses textes Vous Configurateur → Administration → Boards écoles
Ranger un programme sur une page VousBase de données · 1 ligne de SQL (chapitre 6)
Lire les étudiants, leur progression, les noms de cours, l'appartenance aux programmes Le code À chaque collecte
Apparier les versions anglaises, calculer les chiffres, signaler ce qu'il ne sait pas ranger Le code À chaque collecte
Ce qui n'est pas encore fait, pour être complet : la courbe d'activité sur 12 semaines n'a aucune source — LearnWorlds ne rend que la dernière date de connexion de chaque étudiant, pas un historique. La reconstituer demanderait de conserver un relevé après relevé. Le graphique le dit à l'écran plutôt que d'afficher une courbe inventée.