- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary) - Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees - Liens: 9 ancres reparees (slugs GitHub) - Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete - Glossaire: 15 termes standard deplaces en section rappel avec renvoi - Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final) - Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
14 KiB
title, tags, status, standard_ref, jira_refs, confluence_refs, sources, last_updated, author
| title | tags | status | standard_ref | jira_refs | confluence_refs | sources | last_updated | author | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Mapping ERP-WMS - Changement article et propriétaire |
|
draft | concepts/erp-interface.md |
|
|
2026-07-20 | Arthur |
Mapping ERP-WMS - Changement article et propriétaire
Résumé : processus [CUSTOM] de changement d'article et de propriétaire en cours de vie du stock, via message CHG.
Standard EasyWMS : → voir ERP Integration Ce qui suit documente les spécificités Limagrain par rapport au standard.
Voir aussi : Données principales et stock pour le mapping complet ITM, attributs logistiques et architecture article/lot.
Contexte projet
Chez Limagrain, l'article (numéro, description et destination) et le propriétaire peuvent être modifiés en cours de vie du stock. Ces changements sont notifiés par un message CHG descendant de SAP vers EasyWMS.
Le message standard STR (Stock Transfer Request) est aussi utilisé pour les demandes de changement de statut de stock.
Message STR - Demande de Changement de Stock
Cas d'usage
L'ERP envoie un STR pour :
- Changement de code article (produit SAP + description)
- Changement de propriétaire
- Blocage/déblocage de lot
Règles d'acceptation
- Accepté si la palette n'est pas assignée à une commande ou en cours de mouvement
- Refusé si palette "client" ou en préparation → code erreur API explicite (ERR renvoyé à SAP)
Interaction STV/GNA
L'ajustement de stock avec motif "STR" est filtré par le middleware GNA (pas de retraitement STV pour éviter les doublons). Ce mécanisme devient caduc si le STV est globalement désactivé (décision 30/04/2026).
Monitoring
Limagrain mettra en place un monitoring des erreurs STR pour les cas de refus. Les refus sont attendus en fonctionnement normal (palette en cours de préparation au moment du STR).
Message CHG - Changement article / propriétaire (LIM-113)
Statut (LIM-113) : En cours - revue fonctionnelle uniquement ; dévs non démarrés, en attente de validation technique client (Arthur 06/07).
Objectif et contexte
SAP demande au WMS de modifier une ligne de stock existante (code
article, propriétaire, destination et attributs logistiques induits) sans
mouvement physique de la palette. Cas principal : bascule de propriétaire
lors des clôtures fiscales (ex. FR10 → FR02, deux sociétés juridiques
distinctes), où tout ou partie du stock d'une société est vendu à l'autre par
une opération purement comptable/légale.
Ce flux va à l'encontre de la règle d'or (le WMS est maître de l'état physique du stock ; toute variation est normalement initiée par le WMS). Le CHG demande au WMS de subir un ordre sur son propre stock. Il est donc encadré : le WMS ne modifie le stock que si la HU et ses lignes de stock ne sont engagées dans aucun processus, sinon il refuse.
Mécanisme d'appel
SAP appelle la commande StartWorkflowCommand
(Mecalux.ITSW.Application.CommonApplication.Commands.StartWorkflowCommand)
sur CustomApplication, ProcessName = CST_CHG_WF (WF custom à développer de
zéro). SAP envoie l'identité complète de la palette : toutes les valeurs
cibles, pas seulement les champs modifiés, pas de couple ancienne/nouvelle
valeur.
Champs modifiables (JSON reçu)
| Attribut (JSON) | Sémantique | Exemple |
|---|---|---|
containerCode |
Code HU (clé primaire) | 036607231001292781 |
ContainerTypeCode |
Type de support | PALETTE_US |
productCode |
Code article | 2025078581 |
Quantity |
Quantité | 1.000 |
UnitOfMeasureCode |
Unité de mesure | BAG |
LotCode |
Lot (code produit SAP) | 000000000000384823 |
Color |
Propriétaire SAP | FR10 |
Source |
Description courte SAP | SC04-FERT-B 400KG-BE-NEU |
Size |
Pays de destination | BE |
Statut de stock explicitement EXCLU du CHG. Le changement de statut passe par le flux STR standard (voir ci-dessus), inchangé. Le WF
CST_CHG_WFignore le champ statut même s'il est présent dans le JSON.⚠️ Pour changer à la fois un attribut et le statut d'une même HU : deux appels API distincts (CHG puis STR). Risque assumé : l'un peut passer et l'autre échouer (travail à moitié fait) → le client gère le rejeu de l'appel en erreur.
Logique du workflow CST_CHG_WF
- Récupération HU + identification de la ligne : clé =
containerCode; lister toutes les lignes de stock de la HU ; identifier la bonne ligne en comparant les attributs reçus (une HU peut porter plusieurs lignes). HU inexistante ou aucune ligne correspondante → refus (message explicite). - Vérification « HU et lignes libres de tout flux » : reprendre la
logique de ADB-117 (batterie de
Count()sur les tables métier), mais appliquée au code support et aux lignes de stock (pas à l'article). Différence majeure : ADB-117 supprimait du stock ; ici on ne supprime rien. Si la HU ou une ligne est présente dans autre chose que les tables Stocks / Support → refus. Tables à contrôler (liste indicative, exhaustivité à établir par le dev) : ProductLocations / lignes réservées ou assignées, Tasks, OutboundOrders(Lines), Receptions(Lines), InboundOrders(Lines), chargements camion, tournées, vagues, workorders, inventaires (lignes), livraisons, colis, ajustements de stock. - Refus tout ou rien : si une seule ligne (ou la HU) est engagée → refus intégral du CHG. Le message précise quelle ligne et dans quelle(s) table(s)/flux elle est engagée.
- Idempotence : comparer champ par champ les valeurs cibles aux valeurs actuelles. Si toutes déjà en place → OK (200) sans rien tenter ; sinon appliquer les champs qui diffèrent.
- Application : si HU + ligne libres → appliquer les nouvelles valeurs (article, propriétaire, destination, attributs logistiques) et renvoyer 200.
Acquittement API et notification
- Succès → WF terminé normalement → API 200.
- Échec (refus métier ou erreur) → throw d'une exception HTTP 500 avec le message d'erreur complet.
⚠️ Contrainte technique built-in : le seul moyen de renvoyer un message d'erreur exploitable sur ce type d'appel
StartWorkflowCommandest de throw une exception (500). Il n'existe pas d'acquittement négatif propre (200 + payload de refus). Un CHG refusé pour raison métier normale (palette dans un flux) remonte donc techniquement comme un 500 : SAP doit l'interpréter comme un refus métier (pas un plantage), lire le message, débloquer, puis rejouer. À communiquer à Limagrain.
En complément, le WMS génère une notification interne en cas de refus, pour traitement manuel par un gestionnaire formé (paramétrage standard + léger custom potentiel ; mécanisme de notifications/alertes standard à vérifier en doc Confluence).
Volumétrie et cible fonctionnelle
- Pas de flux régulier de faible volume mais des vagues liées aux clôtures : jusqu'à ~1000 lignes d'un coup, jusqu'à un tiers du stock sur 2 jours. Limagrain envoie des messages unitaires (ex. 1000 appels plutôt qu'un message groupé). À valider (Mecalux) : traitement synchrone ou asynchrone / arrière-plan pour tenir la charge sans bloquer les flux 24/7.
- Cible : ~90 % des changements passent s'ils sont envoyés au bon moment ; ~10 % (palette dans un flux) → refus + correction manuelle par un gestionnaire. Pas de sur-automatisation initiale.
Statut de stock
Changement sur poste de travail
[CUSTOM] L'utilisateur peut changer le statut du stock sur le poste de travail uniquement lors du processus de retour commandes clients, pour appliquer :
- F9 - Sacs sales
- B6 - Non conforme
Un commentaire est associé au statut.
⚠️ Mise à jour (LIM-90) : le STC est désactivé (décision 30/04). Pour les retours client, les statuts sont remontés dans le REF via les balises ZLOG/ZINCO (codes SAP). Hors retour, seul le B6 remonte, via le LOC (action R/U). Catalogue des 8 statuts + balises REF : voir Réception retour.
Attributs du statut de stock
[CUSTOM] 3 attributs relatifs au statut de stock chez Limagrain :
- Statut de stock : valeur du statut (ex : F9, B6)
- Commentaire : raison du changement (liste déroulante contextuelle)
- Date de changement : horodatage automatique
Les commentaires sont présentés sous une liste déroulante avec les possibilités dépendant du statut sélectionné.
Autonomie Limagrain
Limagrain peut créer ses propres statuts de stock :
- Menu « Données principales » → « Types de verrous » → « Statut de stock »
- Bouton « Nouveau » → remplir les champs requis
Diagramme de séquence - Changement article
sequenceDiagram
participant SAP
participant WMS as EasyWMS (CST_CHG_WF)
SAP->>WMS: StartWorkflowCommand CST_CHG_WF (identité complète HU)
WMS->>WMS: Récupère HU + identifie la ligne de stock
alt HU et lignes libres de tout flux
WMS->>WMS: Applique article/propriétaire/destination (idempotent)
WMS-->>SAP: 200 (OK)
else HU/ligne engagée dans un flux, ou HU/ligne introuvable
WMS->>WMS: Notification interne (gestionnaire)
WMS-->>SAP: throw exception 500 (motif + table/flux)
end
Diagramme de séquence - Changement statut (retour client)
sequenceDiagram
participant OP as Opérateur
participant WMS as EasyWMS
participant SAP
OP->>WMS: Changement statut (F9 ou B6) + commentaire
WMS->>WMS: MAJ statut ligne de stock
WMS->>SAP: REF avec ZLOG/ZINCO à la clôture (LIM-90)
⚠️ Diagramme mis à jour (LIM-90) : la remontée se fait via le REF (balises ZLOG/ZINCO) à la clôture de la réception retour, pas via STC (désactivé).
Points d'attention
⚠️ Le CHG renvoie 200 en cas de succès et 500 (throw exception) en cas de refus métier ou d'erreur. Le 500 n'est pas un plantage mais peut être un refus attendu (palette engagée dans un flux) - SAP doit lire le message pour savoir quoi débloquer avant de rejouer (LIM-113).
⚠️ Le statut de stock est exclu du CHG : il passe par le STR. Changer un attribut et le statut = deux appels distincts (CHG puis STR).
⚠️ Refus tout ou rien : une seule ligne engagée bloque l'intégralité du CHG sur la HU.
⚠️ Le changement de statut sur poste est limité au processus retour client (pas en picking ni en regroupement).
⚠️ Le message STR (standard) est aussi utilisé pour des demandes de changement de statut initiées par SAP.
Questions ouvertes
Liste exhaustive des statuts de stock Limagrain prévus au démarrage→ Résolu (LIM-90) : 8 statuts retour (F9 + 7 motifs B6), F2 = absence. → voir Réception retourListe des commentaires par statut - validée ?→ Résolu (LIM-90) : libellés/motifs définis (ZINCO 0002-0008). Blocages à confirmer client.CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)→ Résolu (LIM-113) : 200 en succès, 500 (throw exception) en refus/erreur ; pas d'acquittement négatif propre, le 500 véhicule le motif- Identification de la ligne de stock concernée dans la HU (une HU peut porter plusieurs lignes) : critère de comparaison des attributs reçus à préciser (@Vincent, commentaire 07/07)
- Traitement synchrone ou asynchrone / arrière-plan des appels CHG pour tenir la volumétrie des clôtures (~1000 lignes) sans bloquer les flux 24/7 (@Nicolas / Mecalux)
- Liste exhaustive des tables/entités où une HU ou une ligne de stock peut être référencée/verrouillée (au-delà de la liste indicative ADB-117) - action développeur
Historique des modifications
| Date | Auteur | Modification |
|---|---|---|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-06 | Arthur | Ajout section STR détaillée (CR consolidé ERP) |
| 2026-07-17 | Arthur | LIM-90 : STC désactivé → remontée statuts retour via REF (ZLOG/ZINCO), diagramme corrigé, 2 questions statuts résolues (renvoi catalogue réception-retour) |
| 2026-07-20 | Arthur | LIM-113 (lecture directe, En cours) : refonte complète de la section CHG - objectif/contexte (bascule propriétaire clôture fiscale FR10→FR02, règle d'or), mécanisme StartWorkflowCommand/CST_CHG_WF (identité complète), table des 9 champs JSON, statut exclu (STR séparé, 2 appels), logique WF en 5 étapes (récup HU + ID ligne, contrôle libre de flux façon ADB-117 sur HU/lignes, refus tout ou rien avec motif, idempotence, application), acquittement 200/500 (throw), notification interne, volumétrie clôtures ~1000 lignes + sync/async, cible 90/10 ; diagramme séquence CHG refondu ; points d'attention (200/500, statut exclu, tout ou rien) ; 1 question résolue (acquittement) + 3 nouvelles (ID ligne @Vincent, sync/async, liste exhaustive tables) ; front matter jira_refs +LIM-113/sources/tags/last_updated |
Références
| Source | Type | Date |
|---|---|---|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| LIM-90 | Ticket Jira (statuts ZLOG/ZINCO) - revue de code terminée, préprod | 2026-06-03 |
| LIM-113 | Ticket Jira (flux API CHG, CST_CHG_WF) - En cours, revue fonctionnelle |
2026 |
| ADB-117 | DevOps Athenza (logique Count() sur tables métier, réf. de reprise) |
- |
| DevOps 88942 | Work item Athenza (bsd-limagrain) | - |