Skip to content

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émentExemple
Référence colonne[montant_a], [statut]
Arithmétique[a] + [b], [a] * 2, [a] / [b]
Comparaison[a] > 10, [a] = [b]
Conditionsi [a] > 10 alors 'haut' sinon 'bas'
Littérauxnombres (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ôleChemin
Moteur frontfront/src/pages/admin/workflows/workflow-colonne-calculee.engine.js
Panneau UIfront/src/components/workflows/WorkflowColonneCalculeePanel.vue
Éditeur expressionfront/src/components/workflows/WorkflowColonneCalculeeExpressionEditor.vue
Helpers UIfront/src/pages/admin/workflows/workflow-colonne-calculee-ui.helpers.js
Moteur backback/src/api/workflows/execution/workflow-colonne-calculee.engine.ts
Staging SQLback/src/api/workflows/staging/workflow-colonne-calculee-staging.service.ts
Options type traitementfront/src/pages/admin/workflows/workflow-treatment-type-options.js

API

  • PUT /workflows/:uuid/canvas : nodes[].config pour les nœuds traitement (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, E2E admin-workflows.spec.js.
  • Back : workflow-colonne-calculee.engine.spec.ts, workflow-colonne-calculee-staging.service.spec.ts, workflow-run-staging-execution.service.spec.ts, E2E workflows-controller.e2e-spec.ts.