Skip to content

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 :

  1. 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.
  2. Le bloc refusait les valeurs décimales au format français (virgule comme séparateur, ex. 1,75 ou 7,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) || sourceColumn

Une 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èreCouvert par
1Supprimer les caractères un par un ne réinitialise pas le champ à sa valeur par défautnormalizeMetricItem — fallback supprimé de la normalisation UI
2L'utilisateur peut vider complètement le champ et saisir un nouveau nomChaîne vide préservée ; validation bloque uniquement à l'exécution
3Le bloc Agréger accepte les valeurs décimales au format français (ex. 1,75)parseNumericCellForSum — normalisation virgule → point
4Les valeurs 1,75 et 7,83 sont correctement traitées sans erreur de validationTests unitaires workflow-ligne-synthese.engine.spec.js

Fichiers modifiés

FichierModification
front/src/pages/admin/workflows/workflow-group-by.engine.jsSuppression du fallback || sourceColumn dans normalizeMetricItem
front/src/pages/admin/workflows/workflow-ligne-synthese.engine.jsparseNumericCellForSum normalise la virgule en point avant validation
front/src/__tests__/pages/admin/workflows/workflow-group-by.engine.spec.js3 nouveaux cas de test BDD-154 (conservation de targetColumn vide)
front/src/__tests__/pages/admin/workflows/workflow-ligne-synthese.engine.spec.js4 nouveaux cas de test BDD-154 (format décimal français)