màj wiki avec retour MES lot-5 AD
This commit is contained in:
@@ -0,0 +1,400 @@
|
||||
---
|
||||
title: "Réception retour commandes clients"
|
||||
tags: [inbound, réception, retour, client, API, lot]
|
||||
status: draft
|
||||
standard_ref: concepts/reception.md
|
||||
jira_refs: [LIM-72, LIM-67, LIM-68, LIM-66, LIM-64, LIM-70, LIM-73]
|
||||
confluence_refs: []
|
||||
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "LIM-72 LOT1.3 [RETOUR] Flux complet PK.md", "LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md"]
|
||||
last_updated: 2026-05-12
|
||||
author: Arthur
|
||||
---
|
||||
|
||||
# Réception retour commandes clients
|
||||
|
||||
> **Résumé** : processus spécifique de réception des retours client, avec
|
||||
> interrogation API SAP pour validation lot, et déclaration enrichie sur
|
||||
> poste de travail.
|
||||
|
||||
> **Standard EasyWMS** : → voir [Reception](../../concepts/reception.md)
|
||||
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
|
||||
|
||||
## Contexte projet
|
||||
|
||||
Les retours client suivent un flux similaire aux réceptions extérieures
|
||||
(passage poste de travail obligatoire) mais avec des particularités :
|
||||
|
||||
- `InboundType = 1` (Return) — vs 0 (Standard) pour les autres flux
|
||||
- Création de lignes autorisée (article non attendu possible)
|
||||
- Tolérance illimitée : profil de réception par défaut configuré en
|
||||
« illimité » sur tous les articles
|
||||
- `ReceiveLessAllowed = true` — réception partielle toujours autorisée
|
||||
- Interrogation API SAP pour valider le lot officiel
|
||||
- `AccountCode` = code client SAP (le client doit exister dans EasyWMS)
|
||||
|
||||
## Process complet de réception retour client
|
||||
|
||||
| Étape | Description | Ticket |
|
||||
|-------|-------------|--------|
|
||||
| 1 | Déclaration sur l'image de quai | [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) |
|
||||
| 2 | Déplacement AGV → poste de travail | [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) |
|
||||
| 3 | **Traitement au poste de travail** | [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) |
|
||||
| 4 | Déplacement AGV → table d'entrée (+ filmage si demandé) | — |
|
||||
| 5 | Passage PIE | [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) |
|
||||
| 6 | Stockage ou rejet | — |
|
||||
| 7 | Clôture de la réception | — |
|
||||
| 8 | Libération quai / image de quai | — |
|
||||
|
||||
Voir [Réception fournisseur](reception-fournisseur.md) pour le détail
|
||||
du déchargement camion et des déclarations initiales
|
||||
([LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) pour le
|
||||
flux fournisseur au PK).
|
||||
|
||||
## Notification ROR
|
||||
|
||||
Message ROR de SAP (type ORDRSP) avec :
|
||||
|
||||
- Numéro de réception
|
||||
- Articles / Lots / Quantités attendues
|
||||
- Codes articles **génériques** (codes uniques avec nomenclature
|
||||
précise, pas réutilisables — assure la traçabilité)
|
||||
|
||||
**Différence clé** : cette réception **autorise la création de lignes**.
|
||||
Limagrain peut recevoir un article non présent dans le ROR initial.
|
||||
Un article inconnu de la base EasyWMS = ROR refusé. Un article connu
|
||||
mais non prévu dans le retour = accepté (tolérance illimitée).
|
||||
|
||||
## [CUSTOM] Identification lot — Interrogation API SAP
|
||||
|
||||
Lors du scan du lot officiel sur le poste de travail, le WMS vérifie
|
||||
d'abord si le lot est connu localement. Si oui, pas d'appel API. Sinon :
|
||||
|
||||
### Rappel : structure des articles chez Limagrain
|
||||
|
||||
Chez Limagrain, le **code article WMS = lot SAP** (cf.
|
||||
[Données principales](../06-erp-interface/donnees-principales.md)).
|
||||
Chaque lot SAP est descendu via le fichier **ITM** (fiche article
|
||||
complète), et le code produit est un attribut stocké en CstAtt du stock.
|
||||
Le **lot officiel** est l'alias de l'article dans le WMS.
|
||||
|
||||
Quand le lot est "inconnu du WMS", cela signifie qu'**aucun article
|
||||
(ITM) n'existe avec ce lot officiel comme alias**. Il faut demander à
|
||||
SAP d'envoyer la fiche article complète.
|
||||
|
||||
### Logique de vérification
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Scan / saisie lot officiel] --> B{Lot officiel connu du WMS ?<br/>= alias article existant ?}
|
||||
B -- Oui --> C{Vendu par Limagrain ?}
|
||||
B -- Non --> D[Appel API SAP]
|
||||
D --> E[Écran attente<br/>refresh 5s / timeout 1 min]
|
||||
E --> F{ITM reçu via API WMS ?}
|
||||
F -- Oui --> C
|
||||
F -- Non / Timeout --> G{Tentative < 5 ?}
|
||||
G -- Oui --> H[Bouton Réessayer]
|
||||
H --> D
|
||||
G -- Non --> I[Erreur finale :<br/>contacter responsable]
|
||||
C -- Oui --> J{Plusieurs articles ?}
|
||||
C -- Non --> K[Erreur : lot non vendu<br/>par Limagrain]
|
||||
J -- Non --> L[Sélection automatique<br/>→ déclaration contenu]
|
||||
J -- Oui --> M[Dialogue choix article<br/>par pays d'origine]
|
||||
M --> L
|
||||
```
|
||||
|
||||
### Appel API SAP — Vérification du lot officiel
|
||||
|
||||
L'appel API REST est fait **directement depuis le workflow** (pas via
|
||||
GNA). Il sert à notifier SAP que le WMS a besoin de la fiche article.
|
||||
|
||||
**Séquence d'échange :**
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant WF as WMS (workflow)
|
||||
participant SAP
|
||||
WF->>SAP: POST /api/v1/lot/verify
|
||||
Note over WF,SAP: Payload : IV_LGNUM, IV_BATCH_OFF,<br/>IV_RETURN
|
||||
SAP-->>WF: Réponse JSON (EV_RETURN, ET_BATCH)
|
||||
alt EV_RETURN = "X" (OK)
|
||||
SAP->>WF: POST ApplicationService/ITM
|
||||
Note over SAP,WF: Fiche article complète :<br/>lot SAP = code article,<br/>lot officiel = alias
|
||||
WF->>WF: Vérif : product code existe en base ?
|
||||
alt OK
|
||||
WF->>WF: Continuer
|
||||
else Absent
|
||||
WF->>WF: Proposer réessayer
|
||||
end
|
||||
else EV_RETURN ≠ "X" (NOK)
|
||||
WF->>WF: Erreur immédiate
|
||||
end
|
||||
```
|
||||
|
||||
**Payload de requête :**
|
||||
|
||||
```json
|
||||
POST /api/v1/lot/verify
|
||||
{
|
||||
"IV_LGNUM": "WF02",
|
||||
"IV_MATNR": "",
|
||||
"IV_CHARG": "",
|
||||
"IV_BATCH_OFF": "<lot officiel à vérifier>",
|
||||
"IV_RETURN": "<code du retour client (OE)>"
|
||||
}
|
||||
```
|
||||
|
||||
- `IV_LGNUM` : toujours "WF02"
|
||||
- `IV_BATCH_OFF` : numéro de lot officiel scanné
|
||||
- `IV_RETURN` : code du retour client (ordre d'entrée)
|
||||
- Les autres champs restent vides
|
||||
|
||||
**Payload de réponse (champs clés) :**
|
||||
|
||||
| Champ | Description |
|
||||
|-------|-------------|
|
||||
| `EV_RETURN` | "X" = lot valide, sinon invalide |
|
||||
| `ET_RETURN[]` | Tableau de messages (TYPE, MESSAGE, etc.) |
|
||||
| `ET_BATCH[]` | Lots autorisés : `MATNR` (code article SAP), `CHARG` (lot SAP), `BATCH_OFF` (lot officiel), `EV_DEPLOY` ("X" = autorisé) |
|
||||
|
||||
Si `EV_RETURN = "X"`, on récupère dans `ET_BATCH` tous les
|
||||
`BATCH_OFF` dont `EV_DEPLOY = "X"` — ce sont les lots autorisés
|
||||
pour l'opérateur.
|
||||
|
||||
### Écran d'attente pendant la réception de l'ITM
|
||||
|
||||
Après l'appel API, SAP appelle directement l'API du WMS pour pousser
|
||||
l'ITM. Pendant cette attente :
|
||||
|
||||
- **Message** : "Vérification du lot en cours..."
|
||||
- **Refresh automatique** toutes les 5 secondes : le WMS vérifie si
|
||||
un **alias correspondant au lot officiel** existe en base
|
||||
- **Bouton "Réessayer"** visible (relance un nouvel appel API)
|
||||
- **Timeout** : 1 minute maximum par tentative
|
||||
- **Nombre maximum de tentatives** : 5
|
||||
|
||||
| Tentative | Comportement en cas de timeout |
|
||||
|-----------|-------------------------------|
|
||||
| 1 à 4 | Message "Erreur de communication avec SAP. Réessayer ?" + bouton Réessayer |
|
||||
| 5 | Message final "Impossible de contacter SAP après 5 tentatives. Veuillez contacter votre responsable." + bouton Annuler → retour au scan lot |
|
||||
|
||||
### Choix du code lot (multi-résultat)
|
||||
|
||||
Si l'API a renvoyé **plusieurs résultats** dans `ET_BATCH` (plusieurs
|
||||
`BATCH_OFF` avec `EV_DEPLOY = "X"`), un dialogue de sélection est
|
||||
affiché avec la liste des codes lots disponibles. L'opérateur en choisit
|
||||
un (filtrage par pays d'origine).
|
||||
|
||||
Si un **seul résultat** → sélection automatique, pas de dialogue.
|
||||
|
||||
**Pourquoi le choix article ?** Un lot SAP peut être associé à plusieurs
|
||||
articles (dépend du pays d'origine). L'opérateur doit choisir l'article
|
||||
physiquement présent sur la palette.
|
||||
|
||||
**Gestion dans le REF :** le code générique envoyé dans le ROR est
|
||||
remplacé par le vrai code lot dans le REF (custom).
|
||||
|
||||
## Déclaration au poste de travail (LIM-72)
|
||||
|
||||
Le traitement au PK reprend les mêmes étapes que le flux fournisseur
|
||||
([LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67)) avec des
|
||||
adaptations. Le tableau ci-dessous récapitule chaque étape et ses
|
||||
différences :
|
||||
|
||||
| # | Étape | Différence vs fournisseur (LIM-67) |
|
||||
|---|-------|------------------------------------|
|
||||
| 1 | Sélection de la réception | Affichage "**Client: CODE - NOM**" (au lieu de "Fournisseur") sur tous les écrans |
|
||||
| 2 | Big bag (CstAtt02) | Identique — toggle ON/OFF |
|
||||
| 3 | Scan lot officiel + vérification | **+ Vérification API SAP** (voir section ci-dessus) |
|
||||
| 4 | Déclaration quantité | Identique — affichage qté attendue + UdM, prompt non pré-rempli |
|
||||
| 4bis | Flag big-bag (bouton custom) | Identique (CstAtt02) |
|
||||
| 5 | Statut de stock | **Modifiable** — boutons visibles (masqués dans LIM-67) |
|
||||
| 6 | Flag "À anoxier" | Identique (CstAtt03 = true) |
|
||||
| 7 | Programme de filmage | Identique (paramètre FILMAGES → CstAtt05) |
|
||||
| 8 | Impression étiquette RFID | Identique ([LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68)) |
|
||||
| 9 | Validation → évacuation AGV | Identique |
|
||||
|
||||
### Statut de stock — Modifiable
|
||||
|
||||
Contrairement au flux fournisseur (LIM-67) où le statut de stock est
|
||||
verrouillé (boutons masqués), dans le flux retour client :
|
||||
|
||||
- Les **boutons de changement de statut sont visibles** et fonctionnels
|
||||
- L'opérateur peut modifier le statut (ex : Conforme, Sac sale,
|
||||
Non conforme, etc.)
|
||||
- Les écrans de **date de fin de statut** et **commentaire** suivent
|
||||
le comportement standard (non skippés contrairement au fournisseur)
|
||||
- [CUSTOM] Statuts spécifiques retour : **F9** (sacs sales), **B6**
|
||||
(non conforme) — assignables uniquement dans ce processus
|
||||
|
||||
### Tolérance illimitée
|
||||
|
||||
- **Article non prévu** dans le retour → accepté (création de ligne
|
||||
autorisée)
|
||||
- **Quantité supérieure** au prévu → acceptée
|
||||
- **Quantité inférieure** au prévu → acceptée (réception fermée
|
||||
manuellement)
|
||||
|
||||
> Le prompt type de poste (3 ou 6 TP) prévu initialement est
|
||||
> **abandonné** — remplacé par un message d'avertissement si le poste
|
||||
> adjacent est déjà ouvert (voir
|
||||
> [Stations picking](../03-picking/stations-picking.md)).
|
||||
|
||||
## Constitution palettes mono référence
|
||||
|
||||
Obligation de constituer des palettes **mono référence** avant stockage.
|
||||
Si la palette retour est multi-ref :
|
||||
|
||||
- Opérateur appelle une palette vide sur une TP disponible
|
||||
- Tri de marchandise
|
||||
|
||||
## Calcul poids et passage PIE
|
||||
|
||||
Identique aux réceptions extérieures (mêmes formules de répartition
|
||||
prorata, mêmes contrôles). Voir
|
||||
[Contrôle qualité réception](controle-qualite-reception.md).
|
||||
|
||||
**Différences pour les retours client :**
|
||||
|
||||
- Verrou si écart poids : **« Écart inventaire »** (vs « Réception »
|
||||
pour les autres flux) — verrou posé sur le **support** (pas sur
|
||||
le stock)
|
||||
- Action requise en cas d'écart : **recomptage du nombre de sacs**
|
||||
- Rejet PIE : dirigé vers **poumon au sol** + notification SmartUI
|
||||
(ancienne approche de renvoi au PK abandonnée)
|
||||
|
||||
## Clôture — Spécificités retour client (LIM-73)
|
||||
|
||||
Le mécanisme général de clôture (déclenchement auto-close, tolérance par
|
||||
ligne, CstAtt01 OE hors tolérance, clôture OE) est documenté dans
|
||||
[Réception fournisseur — Clôture](reception-fournisseur.md). Cette
|
||||
section décrit le **delta retour client** : le REF est conditionné au
|
||||
rangement ASRS complet.
|
||||
|
||||
### Contexte métier
|
||||
|
||||
Pour les retours clients, le REF influe sur la **facturation SAP**. Il
|
||||
ne doit être envoyé que lorsque **tous les supports** de la réception
|
||||
sont rangés dans l'ASRS (et ont passé l'ensemble des contrôles,
|
||||
notamment PIE).
|
||||
|
||||
Pour les autres types de réception (fournisseur / intersite), le REF est
|
||||
émis à la clôture de la réception, quelle que soit la position des
|
||||
supports.
|
||||
|
||||
### CstAtt11 — Marqueur de rangement ASRS
|
||||
|
||||
À chaque fin de tâche de rangement dans l'ASRS :
|
||||
|
||||
- Vérifier si le support provient d'une réception de type **retour**
|
||||
- Si oui → `CstAtt11 = true` sur le support
|
||||
- Sinon → aucune action
|
||||
|
||||
Le CstAtt11 est posé une fois et n'est **jamais remis à false**, même si
|
||||
le support ressort ensuite de l'ASRS (picking). Cela garantit que la
|
||||
condition de clôture reste satisfaisable même si une palette a déjà été
|
||||
expédiée entre-temps.
|
||||
|
||||
### Statut « Clôture en cours »
|
||||
|
||||
Dans la vue des réceptions, le statut visuel est piloté par le
|
||||
`CstAtt01 de la réception` (posé par Reception_Close_PR_V2) :
|
||||
|
||||
| CstAtt01 réception | État | Affichage |
|
||||
|---------------------|------|-----------|
|
||||
| null / vide | En attente | Standard |
|
||||
| true | Clôture en attente de rangement ASRS complet | **« Clôture en cours »**, ligne en **jaune** |
|
||||
|
||||
Pour les réceptions non-retour, CstAtt01 de la réception n'est pas
|
||||
utilisé (affichage standard).
|
||||
|
||||
### Adaptation Reception_Close_PR_V2 — Partie A (retours)
|
||||
|
||||
- **Si non-retour** → clôture immédiate, génération REF (standard)
|
||||
- **Si retour** :
|
||||
- Vérifier que **tous les supports** ont `CstAtt11 = true`
|
||||
- **Oui** → `CstAtt01 réception = false`, fermer la réception,
|
||||
générer REF
|
||||
- **Non** → ne pas fermer, `CstAtt01 réception = true` (statut
|
||||
« Clôture en cours »). Le WF est rejoué à chaque event
|
||||
_task finished_ sur un support de la réception
|
||||
|
||||
> Si une palette est refusée au PIE puis retirée du retour (ROR), le
|
||||
> client doit la **supprimer du WMS**, sinon la clôture ne sera jamais
|
||||
> effectuée.
|
||||
|
||||
### Zone de stockage dans le REF
|
||||
|
||||
Pour les retours, le REF n'est émis qu'une fois tous les supports rangés
|
||||
en ASRS → la valeur sera toujours une zone réelle (jamais "NON RANGEE").
|
||||
|
||||
### Récapitulatif CstAtt clôture retour
|
||||
|
||||
| CstAtt | Entité | Rôle |
|
||||
|--------|--------|------|
|
||||
| CstAtt08 | Palette fictive | Code réception — détecte l'absence de palettes fictives restantes (§ auto-close) |
|
||||
| CstAtt10 | Palette réelle au PK | `true` pendant traitement PK — détecte qu'aucune palette n'est en cours |
|
||||
| CstAtt11 | Support (palette réelle) | `true` quand le support retour a fini son rangement ASRS — **introduit par LIM-73** |
|
||||
| CstAtt01 | Réception (retour uniquement) | `true` = clôture en attente de rangement complet — **introduit par LIM-73** |
|
||||
| CstAtt01 | OE (ordre d'entrée) | `true` = hors tolérance, bloque auto-close et ROF — **introduit par LIM-73** |
|
||||
|
||||
## Points d'attention
|
||||
|
||||
⚠️ Le changement de statut de stock (F9, B6) n'est autorisé sur poste de
|
||||
travail **que** dans le processus retour client.
|
||||
|
||||
⚠️ Un commentaire est associé au statut et remonté dans le message
|
||||
d'interface ERP.
|
||||
|
||||
⚠️ Les palettes retour reçoivent automatiquement le flag « A anoxier »
|
||||
(risque contamination).
|
||||
|
||||
⚠️ L'API lot SAP est une interrogation synchrone — timeout 1 min,
|
||||
refresh 5s, 5 essais max avant erreur finale.
|
||||
|
||||
⚠️ Les codes articles génériques du ROR doivent être **uniques** (pas
|
||||
réutilisables) pour assurer la traçabilité.
|
||||
|
||||
## Paramètres spécifiques retour client
|
||||
|
||||
Les paramètres existants de LIM-67 sont réutilisés (FILMAGES, etc.).
|
||||
Paramètres additionnels pour l'API SAP :
|
||||
|
||||
| Paramètre | Description | Valeur par défaut |
|
||||
|-----------|-------------|-------------------|
|
||||
| SAP_LOT_VERIFY_URL | URL de l'endpoint API SAP pour la vérification des lots | _(à définir)_ |
|
||||
| SAP_LOT_VERIFY_TIMEOUT | Timeout d'un appel API SAP (en secondes) | 60 |
|
||||
| SAP_LOT_VERIFY_MAX_RETRIES | Nombre maximum de tentatives | 5 |
|
||||
| SAP_LOT_VERIFY_REFRESH | Intervalle de refresh écran d'attente (en secondes) | 5 |
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
- [x] ~~Format exact du message API lot SAP (requête/réponse)~~ — documenté
|
||||
via LIM-72 (payload POST /api/v1/lot/verify + réponse ET_BATCH)
|
||||
- [ ] URL exacte de l'endpoint SAP (SAP_LOT_VERIFY_URL) à définir
|
||||
(@Fabien)
|
||||
- [ ] Vérification "vendu par Limagrain" : est-ce le champ EV_DEPLOY
|
||||
dans ET_BATCH ou un autre champ de la réponse ? (@Fabien)
|
||||
- [ ] Gestion du token SAP : récupération avant chaque appel ou clé
|
||||
privée ? Mécanisme à préciser (@Fabien)
|
||||
- [ ] Cas du product code manquant en base après réponse OK :
|
||||
combien de temps attendre avant de proposer Réessayer ? (@Fabien)
|
||||
|
||||
## Historique des modifications
|
||||
|
||||
| Date | Auteur | Modification |
|
||||
|------|--------|--------------|
|
||||
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
|
||||
| 2026-05-05 | Arthur | Enrichissement depuis ateliers DEV Confluence |
|
||||
| 2026-05-12 | Arthur | Flux complet PK retour (LIM-72) : process 8 étapes, API SAP détaillée (payload, séquence, écran attente, retry), statut stock modifiable, tolérance illimitée, paramètres SAP_LOT_VERIFY_*, choix article multi-résultat |
|
||||
| 2026-05-12 | Arthur | LIM-73 : clôture retour client — REF conditionné au rangement ASRS complet (CstAtt11), statut « Clôture en cours » (CstAtt01 réception, jaune), Reception_Close_PR_V2 partie A (event replay), CstAtt01 OE hors tolérance, récap CstAtt clôture |
|
||||
|
||||
## Références
|
||||
|
||||
| Source | Type | Date |
|
||||
|--------|------|------|
|
||||
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
|
||||
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
|
||||
| [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) | Ticket Jira | 2026 |
|
||||
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (flux fournisseur PK) | 2026 |
|
||||
| [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) | Ticket Jira (étiquette RFID) | 2026 |
|
||||
| [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) | Ticket Jira (clôture REF/ROF retours) | 2026 |
|
||||
Reference in New Issue
Block a user