màj wiki avec retour MES lot-5 AD
This commit is contained in:
@@ -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 |
|
||||
Reference in New Issue
Block a user