Appearance
BDD-133 — Traitement Colonne calculée
Objectif
Permettre à l’administrateur d’ajouter une colonne calculée ligne à ligne (somme de deux colonnes, condition simple, etc.) pour dériver des indicateurs sans quitter l’outil.
Périmètre livré
- Sous-type Traitement :
colonne_calculee(libellé UI : Colonne calculée). - Configuration : une ou plusieurs colonnes (
columns[]:columnName+expression). Compatibilité legacy :columnName+expressionà la racine. - Liste des colonnes amont proposée dans l’UI (insertion
[nom]). - Prévisualisation éditeur alignée sur le run (moteur partagé front/back).
- Exécution run : staging SQL (
WorkflowColonneCalculeeStagingService). - Erreurs sanitizées : colonne inconnue, expression invalide, division par zéro (SQL → NULL, aperçu → cellule vide).
- UX : validation avant Lancer, retour expression en direct, exemples, opérateurs, règles de nom de colonne, avertissement colonnes non numériques en arithmétique.
Syntaxe MVP (expression)
| Élément | Exemple |
|---|---|
| Référence colonne | [montant_a], [statut] |
| Arithmétique | [a] + [b], [a] * 2, [a] / [b] |
| Comparaison | [a] > 10, [a] = [b] |
| Condition | si [a] > 10 alors 'haut' sinon 'bas' |
| Littéraux | nombres (42, 3.14), texte ('ok') |
| Parenthèses | ([a] + [b]) * 2 |
Limites : pas de fonctions arbitraires, pas de SQL libre ; uniquement colonnes connues en amont et opérateurs whitelistés.
Format de configuration JSONB
json
{
"type": "colonne_calculee",
"columns": [
{ "columnName": "total", "expression": "[montant_a] + [montant_b]" },
{ "columnName": "flag", "expression": "si [total] > 10 alors 1 sinon 0" }
]
}Legacy (une colonne) : columnName + expression à la racine, normalisés en columns[] à la lecture.
Fichiers principaux
| Rôle | Chemin |
|---|---|
| Moteur front | front/src/pages/admin/workflows/workflow-colonne-calculee.engine.js |
| Panneau UI | front/src/components/workflows/WorkflowColonneCalculeePanel.vue |
| Éditeur expression | front/src/components/workflows/WorkflowColonneCalculeeExpressionEditor.vue |
| Helpers UI | front/src/pages/admin/workflows/workflow-colonne-calculee-ui.helpers.js |
| Moteur back | back/src/api/workflows/execution/workflow-colonne-calculee.engine.ts |
| Staging SQL | back/src/api/workflows/staging/workflow-colonne-calculee-staging.service.ts |
| Options type traitement | front/src/pages/admin/workflows/workflow-treatment-type-options.js |
API
PUT /workflows/:uuid/canvas:nodes[].configpour les nœudstraitement(type: "colonne_calculee").
Tests
- Front :
workflow-colonne-calculee.engine.spec.js,workflow-traitement-preview.pipeline.spec.js,workflow-traitement.sync.spec.js,workflow-block-quality-hints.spec.js(colonne calculée),WorkflowEditorPage.spec.js, E2Eadmin-workflows.spec.js. - Back :
workflow-colonne-calculee.engine.spec.ts,workflow-colonne-calculee-staging.service.spec.ts,workflow-run-staging-execution.service.spec.ts, E2Eworkflows-controller.e2e-spec.ts.
