7496aafe64
- 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
298 lines
14 KiB
Markdown
298 lines
14 KiB
Markdown
---
|
|
title: "Mapping ERP-WMS - Changement article et propriétaire"
|
|
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom, cst-chg-wf, api]
|
|
status: draft
|
|
standard_ref: concepts/erp-interface.md
|
|
jira_refs: [LIM-90, LIM-113]
|
|
confluence_refs: []
|
|
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", "Jira LIM-90 (revue de code terminée 2026-06-03)", "Jira LIM-113 (lecture directe 2026-07-20)"]
|
|
last_updated: 2026-07-20
|
|
author: 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](../../concepts/erp-interface.md)
|
|
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
|
|
|
|
> Voir aussi : [Données principales et stock](donnees-principales.md) 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_WF` **ignore** 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`
|
|
|
|
1. **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).
|
|
2. **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.
|
|
3. **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.
|
|
4. **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.
|
|
5. **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 `StartWorkflowCommand` est 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](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90).
|
|
|
|
### Attributs du statut de stock
|
|
|
|
[CUSTOM] 3 attributs relatifs au statut de stock chez Limagrain :
|
|
|
|
1. **Statut de stock** : valeur du statut (ex : F9, B6)
|
|
2. **Commentaire** : raison du changement (liste déroulante contextuelle)
|
|
3. **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
|
|
|
|
```mermaid
|
|
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)
|
|
|
|
```mermaid
|
|
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
|
|
|
|
- [x] ~~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 retour](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90)
|
|
- [x] ~~Liste des commentaires par statut - validée ?~~ → **Résolu** (LIM-90) :
|
|
libellés/motifs définis (ZINCO 0002-0008). Blocages à confirmer client.
|
|
- [x] ~~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](https://easywmsfrance.atlassian.net/browse/LIM-90) | Ticket Jira (statuts ZLOG/ZINCO) - revue de code terminée, préprod | 2026-06-03 |
|
|
| [LIM-113](https://easywmsfrance.atlassian.net/browse/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) | - |
|