Release v1.1.0 - #309
Merged
Merged
Conversation
Les seeders de référence posaient le squelette (classes, matières, barèmes) mais laissaient l'application vide : 50 élèves sans inscription, aucune note, aucune facture, aucun bulletin. Impossible de montrer Dalibi sans saisir les données à la main. DemoSeeder remplit une année scolaire cohérente sur six classes (un niveau par cycle) : 183 élèves inscrits avec dossier complet, programme et affectations des enseignants, évaluations notées selon une distribution en cloche, bulletins figés du premier trimestre, facturation passée par InvoiceService (reçus et écritures de caisse compris), présences quotidiennes, emploi du temps et trois cycles de paie couvrant les états payé / validé / brouillon. Le niveau de chaque élève est tiré une fois puis réutilisé sur toutes ses matières : sans cela le classement serait un tirage au sort et les bulletins n'auraient aucun sens. Les retenues légales (CNSS, ITS) sont activées, sinon brut et net resteraient égaux sur toute la paie. Seeder idempotent et déterministe : réexécutable sans doublon, mêmes données d'une machine à l'autre. Interdit en production comme les autres seeders de démonstration. fix(seeders): StudentTestSeeder écrivait un statut d'inscription invalide Le seeder posait status = 'paid'/'unpaid', valeurs remplacées par PENDING/ACTIVE/CANCELLED lors du changement de contrainte. La migration correspondante ignore SQLite, donc les tests passaient alors que toute inscription échouait sur PostgreSQL — d'où 50 élèves pour 3 inscriptions.
Le balayage des tables après le premier jet en laissait dix vides : la démonstration s'arrêtait aux gros modules et plusieurs écrans restaient muets. Sont désormais alimentés : - calendrier scolaire (22 événements), dates dérivées des périodes réelles plutôt qu'écrites en dur, plus les fêtes légales togolaises et les sessions d'examens officiels déjà enregistrées ; - moyennes par matière : l'écran Notes lit la table `grades`, distincte des notes d'épreuves, et restait vide alors que les bulletins se calculent depuis les évaluations. La moyenne y est consolidée, pondérée par le coefficient de l'épreuve comme le fait la saisie manuelle ; - justificatifs d'absence, réclamations de notes, inscriptions aux examens officiels, primes du personnel et documents délivrés ; - archives et pièces du dossier élève, avec un PDF réellement écrit sur le disque « secure » : sans fichier, le premier clic sur « télécharger » renverrait un 404. Ces PDF utilisent une police interne plutôt que DejaVu Sans, embarquée dans chaque fichier : 1,8 Ko au lieu de 850 Ko, soit 220 Ko au total contre 38 Mo à sauvegarder pour rien. fix(seeders): sexe et prénom des enseignants générés indépendamment Le sexe était tiré après le prénom, ce qui produisait des « Pauline » déclarées masculines dans la liste des enseignants.
Les élèves étaient tous rattachés à Lomé/Maritime/Golfe avec des adresses générées par Faker (« 27 rue Roche »), sans rapport avec le Togo. La carte géographique des statistiques n'affichait qu'un point et la couverture plafonnait à 72,7 %. Ajoute un extrait des divisions administratives réelles (database/data/ togo-localites.json), tiré de la base Togonou : 5 régions, 40 préfectures et un échantillon de localités par préfecture (3 827 au total). L'extraction répare les doubles encodages UTF-8/CP850 présents dans la source, retire les précisions cadastrales entre parenthèses et écarte les 47 entrées irrécupérables. Le recrutement suit la réalité d'un établissement de Lomé : deux élèves sur trois viennent du Grand Lomé (Golfe, Agoè-Nyivé), le reste des autres régions avec un poids décroissant selon l'éloignement — un tirage uniforme aurait donné un quart d'élèves venus des Savanes. Adresses à la togolaise (quartier et repère plutôt qu'un numéro de rue). Couverture géographique portée à 100 %, 20 préfectures représentées.
Les noms venaient de Faker fr_FR (Besson, Levy, Pelletier), sans rapport avec le Togo. Ajoute trois listes de noms togolais authentiques — prénoms masculins et féminins (prénoms « jour de naissance » éwé/mina majoritaires, prénoms courants, quelques prénoms du Nord, musulmans et chrétiens) et patronymes (noms éwé/mina/guin, noms du Nord, familles afro-brésiliennes de Lomé) — puis tire tous les noms (élèves, enseignants, parents, contacts d'urgence) dans ces listes selon le sexe. Les prénoms restent cohérents avec le sexe enregistré, et le nom de famille du père suit celui de l'élève (cohérence familiale), la mère gardant son nom de jeune fille.
L'en-tête ministériel du bulletin est rendu par DocumentRenderer, mais le CSS du bulletin n'embarquait aucun style `.mh-*` : le logo, sans plafond de taille, s'affichait à sa dimension naturelle (450×450 px) et écrasait tout l'en-tête. Inclut `DocumentRenderer::headerCss()` dans le CSS du bulletin — méthode déjà prévue pour les documents qui ne reprennent pas tout le baseCss. Le logo est désormais plafonné à 68 px et l'en-tête à trois colonnes (ministère, logo, république) reprend sa mise en forme (filets, tailles de police).
…ompo) Le calcul Classe/Compo du bulletin distingue les évaluations par la catégorie de leur type : « continu » (note de classe) contre « composition » (examen). Dans la base de dev, le type « Composition » avait dérivé en catégorie « continu » — résultat : la colonne Compo du bulletin restait vide, la composition était diluée dans la note de classe, et la moyenne contournait la pondération Classe/Compo du barème (compo null → repli sur classe seul). Le seeder de référence (ExamenTypeSeeder) est correct ; c'est la donnée qui avait divergé. DemoSeeder rétablit désormais les catégories avant de créer les évaluations (ensureEvaluationTypeCategories), pour que la démo reste cohérente quelle que soit la dérive des données de référence.
Le libellé par défaut de la colonne de contrôle continu passe de « Classe » à « Devoir », convention plus parlante sur les bulletins. Seul l'affichage change : la clé et la source restent « classe », donc la colonne agrège toujours le contrôle continu (interro + devoir) et la moyenne continue de combiner ce total avec la composition. Les modèles existants portant encore le libellé par défaut sont réalignés ; un libellé déjà personnalisé par une école n'est pas écrasé.
Le jeu de démo ne remplissait que six classes ; les quinze autres restaient vides. DemoSeeder couvre désormais toutes les classes actives, avec un effectif plancher de 20 élèves (variation déterministe 20–24 pour les classes sans effectif dédié) et les effectifs spécifiques conservés pour la variété. Toutes les étapes en aval itèrent déjà sur l'ensemble des classes : programme, affectations, évaluations, notes, moyennes, factures, présences, emploi du temps et bulletins suivent automatiquement. Résultat : 21 classes peuplées, 507 élèves, 507 bulletins, contre 183 auparavant. Seeder toujours idempotent (complément jusqu'à l'effectif cible, sans doublon).
La colonne « note » de source « composition » était résolue par `$line['composition']`, mais le snapshot du bulletin stocke cette valeur sous la clé « compo » (comme le renvoie subjectClasseCompo). Résultat : la colonne Compo restait vide au rendu, y compris quand la note existait — indépendamment de la période et du barème. Le rendu fait désormais correspondre la source « composition » à la clé « compo » du snapshot. Correctif purement d'affichage : aucun bulletin à régénérer, la donnée était déjà présente dans le snapshot.
Le calendrier s'ouvre sur le mois d'aujourd'hui, or le jeu de démo groupait ses événements en début et fin de période — laissant le mois courant vide. À l'ouverture, la démo paraissait donc « sans marquage » alors que l'année en comptait partout ailleurs, et que le rendu colore bien par type. Ajoute cinq événements ancrés sur la date du jour (réunion de coordination, journée sportive, semaine de devoirs surveillés, sortie pédagogique, réunion parents-professeurs), de types et couleurs variés, pour que le calendrier s'affiche peuplé et coloré dès l'ouverture.
Release v1.1.0 — jeu de démo complet + correctifs bulletin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v1.1.0 vers
main.Jeu de démonstration complet (toutes classes ≥ 20 élèves, données togolaises réelles) + correctifs de bulletin (colonne Composition vide au rendu, logo d'en-tête, catégorie de composition) + colonne « Classe » → « Devoir ».
Voir
CHANGELOG.md(1.1.0). CI validée sur la PR #308.🤖 Generated with Claude Code