màj wiki avec retour MES lot-5 AD

This commit is contained in:
Arthur Ria
2026-05-20 09:41:27 +02:00
commit 23eb3f3c84
4106 changed files with 469381 additions and 0 deletions
@@ -0,0 +1,225 @@
---
title: "Données principales et stock — Mapping ITM et attributs"
tags: [ERP, ITM, article, stock, attributs-logistiques, lot-SAP, mapping, CstAtt]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
confluence_refs: ["Données principales + stock - LIMAGRAIN - DEV"]
sources: ["Données principales + stock - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
author: Arthur
---
# Données principales et stock — Mapping ITM et attributs
> **Résumé** : architecture retenue pour la gestion des articles et du stock
> dans EasyWMS chez Limagrain, mapping du message ITM, attributs logistiques,
> profils et gestion des poids.
> **Standard EasyWMS** : → voir [ERP Integration](../../architecture/erp-integration.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Les décisions ci-dessous sont issues des ateliers d'interfaçage EasyWMS / SAP
réalisés entre le 05/01/2026 et le 23/02/2026, consolidées le 27/02/2026.
## Architecture retenue : Lot SAP = Article WMS
Le code article dans EasyWMS est le **code lot SAP** (et non le code produit
SAP). L'option concaténation code produit + lot SAP a été étudiée et écartée.
Le **code produit SAP** est géré comme un attribut au niveau du stock (pas de
la fiche article), car un même lot SAP peut correspondre à plusieurs produits
différents (ex. : changement de destination).
| Relation | Type | Statut |
|----------|------|--------|
| Lot SAP ↔ Lot Officiel | 1 pour 1 | ✅ Validé par Limagrain |
| Code article WMS = Code lot SAP | — | ✅ Validé |
| Code produit SAP = Attribut logistique du stock | — | ✅ Validé |
### Côté SAP
Il existe une base article avec des codes articles uniques. Les articles sont
gérés au lot. Chaque article peut avoir plusieurs codes lots SAP. Chaque code
lot SAP a un équivalent code lot OFFICIEL national (relation 1:1).
### Côté EasyWMS
Chaque lot SAP est descendu via le fichier ITM. L'article SAP devient un
attribut du lot SAP (et non l'inverse).
**Code article WMS = code lot SAP**
## Unité de base selon le type d'article
| Type article | Description | Unité de base WMS |
|--------------|-------------|-------------------|
| FERT | Produit fini | BAG (sac) |
| ZSIZ | Semi-fini calibré | KG |
L'unité de base dans le WMS est l'unité logistique (pas l'unité de base SAP).
Un même produit peut exister en BAG et en KG = codes articles WMS différents.
## Mapping fiche article (message ITM)
| Champ EasyWMS | Champ SAP | Remarque |
|---------------|-----------|----------|
| ItemCode | Code lot SAP | Clé principale |
| Alias | Lot officiel | Relation 1:1, scannable |
| OwnerCode | — | Constante "MECALUX" (technique) |
| Description | Description longue | Affichage PC |
| AltDescription | Description courte (MAKTL) | Affichage mobile, < 65 car. |
| Type | FERT / ZSIZ / etc. | + description du type |
| Family | Traitement commercial | Ex : "20 : R - Cruiser OSR" — pas de séparation familles en préparation |
| BaseUoM | BAG ou KG | Selon type d'article |
| Weight | Poids brut du sac | Poids unitaire théorique |
| ContainerQty | Nb sacs par palette | Palette pleine standard (= Bag/Pal) |
| ContainerType | Palette | Un seul type de palette |
| CstAtt02 | Espèce | Ex : M = Maïs, S = Tournesol — pour ordonnancement picking |
| CstAtt03 | Génération | Génération article rattachée au lot SAP |
| CstAtt04 | Variété | Ex : "LG50465" |
| CstAtt05 | Big bag | True / False |
| CstAtt06 | GTIN | Ne peut être un alias car non unique |
| CstAtt07 | Semences essais | True / False |
| CstAtt08 | Size (calibre) | — |
| CstAtt09 | Field production area | — |
| CstAtt10 | Stage | ⚠️ À ajouter — requis pour étiquette échantillon |
| Conversion.Principale.CstAtt01 | Poids unitaire article | Poids théorique ERP |
## Profils logistiques
| Type d'article | Profil | Description |
|----------------|--------|-------------|
| Articles classiques | PROFIL_STANDARD | Gestion code produit + propriétaire + description + pays destination |
| Palettes bois vides | PROFIL_PALETTE | Gestion palette bois vide |
## Attributs logistiques du stock
> **Décision du 11/02/2026** : les Custom Attributes au niveau du stock
> (CstAtt0104) ont été **supprimés** au profit des attributs logistiques
> standards du WMS. Les modes de capture sont désactivés pour éviter la
> customisation de tous les écrans.
| Champ EasyWMS (balise API) | Libellé affiché WMS | Champ SAP | Remarque |
|----------------------------|---------------------|-----------|----------|
| Lot | Lot | Code produit SAP | Différencie les produits pour un même lot SAP |
| Color | Couleur | Code propriétaire SAP | ≠ "MECALUX" technique |
| Source | Source | Description courte SAP | Désignation courte |
| Size | Taille | Pays de destination | Peut changer en cours de vie du stock |
> ⚠️ Les noms de balises API (Color, Size…) ne correspondent pas aux données
> métier. Le renommage d'affichage est géré dans le WMS.
> **Point à tester** : en réception, la création du stock via les attributs
> logistiques doit être validée (approche standard ou custom — à confirmer
> par les tests).
## Gestion des codes clients / fournisseurs
La base client/fournisseur SAP **n'est pas interfacée** avec le WMS.
Les codes sont gérés via des constantes + champ texte libre :
| Flux | Champ code | Champ Source |
|------|------------|--------------|
| ROR Fournisseur | SupplierCode = "FOURNISSEUR" | Code fournisseur SAP + libellé |
| ROR Retour client | AccountCode = "CLIENT" | Code client SAP + libellé |
| SOR / RUT Client | AccountCode = "CLIENT" | Code client SAP + libellé |
| SOR Production | AccountCode = "PRODUCTION" | — |
## Gestion des poids
| Situation | Comportement ERP |
|-----------|-----------------|
| Article en BAG (UdM ≠ KG) | L'ERP ne s'intéresse qu'à la quantité de sacs — les écarts de poids sont ignorés |
| Article en KG | Seule la quantité en KG intéresse l'ERP — si le poids change (balance), le WMS modifie la quantité |
Le poids théorique de la ligne de stock (quantité × poids unitaire, hors
poids palette) est transmis via l'attribut logistique `Weight`.
## Champs NON utilisés dans ITM
Les champs suivants sont explicitement exclus du mapping :
Stock Label, Classification ABC, Alertes stock (min/max), Image produit,
Code danger (pas d'impact logistique), Températures min/max, Cross-docking,
Gerbabilité (gérée via ordonnancement picking), Picking message, IsPacking.
## Conversions
- Unité de base = BAG ou KG (pas de conversion supplémentaire identifiée)
- Pas de gestion financière ni de découpage dans les sacs
- Le nombre de sacs par palette pleine est géré dans la conversion container
(champ `ContainerQty`)
## Types de supports
| Type | Usage | Statut |
|------|-------|--------|
| EWM-PAL00 / PALETTE_US | Palette standard (un seul type) | ✅ Confirmé |
| BIGBAG | Attribut de la HU (pas type séparé) | ✅ Validé |
| Octobin | Hors périmètre phase 1 | ❌ |
La création de types de supports est techniquement lourde (nécessite passage
par support Mecalux, impact design entrepôt). Les BigBag sont déclarés par
l'opérateur au poste de réception. Le WMS ajuste le calcul de poids (+2 kg
environ).
## Z-Bags (sacs vides)
Stockés dans le magasin automatique (SRS) **uniquement pour livraison aux
clients**, pas pour l'approvisionnement production. Doivent respecter les
mêmes formats et règles que les palettes produits. → À valider
fonctionnellement.
## Paramètres généraux de l'interface
| Paramètre | Valeur |
|-----------|--------|
| Format | JSON |
| Opération par défaut | 3 = Upsert |
| Mode de mise à jour | Complete = true (fiche complète à chaque envoi) |
| OwnerCode (technique) | "MECALUX" |
| Site | WF02 |
## Points d'attention
⚠️ Le CstAtt10 (Stage) est **à ajouter** — il est requis pour l'étiquette
d'échantillonnage.
⚠️ Les noms de balises API stock (Color, Size, Source) sont détournés de
leur usage standard — ne pas confondre avec les concepts habituels.
⚠️ Les CstAtt au niveau du stock ont été supprimés (décision 11/02/2026)
au profit des attributs logistiques standards — vérifier l'impact sur les
développements en cours.
⚠️ Le mode Complete = true signifie que chaque ITM contient la fiche
complète (pas de delta) — attention à la volumétrie.
⚠️ La base client/fournisseur n'est pas interfacée : le code est descendu
dans chaque message ROR/SOR/RUT, pas maintenu en master data.
## Questions ouvertes
- [ ] CstAtt10 Stage — quand sera-t-il ajouté au mapping ITM ? (@Nicolas)
- [ ] Création stock via attributs logistiques en réception — standard ou
custom ? À valider par tests (@Fabien)
- [ ] Impact suppression CstAtt stock sur les développements existants (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis page Confluence DEV |
| 2026-05-06 | Arthur | Ajout champs non utilisés, conversions, types supports, Z-Bags (CR consolidé) |
## Références
| Source | Type | Date |
|--------|------|------|
| Données principales + stock - LIMAGRAIN - DEV | Page Confluence | 27/02/2026 |
| Ateliers interfaçage EasyWMS/SAP | Ateliers | 05/01 → 23/02/2026 |
| Notes complémentaires 11/02/2026 | Note | 11/02/2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers | 23/02/2026 |
@@ -0,0 +1,219 @@
---
title: "Intégration GNA → SAP-CPI"
tags: [ERP, GNA, SAP-CPI, OAuth, middleware, API, BOO]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: [LIM-89]
confluence_refs: []
sources:
- "LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md"
last_updated: 2026-05-12
author: Arthur
---
# Intégration GNA → SAP-CPI
> **Résumé** : mise en place de la communication entre le GNA (middleware
> EasyWMS) et SAP-CPI (middleware cloud SAP) pour l'envoi de tous les
> messages WMS sortants. Authentification OAuth 2.0 client_credentials,
> endpoint unique, routage par MessageType.
> **Standard EasyWMS** : → voir [ERP Integration](../../architecture/erp-integration.md)
> L'intégration standard cible généralement un ERP via API REST classique
> (OAuth password grant). Chez Limagrain, la cible est **SAP-CPI** avec
> un mécanisme spécifique.
> Voir aussi : [LOC — Message périodique](loc-message-periodique.md),
> [Référence messages](messages-reference.md),
> [Mapping ERP-WMS](mapping-erp-wms.md)
## Contexte projet
Dans le cadre du projet Limagrain, le middleware GNA doit envoyer les
messages WMS vers SAP via la plateforme **SAP-CPI** (Cloud Platform
Integration). Une implémentation de référence existe chez un autre client
(AD) mais communique avec un ERP SAP-AIG via une API REST classique
(OAuth password grant).
L'intégration Limagrain est différente : elle cible **SAP-CPI** avec un
**endpoint unique** et une authentification **OAuth 2.0 client_credentials**.
## Architecture technique
### Script principal
Le script `CommonExportWebApi.boo` est le point d'entrée pour tous les
exports WMS → SAP-CPI. Il gère l'authentification, le formatage et
l'envoi des messages.
### Flux de communication
```mermaid
sequenceDiagram
participant WMS as EasyWMS
participant GNA as GNA (BOO)
participant OAuth as SAP OAuth Server
participant CPI as SAP-CPI
WMS->>GNA: Transaction WMS (LOC.SEND, REF01, etc.)
GNA->>GNA: Vérifier cache token
alt Token expiré ou absent
GNA->>OAuth: POST /oauth/token (client_credentials)
OAuth-->>GNA: Bearer token + expiration
GNA->>GNA: Sauvegarder token sur disque
end
GNA->>CPI: POST /http/ATHInboundMessage
Note right of CPI: Body: {MessageType, MessageSAP, data}
CPI-->>GNA: HTTP 200 / erreur
alt Erreur HTTP (hors 401)
GNA->>CPI: Retry backoff (2s, 4s, 8s, 16s)
end
alt HTTP 401
GNA->>GNA: Échec immédiat (token invalide)
end
```
## Authentification OAuth 2.0
### Mécanisme
1. Le GNA obtient un **token bearer** auprès du serveur SAP via un POST
sur `/oauth/token` avec `client_id` et `client_secret`
2. Le grant type est `client_credentials` (pas de password grant)
3. Le token est **mis en cache sur disque** (fichier JSON) avec gestion
de l'expiration (marge de sécurité de 60 secondes)
4. À chaque envoi, le GNA vérifie le cache : si le token est encore valide,
il le réutilise ; sinon il en demande un nouveau
## Envoi des messages — Format du body
Pour chaque message WMS exporté, le GNA envoie un POST vers l'endpoint
unique SAP-CPI `/http/ATHInboundMessage` avec le body JSON suivant :
```json
{
"MessageType": "<type_message_WMS>",
"MessageSAP": "<code_CPI>",
"data": "<contenu_message>"
}
```
Le champ `MessageType` permet au iFlow CPI de **router le message** vers
le bon traitement SAP.
## Table de correspondance MessageType → MessageSAP
Le champ `MessageSAP` est déterminé par une table de correspondance entre
le préfixe du MessageType WMS (3 premiers caractères) et le code SAP-CPI :
| Code CPI | Équivalent WMS | Description |
|----------|----------------|-------------|
| ATH214 | Check flux retour (batch) | Vérification lot retour client |
| ATH215 | REF (type = Supplier) | Finalisation réception fournisseur |
| ATH217 | REF (type = Return) | Finalisation réception retour |
| ATH201 | LOC | Message périodique delta mouvements |
| ATH202 | LOF | Finalisation chargement |
> ⚠️ Si un type de message n'a pas de correspondance dans la table, un
> **warning** est logué et le champ MessageSAP n'est pas inclus dans le
> body.
### Détermination conditionnelle du MessageSAP pour REF
Le message REF peut être routé vers **ATH215** (Supplier) ou **ATH217**
(Return) selon le type de préavis de réception (InboundOrder) lié :
1. Le **REF01Observer.boo** récupère le type de préavis via une requête
LINQ sur `Context.RecLineInboundOrderLines` → `Context.InboundOrders`
2. Le type est transmis dans le champ `RecCustomAttributes.CstAtt20` du
message REF01
3. Le script `CommonExportWebApi.boo` lit `CstAtt20` dans le payload JSON
pour déterminer le `MessageSAP` :
- Type Supplier → `ATH215`
- Type Return → `ATH217`
## Gestion des erreurs — Retry avec backoff
| Situation | Comportement |
|-----------|-------------|
| HTTP 200 | Succès — message envoyé |
| HTTP 401 | **Échec immédiat** — token invalide, pas de retry |
| Autre erreur HTTP | **Retry backoff exponentiel** : 2s → 4s → 8s → 16s |
## Configuration requise
Six clés `CPI_*` à ajouter dans `CommonAppSettings.config`
(section `appSettings`) :
| Clé | Description |
|-----|-------------|
| CPI_AUTH_URL | URL du serveur d'authentification SAP OAuth |
| CPI_CLIENT_ID | Identifiant OAuth |
| CPI_CLIENT_SECRET | Secret OAuth (en clair dans le config) |
| CPI_ENDPOINT_URL | Endpoint unique SAP-CPI (`/http/ATHInboundMessage`) |
| CPI_TOKEN_PATH | Chemin du fichier cache token sur disque |
| CPI_TIMEOUT | Timeout HTTP en secondes (auth + messages) |
## Fichiers impactés
| Fichier | Modification |
|---------|-------------|
| `Scripts2015/CommonExportWebApi.boo` | Script principal d'export WMS → SAP-CPI |
| `Scripts2015/EasyWMS/XML/REF01/REF01Observer.boo` | Ajout requête InboundOrderType + écriture CstAtt20 |
| `Configuration/LIMAGRAI2512/CommonAppSettings.config` | Ajout des 6 clés CPI_* |
## Logging
Chaque étape (connexion, récupération token, envoi message) doit être
loguée avec les détails de la requête et de la réponse. Le body JSON
est logué en **format indenté** pour faciliter le debug.
> ⚠️ Le **token ne doit jamais être logué** (sécurité).
## Cas de tests
- [ ] Le GNA compile sans erreur
- [ ] L'authentification OAuth client_credentials fonctionne (HTTP 200)
- [ ] Le token est mis en cache sur disque et réutilisé tant qu'il est
valide
- [ ] Les messages WMS sont envoyés en POST avec le bon format JSON
- [ ] Le champ MessageSAP est présent avec la bonne valeur selon le type
- [ ] REF type Supplier → MessageSAP = ATH215
- [ ] REF type Return → MessageSAP = ATH217
- [ ] CstAtt20 renseigné dans le message REF01 par le REF01Observer
- [ ] Warning logué si MessageType sans correspondance
- [ ] Retry backoff fonctionne (hors 401)
- [ ] Logs détaillés et lisibles (JSON indenté, token masqué)
- [ ] HTTP 401 → échec immédiat sans retry
## Points d'attention
⚠️ Le **secret OAuth est en clair** dans le fichier de configuration —
accès au fichier à restreindre.
⚠️ La marge de 60 secondes sur l'expiration du token évite les races
conditions mais peut générer des re-authentifications prématurées sous
forte charge.
⚠️ Le backoff exponentiel plafonne à 16 secondes — si SAP-CPI est
durablement indisponible, les messages seront perdus (pas de file
d'attente persistante).
## Questions ouvertes
- [ ] Faut-il implémenter une file d'attente persistante pour les
messages en échec après 4 retries ? (@Nicolas)
- [ ] Le secret OAuth doit-il être chiffré dans le config ?
(@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis LIM-89 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-89](https://easywmsfrance.atlassian.net/browse/LIM-89) | Ticket Jira | 2026 |
@@ -0,0 +1,494 @@
---
title: "LOC — Message périodique (spécification complète)"
tags: [ERP, LOC, custom, delta, mouvement, stock, JSON, SAP, GNA]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: [LIM-76]
confluence_refs: []
sources:
- "LOC - Etat des lieux V2.md"
- "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"
- "LIM-76 LOT1.2 [GNA] Message LOC.md"
last_updated: 2026-05-12
author: Arthur
---
# LOC — Message périodique (spécification complète)
> **Résumé** : spécification du message custom LOC, envoyé du WMS vers SAP
> toutes les 5 minutes via le GNA, contenant le delta des HU modifiées.
> Le LOC remplace les messages PCK, MOVE, STV et STC et devient le **seul
> canal** de notification des mouvements de stock vers SAP.
> **Standard EasyWMS** : → voir [ERP Integration](../../architecture/erp-integration.md)
> Ce message est un **[CUSTOM]** — il n'existe pas dans le standard EasyWMS.
> Voir aussi : [Référence messages](messages-reference.md),
> [Flux ERP outbound](../04-outbound/flux-erp-outbound.md),
> [Intégration GNA → SAP-CPI](gna-sap-cpi.md)
## Contexte projet
Le LOC est un message custom envoyé du WMS vers SAP **toutes les 5 minutes**
(✅ reconfirmé le 30/04/2026), contenant l'état de toutes les HU ayant subi
une modification durant la période écoulée.
Il **remplace** les messages PCK et MOVE (supprimés) et centralise la
communication des mouvements physiques vers l'ERP. Le LOC ne transmet pas
l'intégralité de la base, uniquement le **delta sur la fenêtre de 5 minutes**
(basé sur la `CreationDate` des transactions WMS).
### Pourquoi le LOC plutôt que des STV purs ?
Limagrain (Nicolas Sanchez) a exprimé que les STV en delta (+/-)
ne sont **pas fiables** : si un message se perd ou est mal intégré, l'écart
est définitivement perdu. Limagrain souhaite recevoir des **quantités
absolues** que SAP prend pour argent comptant et compare à ses propres
données pour générer les écritures de delta.
Le LOC est un **fork fonctionnel du WSC** (Warehouse Stock Count) adapté
pour ne remonter que le delta des 5 dernières minutes, formaté selon un
JSON spécifique attendu par SAP.
### Décisions structurantes
- **STV désactivé** (post-processing coupé) — le LOC devient le **seul canal**
de notification des mouvements de stock vers SAP
- **STC désactivé** — les changements de statut hors retour sont limités au
B6 (blocage logistique) et sont couverts par le LOC (action R/U).
Les statuts des retours sont remontés dans le REF
## Architecture technique
### Chaîne de traitement
```
Job (toutes les 5 min) → Workflow → Transaction custom LOC.SEND → GNA →
Script BOO (requêtes WMS + agrégation + formatage JSON) → POST API SAP
```
### Côté WMS
1. Un **Job** s'exécute toutes les 5 minutes
2. Ce job appelle un **Workflow custom** dont le seul rôle est de **créer
une transaction custom** `LOC.SEND`
3. Le Workflow et la transaction ne portent aucune logique métier côté WMS —
toute la logique est dans le GNA
### Côté GNA
1. Un **script BOO** dédié au message LOC est créé dans le GNA
2. Le GNA détecte la transaction custom `LOC.SEND`
3. À réception, le script BOO :
- Collecte toutes les transactions WMS pertinentes sur le delta de temps
- Agrège les données par HU et détermine le code ACTION pour chaque
mouvement
- Construit le JSON au format attendu par SAP
- Effectue un **appel POST** vers l'API SAP-CPI (voir
[Intégration GNA → SAP-CPI](gna-sap-cpi.md))
### Détection du delta
1. À chaque exécution, enregistrer un timestamp de dernière exécution
2. Récupérer toutes les transactions dont `CreationDate > dernier_timestamp`
et `CreationDate ≤ timestamp_courant`
3. Agréger par HU, déterminer le code ACTION pour chaque mouvement
4. Générer le JSON et envoyer
5. **Si aucune transaction pertinente sur le delta → pas d'envoi de LOC**
## Couverture fonctionnelle — 7 codes ACTION
| Code | Signification | Déclencheur |
|------|---------------|-------------|
| **B** | Déplacement bin-to-bin | Déplacement de HU d'une zone à une autre |
| **U** | Set to Unrestricted (déblocage) | Déblocage statut B6 |
| **R** | Set to Restricted (blocage) | Blocage statut B6 |
| **S** | Scrap quantity (suppression) | Suppression de stock / support |
| **T** | Transfert inter-HU | Transfert de quantité entre deux HU |
| **C** | Correction de poids | Ajustement de quantité (valeur absolue) |
| **P** | Assignation client | Palette positionnée sur image de quai |
### Palettes exclues du LOC
**Exclure les palettes liées à une réception non fermée** (= dont le REF
n'a pas encore été envoyé). Seules les HU déjà connues de SAP via un REF
préalable doivent apparaître dans le LOC.
## Format JSON attendu par SAP
### Paramètres d'import
| Réf. | Champ | Type | Description |
|------|-------|------|-------------|
| 1 | IV_LGNUM | CHAR 4 | Numéro d'entrepôt (valeur fixe : `"WF02"`) — config EasyS |
| 2 | IV_TREATMENT_ID | CHAR 24 | Horodatage de génération du LOC |
### Structure JSON
```json
{
"IV_LGNUM": "WF02",
"IV_TREATMENT_ID": "<HORODATAGE_GENERATION_LOC>",
"IT_CREATE": [
{
"MATNR": "<CODE_PRODUIT_SAP>",
"BATCHID": "<LOT_SAP>",
"ACTION": "<CODE_ACTION>",
"ANFME": "<QUANTITE_OU_VIDE>",
"ALTME": "<UDM_OU_VIDE>",
"VLPLA": "<ZONE_STOCKAGE_ORIGINE>",
"NLPLA": "<ZONE_STOCKAGE_DESTINATION>",
"VLENR": "<CODE_SUPPORT_ORIGINE>",
"NLENR": "<CODE_SUPPORT_DESTINATION>",
"REASON": "<CODE_RAISON_OU_VIDE>",
"VBELN": "<CODE_LIVRAISON_OU_VIDE>",
"POSNR": "<LIGNE_LIVRAISON_OU_VIDE>"
}
]
}
```
### Table IT_CREATE — Champs (1:n)
| Réf. | Champ | Type | Description |
|------|-------|------|-------------|
| 1 | MATNR | CHAR 40 | Code produit SAP — vide si action B ou P |
| 2 | BATCHID | CHAR 10 | Code lot SAP — vide si action B ou P |
| 3 | ACTION | CHAR 1 | Code action : B, U, R, S, T, C, P |
| 4 | ANFME | NUM 13.3 | Quantité (absolue ou transférée selon action) — vide si B, U/R, P |
| 5 | ALTME | CHAR 3 | Unité de mesure (BAG, KG) — vide si action B ou P |
| 6 | VLPLA | CHAR 18 | Zone de stockage origine |
| 7 | NLPLA | CHAR 18 | Zone de stockage destination |
| 8 | VLENR | CHAR 20 | Code HU (palette) source — SSCC |
| 9 | NLENR | CHAR 20 | Code HU (palette) destination — SSCC |
| 10 | REASON | CHAR 4 | Code raison scrap — uniquement pour action S (ZSC1) |
| 11 | VBELN | — | Code livraison sortante SAP — uniquement pour action P |
| 12 | POSNR | — | Ligne de livraison sortante SAP — uniquement pour action P |
### Données stock/container à récupérer par ligne LOC
Pour chaque HU identifiée dans les transactions du delta :
- **Code produit SAP** : attribut logistique LotCode du stock
- **Code lot SAP** : ItemCode du stock (= code article WMS)
- **Quantité** : quantité actuelle de la ligne de stock (UdM de base WMS =
unité alternative SAP)
- **UdM** : BAG ou KG
- **Zone de stockage** : zone WMS du container (origine et destination)
- **Code support** : ContainerCode (SSCC)
- **Code livraison sortante** : ShippingOrderCode si action P
## Règles de remplissage par action
| Champ | B (déplacement) | U/R (statut) | S (suppression) | T (transfert) | C (correction) | P (assignation) |
|-------|-----------------|--------------|-----------------|---------------|----------------|-----------------|
| MATNR | Vide | Code produit | Code produit | Code produit | Code produit | Vide |
| BATCHID | Vide | Lot SAP | Lot SAP | Lot SAP | Lot SAP | Vide |
| ACTION | B | U ou R | S | T | C | P |
| ANFME | Vide | Vide | Qté supprimée | Qté transférée | Qté absolue | Vide |
| ALTME | Vide | UdM | UdM | UdM | UdM | Vide |
| VLPLA | Zone origine | Zone actuelle | Zone actuelle | Zone HU source | Zone actuelle | Vide |
| NLPLA | Zone destination | Vide | Vide | Zone HU dest. | Vide | Image de quai |
| VLENR | Code HU | Code HU | Code HU | Code HU source | Code HU | Code HU |
| NLENR | Vide | Vide | Vide | Code HU dest. | Vide | Vide |
| REASON | Vide | Vide | ZSC1 | Vide | Vide | Vide |
| VBELN | Vide | Vide | Vide | Vide | Vide | Code livraison |
| POSNR | Vide | Vide | Vide | Vide | Vide | Ligne livraison |
## Règles métier par type d'action
### ACTION = B (Déplacement bin-to-bin)
Déplacement de HU d'une zone à une autre. **Pas de quantité, pas de code
article, pas de lot** — seuls les champs zone et support sont renseignés.
Le contenu de la HU n'est pas rediscuté.
### ACTION = U / R (Déblocage / Blocage statut)
Hors flux retour, le seul statut autorisé est le **B6** (blocage
logistique). ACTION=R pour bloquer, ACTION=U pour débloquer.
Les statuts exotiques des retours (B6, F2, F9, etc.) sont gérés dans
le **REF** de la réception retour, pas dans le LOC.
### ACTION = S (Suppression / Scrap)
REASON est renseigné **uniquement** pour cette action. Valeur : `ZSC1`
(scrapping normal). Pas d'autre valeur possible.
### ACTION = T (Transfert inter-HU)
Source et destination **dans la même ligne** (VLENR + NLENR). ANFME =
quantité transférée (pas le solde restant).
Si le transfert passe par une étape intermédiaire (table de travail),
transmettre chaque étape séparément avec un emplacement matérialisé.
**Cas picking** : 5 tâches alimentant la même palette fille = 5 lignes
ACTION=T dans le même LOC, dans l'ordre chronologique.
**Création de palette au picking** : si le SSCC en NLENR est inconnu de
SAP, SAP crée automatiquement la HU (type palette standard). Le LOC ne
crée que la structure palette — le stock est transféré depuis une palette
source connue.
### ACTION = C (Correction de quantité)
Quantité **absolue** comptée/validée (pas un écart). SAP calcule le
delta. REASON n'est pas renseigné.
### ACTION = P (Assignation client)
Déclencheur : palette physiquement positionnée sur l'**image de quai**
(pas l'assignation logique). Champs obligatoires :
- ACTION = P
- VLENR = Code HU
- NLPLA = Image de quai de la HU
- VBELN = Code livraison sortante SAP (= SorCode côté WMS)
- POSNR = Ligne de livraison sortante SAP (= ligne d'OS associée à
l'article)
Les champs MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON sont
**vides** pour cette action.
## Transactions WMS sources
| Transaction WMS | Action LOC | Données à récupérer |
|-----------------|------------|---------------------|
| CON.MOVE | **B** (déplacement) | ContainerCode, zone origine, zone destination |
| CON.LOCATE | **B** (déplacement) | Idem |
| STK.MOVE | **B** ou **T** | ContainerCode source et dest. Si ContainerTo ≠ ContainerCode → T avec qté transférée |
| STK.ADJ | **C** (correction) | ContainerCode, quantité absolue actuelle après ajustement, UdM |
| CST.STK | **U** ou **R** | ContainerCode, nouveau statut (B6 uniquement hors retour) |
| STK.PICKING | **T** (transfert) | Container source, container destination (palette fille), qté transférée |
| CON.DELETE | **S** (suppression) | ContainerCode, quantité supprimée |
> ⚠️ Vérifier si d'autres transactions sont utiles pour le LOC
> (ex. STK.SCR pour le scrap depuis RF).
## Zones de stockage (VLPLA / NLPLA)
Les codes zone WMS ne correspondent pas directement aux codes emplacement
SAP. Une **table de correspondance** est nécessaire, réalisée via un
paramètre EasyS (ex : `[TK_5_A:TK_5][TK_5_B:TK_5]`).
### Zones attendues par SAP
| Zone SAP | Correspondance WMS |
|----------|--------------------|
| ASRS1 | TK1 (compartiment anoxie) |
| ASRS2 | TK2 (compartiment du milieu) |
| ASRS3 | Zone accessible du TK3 uniquement (grand compartiment) |
| ASRS4 | Zone accessible du TK4 uniquement (grand compartiment) |
| ASRS34 | Zone accessible des deux TK3 et TK4 (grand compartiment) |
| PICKING | Si présent sur un PK/TP |
| QUAI | Si présent sur un emplacement d'image de quai ou sur le quai |
## Horodatage (IV_TREATMENT_ID)
IV_TREATMENT_ID = horodatage du moment de **génération du LOC** (pas
l'heure de chaque transaction individuelle). Toutes les lignes d'un
même LOC partagent le même horodatage.
Format : `YYYYMMDD` — limité à 24 caractères (CHAR 24).
## Ordre des lignes
Les lignes dans IT_CREATE doivent être dans l'**ordre chronologique**
des transactions WMS. SAP traite les lignes dans l'ordre du fichier.
## Contraintes de longueur
| Champ | Type | Longueur max |
|-------|------|--------------|
| IV_LGNUM | CHAR | 4 |
| IV_TREATMENT_ID | CHAR | 24 |
| MATNR | CHAR | 40 |
| BATCHID | CHAR | 10 |
| ACTION | CHAR | 1 |
| ANFME | NUM | 13.3 (13 entiers, 3 décimales) |
| ALTME | CHAR | 3 |
| VLPLA | CHAR | 18 |
| NLPLA | CHAR | 18 |
| VLENR | CHAR | 20 |
| NLENR | CHAR | 20 |
| REASON | CHAR | 4 |
## Désactivation STV et STC
### STV
Désactiver le post-processing des transactions STK.ADJ → plus de
génération de message STV. Le LOC couvre ce besoin via ACTION=C.
**Vérifications préalables obligatoires :**
- Lister toutes les transactions qui génèrent un STV et confirmer que le
LOC couvre chaque cas
- Vérifier que le middleware GNA n'a pas d'autre dépendance au STV
### STC
Désactiver le post-processing des transactions CST.STK → plus de
génération de message STC. Le LOC couvre le B6 via ACTION=R/U.
Mêmes vérifications à effectuer que pour le STV. Documenter les
résultats de cette analyse dans un commentaire de la tâche avant de
procéder à la désactivation.
## Critères d'acceptation
1. Un job WMS tourne toutes les 5 minutes et crée une transaction custom
LOC.SEND
2. Le GNA détecte cette transaction et génère un JSON LOC conforme
3. Le JSON est envoyé en POST à l'endpoint SAP
4. Les 7 codes ACTION (B, U, R, S, T, C, P) sont correctement générés
5. ACTION=B : ANFME, ALTME, MATNR, BATCHID, NLENR, REASON, VBELN, POSNR
vides — seuls VLPLA, NLPLA et VLENR renseignés
6. ACTION=U/R : MATNR, BATCHID, ALTME, VLPLA, VLENR renseignés —
ANFME, NLPLA, NLENR, REASON, VBELN, POSNR vides
7. ACTION=S : REASON=ZSC1 — MATNR, BATCHID, ANFME, ALTME, VLPLA, VLENR
renseignés — NLPLA, NLENR, VBELN, POSNR vides
8. ACTION=T : VLENR et NLENR dans la même ligne — ANFME = qté transférée
(pas un solde) — REASON, VBELN, POSNR vides
9. ACTION=C : ANFME = quantité absolue (pas un delta) — NLPLA, NLENR,
REASON, VBELN, POSNR vides
10. ACTION=P : VLENR, NLPLA (image de quai), VBELN, POSNR renseignés —
MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON vides
11. Palettes liées à une réception non fermée (pas de REF envoyé) exclues
12. Lignes dans IT_CREATE dans l'ordre chronologique des transactions WMS
13. IV_TREATMENT_ID = horodatage de génération (CHAR 24)
14. Aucune transaction pertinente sur le delta → pas d'envoi de LOC
15. Contraintes de longueur respectées sur tous les champs
16. STV et STC désactivés après validation de l'analyse d'impact
17. Picking N tâches → N lignes ACTION=T dans l'ordre chronologique
18. SSCC inconnu en NLENR lors d'un ACTION=T → LOC ne bloque pas, SAP
crée la HU automatiquement
## Cas de tests
### Architecture et Job
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-01 | 1 | Déclenchement job toutes les 5 min | 3 transactions LOC.SEND en 15 min |
| CT-02 | 2,3 | GNA détecte LOC.SEND et génère JSON | JSON conforme + POST HTTP 200 |
| CT-03 | 14 | Aucune transaction sur le delta | Aucun POST vers SAP |
### ACTION=B — Déplacement
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-10 | 4,5 | Déplacement via CON.MOVE | ACTION=B, seuls VLPLA/NLPLA/VLENR renseignés |
| CT-11 | 4,5 | Déplacement via CON.LOCATE | Idem CT-10 |
| CT-12 | 4,5 | STK.MOVE sans changement HU (ContainerTo=ContainerCode) | ACTION=B (pas T) |
### ACTION=U/R — Blocage / Déblocage
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-20 | 4,6 | Blocage HU via CST.STK (→ B6) | ACTION=R, MATNR/BATCHID/ALTME/VLPLA/VLENR renseignés |
| CT-21 | 4,6 | Déblocage HU via CST.STK (← B6) | ACTION=U |
| CT-22 | 6 | Changement statut hors B6 (hors retour) | Aucune ligne dans le LOC |
### ACTION=S — Suppression / Scrap
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-30 | 4,7 | CON.DELETE sur une HU | ACTION=S, REASON=ZSC1, qté et champs stock renseignés |
| CT-31 | 7 | Plusieurs suppressions | Chaque ligne S a REASON=ZSC1 uniquement |
### ACTION=T — Transfert inter-HU
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-40 | 4,8 | STK.MOVE avec ContainerTo ≠ ContainerCode | ACTION=T, VLENR+NLENR+ANFME renseignés |
| CT-41 | 4,8 | STK.PICKING | ACTION=T, ANFME = qté transférée (pas solde) |
| CT-42 | 17 | 3 pickings → même palette fille | 3 lignes T dans l'ordre chronologique |
| CT-43 | 18 | Picking vers SSCC inconnu SAP | Ligne T générée, LOC ne bloque pas |
| CT-44 | 8 | Transfert via table de travail | 2 lignes distinctes (pas de fusion) |
### ACTION=C — Correction de quantité
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-50 | 4,9 | STK.ADJ (ajustement) | ACTION=C, ANFME = qté absolue après ajustement |
| CT-51 | 9 | Vérification REASON vide | REASON vide pour action C |
### ACTION=P — Assignation client
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-60 | 4,10 | Palette sur image de quai | ACTION=P, VLENR/NLPLA/VBELN/POSNR renseignés |
| CT-61 | 10 | Champs vides vérifiés | MATNR/BATCHID/ANFME/ALTME/VLPLA/NLENR/REASON vides |
### Filtre d'exclusion
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-70 | 11 | HU réception non fermée (pas de REF) | Aucune ligne dans le LOC |
| CT-71 | 11 | HU réception fermée (REF envoyé) | Ligne présente dans le LOC |
### Ordre chronologique et horodatage
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-80 | 12 | 3 transactions dans l'ordre | Lignes dans l'ordre chronologique |
| CT-81 | 13 | IV_TREATMENT_ID | Horodatage de génération, ≤ 24 car. |
### Contraintes de longueur et cas combinés
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-90 | 15 | Valeurs aux limites de longueur | JSON sans troncature |
| CT-91 | 15 | ANFME avec décimales | Format NUM 13.3 respecté |
| CT-100 | 16 | STK.ADJ après désactivation STV | Pas de STV, LOC contient ACTION=C |
| CT-101 | 16 | CST.STK après désactivation STC | Pas de STC, LOC contient ACTION=R |
| CT-110 | 4,12 | Plusieurs actions dans le même delta | 4 lignes, 4 actions, ordre chronologique |
| CT-111 | 2 | IV_LGNUM | Toujours "WF02" |
| CT-112 | — | HU multi-lignes de stock | Plusieurs entrées dans IT_CREATE |
## Points d'attention
⚠️ **STV et STC désactivés** — vérifier qu'aucun autre process métier ne
dépend d'eux (middleware GNA, reporting).
⚠️ Le filtrage GNA des STV avec motif "STR" devient caduc si le STV est
globalement désactivé.
⚠️ Le LOC ne doit jamais transmettre de palettes dont la réception n'est
pas fermée (pas de REF envoyé).
⚠️ Pour ACTION=B, les champs MATNR, BATCHID, ANFME, ALTME sont tous vides.
⚠️ Les quantités sont des valeurs **absolues** sauf pour ACTION=S (quantité
supprimée) et ACTION=T (quantité transférée).
⚠️ IV_LGNUM = `"WF02"` (pas "WL02" — corrigé depuis spec V2).
## Questions ouvertes
- [ ] Cas palette déposée sur image de quai → chargée → OS fermé →
LOF/SOF envoyé avant le LOC : la HU ne sera pas mentionnée dans le LOC
(@Limagrain)
- [ ] HU multi-lignes de stock : comportement exact à confirmer (CT-112)
(@Fabien)
- [ ] Vérifier si d'autres transactions WMS sont utiles pour le LOC
(ex. STK.SCR) (@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-06 | Arthur | Création depuis spec LOC V2 (réunion 30/04/2026) |
| 2026-05-12 | Arthur | Refonte complète depuis LIM-76 : architecture technique GNA/BOO, ACTION=P confirmé avec VBELN/POSNR, IV_LGNUM corrigé WF02, zones SAP détaillées, contraintes de longueur, 25+ cas de tests, critères d'acceptation |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-76](https://easywmsfrance.atlassian.net/browse/LIM-76) | Ticket Jira (LOT 1.2) | 2026 |
| LOC - Etat des lieux V2 | Spécification technique | 30/04/2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| Réunion LOC 30/04/2026 | Réunion Arthur + Justine + Nicolas | 30/04/2026 |
@@ -0,0 +1,173 @@
---
title: "Mapping ERP-WMS — Changement article et propriétaire"
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
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
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](../../architecture/erp-integration.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
### Contenu du message
| 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 |
### Contrainte d'exécution
Le changement ne peut avoir lieu **que si le stock n'est pas assigné à
un processus** (picking, expédition, regroupement, etc.).
Si le stock est assigné → le message CHG génère un message **ERR** pour
informer SAP que le changement est impossible.
## 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 et remonté dans le message d'interface
(STC) pour informer l'ERP.
### 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
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)
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: STC (notification changement statut)
```
## Points d'attention
⚠️ Le CHG ne renvoie pas de confirmation positive — seule l'erreur (ERR)
est remontée si le changement échoue.
⚠️ 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 (@Justine)
- [ ] Liste des commentaires par statut — validée ? (@Justine)
- [ ] CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)
## 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) |
## 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 |
@@ -0,0 +1,321 @@
---
title: "Catalogue des messages ERP — Référence complète"
tags: [ERP, messages, interface, SAP, catalogue, ITM, ASN, ROR, ROF, REF, SOR, RUT, SOF, LOF, PCK, MOV, STV, STR, STC, SCR, WSC, COR, COF, LOC, ERR, CHG]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
author: Arthur
---
# Catalogue des messages ERP — Référence complète
> **Résumé** : tableau de référence de tous les messages d'interface entre
> SAP EWM et EasyWMS chez Limagrain, classés par domaine fonctionnel.
> **Standard EasyWMS** : → voir [ERP Integration](../../architecture/erp-integration.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
La communication entre SAP EWM et EasyWMS utilise XML + Webservice.
Le détail des champs est dans le document « Liste Interfaces LIMAGRAIN »
(fichier séparé). Cette page référence la typologie et le rôle de chaque
message.
## Tableau synthétique
### SAP → EasyWMS (flux entrants)
| Domaine | Message | Standard/Custom | Description | Statut |
|---------|---------|-----------------|-------------|--------|
| Master Data | ITM | Standard | Fiche article (Lot SAP) | ✅ Validé |
| Réception | ASN | Standard | Réception production (1 par palette) | ✅ Validé |
| Réception | ROR | Standard | Réceptions externes + retours clients | ✅ Validé |
| Expédition | SOR | Standard | Ordres de sortie (prod/recertif) | ✅ Validé |
| Expédition | RUT | Standard | Routes / tournées client | ✅ Validé |
| Stock | STR | Standard | Demande changement de stock (article, statut) | ✅ Validé |
| Inventaire | COR | Standard | Demande d'échantillonnage | ✅ Validé |
| Inventaire | SCR | Standard | Demande image de stock de l'entrepôt | ✅ Validé |
### EasyWMS → SAP (flux sortants)
| Domaine | Message | Standard/Custom | Description | Statut |
|---------|---------|-----------------|-------------|--------|
| Réception | REF | Standard | Finalisation de réception (+ zone stockage) | ✅ Validé |
| Réception | ROF | Standard | Clôture d'ordre d'entrée | ✅ Validé |
| Expédition | SOF | Standard | Finalisation ordre de sortie | 🟡 Phase 2 |
| Expédition | LOF | Standard | Finalisation de chargement | ✅ Validé |
| Stock | STV | Standard | Variation de stock | ⚠️ **DÉSACTIVÉ** (remplacé par LOC) |
| Stock | STC | Standard | Notification changement de statut | ⚠️ **DÉSACTIVÉ** (remplacé par LOC) |
| Stock | LOC | [CUSTOM] | Message périodique delta 5 min | ✅ Validé |
| Stock | WSC | Standard | Image de stock journalière | 🟡 Volumétrie à vérifier |
| Inventaire | COF | Standard | Confirmation d'échantillonnage | 🟡 Traitement à confirmer |
| Expédition | PCK | [CUSTOM] | Passage conteneur client | ⚠️ **REMPLACÉ** par LOC |
| Erreur | ERR | Standard | Erreur d'importation de message | ✅ Validé |
### Flux supprimés ou non retenus
| Message | Statut | Raison |
|---------|--------|--------|
| MOV | **Supprimé** | Redondant avec LOC + STR combinés |
| PCK | **Remplacé** par LOC | Le LOC périodique couvre le besoin |
| STV | **Désactivé** | Le LOC devient le seul canal stock (décision 30/04/2026) |
| STC | **Désactivé** | Statuts hors retour = B6 uniquement via LOC |
| ACC/SUP | **Non transmis** par l'ERP | Base client/fournisseur non interfacée |
| ROC | **Non utilisé** a priori | À confirmer côté Limagrain |
### Messages bidirectionnels / custom
| Domaine | Message | Direction | Standard/Custom | Description |
|---------|---------|-----------|-----------------|-------------|
| Réception | API Lot | WMS ↔ ERP | [CUSTOM] | Demande/réponse lot SAP pour retours clients |
| Stock | CHG | ERP → WMS | [CUSTOM] | Changement article et/ou propriétaire |
## Messages custom détaillés
### PCK — Passage Conteneur Client
- **Déclencheur** : stock préparé, passage en conteneur client EasyWMS
- **Contenu** : information passage conteneur client
- **Envoyé pour** : commande client, consommation OF hors recert, messagerie
- **Voir** : [Flux ERP outbound](../04-outbound/flux-erp-outbound.md)
### ~~MOV — Movement~~ ANNULÉ
> **ANNULÉ** — décision réunion client, jugé inutile.
- ~~**Déclencheur** : déplacement de stock entre palettes~~
- ~~**Contenu** : palette d'origine, palette de destination, quantité~~
### LOC — Message périodique (détaillé)
- **Déclencheur** : Job toutes les 5 min → WF → transaction `LOC.SEND` → GNA
(script BOO) → POST SAP-CPI
- **Remplace** : PCK, MOVE, STV, STC
- **Actions** : B (déplacement), U/R (statut B6), S (suppression), T (transfert
inter-HU), C (correction quantité), **P (assignation client)**
- **Quantités** : valeurs absolues (pas des écarts) sauf ACTION=S et T
- **Exclusion** : palettes dont la réception n'est pas fermée (pas de REF)
- **Approche technique** : fork du WSC avec filtre temporel sur CreationDate
- **Transport** : via GNA → SAP-CPI (OAuth 2.0 client_credentials) —
code CPI : **ATH201**
- **Voir** : [Spécification complète LOC](loc-message-periodique.md),
[Intégration GNA → SAP-CPI](gna-sap-cpi.md),
[Flux ERP outbound](../04-outbound/flux-erp-outbound.md)
### STV — Variation de Stock (⚠️ DÉSACTIVÉ)
> ⚠️ **Décision 30/04/2026** : le STV est désactivé (post-processing coupé).
> Le LOC devient le seul canal de notification des mouvements de stock vers SAP.
- **Direction** : WMS → SAP
- **Rôle initial** : notifier les ajustements de quantités manuels (hors flux
standards réception/expédition)
- **Mapping clé** :
| Balise | Utilisation |
|--------|-------------|
| Operation | C (positif) / D (négatif) |
| Site | WF02 |
| ItemCode | Code lot SAP |
| OwnerCode | MECALUX |
| ContainerCode | Numéro HU |
| FilterAttributes | Attributs du stock existant modifié |
| Attributes | Attributs du stock nouvellement créé |
| ReasonCode | AJUSTEMENT MANUEL |
| ERPReasonCode | ZSC1 |
| Comment | Facultatif (opérateur) |
- **Point ouvert** : Limagrain doit définir comment gérer côté ERP un STV de
type "création de stock" (l'ERP n'autorise pas la création de stock par ce
biais aujourd'hui)
- **Raison désactivation** : Limagrain préfère des quantités absolues (LOC)
plutôt que des écarts +/- (STV) — si un message se perd, l'écart est
définitivement perdu
### STR — Demande de Changement de Stock
- **Direction** : ERP → WMS
- **Cas d'usage** : 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)
- **Interaction avec STV** : ajustement avec motif "STR" → le middleware (GNA)
ne traite pas les STV avec ce motif pour éviter les doublons
- **Monitoring** : Limagrain mettra en place un monitoring des erreurs pour
les cas de refus
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md)
### COR — Demande d'Échantillonnage
- **Direction** : ERP → WMS
- **Usage** : **uniquement** pour les demandes d'échantillonnage (pas pour les
inventaires physiques classiques, gérés dans EasyWMS en phase 1)
- **Mapping** :
| Balise | Valeur |
|--------|--------|
| Description | "ECHANTILLONNAGE" (en dur, discriminant WMS) |
| Code | Numéro du lot d'inspection SAP |
| Priority | 3 (basse) |
| ProductCode | Code lot SAP |
| LotCode | Code produit SAP |
| Color, Source, Size | Attributs logistiques standards |
- **Flux** : COR envoyé → WMS fait venir la palette sur un poste de travail →
opérateur prélève → palette repart en stockage → COF envoyé
- **Règle** : un article en cours d'échantillonnage **n'est pas disponible**
pour les ordres de sortie
- **Voir** : [Échantillonnage](../03-picking/echantillonnage.md)
### COF — Confirmation d'Échantillonnage
- **Direction** : WMS → ERP
- **Mapping** :
| Balise | Description |
|--------|-------------|
| CountCode | Numéro du lot d'inspection |
| Status | Closed (effectué) ou Cancelled (annulé) |
| UpdateDate | Date/heure de changement |
- **Point ouvert** : Limagrain doit confirmer si le COF sera traité côté ERP.
Si non traité, risque de demandes en double.
### WSC — Image de Stock Journalière
- **Direction** : WMS → ERP
- **Rôle** : image de stock complète pour vérification de cohérence. Contient
l'ensemble du stock : code OS, statut palette, toutes les informations
disponibles
- **Démarrage** : export manuel EasyWMS + export SAP + comparaison.
Automatisation possible ultérieurement (quotidien à heure fixe)
- **Point d'attention** : Limagrain doit vérifier sa capacité à traiter ce
fichier (volumétrie potentiellement élevée pour CPI)
- **Déclenchement** : transaction `SCR.REQ` ou `STOCKSYNC.ASKED`
### STC — Notification Changement de Statut (⚠️ DÉSACTIVÉ)
> ⚠️ **Décision 30/04/2026** : le STC est désactivé. Les changements de statut
> hors retour sont limités au B6 (blocage logistique standard) et sont couverts
> par le LOC (action R/U). Les statuts des retours sont remontés dans le REF.
### CHG — Changement article / propriétaire
- **Déclencheur** : modification article ou propriétaire dans SAP
- **Contenu** : numéro de HU, lot officiel, code nouvel article, description,
destination, propriétaire Limagrain
- **Contrainte** : le stock ne doit pas être assigné à un processus (sinon ERR)
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md)
### API Lot SAP — Retours clients
- **Déclencheur** : lot officiel inconnu lors d'un retour client
- **Contenu (demande)** : lot officiel à vérifier
- **Contenu (réponse)** : lot SAP correspondant + attributs logistiques
- **Parallèle** : un ITM est descendu avec les infos article
- **Voir** : [Réception retour](../01-inbound/reception-retour.md)
## Flux par processus
### Réception production (ASN)
```
SAP → ASN → EasyWMS → (réception + stockage) → REF → SAP
→ ROF → SAP
→ LOC (delta 5 min) → SAP
```
### Réception extérieure / retour (ROR)
```
SAP → ROR → EasyWMS → (réception + contrôle) → REF → SAP
→ ROF → SAP
→ LOC (delta 5 min) → SAP
```
### Expédition client (RUT)
```
SAP → RUT → EasyWMS → (picking + chargement) → LOC (delta 5 min) → SAP
→ LOF → SAP
→ SOF → SAP (phase 2)
```
### Consommation OF (SOR)
```
SAP → SOR → EasyWMS → (sortie) → LOC (delta 5 min) → SAP
→ SOF → SAP (phase 2)
```
### Échantillonnage
```
SAP → COR → EasyWMS → (prélèvement poste) → COF → SAP
```
### Image stock (vérification cohérence)
```
SAP → SCR → EasyWMS → WSC → SAP (image complète)
```
### Changement de stock
```
SAP → STR → EasyWMS → (MAJ stock) → LOC (delta 5 min) → SAP
OU → ERR → SAP (si stock assigné)
```
## Points d'attention
⚠️ **STV et STC désactivés** (décision 30/04/2026) — le LOC est le seul canal
de notification des mouvements de stock vers SAP.
⚠️ Le message CHG est rejeté (ERR) si le stock est assigné à un processus
en cours.
⚠️ MOV, PCK sont **supprimés/remplacés** — le LOC couvre tous ces besoins.
⚠️ L'ASN envoie 1 palette par message (pas d'agrégation — permet suppression
individuelle en cas d'annulation).
⚠️ Le STR est refusé si la palette est assignée "client" ou en préparation.
Le middleware GNA filtre les STV avec motif "STR" pour éviter les doublons
(caduc si STV globalement désactivé).
⚠️ Le COF n'est utile que si SAP le traite — sinon risque de demandes
d'échantillonnage en double.
## Questions ouvertes
- [ ] Détail champ par champ de chaque message — document séparé à intégrer (@Arthur)
- [ ] Format exact du message CHG (@Nicolas)
- [ ] Confirmer si le COF sera traité côté ERP (@Limagrain)
- [ ] Vérifier capacité de traitement du WSC quotidien — volumétrie (@Limagrain)
- [ ] Confirmer retour fournisseur : SOR simple ou RUT ? (@Limagrain)
- [ ] Effets de bord désactivation STV — lister toutes les transactions
STK.ADJ et vérifier couverture LOC (@Mecalux)
- [ ] Effets de bord désactivation STC — idem pour CST.STK (@Mecalux)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | MOV annulé, LOC détaillé (5 min, delta, structure JSON, flag client) |
| 2026-05-06 | Arthur | Enrichissement complet depuis CR consolidé ERP (STV, STR, COR/COF, WSC, flux supprimés, désactivation STV/STC) |
## 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 | 05/01 → 23/02/2026 |
| Expédition - LIMAGRAIN - DEV | Page ateliers DEV | 2026 |
@@ -0,0 +1,58 @@
---
title: "Interface ERP — Vue d'ensemble"
tags: [erp, interface, messages, index]
status: draft
last_updated: 2026-05-05
---
# Interface ERP — Vue d'ensemble
> **Périmètre** : catalogue de messages ERP (SOR, RUT, SOF, LOF, ASN),
> mapping champs ERP↔WMS, monitoring de l'interface.
> **Standard EasyWMS** : voir [ERP Integration](../../architecture/erp-integration.md)
## Pages de cette section
- [Référence messages](messages-reference.md)
- [Données principales et stock](donnees-principales.md)
- [LOC — Message périodique](loc-message-periodique.md)
- [Intégration GNA → SAP-CPI](gna-sap-cpi.md)
- [Mapping ERP-WMS](mapping-erp-wms.md)
- [Monitoring interface](interface-monitoring.md)
## Vue synthétique de l'interface ERP Limagrain
```mermaid
flowchart LR
subgraph SAP[SAP EWM]
ITM[ITM]
ASN[ASN]
ROR[ROR]
RUT[RUT]
SOR[SOR]
STR[STR]
SCR[SCR]
COR[COR]
CHG[CHG]
end
subgraph WMS[EasyWMS]
ROF[ROF]
REF[REF]
SOF[SOF]
LOF[LOF]
PCK[PCK]
MOV[MOV]
STV[STV]
STC[STC]
WSC[WSC]
LOC[LOC]
ERR[ERR]
end
SAP -->|ERP → WMS| WMS
WMS -->|WMS → ERP| SAP
```
> **21 messages** au total : 9 entrants (ERP → WMS), 11 sortants (WMS → ERP),
> 1 bidirectionnel (API Lot). Voir [Référence messages](messages-reference.md)
> pour le détail.
@@ -0,0 +1,58 @@
---
title: "Interface ERP — Vue d'ensemble"
tags: [erp, interface, messages, index]
status: draft
last_updated: 2026-05-05
---
# Interface ERP — Vue d'ensemble
> **Périmètre** : catalogue de messages ERP (SOR, RUT, SOF, LOF, ASN),
> mapping champs ERP↔WMS, monitoring de l'interface.
> **Standard EasyWMS** : voir [ERP Integration](../../concepts/erp-interface.md)
## Pages de cette section
- [Référence messages](messages-reference.md)
- [Données principales et stock](donnees-principales.md)
- [LOC — Message périodique](loc-message-periodique.md)
- [Intégration GNA → SAP-CPI](gna-sap-cpi.md)
- [Mapping ERP-WMS](mapping-erp-wms.md)
- [Monitoring interface](interface-monitoring.md)
## Vue synthétique de l'interface ERP Limagrain
```mermaid
flowchart LR
subgraph SAP[SAP EWM]
ITM[ITM]
ASN[ASN]
ROR[ROR]
RUT[RUT]
SOR[SOR]
STR[STR]
SCR[SCR]
COR[COR]
CHG[CHG]
end
subgraph WMS[EasyWMS]
ROF[ROF]
REF[REF]
SOF[SOF]
LOF[LOF]
PCK[PCK]
MOV[MOV]
STV[STV]
STC[STC]
WSC[WSC]
LOC[LOC]
ERR[ERR]
end
SAP -->|ERP → WMS| WMS
WMS -->|WMS → ERP| SAP
```
> **21 messages** au total : 9 entrants (ERP → WMS), 11 sortants (WMS → ERP),
> 1 bidirectionnel (API Lot). Voir [Référence messages](messages-reference.md)
> pour le détail.
@@ -0,0 +1,225 @@
---
title: "Données principales et stock — Mapping ITM et attributs"
tags: [ERP, ITM, article, stock, attributs-logistiques, lot-SAP, mapping, CstAtt]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
confluence_refs: ["Données principales + stock - LIMAGRAIN - DEV"]
sources: ["Données principales + stock - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
author: Arthur
---
# Données principales et stock — Mapping ITM et attributs
> **Résumé** : architecture retenue pour la gestion des articles et du stock
> dans EasyWMS chez Limagrain, mapping du message ITM, attributs logistiques,
> profils et gestion des poids.
> **Standard EasyWMS** : → voir [ERP Integration](../../concepts/erp-interface.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Les décisions ci-dessous sont issues des ateliers d'interfaçage EasyWMS / SAP
réalisés entre le 05/01/2026 et le 23/02/2026, consolidées le 27/02/2026.
## Architecture retenue : Lot SAP = Article WMS
Le code article dans EasyWMS est le **code lot SAP** (et non le code produit
SAP). L'option concaténation code produit + lot SAP a été étudiée et écartée.
Le **code produit SAP** est géré comme un attribut au niveau du stock (pas de
la fiche article), car un même lot SAP peut correspondre à plusieurs produits
différents (ex. : changement de destination).
| Relation | Type | Statut |
|----------|------|--------|
| Lot SAP ↔ Lot Officiel | 1 pour 1 | ✅ Validé par Limagrain |
| Code article WMS = Code lot SAP | — | ✅ Validé |
| Code produit SAP = Attribut logistique du stock | — | ✅ Validé |
### Côté SAP
Il existe une base article avec des codes articles uniques. Les articles sont
gérés au lot. Chaque article peut avoir plusieurs codes lots SAP. Chaque code
lot SAP a un équivalent code lot OFFICIEL national (relation 1:1).
### Côté EasyWMS
Chaque lot SAP est descendu via le fichier ITM. L'article SAP devient un
attribut du lot SAP (et non l'inverse).
**Code article WMS = code lot SAP**
## Unité de base selon le type d'article
| Type article | Description | Unité de base WMS |
|--------------|-------------|-------------------|
| FERT | Produit fini | BAG (sac) |
| ZSIZ | Semi-fini calibré | KG |
L'unité de base dans le WMS est l'unité logistique (pas l'unité de base SAP).
Un même produit peut exister en BAG et en KG = codes articles WMS différents.
## Mapping fiche article (message ITM)
| Champ EasyWMS | Champ SAP | Remarque |
|---------------|-----------|----------|
| ItemCode | Code lot SAP | Clé principale |
| Alias | Lot officiel | Relation 1:1, scannable |
| OwnerCode | — | Constante "MECALUX" (technique) |
| Description | Description longue | Affichage PC |
| AltDescription | Description courte (MAKTL) | Affichage mobile, < 65 car. |
| Type | FERT / ZSIZ / etc. | + description du type |
| Family | Traitement commercial | Ex : "20 : R - Cruiser OSR" — pas de séparation familles en préparation |
| BaseUoM | BAG ou KG | Selon type d'article |
| Weight | Poids brut du sac | Poids unitaire théorique |
| ContainerQty | Nb sacs par palette | Palette pleine standard (= Bag/Pal) |
| ContainerType | Palette | Un seul type de palette |
| CstAtt02 | Espèce | Ex : M = Maïs, S = Tournesol — pour ordonnancement picking |
| CstAtt03 | Génération | Génération article rattachée au lot SAP |
| CstAtt04 | Variété | Ex : "LG50465" |
| CstAtt05 | Big bag | True / False |
| CstAtt06 | GTIN | Ne peut être un alias car non unique |
| CstAtt07 | Semences essais | True / False |
| CstAtt08 | Size (calibre) | — |
| CstAtt09 | Field production area | — |
| CstAtt10 | Stage | ⚠️ À ajouter — requis pour étiquette échantillon |
| Conversion.Principale.CstAtt01 | Poids unitaire article | Poids théorique ERP |
## Profils logistiques
| Type d'article | Profil | Description |
|----------------|--------|-------------|
| Articles classiques | PROFIL_STANDARD | Gestion code produit + propriétaire + description + pays destination |
| Palettes bois vides | PROFIL_PALETTE | Gestion palette bois vide |
## Attributs logistiques du stock
> **Décision du 11/02/2026** : les Custom Attributes au niveau du stock
> (CstAtt0104) ont été **supprimés** au profit des attributs logistiques
> standards du WMS. Les modes de capture sont désactivés pour éviter la
> customisation de tous les écrans.
| Champ EasyWMS (balise API) | Libellé affiché WMS | Champ SAP | Remarque |
|----------------------------|---------------------|-----------|----------|
| Lot | Lot | Code produit SAP | Différencie les produits pour un même lot SAP |
| Color | Couleur | Code propriétaire SAP | ≠ "MECALUX" technique |
| Source | Source | Description courte SAP | Désignation courte |
| Size | Taille | Pays de destination | Peut changer en cours de vie du stock |
> ⚠️ Les noms de balises API (Color, Size…) ne correspondent pas aux données
> métier. Le renommage d'affichage est géré dans le WMS.
> **Point à tester** : en réception, la création du stock via les attributs
> logistiques doit être validée (approche standard ou custom — à confirmer
> par les tests).
## Gestion des codes clients / fournisseurs
La base client/fournisseur SAP **n'est pas interfacée** avec le WMS.
Les codes sont gérés via des constantes + champ texte libre :
| Flux | Champ code | Champ Source |
|------|------------|--------------|
| ROR Fournisseur | SupplierCode = "FOURNISSEUR" | Code fournisseur SAP + libellé |
| ROR Retour client | AccountCode = "CLIENT" | Code client SAP + libellé |
| SOR / RUT Client | AccountCode = "CLIENT" | Code client SAP + libellé |
| SOR Production | AccountCode = "PRODUCTION" | — |
## Gestion des poids
| Situation | Comportement ERP |
|-----------|-----------------|
| Article en BAG (UdM ≠ KG) | L'ERP ne s'intéresse qu'à la quantité de sacs — les écarts de poids sont ignorés |
| Article en KG | Seule la quantité en KG intéresse l'ERP — si le poids change (balance), le WMS modifie la quantité |
Le poids théorique de la ligne de stock (quantité × poids unitaire, hors
poids palette) est transmis via l'attribut logistique `Weight`.
## Champs NON utilisés dans ITM
Les champs suivants sont explicitement exclus du mapping :
Stock Label, Classification ABC, Alertes stock (min/max), Image produit,
Code danger (pas d'impact logistique), Températures min/max, Cross-docking,
Gerbabilité (gérée via ordonnancement picking), Picking message, IsPacking.
## Conversions
- Unité de base = BAG ou KG (pas de conversion supplémentaire identifiée)
- Pas de gestion financière ni de découpage dans les sacs
- Le nombre de sacs par palette pleine est géré dans la conversion container
(champ `ContainerQty`)
## Types de supports
| Type | Usage | Statut |
|------|-------|--------|
| EWM-PAL00 / PALETTE_US | Palette standard (un seul type) | ✅ Confirmé |
| BIGBAG | Attribut de la HU (pas type séparé) | ✅ Validé |
| Octobin | Hors périmètre phase 1 | ❌ |
La création de types de supports est techniquement lourde (nécessite passage
par support Mecalux, impact design entrepôt). Les BigBag sont déclarés par
l'opérateur au poste de réception. Le WMS ajuste le calcul de poids (+2 kg
environ).
## Z-Bags (sacs vides)
Stockés dans le magasin automatique (SRS) **uniquement pour livraison aux
clients**, pas pour l'approvisionnement production. Doivent respecter les
mêmes formats et règles que les palettes produits. → À valider
fonctionnellement.
## Paramètres généraux de l'interface
| Paramètre | Valeur |
|-----------|--------|
| Format | JSON |
| Opération par défaut | 3 = Upsert |
| Mode de mise à jour | Complete = true (fiche complète à chaque envoi) |
| OwnerCode (technique) | "MECALUX" |
| Site | WF02 |
## Points d'attention
⚠️ Le CstAtt10 (Stage) est **à ajouter** — il est requis pour l'étiquette
d'échantillonnage.
⚠️ Les noms de balises API stock (Color, Size, Source) sont détournés de
leur usage standard — ne pas confondre avec les concepts habituels.
⚠️ Les CstAtt au niveau du stock ont été supprimés (décision 11/02/2026)
au profit des attributs logistiques standards — vérifier l'impact sur les
développements en cours.
⚠️ Le mode Complete = true signifie que chaque ITM contient la fiche
complète (pas de delta) — attention à la volumétrie.
⚠️ La base client/fournisseur n'est pas interfacée : le code est descendu
dans chaque message ROR/SOR/RUT, pas maintenu en master data.
## Questions ouvertes
- [ ] CstAtt10 Stage — quand sera-t-il ajouté au mapping ITM ? (@Nicolas)
- [ ] Création stock via attributs logistiques en réception — standard ou
custom ? À valider par tests (@Fabien)
- [ ] Impact suppression CstAtt stock sur les développements existants (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis page Confluence DEV |
| 2026-05-06 | Arthur | Ajout champs non utilisés, conversions, types supports, Z-Bags (CR consolidé) |
## Références
| Source | Type | Date |
|--------|------|------|
| Données principales + stock - LIMAGRAIN - DEV | Page Confluence | 27/02/2026 |
| Ateliers interfaçage EasyWMS/SAP | Ateliers | 05/01 → 23/02/2026 |
| Notes complémentaires 11/02/2026 | Note | 11/02/2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers | 23/02/2026 |
@@ -0,0 +1,265 @@
---
title: "Intégration GNA → SAP-CPI"
tags: [ERP, GNA, SAP-CPI, OAuth, middleware, API, BOO]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: [LIM-89]
confluence_refs: []
sources:
- "LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md"
- "recap_session_LIM-72_13-05-2026.md"
last_updated: 2026-05-13
author: Arthur
---
# Intégration GNA → SAP-CPI
> **Résumé** : mise en place de la communication entre le GNA (middleware
> EasyWMS) et SAP-CPI (middleware cloud SAP) pour l'envoi de tous les
> messages WMS sortants. Authentification OAuth 2.0 client_credentials,
> endpoint unique, routage par MessageType.
> **Standard EasyWMS** : → voir [ERP Integration](../../concepts/erp-interface.md)
> L'intégration standard cible généralement un ERP via API REST classique
> (OAuth password grant). Chez Limagrain, la cible est **SAP-CPI** avec
> un mécanisme spécifique.
> Voir aussi : [LOC — Message périodique](loc-message-periodique.md),
> [Référence messages](messages-reference.md),
> [Mapping ERP-WMS](mapping-erp-wms.md)
## Contexte projet
Dans le cadre du projet Limagrain, le middleware GNA doit envoyer les
messages WMS vers SAP via la plateforme **SAP-CPI** (Cloud Platform
Integration). Une implémentation de référence existe chez un autre client
(AD) mais communique avec un ERP SAP-AIG via une API REST classique
(OAuth password grant).
L'intégration Limagrain est différente : elle cible **SAP-CPI** avec un
**endpoint unique** et une authentification **OAuth 2.0 client_credentials**.
## Architecture technique
### Script principal
Le script `CommonExportWebApi.boo` est le point d'entrée pour tous les
exports WMS → SAP-CPI. Il gère l'authentification, le formatage et
l'envoi des messages.
### Flux de communication
```mermaid
sequenceDiagram
participant WMS as EasyWMS
participant GNA as GNA (BOO)
participant OAuth as SAP OAuth Server
participant CPI as SAP-CPI
WMS->>GNA: Transaction WMS (LOC.SEND, REF01, etc.)
GNA->>GNA: Vérifier cache token
alt Token expiré ou absent
GNA->>OAuth: POST /oauth/token (client_credentials)
OAuth-->>GNA: Bearer token + expiration
GNA->>GNA: Sauvegarder token sur disque
end
GNA->>CPI: POST /http/ATHInboundMessage
Note right of CPI: Body: {MessageType, MessageSAP, data}
CPI-->>GNA: HTTP 200 / erreur
alt Erreur HTTP (hors 401)
GNA->>CPI: Retry backoff (2s, 4s, 8s, 16s)
end
alt HTTP 401
GNA->>GNA: Échec immédiat (token invalide)
end
```
## Authentification OAuth 2.0
### Mécanisme
1. Le GNA obtient un **token bearer** auprès du serveur SAP via un POST
sur `/oauth/token` avec `client_id` et `client_secret`
2. Le grant type est `client_credentials` (pas de password grant)
3. Le token est **mis en cache sur disque** (fichier JSON) avec gestion
de l'expiration (marge de sécurité de 60 secondes)
4. À chaque envoi, le GNA vérifie le cache : si le token est encore valide,
il le réutilise ; sinon il en demande un nouveau
## Envoi des messages — Format du body
Pour chaque message WMS exporté, le GNA envoie un POST vers l'endpoint
unique SAP-CPI `/http/ATHInboundMessage` avec le body JSON suivant :
```json
{
"MessageType": "<type_message_WMS>",
"MessageSAP": "<code_CPI>",
"data": "<contenu_message>"
}
```
Le champ `MessageType` permet au iFlow CPI de **router le message** vers
le bon traitement SAP.
## Table de correspondance MessageType → MessageSAP
Le champ `MessageSAP` est déterminé par une table de correspondance entre
le préfixe du MessageType WMS (3 premiers caractères) et le code SAP-CPI :
| Code CPI | Équivalent WMS | Description |
|----------|----------------|-------------|
| ATH214 | Check flux retour (batch) | Vérification lot retour client |
| ATH215 | REF (type = Supplier) | Finalisation réception fournisseur |
| ATH217 | REF (type = Return) | Finalisation réception retour |
| ATH201 | LOC | Message périodique delta mouvements |
| ATH202 | LOF | Finalisation chargement |
> ⚠️ Si un type de message n'a pas de correspondance dans la table, un
> **warning** est logué et le champ MessageSAP n'est pas inclus dans le
> body.
### Détermination conditionnelle du MessageSAP pour REF
Le message REF peut être routé vers **ATH215** (Supplier) ou **ATH217**
(Return) selon le type de préavis de réception (InboundOrder) lié :
1. Le **REF01Observer.boo** récupère le type de préavis via une requête
LINQ sur `Context.RecLineInboundOrderLines``Context.InboundOrders`
2. Le type est transmis dans le champ `RecCustomAttributes.CstAtt20` du
message REF01
3. Le script `CommonExportWebApi.boo` lit `CstAtt20` dans le payload JSON
pour déterminer le `MessageSAP` :
- Type Supplier → `ATH215`
- Type Return → `ATH217`
## Cartographie complète des interfaces Athenzat
Tous les flux entre SAP et EasyWMS sont identifiés par un code ATH.
Source : doc CPI Maxime Tourrette (24/04/2026) + mail S15 Justine.
### Flux SAP → EasyWMS (entrants)
| Code ATH | Type SAP | Type Easy | Description |
|----------|----------|-----------|-------------|
| ATH002 | BATMAS | ITM01 | Fiche article (Item) |
| ATH103A | DELIVRY07 | ROR01 | Ordre de réception (Inbound delivery) |
| ATH108 | ORDRSP | ROR01 | Ordre de réception retour (Return delivery) |
| ATH103B | SHPUNT7 | RUT | Ordre de sortie (Outbound delivery) |
| ATH102BOM | LOIPRO | SOR | Ordre d'expédition (Shipping order) |
| ATH111 | ZSTKATH11 | ASN / STR | HU à recevoir / HU change |
| ATH302 | ZQMINSPLOT | COR | Tâche inventaire / échantillon |
### Flux EasyWMS → SAP (sortants via CPI)
| Code ATH | Type Easy | Type SAP | Description |
|----------|-----------|----------|-------------|
| ATH214 | Z_IATH214 | Z_IAT214 | Check Batch (vérification lot retour) |
| ATH215 | REF | Z_IAT215 | Bon de réception fournisseur |
| ATH217 | REF | Z_IAT217 | Bon de réception retour |
| ATH201 | LOC / STV | Z_IAT201 | Mouvement stock (rangement ASRS, mvt HU, prep mix, customer flag, stock adjust) |
| ATH202 | LOF | Z_IAT202 | Chargement (Loading / Goods Issue) |
> **Note** : les flux ATH103A/B, ATH108, ATH111, ATH302 utilisent
> l'infrastructure GNA standard (pas de custom CPI côté EasyWMS).
> Seuls les flux sortants (ATH2xx) passent par `CommonExportWebApi.boo`.
> **Note** : le flux ATH214 est le seul appelé **directement depuis un
> workflow** (pas via GNA/BOO). Voir [Réception retour](../01-inbound/reception-retour.md).
## Gestion des erreurs — Retry avec backoff
| Situation | Comportement |
|-----------|-------------|
| HTTP 200 | Succès — message envoyé |
| HTTP 401 | **Échec immédiat** — token invalide, pas de retry |
| Autre erreur HTTP | **Retry backoff exponentiel** : 2s → 4s → 8s → 16s |
## Configuration requise
Six clés `CPI_*` à ajouter dans `CommonAppSettings.config`
(section `appSettings`) :
| Clé | Description |
|-----|-------------|
| CPI_AUTH_URL | URL du serveur d'authentification SAP OAuth |
| CPI_CLIENT_ID | Identifiant OAuth |
| CPI_CLIENT_SECRET | Secret OAuth (en clair dans le config) |
| CPI_ENDPOINT_URL | Endpoint unique SAP-CPI (`/http/ATHInboundMessage`) |
| CPI_TOKEN_PATH | Chemin du fichier cache token sur disque |
| CPI_TIMEOUT | Timeout HTTP en secondes (auth + messages) |
**Valeurs environnement TEST** :
- `CPI_AUTH_URL` :
`https://vilm-cpi-test-73ltxp48.authentication.eu30.hana.ondemand.com/oauth/token`
- `CPI_ENDPOINT_URL` :
`https://vilm-cpi-test-73ltxp48.it-cpi020-rt.cfapps.eu30.hana.ondemand.com/http/ATHInboundMessage`
- Environnement PROD : URLs à définir
## Fichiers impactés
| Fichier | Modification |
|---------|-------------|
| `Scripts2015/CommonExportWebApi.boo` | Script principal d'export WMS → SAP-CPI |
| `Scripts2015/EasyWMS/XML/REF01/REF01Observer.boo` | Ajout requête InboundOrderType + écriture CstAtt20 |
| `Configuration/LIMAGRAI2512/CommonAppSettings.config` | Ajout des 6 clés CPI_* |
## Logging
Chaque étape (connexion, récupération token, envoi message) doit être
loguée avec les détails de la requête et de la réponse. Le body JSON
est logué en **format indenté** pour faciliter le debug.
> ⚠️ Le **token ne doit jamais être logué** (sécurité).
## Cas de tests
- [ ] Le GNA compile sans erreur
- [ ] L'authentification OAuth client_credentials fonctionne (HTTP 200)
- [ ] Le token est mis en cache sur disque et réutilisé tant qu'il est
valide
- [ ] Les messages WMS sont envoyés en POST avec le bon format JSON
- [ ] Le champ MessageSAP est présent avec la bonne valeur selon le type
- [ ] REF type Supplier → MessageSAP = ATH215
- [ ] REF type Return → MessageSAP = ATH217
- [ ] CstAtt20 renseigné dans le message REF01 par le REF01Observer
- [ ] Warning logué si MessageType sans correspondance
- [ ] Retry backoff fonctionne (hors 401)
- [ ] Logs détaillés et lisibles (JSON indenté, token masqué)
- [ ] HTTP 401 → échec immédiat sans retry
## Points d'attention
⚠️ Le **secret OAuth est en clair** dans le fichier de configuration —
accès au fichier à restreindre.
⚠️ La marge de 60 secondes sur l'expiration du token évite les races
conditions mais peut générer des re-authentifications prématurées sous
forte charge.
⚠️ Le backoff exponentiel plafonne à 16 secondes — si SAP-CPI est
durablement indisponible, les messages seront perdus (pas de file
d'attente persistante).
## Questions ouvertes
- [ ] Faut-il implémenter une file d'attente persistante pour les
messages en échec après 4 retries ? (@Nicolas)
- [ ] Le secret OAuth doit-il être chiffré dans le config ?
(@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis LIM-89 |
| 2026-05-13 | Arthur | Ajout cartographie ATH complète, URLs TEST, note ATH214 hors GNA |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-89](https://easywmsfrance.atlassian.net/browse/LIM-89) | Ticket Jira | 2026 |
| Athenzat SAP-CPI Webservices Documentation v1.0 | PDF (Maxime Tourrette) | 2026-04-24 |
| Mail Justine S15 | Cartographie interfaces | 2026-04 |
@@ -0,0 +1,494 @@
---
title: "LOC — Message périodique (spécification complète)"
tags: [ERP, LOC, custom, delta, mouvement, stock, JSON, SAP, GNA]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: [LIM-76]
confluence_refs: []
sources:
- "LOC - Etat des lieux V2.md"
- "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"
- "LIM-76 LOT1.2 [GNA] Message LOC.md"
last_updated: 2026-05-12
author: Arthur
---
# LOC — Message périodique (spécification complète)
> **Résumé** : spécification du message custom LOC, envoyé du WMS vers SAP
> toutes les 5 minutes via le GNA, contenant le delta des HU modifiées.
> Le LOC remplace les messages PCK, MOVE, STV et STC et devient le **seul
> canal** de notification des mouvements de stock vers SAP.
> **Standard EasyWMS** : → voir [ERP Integration](../../concepts/erp-interface.md)
> Ce message est un **[CUSTOM]** — il n'existe pas dans le standard EasyWMS.
> Voir aussi : [Référence messages](messages-reference.md),
> [Flux ERP outbound](../04-outbound/flux-erp-outbound.md),
> [Intégration GNA → SAP-CPI](gna-sap-cpi.md)
## Contexte projet
Le LOC est un message custom envoyé du WMS vers SAP **toutes les 5 minutes**
(✅ reconfirmé le 30/04/2026), contenant l'état de toutes les HU ayant subi
une modification durant la période écoulée.
Il **remplace** les messages PCK et MOVE (supprimés) et centralise la
communication des mouvements physiques vers l'ERP. Le LOC ne transmet pas
l'intégralité de la base, uniquement le **delta sur la fenêtre de 5 minutes**
(basé sur la `CreationDate` des transactions WMS).
### Pourquoi le LOC plutôt que des STV purs ?
Limagrain (Nicolas Sanchez) a exprimé que les STV en delta (+/-)
ne sont **pas fiables** : si un message se perd ou est mal intégré, l'écart
est définitivement perdu. Limagrain souhaite recevoir des **quantités
absolues** que SAP prend pour argent comptant et compare à ses propres
données pour générer les écritures de delta.
Le LOC est un **fork fonctionnel du WSC** (Warehouse Stock Count) adapté
pour ne remonter que le delta des 5 dernières minutes, formaté selon un
JSON spécifique attendu par SAP.
### Décisions structurantes
- **STV désactivé** (post-processing coupé) — le LOC devient le **seul canal**
de notification des mouvements de stock vers SAP
- **STC désactivé** — les changements de statut hors retour sont limités au
B6 (blocage logistique) et sont couverts par le LOC (action R/U).
Les statuts des retours sont remontés dans le REF
## Architecture technique
### Chaîne de traitement
```
Job (toutes les 5 min) → Workflow → Transaction custom LOC.SEND → GNA →
Script BOO (requêtes WMS + agrégation + formatage JSON) → POST API SAP
```
### Côté WMS
1. Un **Job** s'exécute toutes les 5 minutes
2. Ce job appelle un **Workflow custom** dont le seul rôle est de **créer
une transaction custom** `LOC.SEND`
3. Le Workflow et la transaction ne portent aucune logique métier côté WMS —
toute la logique est dans le GNA
### Côté GNA
1. Un **script BOO** dédié au message LOC est créé dans le GNA
2. Le GNA détecte la transaction custom `LOC.SEND`
3. À réception, le script BOO :
- Collecte toutes les transactions WMS pertinentes sur le delta de temps
- Agrège les données par HU et détermine le code ACTION pour chaque
mouvement
- Construit le JSON au format attendu par SAP
- Effectue un **appel POST** vers l'API SAP-CPI (voir
[Intégration GNA → SAP-CPI](gna-sap-cpi.md))
### Détection du delta
1. À chaque exécution, enregistrer un timestamp de dernière exécution
2. Récupérer toutes les transactions dont `CreationDate > dernier_timestamp`
et `CreationDate ≤ timestamp_courant`
3. Agréger par HU, déterminer le code ACTION pour chaque mouvement
4. Générer le JSON et envoyer
5. **Si aucune transaction pertinente sur le delta → pas d'envoi de LOC**
## Couverture fonctionnelle — 7 codes ACTION
| Code | Signification | Déclencheur |
|------|---------------|-------------|
| **B** | Déplacement bin-to-bin | Déplacement de HU d'une zone à une autre |
| **U** | Set to Unrestricted (déblocage) | Déblocage statut B6 |
| **R** | Set to Restricted (blocage) | Blocage statut B6 |
| **S** | Scrap quantity (suppression) | Suppression de stock / support |
| **T** | Transfert inter-HU | Transfert de quantité entre deux HU |
| **C** | Correction de poids | Ajustement de quantité (valeur absolue) |
| **P** | Assignation client | Palette positionnée sur image de quai |
### Palettes exclues du LOC
**Exclure les palettes liées à une réception non fermée** (= dont le REF
n'a pas encore été envoyé). Seules les HU déjà connues de SAP via un REF
préalable doivent apparaître dans le LOC.
## Format JSON attendu par SAP
### Paramètres d'import
| Réf. | Champ | Type | Description |
|------|-------|------|-------------|
| 1 | IV_LGNUM | CHAR 4 | Numéro d'entrepôt (valeur fixe : `"WF02"`) — config EasyS |
| 2 | IV_TREATMENT_ID | CHAR 24 | Horodatage de génération du LOC |
### Structure JSON
```json
{
"IV_LGNUM": "WF02",
"IV_TREATMENT_ID": "<HORODATAGE_GENERATION_LOC>",
"IT_CREATE": [
{
"MATNR": "<CODE_PRODUIT_SAP>",
"BATCHID": "<LOT_SAP>",
"ACTION": "<CODE_ACTION>",
"ANFME": "<QUANTITE_OU_VIDE>",
"ALTME": "<UDM_OU_VIDE>",
"VLPLA": "<ZONE_STOCKAGE_ORIGINE>",
"NLPLA": "<ZONE_STOCKAGE_DESTINATION>",
"VLENR": "<CODE_SUPPORT_ORIGINE>",
"NLENR": "<CODE_SUPPORT_DESTINATION>",
"REASON": "<CODE_RAISON_OU_VIDE>",
"VBELN": "<CODE_LIVRAISON_OU_VIDE>",
"POSNR": "<LIGNE_LIVRAISON_OU_VIDE>"
}
]
}
```
### Table IT_CREATE — Champs (1:n)
| Réf. | Champ | Type | Description |
|------|-------|------|-------------|
| 1 | MATNR | CHAR 40 | Code produit SAP — vide si action B ou P |
| 2 | BATCHID | CHAR 10 | Code lot SAP — vide si action B ou P |
| 3 | ACTION | CHAR 1 | Code action : B, U, R, S, T, C, P |
| 4 | ANFME | NUM 13.3 | Quantité (absolue ou transférée selon action) — vide si B, U/R, P |
| 5 | ALTME | CHAR 3 | Unité de mesure (BAG, KG) — vide si action B ou P |
| 6 | VLPLA | CHAR 18 | Zone de stockage origine |
| 7 | NLPLA | CHAR 18 | Zone de stockage destination |
| 8 | VLENR | CHAR 20 | Code HU (palette) source — SSCC |
| 9 | NLENR | CHAR 20 | Code HU (palette) destination — SSCC |
| 10 | REASON | CHAR 4 | Code raison scrap — uniquement pour action S (ZSC1) |
| 11 | VBELN | — | Code livraison sortante SAP — uniquement pour action P |
| 12 | POSNR | — | Ligne de livraison sortante SAP — uniquement pour action P |
### Données stock/container à récupérer par ligne LOC
Pour chaque HU identifiée dans les transactions du delta :
- **Code produit SAP** : attribut logistique LotCode du stock
- **Code lot SAP** : ItemCode du stock (= code article WMS)
- **Quantité** : quantité actuelle de la ligne de stock (UdM de base WMS =
unité alternative SAP)
- **UdM** : BAG ou KG
- **Zone de stockage** : zone WMS du container (origine et destination)
- **Code support** : ContainerCode (SSCC)
- **Code livraison sortante** : ShippingOrderCode si action P
## Règles de remplissage par action
| Champ | B (déplacement) | U/R (statut) | S (suppression) | T (transfert) | C (correction) | P (assignation) |
|-------|-----------------|--------------|-----------------|---------------|----------------|-----------------|
| MATNR | Vide | Code produit | Code produit | Code produit | Code produit | Vide |
| BATCHID | Vide | Lot SAP | Lot SAP | Lot SAP | Lot SAP | Vide |
| ACTION | B | U ou R | S | T | C | P |
| ANFME | Vide | Vide | Qté supprimée | Qté transférée | Qté absolue | Vide |
| ALTME | Vide | UdM | UdM | UdM | UdM | Vide |
| VLPLA | Zone origine | Zone actuelle | Zone actuelle | Zone HU source | Zone actuelle | Vide |
| NLPLA | Zone destination | Vide | Vide | Zone HU dest. | Vide | Image de quai |
| VLENR | Code HU | Code HU | Code HU | Code HU source | Code HU | Code HU |
| NLENR | Vide | Vide | Vide | Code HU dest. | Vide | Vide |
| REASON | Vide | Vide | ZSC1 | Vide | Vide | Vide |
| VBELN | Vide | Vide | Vide | Vide | Vide | Code livraison |
| POSNR | Vide | Vide | Vide | Vide | Vide | Ligne livraison |
## Règles métier par type d'action
### ACTION = B (Déplacement bin-to-bin)
Déplacement de HU d'une zone à une autre. **Pas de quantité, pas de code
article, pas de lot** — seuls les champs zone et support sont renseignés.
Le contenu de la HU n'est pas rediscuté.
### ACTION = U / R (Déblocage / Blocage statut)
Hors flux retour, le seul statut autorisé est le **B6** (blocage
logistique). ACTION=R pour bloquer, ACTION=U pour débloquer.
Les statuts exotiques des retours (B6, F2, F9, etc.) sont gérés dans
le **REF** de la réception retour, pas dans le LOC.
### ACTION = S (Suppression / Scrap)
REASON est renseigné **uniquement** pour cette action. Valeur : `ZSC1`
(scrapping normal). Pas d'autre valeur possible.
### ACTION = T (Transfert inter-HU)
Source et destination **dans la même ligne** (VLENR + NLENR). ANFME =
quantité transférée (pas le solde restant).
Si le transfert passe par une étape intermédiaire (table de travail),
transmettre chaque étape séparément avec un emplacement matérialisé.
**Cas picking** : 5 tâches alimentant la même palette fille = 5 lignes
ACTION=T dans le même LOC, dans l'ordre chronologique.
**Création de palette au picking** : si le SSCC en NLENR est inconnu de
SAP, SAP crée automatiquement la HU (type palette standard). Le LOC ne
crée que la structure palette — le stock est transféré depuis une palette
source connue.
### ACTION = C (Correction de quantité)
Quantité **absolue** comptée/validée (pas un écart). SAP calcule le
delta. REASON n'est pas renseigné.
### ACTION = P (Assignation client)
Déclencheur : palette physiquement positionnée sur l'**image de quai**
(pas l'assignation logique). Champs obligatoires :
- ACTION = P
- VLENR = Code HU
- NLPLA = Image de quai de la HU
- VBELN = Code livraison sortante SAP (= SorCode côté WMS)
- POSNR = Ligne de livraison sortante SAP (= ligne d'OS associée à
l'article)
Les champs MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON sont
**vides** pour cette action.
## Transactions WMS sources
| Transaction WMS | Action LOC | Données à récupérer |
|-----------------|------------|---------------------|
| CON.MOVE | **B** (déplacement) | ContainerCode, zone origine, zone destination |
| CON.LOCATE | **B** (déplacement) | Idem |
| STK.MOVE | **B** ou **T** | ContainerCode source et dest. Si ContainerTo ≠ ContainerCode → T avec qté transférée |
| STK.ADJ | **C** (correction) | ContainerCode, quantité absolue actuelle après ajustement, UdM |
| CST.STK | **U** ou **R** | ContainerCode, nouveau statut (B6 uniquement hors retour) |
| STK.PICKING | **T** (transfert) | Container source, container destination (palette fille), qté transférée |
| CON.DELETE | **S** (suppression) | ContainerCode, quantité supprimée |
> ⚠️ Vérifier si d'autres transactions sont utiles pour le LOC
> (ex. STK.SCR pour le scrap depuis RF).
## Zones de stockage (VLPLA / NLPLA)
Les codes zone WMS ne correspondent pas directement aux codes emplacement
SAP. Une **table de correspondance** est nécessaire, réalisée via un
paramètre EasyS (ex : `[TK_5_A:TK_5][TK_5_B:TK_5]`).
### Zones attendues par SAP
| Zone SAP | Correspondance WMS |
|----------|--------------------|
| ASRS1 | TK1 (compartiment anoxie) |
| ASRS2 | TK2 (compartiment du milieu) |
| ASRS3 | Zone accessible du TK3 uniquement (grand compartiment) |
| ASRS4 | Zone accessible du TK4 uniquement (grand compartiment) |
| ASRS34 | Zone accessible des deux TK3 et TK4 (grand compartiment) |
| PICKING | Si présent sur un PK/TP |
| QUAI | Si présent sur un emplacement d'image de quai ou sur le quai |
## Horodatage (IV_TREATMENT_ID)
IV_TREATMENT_ID = horodatage du moment de **génération du LOC** (pas
l'heure de chaque transaction individuelle). Toutes les lignes d'un
même LOC partagent le même horodatage.
Format : `YYYYMMDD` — limité à 24 caractères (CHAR 24).
## Ordre des lignes
Les lignes dans IT_CREATE doivent être dans l'**ordre chronologique**
des transactions WMS. SAP traite les lignes dans l'ordre du fichier.
## Contraintes de longueur
| Champ | Type | Longueur max |
|-------|------|--------------|
| IV_LGNUM | CHAR | 4 |
| IV_TREATMENT_ID | CHAR | 24 |
| MATNR | CHAR | 40 |
| BATCHID | CHAR | 10 |
| ACTION | CHAR | 1 |
| ANFME | NUM | 13.3 (13 entiers, 3 décimales) |
| ALTME | CHAR | 3 |
| VLPLA | CHAR | 18 |
| NLPLA | CHAR | 18 |
| VLENR | CHAR | 20 |
| NLENR | CHAR | 20 |
| REASON | CHAR | 4 |
## Désactivation STV et STC
### STV
Désactiver le post-processing des transactions STK.ADJ → plus de
génération de message STV. Le LOC couvre ce besoin via ACTION=C.
**Vérifications préalables obligatoires :**
- Lister toutes les transactions qui génèrent un STV et confirmer que le
LOC couvre chaque cas
- Vérifier que le middleware GNA n'a pas d'autre dépendance au STV
### STC
Désactiver le post-processing des transactions CST.STK → plus de
génération de message STC. Le LOC couvre le B6 via ACTION=R/U.
Mêmes vérifications à effectuer que pour le STV. Documenter les
résultats de cette analyse dans un commentaire de la tâche avant de
procéder à la désactivation.
## Critères d'acceptation
1. Un job WMS tourne toutes les 5 minutes et crée une transaction custom
LOC.SEND
2. Le GNA détecte cette transaction et génère un JSON LOC conforme
3. Le JSON est envoyé en POST à l'endpoint SAP
4. Les 7 codes ACTION (B, U, R, S, T, C, P) sont correctement générés
5. ACTION=B : ANFME, ALTME, MATNR, BATCHID, NLENR, REASON, VBELN, POSNR
vides — seuls VLPLA, NLPLA et VLENR renseignés
6. ACTION=U/R : MATNR, BATCHID, ALTME, VLPLA, VLENR renseignés —
ANFME, NLPLA, NLENR, REASON, VBELN, POSNR vides
7. ACTION=S : REASON=ZSC1 — MATNR, BATCHID, ANFME, ALTME, VLPLA, VLENR
renseignés — NLPLA, NLENR, VBELN, POSNR vides
8. ACTION=T : VLENR et NLENR dans la même ligne — ANFME = qté transférée
(pas un solde) — REASON, VBELN, POSNR vides
9. ACTION=C : ANFME = quantité absolue (pas un delta) — NLPLA, NLENR,
REASON, VBELN, POSNR vides
10. ACTION=P : VLENR, NLPLA (image de quai), VBELN, POSNR renseignés —
MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON vides
11. Palettes liées à une réception non fermée (pas de REF envoyé) exclues
12. Lignes dans IT_CREATE dans l'ordre chronologique des transactions WMS
13. IV_TREATMENT_ID = horodatage de génération (CHAR 24)
14. Aucune transaction pertinente sur le delta → pas d'envoi de LOC
15. Contraintes de longueur respectées sur tous les champs
16. STV et STC désactivés après validation de l'analyse d'impact
17. Picking N tâches → N lignes ACTION=T dans l'ordre chronologique
18. SSCC inconnu en NLENR lors d'un ACTION=T → LOC ne bloque pas, SAP
crée la HU automatiquement
## Cas de tests
### Architecture et Job
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-01 | 1 | Déclenchement job toutes les 5 min | 3 transactions LOC.SEND en 15 min |
| CT-02 | 2,3 | GNA détecte LOC.SEND et génère JSON | JSON conforme + POST HTTP 200 |
| CT-03 | 14 | Aucune transaction sur le delta | Aucun POST vers SAP |
### ACTION=B — Déplacement
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-10 | 4,5 | Déplacement via CON.MOVE | ACTION=B, seuls VLPLA/NLPLA/VLENR renseignés |
| CT-11 | 4,5 | Déplacement via CON.LOCATE | Idem CT-10 |
| CT-12 | 4,5 | STK.MOVE sans changement HU (ContainerTo=ContainerCode) | ACTION=B (pas T) |
### ACTION=U/R — Blocage / Déblocage
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-20 | 4,6 | Blocage HU via CST.STK (→ B6) | ACTION=R, MATNR/BATCHID/ALTME/VLPLA/VLENR renseignés |
| CT-21 | 4,6 | Déblocage HU via CST.STK (← B6) | ACTION=U |
| CT-22 | 6 | Changement statut hors B6 (hors retour) | Aucune ligne dans le LOC |
### ACTION=S — Suppression / Scrap
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-30 | 4,7 | CON.DELETE sur une HU | ACTION=S, REASON=ZSC1, qté et champs stock renseignés |
| CT-31 | 7 | Plusieurs suppressions | Chaque ligne S a REASON=ZSC1 uniquement |
### ACTION=T — Transfert inter-HU
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-40 | 4,8 | STK.MOVE avec ContainerTo ≠ ContainerCode | ACTION=T, VLENR+NLENR+ANFME renseignés |
| CT-41 | 4,8 | STK.PICKING | ACTION=T, ANFME = qté transférée (pas solde) |
| CT-42 | 17 | 3 pickings → même palette fille | 3 lignes T dans l'ordre chronologique |
| CT-43 | 18 | Picking vers SSCC inconnu SAP | Ligne T générée, LOC ne bloque pas |
| CT-44 | 8 | Transfert via table de travail | 2 lignes distinctes (pas de fusion) |
### ACTION=C — Correction de quantité
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-50 | 4,9 | STK.ADJ (ajustement) | ACTION=C, ANFME = qté absolue après ajustement |
| CT-51 | 9 | Vérification REASON vide | REASON vide pour action C |
### ACTION=P — Assignation client
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-60 | 4,10 | Palette sur image de quai | ACTION=P, VLENR/NLPLA/VBELN/POSNR renseignés |
| CT-61 | 10 | Champs vides vérifiés | MATNR/BATCHID/ANFME/ALTME/VLPLA/NLENR/REASON vides |
### Filtre d'exclusion
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-70 | 11 | HU réception non fermée (pas de REF) | Aucune ligne dans le LOC |
| CT-71 | 11 | HU réception fermée (REF envoyé) | Ligne présente dans le LOC |
### Ordre chronologique et horodatage
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-80 | 12 | 3 transactions dans l'ordre | Lignes dans l'ordre chronologique |
| CT-81 | 13 | IV_TREATMENT_ID | Horodatage de génération, ≤ 24 car. |
### Contraintes de longueur et cas combinés
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
| CT-90 | 15 | Valeurs aux limites de longueur | JSON sans troncature |
| CT-91 | 15 | ANFME avec décimales | Format NUM 13.3 respecté |
| CT-100 | 16 | STK.ADJ après désactivation STV | Pas de STV, LOC contient ACTION=C |
| CT-101 | 16 | CST.STK après désactivation STC | Pas de STC, LOC contient ACTION=R |
| CT-110 | 4,12 | Plusieurs actions dans le même delta | 4 lignes, 4 actions, ordre chronologique |
| CT-111 | 2 | IV_LGNUM | Toujours "WF02" |
| CT-112 | — | HU multi-lignes de stock | Plusieurs entrées dans IT_CREATE |
## Points d'attention
⚠️ **STV et STC désactivés** — vérifier qu'aucun autre process métier ne
dépend d'eux (middleware GNA, reporting).
⚠️ Le filtrage GNA des STV avec motif "STR" devient caduc si le STV est
globalement désactivé.
⚠️ Le LOC ne doit jamais transmettre de palettes dont la réception n'est
pas fermée (pas de REF envoyé).
⚠️ Pour ACTION=B, les champs MATNR, BATCHID, ANFME, ALTME sont tous vides.
⚠️ Les quantités sont des valeurs **absolues** sauf pour ACTION=S (quantité
supprimée) et ACTION=T (quantité transférée).
⚠️ IV_LGNUM = `"WF02"` (pas "WL02" — corrigé depuis spec V2).
## Questions ouvertes
- [ ] Cas palette déposée sur image de quai → chargée → OS fermé →
LOF/SOF envoyé avant le LOC : la HU ne sera pas mentionnée dans le LOC
(@Limagrain)
- [ ] HU multi-lignes de stock : comportement exact à confirmer (CT-112)
(@Fabien)
- [ ] Vérifier si d'autres transactions WMS sont utiles pour le LOC
(ex. STK.SCR) (@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-06 | Arthur | Création depuis spec LOC V2 (réunion 30/04/2026) |
| 2026-05-12 | Arthur | Refonte complète depuis LIM-76 : architecture technique GNA/BOO, ACTION=P confirmé avec VBELN/POSNR, IV_LGNUM corrigé WF02, zones SAP détaillées, contraintes de longueur, 25+ cas de tests, critères d'acceptation |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-76](https://easywmsfrance.atlassian.net/browse/LIM-76) | Ticket Jira (LOT 1.2) | 2026 |
| LOC - Etat des lieux V2 | Spécification technique | 30/04/2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| Réunion LOC 30/04/2026 | Réunion Arthur + Justine + Nicolas | 30/04/2026 |
@@ -0,0 +1,173 @@
---
title: "Mapping ERP-WMS — Changement article et propriétaire"
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
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
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
### Contenu du message
| 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 |
### Contrainte d'exécution
Le changement ne peut avoir lieu **que si le stock n'est pas assigné à
un processus** (picking, expédition, regroupement, etc.).
Si le stock est assigné → le message CHG génère un message **ERR** pour
informer SAP que le changement est impossible.
## 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 et remonté dans le message d'interface
(STC) pour informer l'ERP.
### 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
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)
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: STC (notification changement statut)
```
## Points d'attention
⚠️ Le CHG ne renvoie pas de confirmation positive — seule l'erreur (ERR)
est remontée si le changement échoue.
⚠️ 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 (@Justine)
- [ ] Liste des commentaires par statut — validée ? (@Justine)
- [ ] CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)
## 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) |
## 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 |
@@ -0,0 +1,321 @@
---
title: "Catalogue des messages ERP — Référence complète"
tags: [ERP, messages, interface, SAP, catalogue, ITM, ASN, ROR, ROF, REF, SOR, RUT, SOF, LOF, PCK, MOV, STV, STR, STC, SCR, WSC, COR, COF, LOC, ERR, CHG]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
author: Arthur
---
# Catalogue des messages ERP — Référence complète
> **Résumé** : tableau de référence de tous les messages d'interface entre
> SAP EWM et EasyWMS chez Limagrain, classés par domaine fonctionnel.
> **Standard EasyWMS** : → voir [ERP Integration](../../concepts/erp-interface.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
La communication entre SAP EWM et EasyWMS utilise XML + Webservice.
Le détail des champs est dans le document « Liste Interfaces LIMAGRAIN »
(fichier séparé). Cette page référence la typologie et le rôle de chaque
message.
## Tableau synthétique
### SAP → EasyWMS (flux entrants)
| Domaine | Message | Standard/Custom | Description | Statut |
|---------|---------|-----------------|-------------|--------|
| Master Data | ITM | Standard | Fiche article (Lot SAP) | ✅ Validé |
| Réception | ASN | Standard | Réception production (1 par palette) | ✅ Validé |
| Réception | ROR | Standard | Réceptions externes + retours clients | ✅ Validé |
| Expédition | SOR | Standard | Ordres de sortie (prod/recertif) | ✅ Validé |
| Expédition | RUT | Standard | Routes / tournées client | ✅ Validé |
| Stock | STR | Standard | Demande changement de stock (article, statut) | ✅ Validé |
| Inventaire | COR | Standard | Demande d'échantillonnage | ✅ Validé |
| Inventaire | SCR | Standard | Demande image de stock de l'entrepôt | ✅ Validé |
### EasyWMS → SAP (flux sortants)
| Domaine | Message | Standard/Custom | Description | Statut |
|---------|---------|-----------------|-------------|--------|
| Réception | REF | Standard | Finalisation de réception (+ zone stockage) | ✅ Validé |
| Réception | ROF | Standard | Clôture d'ordre d'entrée | ✅ Validé |
| Expédition | SOF | Standard | Finalisation ordre de sortie | 🟡 Phase 2 |
| Expédition | LOF | Standard | Finalisation de chargement | ✅ Validé |
| Stock | STV | Standard | Variation de stock | ⚠️ **DÉSACTIVÉ** (remplacé par LOC) |
| Stock | STC | Standard | Notification changement de statut | ⚠️ **DÉSACTIVÉ** (remplacé par LOC) |
| Stock | LOC | [CUSTOM] | Message périodique delta 5 min | ✅ Validé |
| Stock | WSC | Standard | Image de stock journalière | 🟡 Volumétrie à vérifier |
| Inventaire | COF | Standard | Confirmation d'échantillonnage | 🟡 Traitement à confirmer |
| Expédition | PCK | [CUSTOM] | Passage conteneur client | ⚠️ **REMPLACÉ** par LOC |
| Erreur | ERR | Standard | Erreur d'importation de message | ✅ Validé |
### Flux supprimés ou non retenus
| Message | Statut | Raison |
|---------|--------|--------|
| MOV | **Supprimé** | Redondant avec LOC + STR combinés |
| PCK | **Remplacé** par LOC | Le LOC périodique couvre le besoin |
| STV | **Désactivé** | Le LOC devient le seul canal stock (décision 30/04/2026) |
| STC | **Désactivé** | Statuts hors retour = B6 uniquement via LOC |
| ACC/SUP | **Non transmis** par l'ERP | Base client/fournisseur non interfacée |
| ROC | **Non utilisé** a priori | À confirmer côté Limagrain |
### Messages bidirectionnels / custom
| Domaine | Message | Direction | Standard/Custom | Description |
|---------|---------|-----------|-----------------|-------------|
| Réception | API Lot | WMS ↔ ERP | [CUSTOM] | Demande/réponse lot SAP pour retours clients |
| Stock | CHG | ERP → WMS | [CUSTOM] | Changement article et/ou propriétaire |
## Messages custom détaillés
### PCK — Passage Conteneur Client
- **Déclencheur** : stock préparé, passage en conteneur client EasyWMS
- **Contenu** : information passage conteneur client
- **Envoyé pour** : commande client, consommation OF hors recert, messagerie
- **Voir** : [Flux ERP outbound](../04-outbound/flux-erp-outbound.md)
### ~~MOV — Movement~~ ANNULÉ
> **ANNULÉ** — décision réunion client, jugé inutile.
- ~~**Déclencheur** : déplacement de stock entre palettes~~
- ~~**Contenu** : palette d'origine, palette de destination, quantité~~
### LOC — Message périodique (détaillé)
- **Déclencheur** : Job toutes les 5 min → WF → transaction `LOC.SEND` → GNA
(script BOO) → POST SAP-CPI
- **Remplace** : PCK, MOVE, STV, STC
- **Actions** : B (déplacement), U/R (statut B6), S (suppression), T (transfert
inter-HU), C (correction quantité), **P (assignation client)**
- **Quantités** : valeurs absolues (pas des écarts) sauf ACTION=S et T
- **Exclusion** : palettes dont la réception n'est pas fermée (pas de REF)
- **Approche technique** : fork du WSC avec filtre temporel sur CreationDate
- **Transport** : via GNA → SAP-CPI (OAuth 2.0 client_credentials) —
code CPI : **ATH201**
- **Voir** : [Spécification complète LOC](loc-message-periodique.md),
[Intégration GNA → SAP-CPI](gna-sap-cpi.md),
[Flux ERP outbound](../04-outbound/flux-erp-outbound.md)
### STV — Variation de Stock (⚠️ DÉSACTIVÉ)
> ⚠️ **Décision 30/04/2026** : le STV est désactivé (post-processing coupé).
> Le LOC devient le seul canal de notification des mouvements de stock vers SAP.
- **Direction** : WMS → SAP
- **Rôle initial** : notifier les ajustements de quantités manuels (hors flux
standards réception/expédition)
- **Mapping clé** :
| Balise | Utilisation |
|--------|-------------|
| Operation | C (positif) / D (négatif) |
| Site | WF02 |
| ItemCode | Code lot SAP |
| OwnerCode | MECALUX |
| ContainerCode | Numéro HU |
| FilterAttributes | Attributs du stock existant modifié |
| Attributes | Attributs du stock nouvellement créé |
| ReasonCode | AJUSTEMENT MANUEL |
| ERPReasonCode | ZSC1 |
| Comment | Facultatif (opérateur) |
- **Point ouvert** : Limagrain doit définir comment gérer côté ERP un STV de
type "création de stock" (l'ERP n'autorise pas la création de stock par ce
biais aujourd'hui)
- **Raison désactivation** : Limagrain préfère des quantités absolues (LOC)
plutôt que des écarts +/- (STV) — si un message se perd, l'écart est
définitivement perdu
### STR — Demande de Changement de Stock
- **Direction** : ERP → WMS
- **Cas d'usage** : 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)
- **Interaction avec STV** : ajustement avec motif "STR" → le middleware (GNA)
ne traite pas les STV avec ce motif pour éviter les doublons
- **Monitoring** : Limagrain mettra en place un monitoring des erreurs pour
les cas de refus
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md)
### COR — Demande d'Échantillonnage
- **Direction** : ERP → WMS
- **Usage** : **uniquement** pour les demandes d'échantillonnage (pas pour les
inventaires physiques classiques, gérés dans EasyWMS en phase 1)
- **Mapping** :
| Balise | Valeur |
|--------|--------|
| Description | "ECHANTILLONNAGE" (en dur, discriminant WMS) |
| Code | Numéro du lot d'inspection SAP |
| Priority | 3 (basse) |
| ProductCode | Code lot SAP |
| LotCode | Code produit SAP |
| Color, Source, Size | Attributs logistiques standards |
- **Flux** : COR envoyé → WMS fait venir la palette sur un poste de travail →
opérateur prélève → palette repart en stockage → COF envoyé
- **Règle** : un article en cours d'échantillonnage **n'est pas disponible**
pour les ordres de sortie
- **Voir** : [Échantillonnage](../03-picking/echantillonnage.md)
### COF — Confirmation d'Échantillonnage
- **Direction** : WMS → ERP
- **Mapping** :
| Balise | Description |
|--------|-------------|
| CountCode | Numéro du lot d'inspection |
| Status | Closed (effectué) ou Cancelled (annulé) |
| UpdateDate | Date/heure de changement |
- **Point ouvert** : Limagrain doit confirmer si le COF sera traité côté ERP.
Si non traité, risque de demandes en double.
### WSC — Image de Stock Journalière
- **Direction** : WMS → ERP
- **Rôle** : image de stock complète pour vérification de cohérence. Contient
l'ensemble du stock : code OS, statut palette, toutes les informations
disponibles
- **Démarrage** : export manuel EasyWMS + export SAP + comparaison.
Automatisation possible ultérieurement (quotidien à heure fixe)
- **Point d'attention** : Limagrain doit vérifier sa capacité à traiter ce
fichier (volumétrie potentiellement élevée pour CPI)
- **Déclenchement** : transaction `SCR.REQ` ou `STOCKSYNC.ASKED`
### STC — Notification Changement de Statut (⚠️ DÉSACTIVÉ)
> ⚠️ **Décision 30/04/2026** : le STC est désactivé. Les changements de statut
> hors retour sont limités au B6 (blocage logistique standard) et sont couverts
> par le LOC (action R/U). Les statuts des retours sont remontés dans le REF.
### CHG — Changement article / propriétaire
- **Déclencheur** : modification article ou propriétaire dans SAP
- **Contenu** : numéro de HU, lot officiel, code nouvel article, description,
destination, propriétaire Limagrain
- **Contrainte** : le stock ne doit pas être assigné à un processus (sinon ERR)
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md)
### API Lot SAP — Retours clients
- **Déclencheur** : lot officiel inconnu lors d'un retour client
- **Contenu (demande)** : lot officiel à vérifier
- **Contenu (réponse)** : lot SAP correspondant + attributs logistiques
- **Parallèle** : un ITM est descendu avec les infos article
- **Voir** : [Réception retour](../01-inbound/reception-retour.md)
## Flux par processus
### Réception production (ASN)
```
SAP → ASN → EasyWMS → (réception + stockage) → REF → SAP
→ ROF → SAP
→ LOC (delta 5 min) → SAP
```
### Réception extérieure / retour (ROR)
```
SAP → ROR → EasyWMS → (réception + contrôle) → REF → SAP
→ ROF → SAP
→ LOC (delta 5 min) → SAP
```
### Expédition client (RUT)
```
SAP → RUT → EasyWMS → (picking + chargement) → LOC (delta 5 min) → SAP
→ LOF → SAP
→ SOF → SAP (phase 2)
```
### Consommation OF (SOR)
```
SAP → SOR → EasyWMS → (sortie) → LOC (delta 5 min) → SAP
→ SOF → SAP (phase 2)
```
### Échantillonnage
```
SAP → COR → EasyWMS → (prélèvement poste) → COF → SAP
```
### Image stock (vérification cohérence)
```
SAP → SCR → EasyWMS → WSC → SAP (image complète)
```
### Changement de stock
```
SAP → STR → EasyWMS → (MAJ stock) → LOC (delta 5 min) → SAP
OU → ERR → SAP (si stock assigné)
```
## Points d'attention
⚠️ **STV et STC désactivés** (décision 30/04/2026) — le LOC est le seul canal
de notification des mouvements de stock vers SAP.
⚠️ Le message CHG est rejeté (ERR) si le stock est assigné à un processus
en cours.
⚠️ MOV, PCK sont **supprimés/remplacés** — le LOC couvre tous ces besoins.
⚠️ L'ASN envoie 1 palette par message (pas d'agrégation — permet suppression
individuelle en cas d'annulation).
⚠️ Le STR est refusé si la palette est assignée "client" ou en préparation.
Le middleware GNA filtre les STV avec motif "STR" pour éviter les doublons
(caduc si STV globalement désactivé).
⚠️ Le COF n'est utile que si SAP le traite — sinon risque de demandes
d'échantillonnage en double.
## Questions ouvertes
- [ ] Détail champ par champ de chaque message — document séparé à intégrer (@Arthur)
- [ ] Format exact du message CHG (@Nicolas)
- [ ] Confirmer si le COF sera traité côté ERP (@Limagrain)
- [ ] Vérifier capacité de traitement du WSC quotidien — volumétrie (@Limagrain)
- [ ] Confirmer retour fournisseur : SOR simple ou RUT ? (@Limagrain)
- [ ] Effets de bord désactivation STV — lister toutes les transactions
STK.ADJ et vérifier couverture LOC (@Mecalux)
- [ ] Effets de bord désactivation STC — idem pour CST.STK (@Mecalux)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | MOV annulé, LOC détaillé (5 min, delta, structure JSON, flag client) |
| 2026-05-06 | Arthur | Enrichissement complet depuis CR consolidé ERP (STV, STR, COR/COF, WSC, flux supprimés, désactivation STV/STC) |
## 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 | 05/01 → 23/02/2026 |
| Expédition - LIMAGRAIN - DEV | Page ateliers DEV | 2026 |