Appearance
BDD-99 — Configurer le bloc Croiser
Objectif
En tant qu'administrateur, configurer le bloc Traitement / Croiser en définissant la clé de jointure et le type de jointure, afin de fusionner deux sources de données dans le pipeline workflow.
Périmètre livré
- Deux entrées obligatoires : le nœud Croiser doit avoir exactement deux connexions entrantes (Source ou Traitement en amont).
- Clé de jointure : sélection parmi les colonnes communes aux deux fichiers chargés (intersection des noms de colonnes).
- Type de jointure :
innerouleft. - Aperçu du résultat : tableau (jusqu'à 10 lignes) après simulation sur les données chargées.
- Nombre de lignes non jointes affiché après simulation :
- inner : lignes gauche sans correspondance + lignes droite sans correspondance ;
- left : lignes gauche sans correspondance uniquement.
- Simulation sur les lignes chargées depuis le fichier du dépôt (
GET /sources/preview?documentUuid=, ~20 lignes par fichier). Ce n'est pas l'exécution complète du pipeline côté serveur (hors périmètre MVP4 actuel). - Les blocs Source lient un fichier du dépôt (
inputDocumentUuid). Voir Workflows (MVP4).
Topologie canvas
text
Source A ──┐
├──► [Traitement / Croiser] ──► …
Source B ──┘Ou avec traitements intermédiaires (chaque branche remonte jusqu'au fichier dépôt).
Gauche / droite : ordre stable des deux prédécesseurs directs, tri par id du nœud source de l'arête (branche « gauche » = id le plus petit).
Comparaison des clés (simulation)
Les valeurs de jointure sont comparées après normalisation légère :
null,undefinedet chaîne vide sont des clés distinctes entre elles ;- les autres valeurs sont converties en chaîne (
String(value)), sans trim ni harmonisation des zéros (01≠1).
Format de configuration JSONB (workflow_nodes.configuration)
json
{
"type": "croiser",
"joinKey": "code_departement",
"joinType": "inner"
}joinType : "inner" (défaut) ou "left".
Les colonnes homonymes côté droit sont suffixées __droite dans l'aperçu (sauf la clé de jointure).
Fichiers principaux
| Rôle | Chemin |
|---|---|
| Moteur (logique pure) | front/src/pages/admin/workflows/workflow-croiser.engine.js |
| Résolution des deux branches | front/src/pages/admin/workflows/workflow-croiser-branches.resolver.js |
Sync UI sous-type / config.type | front/src/pages/admin/workflows/workflow-traitement.sync.js |
| Options type traitement | front/src/pages/admin/workflows/workflow-treatment-type-options.js |
| Panneau UI | front/src/components/workflows/WorkflowCroiserPanel.vue |
| Intégration éditeur | front/src/pages/admin/workflows/WorkflowEditorPage.vue |
| Chargement lignes dépôt (prévisualisation) | front/src/pages/admin/workflows/workflow-source-preview.fetch.js |
| Tiroir inspecteur | front/src/components/workflows/WorkflowInspectorDrawer.vue |
API
PUT /workflows/:uuid/canvas:nodes[].inputDocumentUuidpour les blocssource;nodes[].configpour lestraitement(typecroiser).
Tests
front/src/__tests__/pages/admin/workflows/workflow-croiser.engine.spec.jsfront/src/__tests__/pages/admin/workflows/workflow-croiser-branches.resolver.spec.jsfront/src/__tests__/pages/admin/workflows/workflow-traitement.sync.spec.js
Chaînage des aperçus (pipeline MVP4)
Chaque bloc Traitement consomme la sortie simulée de son prédécesseur direct (un seul entrant pour Mapper / Nettoyer ; deux pour Croiser). Seul un bloc Source lit le fichier du dépôt.
Exemples :
Source → Nettoyer: nettoyage des lignes du fichier.Source → Mapper → Nettoyer: nettoyage après renommage / typage Mapper.Source A + Source B → Croiser → Nettoyer: nettoyage sur le résultat de la jointure.
Implémentation : workflow-traitement-preview.pipeline.js (resolveNodeOutput, resolvePredecessorInputForTraitement, resolveCroiserBranchInputs).
Scripts SQL
Aucun — réutilisation du schéma existant (workflow_nodes.configuration JSONB, input_document_id sur les nœuds source, voir BDD-98 / sql/tool_14_workflow_input_document.sql).
