Routage et décisions

Les nodes de routage rendent une bifurcation explicite dans le graphe : ils choisissent une continuation, tandis que les données et décisions qui justifient ce choix restent disponibles comme contrats distincts.

Une décision choisit une route

Une route représente une continuation possible du graphe. Lorsqu’un router s’exécute, une seule route sélectionnée devient active pour cette exécution du node. Les autres branches ne sont pas considérées comme exécutées.

Le routage ne modifie pas à lui seul le modèle métier. Un check_if peut décider qu’un montant dépasse un seuil, mais c’est le node exécuté dans la branche choisie qui produit ensuite l’effet métier — demander une approbation, refuser une opération, créer un objet ou appeler une extension.

Lire un branchement dans le graphe

Données amont
Router / Decision
Route A
Route B
Suite commune

Le router choisit une seule branche. Après convergence, seules les données garanties sur tous les chemins peuvent être considérées comme toujours disponibles.

Une route n’est pas une donnée copiée Le router expose la branche choisie, mais les objets testés restent accessibles via leurs bindings d’origine. Ne recopiez pas un objet dans chaque route uniquement pour le rendre disponible aux nodes aval.

Nodes disponibles

NodeUsageComportement
check_ifConditions structurées sur un objet typéDeux routes fixes : True / False. Les conditions utilisent le même éditeur que les filtres de collection.
route_valueRouter une valeur typéeLes routes correspondent aux valeurs configurées dans le node.
route_expressionRouter le résultat scalaire d’une expressionPour une décision calculée qui doit rester explicite dans le graphe.
evaluate_decisionÉvaluer une politique métier versionnéeEntrées, sorties et routes sont dérivées du contrat de la Decision sélectionnée.

Le catalogue des nodes Core donne le contrat détaillé de chaque primitive.

Routes et sorties sont deux contrats différents

check_if produit surtout une route true ou false. À l’inverse,evaluate_decision peut exposer des sorties typées en plus de la route sélectionnée, parce que ces données appartiennent au contrat de la Decision versionnée.

ÉlémentRôleExemple
RouteChoisit l’arête sortante qui devient active.approved, rejected, true.
SortieProduit une donnée typée réutilisable par les nodes suivants.Score, plafond calculé, motif structuré.
Donnée amontReste disponible selon les règles normales de binding et d’ancêtres.La facture ou l’entreprise qui a été testé.
Les routes Trouvé et Non trouvé relient ici les recherches successives de contact de facturation.
Les routes Trouvé et Non trouvé relient ici les recherches successives de contact de facturation. Agrandir

Convergence : ne supposez pas qu’une branche a été exécutée

Après la convergence de deux branches, la sortie d’un node présent uniquement dans la route A n’est pas un ancêtre garanti du node commun. L’éditeur et le modèle de bindings utilisent la structure du graphe pour empêcher de traiter comme certaine une valeur qui n’existe que sur certains chemins.

Évitez les sorties conditionnelles implicites Si la suite commune a besoin d’une même donnée quelle que soit la branche, produisez-la avant le router ou assurez-vous que chaque branche la matérialise dans un contrat commun explicite. Ne dépendez pas d’un node qui ne s’exécute que sur un chemin.

Choisir le bon node

  • check_if — une ou plusieurs conditions lisibles sur un objet connu.
  • route_value — une valeur déjà disponible correspond directement aux branches souhaitées.
  • route_expression — la valeur de routage doit être calculée, mais ne justifie pas un artefact Decision autonome.
  • evaluate_decision — la politique mérite son propre contrat, ses révisions, ses tests et sa trace d’évaluation.

Une expression est utile pour calculer une valeur ; elle ne doit pas rendre invisible une politique métier qui gagnerait à être nommée, versionnée et testée comme Decision.