lumnik. / scénarios Tous les scénarios · English

Un statut de commande écrit de quatorze façons

Objectif Compter les commandes par statut, quelle que soit l'orthographe, et être prévenu d'une orthographe nouvelle.

Quinze ans de saisie à la main ont laissé EC, Livré, LIV, ANNUL… dans l'export des commandes. lumnik ne touche pas l'ERP:

orders-night1.csv
order_id;customer;agency;ordered_on;status
C-1001;CLI-001;Lyon;01/09/2026;Saisie
C-1002;CLI-008;Grenoble;02/09/2026;EC
C-1003;CLI-015;Valence;03/09/2026;Annulée
C-1004;CLI-022;Chambéry;04/09/2026;EN COURS 
C-1005;CLI-029;Lyon;05/09/2026;Livré
C-1006;CLI-005;Grenoble;06/09/2026;SAI
C-1007;CLI-012;Valence;07/09/2026;Livrée
C-1008;CLI-019;Chambéry;08/09/2026;
C-1009;CLI-026;Lyon;09/09/2026;encours
C-1010;CLI-002;Grenoble;10/09/2026;Annulée
C-1011;CLI-009;Valence;11/09/2026;En cours
C-1012;CLI-016;Chambéry;12/09/2026;LIVREE
C-1013;CLI-023;Lyon;13/09/2026;SAI
C-1014;CLI-030;Grenoble;14/09/2026;Livrée
C-1015;CLI-006;Valence;15/09/2026;EN ATT
C-1016;CLI-013;Chambéry;16/09/2026;encours
C-1017;CLI-020;Lyon;17/09/2026;LIV
C-1018;CLI-027;Grenoble;18/09/2026;En cours
C-1019;CLI-003;Valence;19/09/2026;LIVREE

… 21 lignes de plus

manifests/20-order-status.yaml
apiVersion: apps.lumnik.io/v1kind: Workflowmetadata:  name: scenario-order-status-aspec:  scope: order-desk  provenance: declared  on:    table: connector.t_scenario_orders_a    column: status  check:    trigger: ingestion  states:    - code: SAISIE      label: "Saisie"      initial: true    - code: EN_COURS      label: "En cours"      aliases: ["En cours", "encours"]    - code: LIVREE      label: "Livrée"      aliases: ["Livrée"]      terminal: true    - code: ANNULEE      label: "Annulée"      aliases: ["Annulée"]      terminal: true
manifests/30-order-status-completed.yaml
apiVersion: apps.lumnik.io/v1kind: Workflowmetadata:  name: scenario-order-status-aspec:  scope: order-desk  provenance: declared  on:    table: connector.t_scenario_orders_a    column: status  check:    trigger: ingestion  states:    - code: SAISIE      label: "Saisie"      aliases: ["SAI"]      initial: true    - code: EN_COURS      label: "En cours"      aliases: ["En cours", "encours", "EC"]    - code: LIVREE      label: "Livrée"      aliases: ["Livrée", "Livré", "LIV"]      terminal: true    - code: ANNULEE      label: "Annulée"      aliases: ["Annulée", "ANNUL"]      terminal: true
$ lm integration add scenario-orders-a --url http://host.docker.internal:9212/events --events workflow.undeclared.scenario-order-status-a --secret-stdin
registered: scenario-orders-a (id 1046) — forwards subscribed events from now on
orders-night2.csv
order_id;customer;agency;ordered_on;status
C-1001;CLI-001;Lyon;01/09/2026;En cours
C-1002;CLI-008;Grenoble;02/09/2026;Livrée
C-1003;CLI-015;Valence;03/09/2026;Annulée
C-1004;CLI-022;Chambéry;04/09/2026;EN COURS 
C-1005;CLI-029;Lyon;05/09/2026;Livré
C-1006;CLI-005;Grenoble;06/09/2026;En-cours
C-1007;CLI-012;Valence;07/09/2026;Livrée
C-1008;CLI-019;Chambéry;08/09/2026;
C-1009;CLI-026;Lyon;09/09/2026;En-cours
C-1010;CLI-002;Grenoble;10/09/2026;Annulée
C-1011;CLI-009;Valence;11/09/2026;Livrée
C-1012;CLI-016;Chambéry;12/09/2026;LIVREE
C-1013;CLI-023;Lyon;13/09/2026;SAI
C-1014;CLI-030;Grenoble;14/09/2026;Livrée
C-1015;CLI-006;Valence;15/09/2026;EN ATT
C-1016;CLI-013;Chambéry;16/09/2026;encours
C-1017;CLI-020;Lyon;17/09/2026;LIV
C-1018;CLI-027;Grenoble;18/09/2026;En cours
C-1019;CLI-003;Valence;19/09/2026;LIVREE

