Appearance
BDD-154 — Corrections du bloc Agréger : réinitialisation du nom et format décimal FR
Contexte
Deux blocages utilisateur ont été identifiés dans le bloc Agréger :
- Le champ « Colonne cible » se réinitialisait à son nom par défaut (celui de la colonne source) dès que l'utilisateur supprimait le dernier caractère. L'utilisateur était pris dans une boucle infinie : impossible de vider le champ pour en saisir un nouveau.
- Le bloc refusait les valeurs décimales au format français (virgule comme séparateur, ex.
1,75ou7,83), ce qui rendait tout calcul impossible sur des données issues de fichiers français.
Cause racine — Bug 1 : réinitialisation du nom
Dans normalizeMetricItem (workflow-group-by.engine.js), le repli sur sourceColumn utilisait l'opérateur || :
js
// Avant
const targetColumn =
sanitizeLabel(raw?.targetColumn).slice(0, GROUP_BY_NAME_MAX_LENGTH) || sourceColumnUne chaîne vide étant falsy, dès que l'utilisateur vidait le champ, la normalisation remplaçait '' par la valeur de sourceColumn. Ce comportement se déclenchait à chaque frappe via le computed config du panneau Vue.
Correctif — Bug 1
Le repli sur sourceColumn a été supprimé de la normalisation UI. Il reste présent aux seuls endroits où il est légitime : la validation (validateGroupByConfig) et l'exécution (applyGroupByToRows).
js
// Après
const targetColumn = sanitizeLabel(raw?.targetColumn).slice(0, GROUP_BY_NAME_MAX_LENGTH)Cause racine — Bug 2 : format décimal français
La regex de validation dans workflow-ligne-synthese.engine.js n'acceptait que le point comme séparateur décimal :
js
const NUMERIC_CELL_RE = /^-?[0-9]+(\.[0-9]+)?$/La valeur 1,75 ne correspondait pas à ce motif et était rejetée comme non numérique.
Correctif — Bug 2
La fonction parseNumericCellForSum normalise la virgule en point avant la validation :
js
// Après
const normalized = text.replace(',', '.')
if (!NUMERIC_CELL_RE.test(normalized)) return 'invalid'
return Number(normalized)1,75 devient 1.75 avant d'être testé et converti. Cette fonction étant partagée, le correctif s'applique également au bloc Ligne de total.
Critères d'acceptance
| # | Critère | Couvert par |
|---|---|---|
| 1 | Supprimer les caractères un par un ne réinitialise pas le champ à sa valeur par défaut | normalizeMetricItem — fallback supprimé de la normalisation UI |
| 2 | L'utilisateur peut vider complètement le champ et saisir un nouveau nom | Chaîne vide préservée ; validation bloque uniquement à l'exécution |
| 3 | Le bloc Agréger accepte les valeurs décimales au format français (ex. 1,75) | parseNumericCellForSum — normalisation virgule → point |
| 4 | Les valeurs 1,75 et 7,83 sont correctement traitées sans erreur de validation | Tests unitaires workflow-ligne-synthese.engine.spec.js |
Fichiers modifiés
| Fichier | Modification |
|---|---|
front/src/pages/admin/workflows/workflow-group-by.engine.js | Suppression du fallback || sourceColumn dans normalizeMetricItem |
front/src/pages/admin/workflows/workflow-ligne-synthese.engine.js | parseNumericCellForSum normalise la virgule en point avant validation |
front/src/__tests__/pages/admin/workflows/workflow-group-by.engine.spec.js | 3 nouveaux cas de test BDD-154 (conservation de targetColumn vide) |
front/src/__tests__/pages/admin/workflows/workflow-ligne-synthese.engine.spec.js | 4 nouveaux cas de test BDD-154 (format décimal français) |
