--- title: "LOC - Message périodique (spécification complète)" tags: [ERP, LOC, custom, delta, mouvement, stock, JSON, SAP, GNA] status: draft standard_ref: concepts/erp-interface.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" - "Jira LIM-76 (relecture commentaires 2026-07-17, revue de code en cours)" last_updated: 2026-07-17 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": "", "IT_CREATE": [ { "MATNR": "", "BATCHID": "", "ACTION": "", "ANFME": "", "ALTME": "", "VLPLA": "", "NLPLA": "", "VLENR": "", "NLENR": "", "REASON": "", "VBELN": "", "POSNR": "" } ] } ``` ### 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 | ## [CUSTOM] Implémentation GNA (statut : en revue de code, préprod) Statut ticket au 2026-07-17 : **En revue de code** (plusieurs livraisons préprod, revue Vincent Charvet en cours). Éléments issus de la relecture des commentaires : | Élément | Type | Rôle | |---------|------|------| | `CST_SendLOCTransaction` | Job | Toutes les 5 min, appelle `CST_SendLOC` | | `CST_SendLOC` | WF | Crée la transaction `LOC.SEND` (aucune logique métier) | | `LOC.SEND` | TransactionType | Déclenche la génération du LOC | | `LOC_ZONE_MAPPING` | Paramètre | Correspondance zones TK → zones client (voir [Paramètres projet](../07-admin/parametres-projet.md)) | | `CommonExportWebApi.boo` | Script GNA | Structure LOC selon le template client | | `EasyWMSExportMessages.boo` | Script GNA | Appelle `WriteLOC01` sur réception de `LOC.SEND` | | `EasyWMSWebApiObserver.boo` | Script GNA | Ajoute le type de message `LOC01` | | `LOC01.boo` | Script GNA | En-tête du message | | `WriteLOC01.boo` | Script GNA | Génère le message ; si rien n'a changé → transaction en erreur motif `NO_CHANGES` (évolution demandée : ne plus générer de transaction en erreur si rien à envoyer) | | `LOC01Observer.boo` | Script GNA | Cœur : récupère la dernière `LOC.SEND`, prend les transactions depuis (CON.MOVE, CON.LOCATE, STK.MOVE, STK.ADJ, CST.STK, STK.PICKING, CON.DELETE), détermine l'`ACTION` | | `LOC01.xsd` | Schéma | Structure du message LOC | **Décision réception non fermée** : on n'envoie pas de LOC pour un conteneur pas encore présent dans l'ERP (SAP les crée à partir du REF). Conséquence assumée par le client (soulevée par Nicolas le 02/06) : les modifications intervenues sur la palette **avant** l'envoi du REF ne sont pas rejouées après coup (filtrage par date/heure de traitement). ### Picking négatif (en cours - point délicat) Le picking négatif génère la séquence de transactions suivante : - `CON.CREATE` : nouveau conteneur sur une TP - `STK.PICKING.NEG` : déplacement de l'excédent vers la nouvelle palette, origine = destination = conteneur d'origine (picking sur lui-même), quantité = quantité demandée dans l'OS - 2× `CHB.LAB` : échange des labels des deux palettes (nouveau → origine, puis l'inverse) **Problème** : avec CON.CREATE + STK.PICKING.NEG seuls, on n'a pas la corrélation entre conteneur source et destination. `CHB.LAB` pourrait faire le lien, mais le swap des labels intervient **après** le picking - si le LOC part entre les deux étapes, l'information ne peut pas être regroupée. Analyse en cours (LOC01Observer mis à jour le 03/07 ; pistes de réflexion partagées par Arthur). ### Retours revue de code / client (à traiter) - **Retour client (08/07)** : certains LOC non intégrables côté SAP - action S avec les autres champs vides ; doublons (même info plusieurs fois). Corrections appliquées 09/07 puis 17/07. - **Revue de code (10/07, Vincent Charvet)** : détail des stocks manquant sur action S ; valeur `WF02` codée en dur ; fonction `BuildZoneMapping` jamais utilisée (éviterait de parser `LOC_ZONE_MAPPING` par emplacement) ; null ref potentielles sur la comparaison au statut B6 ; optimiser le cache (une query par type de donnée). Changements appliqués 17/07, re-revue à faire. ## 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) - Picking négatif : corrélation conteneur source ↔ destination indisponible via CON.CREATE + STK.PICKING.NEG ; le swap `CHB.LAB` intervient après le picking. Solution en cours d'analyse (@Maxime / @Vincent) - LOC action S : compléter le détail des stocks ; éliminer les doublons (retour client 08/07, corrections en cours) (@Maxime) ## 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 | | 2026-07-17 | Arthur | Relecture commentaires LIM-76 (statut en revue de code, préprod) : section « Implémentation GNA » (job/WF/transaction, scripts .boo, LOC01.xsd, LOC_ZONE_MAPPING, motif NO_CHANGES), décision réception non fermée (modifs pré-REF non rejouées), sous-section picking négatif (CON.CREATE + STK.PICKING.NEG + CHB.LAB, problème de corrélation), retours revue de code / client (action S, doublons, WF02 hardcodé, BuildZoneMapping, cache) | ## Références | Source | Type | Date | |--------|------|------| | [LIM-76](https://easywmsfrance.atlassian.net/browse/LIM-76) | Ticket Jira (LOT 1.2) - en revue de code, préprod | 2026-07-17 | | 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 |