… 21 lignes de plus

orders-night3.csv
order_id;customer;agency;ordered_on;status
C-1001;CLI-001;Lyon;01/09/2026;En cours
C-1002;CLI-008;Grenoble;02/09/2026;Livrée
C-1003;CLI-015;Valence;03/09/2026;Annulée
C-1004;CLI-022;Chambéry;04/09/2026;EN COURS 
C-1005;CLI-029;Lyon;05/09/2026;Livré
C-1006;CLI-005;Grenoble;06/09/2026;En-cours
C-1007;CLI-012;Valence;07/09/2026;Livrée
C-1008;CLI-019;Chambéry;08/09/2026;
C-1009;CLI-026;Lyon;09/09/2026;En-cours
C-1010;CLI-002;Grenoble;10/09/2026;Annulée
C-1011;CLI-009;Valence;11/09/2026;Livrée
C-1012;CLI-016;Chambéry;12/09/2026;LIVREE
C-1013;CLI-023;Lyon;13/09/2026;SAI
C-1014;CLI-030;Grenoble;14/09/2026;Livrée
C-1015;CLI-006;Valence;15/09/2026;EN ATT
C-1016;CLI-013;Chambéry;16/09/2026;encours
C-1017;CLI-020;Lyon;17/09/2026;LIV
C-1018;CLI-027;Grenoble;18/09/2026;En cours
C-1019;CLI-003;Valence;19/09/2026;LIVREE

… 22 lignes de plus

Limites

  • Un fichier inchangé n'est pas relu, donc pas revérifié.
  • Les alias ignorent la casse et les espaces autour, pas les accents: «Livré» et «Livre» sont deux orthographes.
  • Un statut vide est compté à part, pas comme une orthographe.
  • lumnik ne corrige pas l'ERP. Statut EN ATT reste à trancher par le métier.
  • Données synthétiques.

Commandes · ERP

Le même statut s'écrit de 14 façons.

EC, encours, En cours, EN COURS: quatre façons de dire «en cours».

40 commandes, exportées chaque nuit.

Commandes fictives · données synthétiques

Le problème

Combien de commandes sont en cours?

  • Compter «En cours» trouve 5 commandes.
  • Il y en a 15, sous quatre écritures.
  • L'ERP ne peut pas être modifié.

Rien n'est modifié

L'ERP garde ses statuts.

  • lumnik lit l'export de la nuit.
  • Il n'écrit pas dans l'ERP.
  • Le sens des statuts est déclaré dans lumnik.

Ce qu'il a fallu écrire

- code: EN_COURS
  aliases: ["En cours", "encours", "EC"]

Cette ligne dit que EC veut dire «En cours».

Le scénario complet tient en 3 fichiers de déclaration, 68 lignes.

Ce que lumnik signale

Les écritures que personne n'a déclarées.

  • Première déclaration: 6 écritures inconnues, sur 15 commandes.
  • Après confirmation: il reste EN ATT, sur 2 commandes.

Valeurs réelles, rejeu du 28 octobre 2026.

Qui décide

Le métier décide. lumnik ne devine pas.

  • EN ATT: paiement ou stock?
  • Tant que le métier n'a pas répondu, EN ATT reste listé.
  • Une écriture confirmée devient un alias, en une ligne.

La nuit suivante

Alerte arrive seule.

  • Nuit 2: une nouvelle écriture arrive, «En-cours».
  • Import suffit: un message la nomme, sur 2 commandes.
  • Nuit 3: rien de nouveau, aucun message.

Essayer

Le scénario se rejoue de bout en bout.

Export, déclaration, confirmation, nuits 2 et 3: chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →