lint(limagrain): corrections completes Phase 1+2
- 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
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
---
|
||||
title: "Mapping ERP-WMS — Changement article et propriétaire"
|
||||
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom]
|
||||
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: architecture/erp-integration.md
|
||||
jira_refs: []
|
||||
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"]
|
||||
last_updated: 2026-05-06
|
||||
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
|
||||
# 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.
|
||||
@@ -30,7 +30,7 @@ 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
|
||||
## Message STR - Demande de Changement de Stock
|
||||
|
||||
### Cas d'usage
|
||||
|
||||
@@ -59,26 +59,113 @@ 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
|
||||
## Message CHG - Changement article / propriétaire (LIM-113)
|
||||
|
||||
### Contenu du message
|
||||
> **Statut (LIM-113)** : En cours - revue fonctionnelle uniquement ; dévs non
|
||||
> démarrés, en attente de validation technique client (Arthur 06/07).
|
||||
|
||||
| Champ | Description | Modifié si |
|
||||
|-------|-------------|------------|
|
||||
| Numéro de HU | Identifiant palette | Toujours présent |
|
||||
| Lot Officiel | Lot de référence | Toujours présent |
|
||||
| Code nouvel article | Nouveau code article | Changement article |
|
||||
| Description nouvel article | Libellé | Changement article |
|
||||
| Destination | Nouvelle destination | Changement article |
|
||||
| Propriétaire Limagrain | Nouveau propriétaire | Changement propriétaire |
|
||||
### Objectif et contexte
|
||||
|
||||
### Contrainte d'exécution
|
||||
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.
|
||||
|
||||
Le changement ne peut avoir lieu **que si le stock n'est pas assigné à
|
||||
un processus** (picking, expédition, regroupement, etc.).
|
||||
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**.
|
||||
|
||||
Si le stock est assigné → le message CHG génère un message **ERR** pour
|
||||
informer SAP que le changement est impossible.
|
||||
### 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
|
||||
|
||||
@@ -88,11 +175,16 @@ informer SAP que le changement est impossible.
|
||||
travail **uniquement** lors du processus de **retour commandes clients**,
|
||||
pour appliquer :
|
||||
|
||||
- **F9** — Sacs sales
|
||||
- **B6** — Non conforme
|
||||
- **F9** - Sacs sales
|
||||
- **B6** - Non conforme
|
||||
|
||||
Un commentaire est associé au statut et remonté dans le message d'interface
|
||||
(STC) pour informer l'ERP.
|
||||
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
|
||||
|
||||
@@ -112,23 +204,25 @@ 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
|
||||
## Diagramme de séquence - Changement article
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant SAP
|
||||
participant WMS as EasyWMS
|
||||
participant WMS as EasyWMS (CST_CHG_WF)
|
||||
|
||||
SAP->>WMS: CHG (nouveau code article, description, destination)
|
||||
alt Stock non assigné
|
||||
WMS->>WMS: MAJ article sur les lignes de stock
|
||||
Note over WMS: Pas de confirmation retour
|
||||
else Stock assigné à un processus
|
||||
WMS->>SAP: ERR (changement impossible)
|
||||
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)
|
||||
## Diagramme de séquence - Changement statut (retour client)
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
@@ -138,13 +232,25 @@ sequenceDiagram
|
||||
|
||||
OP->>WMS: Changement statut (F9 ou B6) + commentaire
|
||||
WMS->>WMS: MAJ statut ligne de stock
|
||||
WMS->>SAP: STC (notification changement statut)
|
||||
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 ne renvoie pas de confirmation positive — seule l'erreur (ERR)
|
||||
est remontée si le changement échoue.
|
||||
⚠️ 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).
|
||||
@@ -154,9 +260,21 @@ changement de statut initiées par SAP.
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
- [ ] Liste exhaustive des statuts de stock Limagrain prévus au démarrage (@Justine)
|
||||
- [ ] Liste des commentaires par statut — validée ? (@Justine)
|
||||
- [ ] CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)
|
||||
- [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
|
||||
|
||||
@@ -164,6 +282,8 @@ changement de statut initiées par SAP.
|
||||
|------|--------|--------------|
|
||||
| 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
|
||||
|
||||
@@ -171,3 +291,7 @@ changement de statut initiées par SAP.
|
||||
|--------|------|------|
|
||||
| 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) | - |
|
||||
|
||||
Reference in New Issue
Block a user