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

Le code-barres faux repéré à l'import

Objectif Repérer à l'import les codes-barres faux.

Un export catalogue porte des codes EAN-13, dont certains faux. Aucun transformateur intégré ne calcule la clé de contrôle.

manifests/ean-check.kts
// Operator-provided: checks an EAN-13 bar code and says why one is wrong.@Suppress("UNCHECKED_CAST")val cells = bindings["cells"] as MutableMap<String, Any?>val ean = (cells["ean"] as? String)?.trim().orEmpty()cells["ean_status"] = if (!Regex("\\d{13}").matches(ean)) {    "malformed"} else {    val sum = ean.take(12).mapIndexed { i, c -> (c - '0') * (if (i % 2 == 0) 1 else 3) }.sum()    if ((10 - sum % 10) % 10 == ean[12] - '0') "valid" else "wrong-check-digit"}
manifests/ean-draft.kts
// Draft, deliberately broken: lm validate must refuse it (line 8).@Suppress("UNCHECKED_CAST")val cells = bindings["cells"] as MutableMap<String, Any?>val ean = (cells["ean"] as? String)?.trim().orEmpty()cells["ean_status"] = if (!Regex("\\d{13}").matches(ean)) {    "malformed"} else {    val sum: Int = ean.take(12).mapIndexed { i, c -> (c - '0') * (if (i % 2 == 0) 1 else 3) }  // ERROR HERE: mapIndexed gives a List<Int>, not an Int    if ((10 - sum % 10) % 10 == ean[12] - '0') "valid" else "wrong-check-digit"}
manifests/10-catalogue.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-ean-b  connector_type: csv-file  scopes: [catalogue]spec:  transport:    kind: local    path: /tmp/lumnik-scenario/catalogue-ean-check/b/catalogue.csv  parser:    has_header: true  after_process: none  mapping:    cell:      - kotlin:          script: hooks:ean-check-b.kts   # put in the hub's hooks directory by the operator
catalogue.csv
sku,label,ean
ART-101,Plateau inox 30 cm,2001234000000
ART-102,Bac gastro 1/1,2001234000017
ART-103,Spatule silicone,2001234000024
ART-104,Pince de service,2001234000032
ART-105,Fouet 25 cm,2001234000048
ART-106,Louche 12 cl,2001234000055
ART-107,Planche à découper,2001234000062
ART-108,Passoire 24 cm,2001234000074
ART-109,Écumoire inox,2001234000086
ART-110,Couteau d'office,200123400009

Limites

  • Un script tourne avec tous les droits du hub: seul l'opérateur en installe un.
  • Un script remplacé s'applique au lot suivant, pas au milieu d'un lot.
  • Le script tourne sur les imports CSV.
  • Catalogue synthétique, codes au préfixe 200, réservé à l'usage interne.

Catalogue · EAN-13

Un code-barres faux arrive en caisse.

Le produit ne passe pas. Le client attend.

L'export catalogue porte 10 codes EAN-13. Trois sont faux.

Catalogue fictif · données synthétiques

Le problème

Le dernier chiffre se calcule.

  • Un EAN-13 finit par une clé de contrôle.
  • Une faute de saisie la rend fausse.
  • Aucun outil standard ne la vérifie à l'import.

La règle

L'opérateur dépose un script. Le manifeste le nomme.

mapping:
  cell:
    - kotlin:
        script: hooks:ean-check.kts

2 manifestes, 24 lignes. Un script de 10 lignes.

Avant tout import

Un script faux est refusé à la validation.

  • Ligne 8, colonne 20.
  • Aucun connecteur créé.
  • Rien n'est importé.

Le résultat

Chaque code reçoit un verdict.

  • 7 codes valides.
  • 2 clés de contrôle fausses: ART-104, ART-108.
  • 1 code de 12 chiffres: ART-110.

Valeurs réelles, rejeu du 28 octobre 2026.

La sécurité

Le script a tous les droits du hub.

  • Seul l'opérateur l'installe.
  • L'intégrateur le choisit par son nom.
  • L'empreinte SHA-256 dit quelle version tourne.

Essayer

Le scénario se rejoue de bout en bout.

Scripts, refus, import: chaque étape est publiée avec sa sortie.

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

Essayer lumnik Open →