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

Chaque commande dit quelle version de la règle l'a calculée

Objectif Savoir, des mois plus tard, quelle règle de port a calculé chaque commande.

Le port est calculé par un script Kotlin que fournit l'opérateur du hub. En décembre, il est offert dès 150,00. Au 1er janvier, dès 200,00. L'opérateur remplace le script.

manifests/shipping-fee-v1.kts
// Operator-provided: the shipping fee of an order. Free shipping from 150.00 of goods.@Suppress("UNCHECKED_CAST")val cells = bindings["cells"] as MutableMap<String, Any?>val total = (cells["goods_total"] as String).toBigDecimal()cells["shipping_fee"] = if (total >= "150.00".toBigDecimal()) "0.00" else "12.90"
orders-2025-12.csv
order_no;order_date;customer;goods_total
CMD-2401;2025-12-03;Durand;89.00
CMD-2402;2025-12-09;Morel;172.50
CMD-2403;2025-12-15;Nguyen;240.00
CMD-2404;2025-12-22;Faure;150.00
manifests/shipping-fee-v2.kts
// Operator-provided: the shipping fee of an order. Free shipping from 200.00 of goods (from 1 January).@Suppress("UNCHECKED_CAST")val cells = bindings["cells"] as MutableMap<String, Any?>val total = (cells["goods_total"] as String).toBigDecimal()cells["shipping_fee"] = if (total >= "200.00".toBigDecimal()) "0.00" else "12.90"
orders-2026-01.csv
order_no;order_date;customer;goods_total
CMD-2501;2026-01-05;Roux;172.50
CMD-2502;2026-01-12;Garnier;199.99
CMD-2503;2026-01-19;Durand;215.00
manifests/20-shipped-order.yaml
kind: Entityname: shipped_order_blabel: Commande expédiéedescription: "An order with the shipping fee the operator's rule computed, and the run that wrote it."match: [order_no]scopes: [sales-b]columns:  order_no: { label: "Commande" }  order_date: { label: "Date" }  customer: { label: "Client" }  goods_total: { label: "Marchandises" }  shipping_fee: { label: "Port" }  run_id: { label: "Run" }sources:  - table: t_scenario_shipping_b    map: { order_no: order_no, order_date: order_date, customer: customer, goods_total: goods_total,           shipping_fee: shipping_fee, _run_id: run_id }   # _run_id: the run that wrote the row

Limites

  • Le run liste les versions qu'il a appliquées, pas quelles lignes sont passées par laquelle. Un script remplacé pendant un run laisse ses lignes sous les deux versions.
  • L'empreinte identifie un texte. Garder les versions du script reste le travail de l'opérateur.
  • Commandes synthétiques.

Ventes · audit

Le port suit une règle de l'opérateur.

Elle change au 1er janvier.

Offert dès 150,00, puis dès 200,00

La question

Pourquoi ce port, sur cette commande?

  • 172,50 en décembre: port offert.
  • 172,50 en janvier: port payé.

Ce qui n'est pas modifié

Le connecteur reste le même.

  • Il nomme la règle, il ne la contient pas.
  • L'opérateur remplace le fichier.

Le piège

Une règle remplacée ne laisse pas de trace.

  • Même nom de fichier.
  • On ne sait plus laquelle a tourné.

Ce qu'il a fallu écrire

_run_id: run_id

Une ligne.

  • Chaque commande nomme son run.
  • Chaque run nomme sa version de la règle.
  • Deux manifestes, 34 lignes.

La réponse

Deux runs, deux empreintes.

  • Décembre: la version 1.
  • Janvier: la version 2.

La limite

L'empreinte nomme un texte.

  • Garder les versions du script reste le travail de l'opérateur.

Essayer

Le scénario se rejoue en local.

Chaque étape est publiée avec sa sortie.

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

Essayer lumnik Open →