lint(limagrain): corrections completes Phase 1+2

- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary)
- Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees
- Liens: 9 ancres reparees (slugs GitHub)
- Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete
- Glossaire: 15 termes standard deplaces en section rappel avec renvoi
- Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final)
- Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
2026-07-20 12:56:42 +02:00
parent 23eb3f3c84
commit 7496aafe64
59 changed files with 6457 additions and 2023 deletions
+60 -35
View File
@@ -144,39 +144,39 @@ Total : 122 pages
- [Glossary](glossary.md) — All Mecalux/EasyWMS-specific terms: product names (EasyS, SmartUI, PIE, PDL, LPN, SSCC), abbreviations (AGV, PS, APS, SCEM, DOM, LMS, VAS, 3PL, PTL), AD element names, ERP message codes (ROR/SOR/ASN/SOF/etc.), transaction prefixes (CON.*/STK.*/TSK.*/etc.), key field names
## Limagrain — Projet (41 pages)
## Limagrain — Projet (46 pages)
### Réception fournisseur Production et extérieures/intersites
### Réception fournisseur - Production et extérieures/intersites
- **Path:** limagrain/01-inbound/reception-fournisseur.md
- **Type:** limagrain
- Deux flux de réception distincts production (directe ASRS via ASN) et extérieures/intersites (passage poste de travail via ROR).
- Deux flux de réception distincts - production (directe ASRS via ASN) et extérieures/intersites (passage poste de travail via ROR).
### Réception retour commandes clients
- **Path:** limagrain/01-inbound/reception-retour.md
- **Type:** limagrain
- Processus spécifique de réception des retours client, avec interrogation API SAP pour validation lot.
### Contrôle qualité réception Vérification poids PIE
### Contrôle qualité réception - Vérification poids PIE
- **Path:** limagrain/01-inbound/controle-qualite-reception.md
- **Type:** limagrain
- Mécanisme [CUSTOM] de contrôle de poids au passage PIE avec calcul de tolérance par type article et application automatique de verrous.
### Flux ERP inbound Messages réception
### Flux ERP inbound - Messages réception
- **Path:** limagrain/01-inbound/flux-erp-inbound.md
- **Type:** limagrain
- Catalogue des messages ERP liés aux processus de réception chez Limagrain.
### Étiquette support RFID — Format mono-référence
### Étiquette support RFID - Mono-référence & Multiréférence
- **Path:** limagrain/01-inbound/etiquette-rfid.md
- **Type:** limagrain
- Étiquette A5 imprimée en réception fournisseur/intersite : 12 champs, QR Code GS1 (5 AI), encodage RFID via ZPL.
- Étiquette support (HU) imprimée/encodée RFID via ZPL en réception et à l'étiqueteuse auto : rapport mono-référence (A5, QR GS1) et multiréférence (SSCC seul), WF CST_PrintRFIDLabel, évolution encodage 7 bits EPC en attente.
### Gestion des camions Arrivée, quais et déclaration image de quai
### Gestion des camions - Arrivée, quais et déclaration image de quai
- **Path:** limagrain/01-inbound/gestion-camions.md
- **Type:** limagrain
- Flux complet depuis l'arrivée physique d'un camion jusqu'à la déclaration des palettes sur une image de quai.
### ASRS Entrepôt automatique Limagrain
### ASRS - Entrepôt automatique Limagrain
- **Path:** limagrain/02-stockage/asrs-miniload.md
- **Type:** limagrain
- 4 allées de transstockeurs, racks multi-profondeur, nomenclature des emplacements, types de conteneurs et dimensions.
@@ -191,17 +191,17 @@ Total : 122 pages
- **Type:** limagrain
- 5 stratégies de rangement distinctes selon la typologie de la palette.
### Configuration Galileo Limagrain
### Configuration Galileo - Limagrain
- **Path:** limagrain/02-stockage/galileo-config.md
- **Type:** limagrain
- Architecture logicielle IT de l'installation et spécificités de la configuration Galileo (TMS).
### Processus d'anoxie TK01
### Processus d'anoxie - TK01
- **Path:** limagrain/02-stockage/processus-anoxie.md
- **Type:** limagrain
- Processus [CUSTOM] de traitement par anoxie dans l'allée 1, incluant le flag « A anoxier », la relocalisation et le blocage d'allée.
### Défragmentation Zone client et ordonnancement par tournée
### Défragmentation - Zone client et ordonnancement par tournée
- **Path:** limagrain/02-stockage/defragmentation.md
- **Type:** limagrain
- Processus de défragmentation pour préparer les palettes d'expédition vers la zone client ASRS. Custom LIM-87 : défrag par tournée quand quai non assigné, éligibilité tout-ou-rien au niveau RUT, ordonnancement par STOP.
@@ -209,9 +209,14 @@ Total : 122 pages
### Gestion des palettes vides
- **Path:** limagrain/02-stockage/palettes-vides.md
- **Type:** limagrain
- Gestion des piles de palettes vides dans EasyWMS réception, stockage, réapprovisionnement des postes et expédition.
- Gestion des piles de palettes vides dans EasyWMS - réception, stockage, réapprovisionnement des postes et expédition.
### Picking sur poste de travail — Expédition client
### Flux de rejet PIE - Renvoi au poste d'origine
- **Path:** limagrain/02-stockage/rejet-pie.md
- **Type:** limagrain
- Logique custom de rejet au PIE (dimension, poids, étiquette, palette bois) : le WMS calcule la destination et renvoie la palette au poste de travail d'origine (CstAtt06), pose un verrou porteur de la cause, gère la correction/ré-injection et REJ01. Paramètre PK_REJET_PROD. LIM-114.
### Picking sur poste de travail - Expédition client
- **Path:** limagrain/03-picking/picking-combinatoire.md
- **Type:** limagrain
- Processus [CUSTOM] de picking sur poste de travail pour les commandes client, avec ordonnancement par espèce et picking négatif.
@@ -221,12 +226,12 @@ Total : 122 pages
- **Type:** limagrain
- Stations de l'entrepôt automatique, postes de travail polyvalents (3 îlots × 2 postes) et buffers associés.
### Consolidation (regroupement) Processus sur poste
### Consolidation (regroupement) - Processus sur poste
- **Path:** limagrain/03-picking/consolidation-regroupement.md
- **Type:** limagrain
- Processus [CUSTOM] de consolidation de palettes incomplètes partageant les mêmes critères de stock.
### Mega Job Assignation des tâches aux PK
### Mega Job - Assignation des tâches aux PK
- **Path:** limagrain/03-picking/job-assignation-pk.md
- **Type:** limagrain
- Job unique « chef d'orchestre » des tâches de mouvement vers les PK. Éligibilité, modes autorisés (MODES_PKxx), sous-workflows LIM-74/LIM-75, gestion Big-Bag.
@@ -236,7 +241,7 @@ Total : 122 pages
- **Type:** limagrain
- Algorithme événementiel V1.1 ordonnant les sorties ASRS : 5 critères de tri (négatif > maïs > volume > poids > palette source), contraintes amont (complétude palette pro rata Bag/pal, anti-split), écriture séquences Line.CstAtt avec ex-aequo, verrouillage OS.CstAtt, arbitrage contradictions réunion 11/05/2026.
### Séquençage TK → PS Historique et arbitrage
### Séquençage TK → PS - Historique et arbitrage
- **Path:** limagrain/03-picking/sequencage-tk-ps-historique.md
- **Type:** limagrain
- Historique des 4 solutions envisagées pour le séquençage. Arbitrage des contradictions entre DevOps #64854, AF §6.4.8 et réunion 11/05/2026. Changelog V1.1.
@@ -246,17 +251,27 @@ Total : 122 pages
- **Type:** limagrain
- Algorithme de choix de table au PK pour chaque palette arrivant au PS. 3 tables avec contrainte d'adjacence, picking négatif (2 tables), picking direct (ping-pong), buffers ES, évacuation prioritaire, palettes multi-commandes, priorité inter-PK.
### Échantillonnage — Processus de contrôle qualité
### Process de picking au poste de travail (PK)
- **Path:** limagrain/03-picking/process-picking-pk.md
- **Type:** limagrain
- Workflow opérateur au PK (dernière étape de la chaîne picking) : picking direct/négatif, verrou HORS TOLERANCE et recomptage, étiquetage MII (SSCC virtuel sur Stock CstAtt2 + flag CstAtt14), filmage CstAtt05, évacuation ASRS, cas 100 % → shipping. Custom sur `WorkStation_Picking_Default`. En revue de code.
### Recertification - Workstation au poste de picking
- **Path:** limagrain/03-picking/recertification.md
- **Type:** limagrain
- Process de recertification au PK (mode Tâches automatiques, LIM-105) : scan ancienne palette → nouvelle étiquette → vérification ASN (polling SAP_ATH111_*) → échange conteneur (charge quai + déplace ASN au PK) → filmage. WF `CST_Recertification_PickingStationProcess_UI`, param `RECERTIFICATION_CODE_CLASSE`.
### Échantillonnage - Processus de contrôle qualité
- **Path:** limagrain/03-picking/echantillonnage.md
- **Type:** limagrain
- Processus [CUSTOM] d'échantillonnage pour contrôle qualité, assimilé à un inventaire, avec prélèvement sur poste de travail.
### Flux expédition Processus complet
### Flux expédition - Processus complet
- **Path:** limagrain/04-outbound/flux-expedition.md
- **Type:** limagrain
- Processus d'expédition de bout en bout en 12 étapes, de la réception de l'OS jusqu'à la libération du quai.
### Ordres de sortie Types et libération
### Ordres de sortie - Types et libération
- **Path:** limagrain/04-outbound/shipping-orders.md
- **Type:** limagrain
- 4 types d'ordres de sortie avec des comportements de libération, d'assignation et de préparation distincts.
@@ -266,32 +281,37 @@ Total : 122 pages
- **Type:** limagrain
- Description physique et logique des quais, poumons (images de quai) et du processus de chargement/déchargement.
### Séquençage shipping par STOP Quai assigné
### Séquençage shipping par STOP - Quai assigné
- **Path:** limagrain/04-outbound/sequencage-shipping-stop.md
- **Type:** limagrain
- Custom LIM-88 : quand quai déjà assigné, override WF tri stacker crane multi-TK (pattern Bardinet) pour ordonnancer la sortie ASRS par n° de STOP. Retour PF systématique vers ASRS (crossdock OFF).
### Flux ERP outbound — Messages expédition
### Assignation automatique de l'image de quai (OS/Tournée)
- **Path:** limagrain/04-outbound/assignation-image-quai.md
- **Type:** limagrain
- Job LIM-94 `CST_AssignDockStage` (30 s) : assigne une image de quai aux OS/Routes éligibles via un stage virtuel `X_EXP`. Conditions d'éligibilité (libéré, picking revenu TK, H-3 expédition) et d'assignabilité, placement PS X max, désassignation à l'arrêt.
### Flux ERP outbound - Messages expédition
- **Path:** limagrain/04-outbound/flux-erp-outbound.md
- **Type:** limagrain
- Catalogue des messages ERP liés aux processus d'expédition chez Limagrain.
### Catalogue des messages ERP Référence complète
### Catalogue des messages ERP - Référence complète
- **Path:** limagrain/06-erp-interface/messages-reference.md
- **Type:** limagrain
- Tableau de référence de tous les messages d'interface entre SAP EWM et EasyWMS, classés par domaine fonctionnel.
### Données principales et stock Mapping ITM et attributs
### Données principales et stock - Mapping ITM et attributs
- **Path:** limagrain/06-erp-interface/donnees-principales.md
- **Type:** limagrain
- Architecture retenue pour la gestion des articles et du stock, mapping du message ITM, attributs logistiques, profils et gestion des poids.
### Mapping ERP-WMS Changement article et propriétaire
### Mapping ERP-WMS - Changement article et propriétaire
- **Path:** limagrain/06-erp-interface/mapping-erp-wms.md
- **Type:** limagrain
- Processus [CUSTOM] de changement d'article et de propriétaire en cours de vie du stock, via message CHG.
### LOC Message périodique (spécification complète)
### LOC - Message périodique (spécification complète)
- **Path:** limagrain/06-erp-interface/loc-message-periodique.md
- **Type:** limagrain
- Message custom LOC envoyé du WMS vers SAP toutes les 5 minutes, contenant le delta des HU modifiées. Remplace PCK, MOVE, STV et STC. 7 codes ACTION (B/U/R/S/T/C/P), architecture Job→GNA→BOO→SAP-CPI.
@@ -301,7 +321,7 @@ Total : 122 pages
- **Type:** limagrain
- Communication GNA vers SAP-CPI : OAuth 2.0 client_credentials, endpoint unique ATHInboundMessage, routage MessageType→MessageSAP, retry backoff.
### Utilisateurs et groupes Permissions EasyWMS
### Utilisateurs et groupes - Permissions EasyWMS
- **Path:** limagrain/07-admin/utilisateurs-groupes.md
- **Type:** limagrain
- Définition des 3 groupes d'utilisateurs Limagrain et leurs permissions respectives.
@@ -311,37 +331,42 @@ Total : 122 pages
- **Type:** limagrain
- Annuaire complet des intervenants du projet Limagrain (client, intégrateur, partenaires).
### AD Customs — Éléments personnalisés
### AD Customs - Custom Attributes
- **Path:** limagrain/07-admin/ad-customs.md
- **Type:** limagrain
- Inventaire centralisé des Custom Attributes (CstAtt Container 1-12, Réception, OE, Stock, OS) et éléments AD personnalisés du projet Limagrain.
- Catalogue CstAtt par entité (Article, Support 1-14, Stock, OE, Réception, Ligne inventaire, Stratégies rangement, Status stock, Tâche, OS), aligné sur le référentiel LIM-14.
### Job AGV — Réception production vers ASRS
### Paramètres projet - Séquences, toggles, jobs et paramètres WMS
- **Path:** limagrain/07-admin/parametres-projet.md
- **Type:** limagrain
- Référentiel LIM-14 : séquences, toggles, transactions customs, paramètres standards + customs, jobs périodiques (fréquences, WF).
### Job AGV - Réception production vers ASRS
- **Path:** limagrain/05-agv/job-reception-production.md
- **Type:** limagrain
- Job périodique (30s) créant les tâches AGV de déplacement image de quai → buffer entrée production. Éligibilité : séquence 8000*, CstAtt04="ASN", anti-doublon.
### Mini Job Images de quai vers PK
### Mini Job - Images de quai vers PK
- **Path:** limagrain/05-agv/job-reception-pk.md
- **Type:** limagrain
- Sous-workflow du Mega Job orchestrant l'envoi des palettes depuis les images de quai vers les PK. Filtre big-bag, FIFO, assignation CstAtt06, création tâches "en attente".
### Intégration Still iGo API PACS et architecture
### Intégration Still iGo - API PACS et architecture
- **Path:** limagrain/05-agv/still-igo-integration.md
- **Type:** limagrain
- Documentation complète de l'intégration du fleet manager iGO easy (STILL/KION) avec EasyWMS : API REST PACS 2.3, cycle de vie des transports, mapping module AGV standard, architecture cible à 4 composants (Gateway + Pool IIS C#), FAQ STILL contractuelles.
### Stations et routes AGV Topologie iGO
### Stations et routes AGV - Topologie iGO
- **Path:** limagrain/05-agv/agv-stations-routes.md
- **Type:** limagrain
- Correspondance entre stations/routes EasyWMS et concepts Location/Group/Vehicle iGO. Configuration MyMA vs EasyS, décision tardive, verrous.
### Troubleshooting AGV Contraintes terrain
### Troubleshooting AGV - Contraintes terrain
- **Path:** limagrain/05-agv/agv-troubleshooting.md
- **Type:** limagrain
- Problèmes physiques identifiés lors de la visite terrain Still/Mecalux du 29/05/2026 : avaloirs, déport Zone Est/Ouest, SAS7, poste de rejet. Actions correctives Mecalux et Still.
### Questions ouvertes Suivi projet
### Questions ouvertes - Suivi projet
- **Path:** limagrain/08-transverse/questions-ouvertes.md
- **Type:** limagrain
- Centralisation de toutes les questions ouvertes identifiées lors de l'intégration.
+302
View File
@@ -347,3 +347,305 @@
- Mis à jour `_index.md` (ajout entrée operations/agv-installation.md dans Batch 13, mise à jour description modules/agv.md, compteur Operations 19→20)
- Mis à jour `glossary.md` (ajout termes : DBLink, dg4odbc, Gateway AGV)
**Questions** : aucune
## [2026-07-16] session-019 (mode: limagrain)
> Source : lecture directe des tickets Jira LOT (pas de fichier déposé dans `sources/`).
- **Fichier** : `Jira LIM-62` (lecture directe)
**Type** : Ticket Jira — #LOT 1.1 [RECEPTION] Gestion camions V1
**Action** : Mis à jour `limagrain/01-inbound/gestion-camions.md` (statut : LIM-62 V1 clôturée/annulée, validée fonctionnellement par Justine le 27/05, suite en LIM-97 V2 ; ajout note statut, ligne historique, ligne Références LIM-97, front matter jira_refs + last_updated)
**Cross-refs** : gestion-camions.md → LIM-97 (référence successeur V2)
**Questions** : aucune nouvelle (contenu V1 déjà documenté ; évolutions V2 à traiter via LIM-97)
- **Fichier** : `Jira LIM-63` (lecture directe)
**Type** : Ticket Jira — #LOT 1.1 [RECEPTION + EXPEDITION] Affichage chauffeurs
**Action** : Enrichi `limagrain/01-inbound/gestion-camions.md` (Étape 3 : statut pré-production, précision station de travail dédiée, tableau implémentation technique — dialog `CST_Workstation_Docks_DisplayDocksInformation`, workflow `CST_Workstation_Dock`, vue/viewgroup `CST_Workstation_Docks`, champ `RealStationWF.CST_LicencePlates`, ressource, MenuItem PanelMode)
**Cross-refs** : réutilisation query `CST_DockStationsWorkload_ForView` (LIM-62)
**Questions** : aucune nouvelle
- **Fichier** : `Jira LIM-64` (lecture directe)
**Type** : Ticket Jira — #LOT 1.1 [RECEPTION] TRF Déclaration image de quai V1
**Action** : Enrichi `limagrain/01-inbound/gestion-camions.md` (Étape 4 : statut V1 annulée → LIM-96 V2 + modifs fonctionnelles planifiées V2 ; ajout attributs support CstAtt01/04/08, compteur palettes déclarées, réimpression étiquette 800*, mode pile de palettes PALETTES BOIS, tableau éléments AD — dialogs/workflows/queries/report/view ; caveat big-bag CstAtt01 vs CstAtt02) ; mis à jour `glossaire-limagrain.md` (ajout CstAtt08 support, précision CstAtt12 reporté LIM-96)
**Cross-refs** : LIM-96 (V2), LIM-14 (séquence 800), LIM-71 (CstAtt04)
**Questions** : distinction big-bag CstAtt01 (label LIM-64) vs CstAtt02 (flag poste de travail) → à confirmer en LIM-96
- **Fichier** : `Jira LIM-65` (lecture directe)
**Type** : Ticket Jira — #LOT 1.1 [RECEPTION] Etiquette support image de quai
**Action** : Enrichi `limagrain/01-inbound/gestion-camions.md` (section Étiquette : statut pré-production, ajout champ OE, QR Code GS1 AI 00 support + AI 91 OE avec exemple, réutilisation flux retour fournisseur, tableau éléments AD — report, record ParsedContainerLabelWF, workflows ParseContainerLabel + CST_Reception_Return_ATH214_CheckData_UI)
**Cross-refs** : LIM-96 (impression), flux retour fournisseur
**Questions** : aucune nouvelle (AI GS1 déjà au glossaire)
- **Fichier** : `Jira LIM-66` (lecture directe)
**Type** : Ticket Jira — #LOT 1.3 [ENTREE/SORTIE] Passage PIE - poids et verrous
**Action** : Corrigé `limagrain/01-inbound/controle-qualite-reception.md` — REVERSAL majeur : seuil de tolérance revenu au poids ITM théorique (abandon de l'approche CstAtt01 dynamique, décision 19/06/2026) ; CstAtt01 conservé pour répartition prorata uniquement ; notification SmartUI abandonnée → redirection erreur poids standard (PIE_EventHandler_CheckToleranceWeight_PR) ; ajout section éléments AD (CST_PIE_ApplyWeightRules_PR, CST_StockView, CST_Stocks_ForView, StockVList) ; statut pré-production ; questions ouvertes reformulées (résolu tolérance, ouvert STV) ; rejet ECART RETOUR → LIM-114. Mis à jour `glossaire-limagrain.md` (ajout CstAtt01 ligne de stock)
**Cross-refs** : LIM-114 (flux rejet PIE)
**Questions** : STV envoyé ou non lors de l'ajustement de poids (@Vincent) — reporté dans questions ouvertes de la page
## [2026-07-16] session-020 (mode: limagrain)
> Source : lecture directe des tickets Jira LOT (pas de fichier déposé dans `sources/`).
- **Fichier** : `Jira LIM-67` (lecture directe, 29 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [RECEPTION] Postes de travail - Flux fournisseurs/intersites
**Action** : Enrichi `limagrain/01-inbound/reception-fournisseur.md` depuis la relecture des commentaires (revue de code validée 29/06, livré préprod 09/07) : section 5 démarre par scan conteneur virtuel + code conteneur auto-généré + report CstAtt08 ; §2 SSCC refondue (codes conteneurs attendus du ROR / scan support LIMAGRAIN + bouton Liste / CstAtt13, SSCC uniquement si aucun code ROR) ; sous-section 6 tables de préparation + poste de picking adjacent (blocage ouverture, palettes liées, CstAtt06) ; ajout action menu « Retirer support » (DeleteContainer) ; sous-section validation attributs logistiques → LIM-93 ; tableau CstAtt complété (CstAtt06, CstAtt13) ; champ CST_SupplierName ReceptionWF ; front matter (jira_refs LIM-68/93, last_updated), Historique, Références. Mis à jour `limagrain/glossaire-limagrain.md` (CstAtt10, CstAtt13, caveat conflit CstAtt06). Mis à jour `limagrain/08-transverse/questions-ouvertes.md` (conflit CstAtt06 LIM-67 vs LIM-71).
**Cross-refs** : LIM-68 (étiquette RFID), LIM-93 (attributs logistiques), LIM-71 (conflit CstAtt06)
**Questions** : conflit d'usage CstAtt06 support (LIM-67 poste de picking lié vs LIM-71 destination job) → reporté dans questions-ouvertes.md et glossaire
## [2026-07-17] session-021 (mode: limagrain)
> Source : lecture directe des tickets Jira LOT (pas de fichier déposé dans `sources/`).
- **Fichier** : `Jira LIM-68` (lecture directe, 9 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [RECEPTION/EXPEDITION] Étiquette support RFID - Monoréférence & Multiref
**Action** : Enrichi `limagrain/01-inbound/etiquette-rfid.md` depuis la relecture des commentaires (revue de code validée 24/03/2026) : renommage page (mono + multiréférence), double flux (réception + étiqueteuse auto expédition), ajout rapport multiréférence (SSCC seul), variante mono-ref avec quantité pour étiqueteuse auto, section Implémentation (WF CST_PrintRFIDLabel, Reception_PrintContainerLabels_UI, Container_MovedEvent_PR_V1, Container_MovedEventHandler_Labeler_PR, ressource CST_PrintInfo_2, imprimante virtuelle ZPL, code 18 car.), encodage actuel marqué « ASCII 8 bits User », nouvelle section évolution encodage 7 bits banque EPC (décision 06/07/2026, en attente client + spec Bartender) : puce Impinj M830, packing C#, lecture CIPAM, discriminant longueur hexa, mot PC, perma-lock, séquencement ; front matter (standard_ref labels.md, last_updated), Historique, Références. Mis à jour `_index.md` (résumé section). Mis à jour `glossaire-limagrain.md` (EPC, CIPAM, Bartender, CST_PrintRFIDLabel, Mot PC). Cross-ref ajoutée dans `04-outbound/flux-expedition.md` (étiqueteuse auto → page RFID).
**Cross-refs** : flux-expedition.md (étiqueteuse auto), reception-fournisseur.md (déjà en place), concepts/labels.md + stations.md (standard)
**Questions** : validation client encodage 7 bits EPC, spec packing Bartender/Eliatys, seuil longueur hexa legacy (JBR/SVA), tests ZT421 + perma-lock → reportées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-69` (lecture directe, 6 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 Modes de travail des PK
**Action** : Enrichi `limagrain/03-picking/stations-picking.md` (description déjà intégrée le 12/05) depuis la relecture des commentaires (revue de code validée 31/03, statut pré-production) : ajout section Éléments AD (entité CST_PkStationWorkMode, queries CST_PkStationWorkMode_ForView + CST_PickingStation_Adjacent, vues CST_VAssistAssignWorkMode + PkMpVList, WF WorkStation_Picking_OpenCloseStation_UI param CST_AdjacentPickingStation, ressources FR/EN dont CST_Picking_ConfirmOpenWithAdjacent_1) ; note statut pré-production + historique revue de code (préfixe CST_ manquant, suffixe _1) ; note reversal sur les contraintes de priorité (séquence continue / doublon / trou abandonnées → entiers libres) ; question Justine (ordre croissant priorités) en questions ouvertes ; front matter last_updated, Historique, Références. Mis à jour `glossaire-limagrain.md` (CST_PkStationWorkMode).
**Cross-refs** : job-assignation-pk.md (Mega Job LIM-70, déjà en place)
**Questions** : affichage priorités en ordre croissant dans la vassist (Justine, 20/05) → reporté dans la page
- **Fichier** : `Jira LIM-70` (lecture directe, 7 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK
**Action** : Enrichi `limagrain/03-picking/job-assignation-pk.md` (description déjà intégrée le 12/05) depuis la relecture des commentaires (2 revues de code validées 03/04 puis 29/06, statut préprod) : ajout section Éléments AD (job+WF CST_PickingStationAssignment_Job intervalle 5s, query CST_PickingStations_AvailableForAssignation, query CST_AnyOutboundOrderReleasingStatus) ; nouvelle sous-section « Condition de sortie globale - OS en Releasing » (motif : release non ordonné) ; ajout condition d'éligibilité CstAtt06 (conteneur de réception assigné au PK, contrôle 26/06) + note reliant au conflit CstAtt06 (LIM-67) ; note statut/revues de code ; résolution de la question ouverte fréquence (5s) ; front matter last_updated, Historique, Références. Mis à jour `glossaire-limagrain.md` (CST_PickingStationAssignment_Job, Releasing OS).
**Cross-refs** : stations-picking.md (modes LIM-69), questions-ouvertes.md (conflit CstAtt06), sous-WF LIM-74/75/80 (déjà en place)
**Questions** : aucune nouvelle (fréquence résolue) ; le contrôle CstAtt06 conforte l'usage réception vs le conflit LIM-71 déjà tracé
- **Fichier** : `Jira LIM-71` (lecture directe, 18 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.2 [RECEPTION][PRODUCTION][AGV] Job de création des tâches images de quai > ASRS
**Action** : Réécrit `limagrain/05-agv/job-reception-production.md` depuis la relecture des commentaires (statut préprod, 3 revues de code validées 27/03, 28/04, 01/07) : REVERSAL abandon du marquage CstAtt06 (anti-doublon = absence de tâche active, permet régénération après annulation) ; destination désormais via stratégies de rangement (DESTINATION_PRODUCTION obsolète) ; ajout gestion piles de palettes vides (code PAL) ; REVERSAL condition CstAtt12 (essayée puis retirée pour production/piles - pas d'étiquette) ; section Éléments AD (job CST_StoreProductionContainer_Job 30s, query CST_AvailableProductionContainers, vue LocationPutawayStrategyVList avec stages, WF Galileo_PIEEventHandler_PR) ; section job de régénération CST_Reception_RegenerateTask_Job (15s, query CST_ReceptionContainers_WithoutTasksToPK, flux réception fournisseur→PK) ; éligibilité DockStage ; questions résolues ; front matter, Historique, Références. RÉSOLUTION conflit CstAtt06 (LIM-71 n'utilise plus CstAtt06) propagée : `glossaire-limagrain.md` (CstAtt06, DESTINATION_PRODUCTION obsolète), `01-inbound/reception-fournisseur.md` (note tableau CstAtt + question ouverte + front matter/historique), `08-transverse/questions-ouvertes.md` (2 questions résolues + historique).
**Cross-refs** : reception-fournisseur.md (LIM-67, CstAtt06/08), job-assignation-pk.md (LIM-70), LIM-64 (image quai), LIM-66 (PIE), LIM-96 (étiquetage)
**Questions** : conflit CstAtt06 résolu ; reste ouvert : redirection multi-poumons/multi-PIE (config EasyS) → dans la page
- **Fichier** : `Jira LIM-72` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [RETOUR] Flux complet PK V1 - Annulée
**Action** : Ticket confirmé **Annulé(e)** (V1), explicitement repris par LIM-93 (V2). Intégration légère selon pattern V1/V2 : pas de duplication du détail. `limagrain/01-inbound/reception-retour.md` - ajout note de supersession (bloc résumé, table process étape 3, section « État du développement LIM-72 (V1 annulé → LIM-93) »), jira_refs (ajout LIM-93), last_updated, Historique, Références (LIM-72 V1 Annulé + LIM-93 V2). Contenu V1 conservé comme référence à valider. `limagrain/05-agv/job-reception-pk.md` - cross-ref étape 3 annotée V1→LIM-93. Détail définitif différé à la relecture de LIM-93.
**Cross-refs** : LIM-93 (reprise V2), reception-retour.md, job-reception-pk.md
**Questions** : aucune nouvelle ; détail retour PK à relire sur LIM-93
- **Fichier** : `Jira LIM-73` (lecture directe, 16 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [RECEPTION] Fermetures, REF et gestion retours
**Action** : Enrichi `limagrain/01-inbound/reception-fournisseur.md` (description déjà intégrée le 12/05) depuis la relecture des commentaires (revue de code validée 02/06, statut préprod/test client) : nouvelle section « Éléments techniques » (WF définitifs `InboundOrder_AutoCloseInboundOrder_PR_V2`, `Container_MovedEventHandler_Warehouse_PR`, `ReceiptLine_AutoClose_PR_V2` désactivé, `Reception_CheckReceiveMore_UI` non bloquant, `Reception_CheckIfAllReceptionLinesAreCompleted_PR`, `InboundOrder_UpdateStatus_By_Reception_ChangedStatus_PR_V2`, `WorkStation_Reception_Supplier_UI`, ressource `CST_View_RecOrder_ToleranceError`, GNA `REF01Observer.boo`) ; champ REF zone de stockage = `LneStockCstAtt01` ; source tolérance = ligne ROR ou profil article + contrôle bidirectionnel ; excédent non bloquant ; points revue de code (tests de nullité) ; RÉSOLUTION question WF clôture OE (V2 existant adapté, pas de nouveau WF) ; front matter sources/last_updated, Historique, Références. Enrichi `limagrain/01-inbound/reception-retour.md` : sous-section « Détection du mode retour » (`CST_Reception_GetReceptionFromContainer` returnMode, `Reception_Supplier_ChooseReception_UI`, `WorkStation_Reception_Supplier_ConfirmReceivedStock_UI`, ressource `CST_View_WaitForFullPutaway`), WF `Container_MovedEventHandler_Warehouse_PR` nommé pour CstAtt11 ; front matter/Historique/Références. Résolu la question WF clôture OE dans `08-transverse/questions-ouvertes.md`.
**Cross-refs** : reception-retour.md (clôture retour, CstAtt11), ad-customs.md (CstAtt11/CstAtt01 réception/OE), LIM-66 (notifications PIE), LIM-76 (LOC)
**Questions** : question WF clôture OE résolue ; reste ouvert : palette refusée PIE non supprimée (blocage clôture REF retour, @Justine)
- **Fichier** : `Jira LIM-14` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - Custom Attributes, Séquences, Jobs et Paramètres WMS (référentiel maître, statut En cours)
**Action** : Réécrit `limagrain/07-admin/ad-customs.md` en catalogue CstAtt complet aligné sur LIM-14 : ajout entités Article (10), Stock (2), Ligne d'ordre d'inventaire (1), Stratégies de rangement (1), Status de stock (3), Tâche (4) ; Support étendu à 14 (RÉALIGNEMENT : ad-customs était désync — 12 = Conteneur étiqueté/LIM-71, 13 = Ordre d'entrée/LIM-96, 14 = Palette étiquetée au PK/LIM-91 ; l'ancienne réservation « 13 = Étiquetée au PK » était obsolète et déjà corrigée en 13 = Ordre d'entrée dans reception-fournisseur.md + glossaire) ; front matter (jira_refs, sources, last_updated), Historique, Références. Créé `limagrain/07-admin/parametres-projet.md` (page déjà liée dans README) : séquences (800/PAL), toggles, paramètres standards (IsSingleReceipt, AutoCloseReception), transactions customs (CON.CREATE.RECEP, LOC.SEND), paramètres customs (~20 dont FILMAGES, MODES_PK, PK_ADJACENT/BIGBAG, SAP_CPI/ATH214/ATH111, LOC_ZONE_MAPPING, EXPEDITION_CLASSE_*), jobs (5, avec WF et fréquences). Réconcilié : `_index.md` racine (résumé ad-customs, ajout entrée parametres-projet, compteur 41→42), `glossaire-limagrain.md` (CstAtt12 corrigé = Conteneur étiqueté, ajout CstAtt14, note LIM-96 sur CstAtt13), `08-transverse/questions-ouvertes.md` (PS association OE→CstAtt13, discordance AutoCloseReception), `01-inbound/reception-fournisseur.md` (caveat AutoCloseReception LIM-14=false).
**Cross-refs** : parametres-projet.md ↔ ad-customs.md, reception-fournisseur.md (AutoCloseReception), reception-retour.md (CST_StockStatus), toutes tâches source (LIM-64/66/67/69/70/71/73/74/76/84/91/93/96/105/107)
**Questions** : discordance AutoCloseReception (true LIM-73 vs false LIM-14) ; type CstAtt01 Ligne d'inventaire (Booléen en LIM-14 mais donnée = nombre) ; PK_BIGBAG dupliqué en LIM-14 (LIM-70 + LIM-74)
- **Fichier** : `Jira LIM-74` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [AGV][JOB] MINI JOB - images de quai > poste de travail (PK)
**Action** : Enrichi `limagrain/05-agv/job-reception-pk.md` (description déjà intégrée le 12/05) depuis la relecture des commentaires (revue de code validée 07/04, statut préprod, commit 24067c85fc) : nouvelle section « Éléments techniques » (query `CST_Reception_BestPendingAssignment_ForPK`, WF `CST_PickingStationAssignment_Reception_PR` appelé par le Mega Job, `CST_PickingStationAssignment_Job` modifié pour PK_BIGBAG, vue `ContainerVList` +CustomAttribute6, ressource `CST_Container_CustomAttribute6` = PK Assigné/Assigned PK) ; front matter sources/last_updated, Historique, Références. La suppression du filtre CstAtt04 (production sans réception associée) était déjà reflétée.
**Cross-refs** : job-assignation-pk.md (Mega Job LIM-70), reception-fournisseur.md (CstAtt06/08), ad-customs.md (CstAtt06), LIM-60 (sous-emplacement auto)
**Questions** : aucune nouvelle ; AutoCloseReception confirmé true par Arthur (discordance LIM-14 résolue → à corriger côté ticket)
- **Fichier** : `Jira LIM-75` (lecture directe, 1 commentaire inclus)
**Type** : Ticket Jira - #LOT 1.2 [AGV][JOB] MINI JOB - PS > poste de travail (PK) - Annulé
**Action** : Ticket confirmé **Annulé(e)**, explicitement repris par LIM-82 (« Annulée, suite ici »). Intégration légère (pattern V1/V2, pas de détail dupliqué) : `03-picking/job-assignation-pk.md` - table des sous-workflows annotée (LIM-75 annulé → LIM-82), jira_refs (+LIM-82), Historique, Références (LIM-75 Annulé + LIM-82 reprise). `03-picking/sequencage-tk-ps.md` - références MINI JOB LIM-75 (déclenchement TaskCreatedEvent + section picking négatif) annotées → LIM-82. `03-picking/stations-picking.md` - mention sous-WF annotée. Détail du Mini Job PS → PK différé à la relecture de LIM-82.
**Cross-refs** : LIM-82 (reprise V2), job-assignation-pk.md (Mega Job LIM-70), sequencage-tk-ps.md (picking négatif)
**Questions** : aucune ; détail PS → PK à relire sur LIM-82
- **Fichier** : `Jira LIM-76` (lecture directe, 19 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.2 [GNA] Message LOC (statut : En revue de code, plusieurs livraisons préprod)
**Action** : Enrichi `limagrain/06-erp-interface/loc-message-periodique.md` (spec déjà intégrée le 12/05) depuis la relecture des commentaires : nouvelle section « Implémentation GNA » (job `CST_SendLOCTransaction` 5 min → WF `CST_SendLOC` → transaction `LOC.SEND` ; scripts GNA CommonExportWebApi/EasyWMSExportMessages/EasyWMSWebApiObserver/LOC01/WriteLOC01/LOC01Observer.boo + LOC01.xsd ; paramètre LOC_ZONE_MAPPING ; motif NO_CHANGES + évolution « pas de transaction en erreur si rien à envoyer ») ; décision réception non fermée (modifs pré-REF non rejouées, point Nicolas 02/06 assumé par le client) ; sous-section picking négatif (CON.CREATE + STK.PICKING.NEG self + 2× CHB.LAB, problème de corrélation source↔destination, analyse en cours) ; retours revue de code/client (action S champs vides + doublons 08/07, détail stocks S, WF02 hardcodé, BuildZoneMapping inutilisée, null ref B6, cache) ; questions ouvertes (picking négatif, action S) ; front matter sources/last_updated, Historique, Références. Job LOC déjà présent dans parametres-projet.md (LIM-14).
**Cross-refs** : parametres-projet.md (job CST_SendLOCTransaction, LOC_ZONE_MAPPING), reception-fournisseur.md (filtre réception non fermée / REF), sequencage-tk-ps.md (picking négatif), gna-sap-cpi.md (POST API SAP)
**Questions** : picking négatif (corrélation source/destination) ; action S (détail stocks + doublons) ; re-revue de code à faire (statut ticket non validé)
- **Fichier** : `Jira LIM-80` (lecture directe, 6 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [Mini Job] Assignation des OS aux PK (statut : en cours de test client / préprod)
**Action** : Refonte de la section « Mini Job - Assignation commandes aux PK (LIM-80) » dans `limagrain/03-picking/job-assignation-pk.md` depuis la relecture des commentaires (revue de code validée 26/06/2026) : suppression de la logique Messagerie `PK_TRANSPORTEUR_MESSAGERIE` et du tri par tournée/numéro d'arrêt (spec initiale superseded) ; ajout statut préprod ; éligibilité PK déléguée au Mega Job (renvoi) ; OS concernés (Release + stock/picking, hors `OutboundClassCode == RECERTIFICATION`) ; PK déjà choisi par le Mega Job (pas de recalcul routage) ; nouvelle section critères de tri (arbitrage Justine 19/06 : priorité OS → tâches de shipping → date de libération, avec note sur le premier jet 05/06 priorité → nb conteneurs → date) ; note priorité Messagerie gérée par SAP via SOR (pas de custom, param abandonné) ; section Création des tâches de picking (→ LIM-84) ; section Éléments AD (WF `CST_PickingStationAssignment_Picking_PR`, query `CST_OutboundOrder_BestPendingAssignment_ForPK`, note enrichissement `CST_PickingStationAssignment_Job`) ; section 8 subscriptions désactivées ; MAJ point d'attention Messagerie ; front matter last_updated, Historique, Références (6 commentaires, préprod). Ajout question priorité Messagerie SAP/SOR dans `08-transverse/questions-ouvertes.md` (section Picking + Historique) et sur la page.
**Cross-refs** : job-assignation-pk.md (Mega Job LIM-70, éligibilité PK), LIM-84 (séquençage TK → PS, tâches de picking), LIM-82 (Mini Job PS → PK), questions-ouvertes.md (Messagerie SAP)
**Questions** : confirmer côté client que SAP gère la priorité des Messagerie dans le SOR (abandon `PK_TRANSPORTEUR_MESSAGERIE`) → reportée dans questions-ouvertes.md
- **Fichier** : `Jira LIM-82` (lecture directe, 5 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.2 [PICKING] Ordonnancement des tâches de picking PS > PK (statut : Attente déploiement pour test / préprod, reprise de LIM-75 annulé)
**Action** : Enrichi `limagrain/03-picking/placement-ps-pk.md` (algorithme V1.0 déjà intégré le 12/05) depuis la relecture des commentaires (livré préprod 25/06, revue de code validée 03/07 après itération NOK 02/07) : ajout note statut + positionnement chaîne (LIM-80 → LIM-84 → LIM-82 → LIM-91) ; nouvelle section « Implémentation définitive (LIM-82) » (record TaskWF +CstAtt3 ; WF `CST_ChooseDestinationFromPS`, `Container_MovedEventHandler_PS_PR` déclencheur, `Container_MovedEventHandler_ET_PR` + `_MS_PR` gating shuttle CstAtt3=True après navette/TS_12 ; job `CST_Job_CheckPSBufferContainers` ; queries `CST_Picking_GetSiblingTasks`, `CST_GetTasksWaitingOnPSAndBufffer`, `CST_GetStationRoutes_ToDisable`) ; gate de séquence critère B (sibling tasks du même OS avec Line.CstAtt inférieur → buffer, correction revue de code route→OS pour éviter faux blocage 2 OS/route sur 2 PK) ; écarts V1.0 (abandon états `EN_ATTENTE_EVACUATION` + réactivation PF ; critères négatif C / direct D ; SEUIL_RECENTRAGE_PF + CONTROLE_TRAITEMENT_COMMERCIAL à confirmer) ; front matter (jira_refs +LIM-84/91, sources, last_updated), Historique, Références (LIM-82/84/75/91). Ajout attribution LIM-82 sur CstAtt Tâche 03 dans `07-admin/ad-customs.md` (front matter jira_refs, Historique, Références). Ajout 2 questions LIM-82 dans `08-transverse/questions-ouvertes.md` (big-bag sans PK dispo, mécanismes V1.0 + TaskType LIM-75).
**Cross-refs** : placement-ps-pk.md ↔ sequencage-tk-ps.md (Line.CstAtt LIM-84), ad-customs.md (CstAtt Tâche 03 navette), job-assignation-pk.md (LIM-80 assignation), LIM-91 (opérateur PK), LIM-75 (Annulé → LIM-82)
**Questions** : big-bag sans PK PK_BIGBAG disponible ; SEUIL_RECENTRAGE_PF / CONTROLE_TRAITEMENT_COMMERCIAL réellement implémentés ? ; où est écrit le TaskType picking négatif (LIM-75 annulé) → reportées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-84` (lecture directe, 5 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.2 [PICKING] Séquençage des tâches de picking TK > PS (statut : Attente déploiement pour test / préprod)
**Action** : Enrichi `limagrain/03-picking/sequencage-tk-ps.md` (algo V1.1 déjà intégré le 12/05) depuis la relecture des commentaires (revue de code validée 02/07, après NOK 29/06 + corrections 01/07) : ajout note statut ; refonte section « Déclenchement » (implémentation réelle = séquençage pendant l'assignation de stock via `Outbound_StockAssignProcess_PR` / `OutboundOrder_StockReassign_PR` + subscription `CST_PKAssigned_ReleaseOrder` → `CST_OutboundOrder_PKAssigned_ReleaseOrder_PR`, par job ; remplace le TaskCreatedEvent de la note de conception) ; MAJ conditions picking négatif (mono-lot, autorisé même avec attributs logistiques, poids ≥ 7 kg custom, 2 checks % standard) + ajout param NegativeMinCompletePercent 25% ; nouvelle section « Implémentation définitive » (WF `CST_PickingTasksSequencing_PR` = constitution palettes finales + numéro de séquence ; records `CST_PickingPalletList`/`CST_PickingStockList` ; queries `CST_PickingStocksToSequence_ByOutboundOrder` / `CST_Tasks_ForView` / `CST_Tasks_PendingOutboundForStackerCrane` ; vue `TaskVList` +CstAtt1 ; points confirmés recalcul / repart de 0 / inter-OS interdit) ; front matter (jira_refs +LIM-80/82, sources, last_updated), Historique, Références. CstAtt Tâche 01 (séquence) et OS (verrou) déjà présents dans ad-customs.md.
**Cross-refs** : sequencage-tk-ps.md ↔ placement-ps-pk.md (Line.CstAtt consommé LIM-82), job-assignation-pk.md (LIM-80 release/assign OS), ad-customs.md (CstAtt Tâche 01 séquence + OS verrou), sequencage-tk-ps-historique.md (solutions envisagées)
**Questions** : aucune nouvelle (questions description résolues dans le ticket : recalcul partiel confirmé, concurrence inter-OS interdite, timeout verrou négligeable, base % négatif confirmée 20/05)
- **Fichier** : `Jira LIM-85` (lecture directe, 1 commentaire inclus)
**Type** : Ticket Jira - #LOT 2.1 Configuration stratégies défragmentation du stock client par tournée (statut : En cours de test client / préprod)
**Action** : Ticket léger (suivi de config, description minimale : « mettre en place ces stratégies » suite atelier 02/04 ; commentaire « Stratégie importée sur Git » 23/04/2026). Enrichi `limagrain/02-stockage/defragmentation.md` (déjà rattachée à LIM-85/LIM-87) : ajout section « [CONFIG] Stratégies de défragmentation client par tournée (LIM-85) » distinguant la configuration des stratégies (mode Shipping / type d'ordre Tournée, zone client TK02-04 rangées 60-69) du custom d'éligibilité par tournée (LIM-87) ; note statut préprod + import Git 23/04 ; front matter last_updated, Historique, Références.
**Cross-refs** : defragmentation.md (LIM-87 custom quai non assigné), sequencage-shipping-stop.md (quai assigné), flux-expedition.md (étape 4 défrag)
**Questions** : aucune nouvelle
- **Fichier** : `Jira LIM-87` (lecture directe, 5 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [TOURNÉES] Défragmentation client - quai non assigné #ATTENTE_CLIENT (CT-13) (statut : En cours de test client / préprod)
**Action** : Enrichi `limagrain/02-stockage/defragmentation.md` (custom + 16 cas de tests déjà intégrés le 12/05) depuis la relecture des commentaires (revue de code validée 28/04, après NOK 24/04 + correction 27/04) : ajout note statut sur la section [CUSTOM] LIM-87 ; ajout de la query définitive `OutboundDefragContainers_PendingByWarehouseExcludedIds` (standard modifiée : ne retient un conteneur que si sa tournée/OS n'a plus de picking en cours ; exclut conteneurs de picking restants + conteneurs pas encore rangés `LocationType != Aps` ; bug de nommage paramètre `c` Any/Where corrigé 27/04) ; RÉSOLUTION MAX_DEFRAG_ATTEMPT (uniquement défrag par rotation, pas expédition/client) dans la section dédiée + question page + question centrale ; CT-13 précisé (commande incomplète → pas de défrag, proche option A, arbitrage client à confirmer) ; Historique, Références. Résolu la question MAX_DEFRAG_ATTEMPT dans `08-transverse/questions-ouvertes.md` (+ annotation CT-13 + Historique).
**Cross-refs** : defragmentation.md (LIM-85 config, sequencage-shipping-stop.md quai assigné LIM-88), questions-ouvertes.md (MAX_DEFRAG résolu, CT-13), flux-expedition.md (étape 4 défrag)
**Questions** : CT-13 rupture (option A/B) reste ouverte côté client (@Justine) ; MAX_DEFRAG_ATTEMPT résolu
- **Fichier** : `Jira LIM-88` (lecture directe, 5 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assigné (statut : En cours de test client / préprod)
**Action** : Enrichi `limagrain/04-outbound/sequencage-shipping-stop.md` (description déjà intégrée le 12/05) depuis la relecture des commentaires (revue de code validée 02/06) : nouvelle section « Implémentation définitive » (query `CST_Tasks_PendingOutboundForStackerCrane` = clone de `Tasks_PendingOutboundForStackerCrane`, filtre tâches shipping + conteneurs picking/shipping/client d'un STOP supérieur, contrôle station DockStage ; WF `StackerCrane_GetOutboundPendingTasks_PR` utilise la query custom + log ; WF `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR` empêche la création de tâche de chargement sans stage associé à l'OS, sinon blocage AGV aux PS, commit `0aec1c3b` ; règle de filtrage = seules les sorties d'expédition sont bloquées, les sorties picking restent autorisées pour le prélèvement anticipé) ; statut préprod ; CT-13 résolu (quai non modifiable après libération RUT) dans le tableau, Points d'attention et Questions ouvertes de la page ; front matter (status review, sources, last_updated), Historique, Références. Résolu la question CT-13 dans `08-transverse/questions-ouvertes.md` (+ Historique).
**Cross-refs** : defragmentation.md (LIM-87 quai non assigné, cas complémentaire), sequencage-tk-ps.md (query `CST_Tasks_PendingOutboundForStackerCrane` partagée LIM-84), flux-expedition.md (étape shipping), questions-ouvertes.md (CT-13 résolu)
**Questions** : CT-13 résolu ; reste ouvert : retour PF vers ASRS (CT-08) à confirmer en recette (@Nicolas)
- **Fichier** : `Jira LIM-89` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.1 [GNA] Mise en place de la communication API EasyWMS > SAP CPI (statut : En cours de test client / préprod)
**Action** : Enrichi `limagrain/06-erp-interface/gna-sap-cpi.md` (déjà intégré le 12-13/05) depuis la relecture des commentaires (revue de code validée 21/05) : ajout structure du script `CommonExportWebApi.boo` (`CheckConnection()` auth retry 4×, `SendWebApiMessage` retry 5×, `CpiTokenResponse`, `CpiTokenCache`, templates Mecalux inchangés) ; distinction retry auth (4 tentatives 2/4/8s) vs envoi (5 tentatives 2/4/8/16s) ; **CORRECTION du sens de mapping REF** : `REF Retour → ATH215`, `REF Supplier → ATH217`, `ROF → ATH217` (la page inversait 215/217 ; corrigé dans les 2 tables + cartographie + cas de tests, aligné sur la table intégrateur ERP + implémentation) ; type REF résolu via `ReceiptCode` (query `Context.Receptions`) dans `CommonExportWebApi.boo` — REVERSAL de l'approche `REF01Observer`/`CstAtt20` (non retenue, fichier retiré des impacts) ; secret OAuth **chiffré via `PasswordEncrypt.exe`** (corrige « en clair » ; question résolue) ; statut review ; front matter, Historique, Références. Propagé la correction 215/217 dans `glossaire-limagrain.md` (MessageSAP + ATH215/ATH217). Résolu la question secret OAuth dans `08-transverse/questions-ouvertes.md` (+ file d'attente 4→5 retries, Historique).
**Cross-refs** : reception-retour.md (ATH214 flux retour, inchangé), loc-message-periodique.md (LOC→ATH201), messages-reference.md (REF/ROF/LOF), glossaire-limagrain.md (codes ATH), questions-ouvertes.md (secret résolu)
**Questions** : file d'attente persistante après 5 retries (@Nicolas) reste ouverte ; **à re-vérifier côté doc Tourrette** : le sens 215/217 corrigé contredit la version antérieure de la page (caveat posé)
- **Fichier** : `Jira LIM-90` (lecture directe, 5 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [REF] Statuts de stock retour client - ZLOG/ZINCO et lot officiel (statut : En cours de test client / préprod)
**Action** : Ajout section « Statuts de stock retour et remontée REF (LIM-90) » dans `limagrain/01-inbound/reception-retour.md` depuis la relecture des commentaires (revue de code terminée 03/06 après NOK 02/06 = commentaires `// Custom` manquants) : catalogue des 8 statuts master data (F9 + 7 motifs B6, ZLOG/ZINCO, blocage picking/shipping à confirmer client), F2 = absence de statut (SAP → ZLOG 0002/ZINCO 0001), balises REF `LneStockStatus`/`LneStockZLOG`/`LneStockZINCO`/`LneStockOfficialLot` (alias article = lot officiel), implémentation GNA `REF01.boo` (header) + `REF01Observer.boo` (alias + CstAtt statut si type retour) + `REF01.xsd`, réutilise la détermination retour/fournisseur de LIM-89 ; cross-ref depuis la sous-section « Statut de stock - Modifiable » ; front matter (jira_refs +LIM-90, sources, last_updated), Historique, Références. Enrichi `07-admin/ad-customs.md` (renvoi catalogue LIM-90 sous la table CstAtt Status de stock). **Correction** `06-erp-interface/mapping-erp-wms.md` : STC désactivé → statuts retour remontés via REF (ZLOG/ZINCO), phrase + diagramme Mermaid corrigés, front matter/Historique/Références, 2 questions statuts résolues. `glossaire-limagrain.md` : ajout F2, enrichissement F9/B6 (codes ZLOG/ZINCO), ajout ZLOG et ZINCO. Résolu 2 questions statuts de stock dans `08-transverse/questions-ouvertes.md`.
**Cross-refs** : reception-retour.md ↔ ad-customs.md (CST_StockStatus CstAtt2/3), reception-retour.md → gna-sap-cpi.md (LIM-89 type retour), mapping-erp-wms.md (STC désactivé → REF), loc-message-periodique.md (B6 hors retour via LOC), glossaire-limagrain.md (F2/F9/B6/ZLOG/ZINCO)
**Questions** : blocages picking/shipping par statut à confirmer avec le client (@Justine) ; 2 questions « liste statuts / commentaires » résolues
- **Fichier** : `Jira LIM-91` (lecture directe, 7 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.2 [PICKING] Process de picking sur le poste de travail PK (statut : **En revue de code**, assignée Maxime Halgand)
**Action** : **Nouvelle page** `limagrain/03-picking/process-picking-pk.md` (dernière étape de la chaîne picking LIM-80→84→82→91). Contenu depuis la description + technical implementation (Maxime 16/07) + revue de code (Vincent 17/07) : architecture poste (3 tables/adjacence, big-bags hors PK, mode tâches auto), picking direct, picking négatif (table centre, SSCC excédent, conditions ≥7kg + % évaluées en amont LIM-75), verrou HORS TOLERANCE + recomptage (`CST_Count_Picking_UI`), étiquetage MII (SSCC virtuel sur Stock CstAtt2, intercalaires sans RFID + HU mère RFID, flag CstAtt14, réutilise rapports LIM-68), filmage CstAtt05 → Galileo (toujours proposé), évacuation/retour ASRS direct + LOC ACTION=P/T, cas 100 % → tâche de shipping (décision Vincent 02/07 + solution « Expédier uniquement conteneur complet »), modes AGV/Mixte/TRF ; section Implémentation (WF/dialogs/vues/ressources) ; corrections revue de code 17/07 en attente (double impression `CST_PrintLabel`, boucle SSCC vide, CustomAttribute1 non mappé/poids, écrans picking négatif) ; optim Justine 16/07 (écran filmage vs stockage support, PIE02 pour palette client) ; décisions CstAtt13→CstAtt14 (01/07), MOV annulé. Réconcilié : `_index.md` racine (ajout entrée, compteur 42→43), `README.md` (section picking), `03-picking/placement-ps-pk.md` (lien chaîne vers la page locale), `07-admin/ad-customs.md` (renvoi CstAtt14 → page), `08-transverse/questions-ouvertes.md` (3 questions LIM-91 + Historique).
**Cross-refs** : placement-ps-pk.md / sequencage-tk-ps.md / job-assignation-pk.md (chaîne), ad-customs.md (CstAtt14 support + CstAtt2 stock SSCC MII), loc-message-periodique.md (ACTION=P/T), etiquette-rfid.md (LIM-68 rapports), controle-qualite-reception.md (verrou HORS TOLERANCE LIM-66)
**Questions** : ticket **en revue de code** (corrections en attente) ; ouvertes : choix poumon messagerie, ergonomie recomptage, format étiquette intercalaire → questions-ouvertes.md
- **Fichier** : `Jira LIM-92` (lecture directe, 7 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.2 [RESSOURCES] Renommage code article et attributs logistiques (statut : Attente déploiement pour test)
**Action** : Ajout section « Renommage des ressources EasyWMS (LIM-92) » dans `limagrain/06-erp-interface/donnees-principales.md` (qui documentait déjà le détournement des champs standard) : table des ressources renommées (Shared_Product = Code lot SAP, Shared_Lote = Code produit SAP, Shared_Colour = Propriétaire SAP, Shared_Source = Description courte SAP, Shared_Size = Pays destination, Prop_Product_ProductFamilyCode = Traitement commercial, Menu_ItemFamilies = Traitements commerciaux, Articulos/Menu_Items = Lots SAP) ; ressources complémentaires Shared_Calibre (Pays destination, retour 04/06), Shared_Códigodelote (Code produit SAP, retour 30/06), 4 messages `StockAssign_TraceStockDoesNotMeet*` (Colour/LotCode/Size/Source) avec caveat « poussés par erreur sur branche LOT2.2 » ; mise à jour du caveat balises API (renvoi section) ; front matter (jira_refs, sources, last_updated), Historique, Références. Ajout terme « Traitement commercial (TC) » dans `glossaire-limagrain.md`.
**Cross-refs** : donnees-principales.md (mapping ITM Family = Traitement commercial, attributs logistiques Lot/Color/Source/Size), glossaire-limagrain.md (Traitement commercial)
**Questions** : aucune nouvelle (ticket de renommage) ; caveat branche LOT2.2 à surveiller au déploiement
- **Fichier** : `Jira LIM-93` (lecture directe, 15 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.3 [RETOUR] Flux PK Complet V2 (statut : En cours de test client / préprod, revue de code en cours)
**Action** : Intégration du détail définitif V2 dans `limagrain/01-inbound/reception-retour.md` (reprise de LIM-72 V1 annulé, notes de supersession déjà posées) depuis la description V2 + les 15 commentaires (implémentation Vincent Charvet, revues de code Maxime Halgand) : note de supersession réécrite (V2 intégrée, différences majeures listées) ; appel ATH214 rendu **systématique** (intro + flowchart Mermaid refaits, filtre ZDEPLOY, plus de branche « lot connu ») ; payload réponse enrichi (`DESCRIPTION`/`DESTINATION`/`OWNER`/`ZDEPLOY`/`VAR_DESC`/`COM_TRT_DESC`, traitement en 4 étapes) ; caveat EV_DEPLOY/ZDEPLOY retiré (ZDEPLOY confirmé) ; dialogue multi-lot reformaté (`VAR_DESC - COM_TRT_DESC - DESTINATION (MATNR)`) ; table déclaration PK renumérotée (statut de stock en **étape dédiée avant la quantité**, RFID enrichie) ; nouvelles sous-sections « Statut de stock modifiable en étape dédiée » (statut fictif « Stock conforme » / `RECEPTION_CONFORM_STOCK_STATUS`, bouton statut retiré, ESC), « Attributs logistiques auto-validation », « Étiquette RFID enrichie » (A5 Zebra, impact LIM-68) ; section PIE : verrou renommé **« ECART RETOUR »**, rejet PIE = **renvoi au PK pour recomptage** (placeholder, poumon abandonné) ; remplacement de « État du développement LIM-72 » par section **« Éléments techniques (LIM-93, revue de code) »** (WF/dialogs/records/toggles statut de stock + API ATH214, commits, caveat boucle infinie `LogManager.GetLogger` hors try/catch signalé 16-17/07) ; Points d'attention (params V1 `SAP_LOT_VERIFY_*` → `SAP_CPI_*`/`SAP_ATH214_*`, A4 fermé) ; front matter sources, Historique, Références (LIM-93 + commits). Réconcilié : `07-admin/parametres-projet.md` (ajout `RECEPTION_CONFORM_STOCK_STATUS`), `glossaire-limagrain.md` (ET_BATCH enrichi, EV_DEPLOY→ZDEPLOY, ajout VAR_DESC/COM_TRT_DESC/RECEPTION_CONFORM_STOCK_STATUS, SAP_LOT_VERIFY_URL marqué obsolète), `08-transverse/questions-ouvertes.md` (A1/A2/A3/A4/B1 résolues, B2 mise à jour = renvoi PK à définir).
**Cross-refs** : reception-retour.md ↔ parametres-projet.md (SAP_ATH214_*/RECEPTION_CONFORM_STOCK_STATUS), gna-sap-cpi.md (OAuth CPI/ATH214), etiquette-rfid.md (LIM-68 enrichie A5), ad-customs.md (CST_StockStatus), job-reception-pk.md (étape 3, déjà annotée LIM-93), questions-ouvertes.md (A1-B2)
**Questions** : B2 rejet PIE = renvoi au PK pour recomptage (solution technique à définir : routage AGV PIE→PK, relance workflow, levée verrou ECART RETOUR, impact clôture) ; caveat revue de code ATH214 (boucle infinie si LogManager lève hors try/catch) à corriger avant validation
- **Fichier** : `Jira LIM-94` (lecture directe, 7 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [JOB][EXPEDITION] Assignation automatique de l'image de quai OS/Tournée (statut : En cours de test client / préprod)
**Action** : **Nouvelle page** `limagrain/04-outbound/assignation-image-quai.md` depuis la description + les 7 commentaires (implémentation Vincent Charvet, revue de code Maxime Halgand) : stages virtuels `X_EXP` (A_EXP/B_EXP..., capacité 26 / 1 emplacement, seul type assignable OS/Route, image de quai = seule ayant une route vers le stage) ; job `CST_AssignDockStage` → WF `CST_Job_AssignStage` (30 s), récupère OS (hors route) + Routes, exclut Recertification, priorise priorité puis date de libération, boucle d'assignation ; conditions d'éligibilité OS/Route (libéré, palettes picking revenues TK, H-3 date d'expédition prévue - correction 05/06 date d'expédition et non chargement, picking terminé = pas de conteneur picking + client en APS) ; conditions d'assignabilité stage (query `CST_DockStage_GetAvailableStageToAssign` : stage virtuel non verrouillé/sans tâche/sans conteneur/sans autre OS-Route-réception + image de quai physique non verrouillée/sans conteneur/sans tâche) ; génération mouvements PS (`Container_MovedEventHandler_PS_PR` : destination = 1er emplacement libre X max de l'image de quai) ; désassignation à l'arrêt OS/Route (`CST_OutboundOrderUnassignStage_PR`/`CST_RouteUnassignStage_PR` + souscriptions async `CST_OutboundOrderStopped_UnassignStage`/`CST_RouteStopped_UnassignStage`, motif = éviter réservation caduque) ; VAssist restreintes (`VAssistOutboundOrderAssignDock`/`VAssistRouteAssignDock`) ; section Éléments techniques + commits `f0536cce0c`/`e3889b8003`/`5de1618104` ; front matter, Historique, Références. Réconcilié : `_index.md` racine (nouvelle entrée, compteur **43→44**), `README.md` + `04-outbound/_index.md` (ajout page), `07-admin/parametres-projet.md` (job `CST_AssignDockStage` rattaché LIM-94), `04-outbound/consolidation-chargement.md` (renvois assignation auto + placement PS X max, front matter jira_refs/last_updated/Historique), `04-outbound/sequencage-shipping-stop.md` (cross-ref LIM-94 = stage dont dépend le garde-fou de chargement, jira_refs, Historique), `glossaire-limagrain.md` (Stage virtuel X_EXP, CST_AssignDockStage), `08-transverse/questions-ouvertes.md` (question TBD réception assignée).
**Cross-refs** : sequencage-shipping-stop.md (LIM-88 garde-fou `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`), consolidation-chargement.md (assignation manuelle automatisée + dépose AGV), parametres-projet.md (job), glossaire-limagrain.md (X_EXP)
**Questions** : condition « image de quai sans réception assignée » marquée TBD dans la description → reportée dans questions-ouvertes.md (@Justine)
- **Fichier** : `Jira LIM-95` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [JOB] génération des mouvements depuis les buffers (statut : **Annulé(e)**)
**Action** : Ticket confirmé **Annulé(e)**, modifications mergées dans LIM-82 (commentaire Maxime Halgand 26/06 ; Arthur suggérait garder ou merger avec LIM-84). Intégration légère (pattern V1/V2, pas de duplication) dans `limagrain/03-picking/placement-ps-pk.md` (page LIM-82) : note de supersession dans le bloc chaîne (LIM-95 Annulé → mergé LIM-82) ; rattachement des 2 demandes du ticket : (1) « ne pas générer le mouvement si une autre tâche de l'OS a une séquence `Task.CstAtt01` plus faible » = déjà couvert par la **Gate de séquence (critère B)** (`CST_Picking_GetSiblingTasks`, `Line.CstAtt`=`Task.CstAtt01`) - note ajoutée ; (2) **capacité TP** à contrôler en plus du PK, sans capteurs de présence Galileo - note [CUSTOM] ajoutée sous « Décision niveau 1 » ; jira_refs (+LIM-95), sources, Historique, Références (LIM-95 Annulé → mergé LIM-82). Pas de nouvelle page.
**Cross-refs** : placement-ps-pk.md (Gate de séquence LIM-84/LIM-82, capacité TP), ad-customs.md (CstAtt Tâche 01 = séquence picking), sequencage-tk-ps.md (Line.CstAtt)
**Questions** : aucune nouvelle (ticket Annulé, contenu déjà couvert par LIM-82)
- **Fichier** : `Jira LIM-96` (lecture directe, 6 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.1 [RECEPTION] TRF Déclaration image de quai V2 (Amélioration, statut : En cours de test client / préprod, revue de code validée 25/06)
**Action** : Intégration V2 (reprise de LIM-64 V1 annulé) dans `limagrain/01-inbound/gestion-camions.md` (étape 4, page propriétaire de la déclaration image de quai) depuis la description + 6 commentaires (implémentation Maxime Halgand / Vincent Charvet) : statut étape 4 réécrit (V1→V2 préprod) ; **sélection de l'image de quai déplacée côté SmartUI** (routes dock→stage virtuel au layout, dialogues `CST_DockStageReception_SelectStage`/`ConfirmStage`, vue `VAssistReceptionAssignDock` ; Production/Pile = choix direct image de quai, Arthur 17/06) ; workflow d'écrans V2 (image de quai d'abord, puis nombre, puis sous-emplacement) ; **nouvel écran Déclaration des OE** (scan/sélection des emplacements par OE, compteur + bouton Ordre suivant, vérif conteneur/réception/doublon → pose `CstAtt13` dès l'image de quai) ; **nouvel écran Validation collage étiquettes** (`CST_Reception_DockStage_ConfirmLabels` + réimpression → `CstAtt12=true` sur toutes les palettes, gate du job AGV LIM-71) ; table attributs support (+CstAtt12/CstAtt13, ContainerVList CstAtt 1/4/8/13) ; table AD V2 (query `CST_DockStageStations_WithoutOutbound` supprimée → renommée `CST_DockStageStations_WithoutAssignation` + conditions ; clone `CST_Receptions_PendingAndReceiving_WithDockStageAssigned` ; WF `CST_Reception_DockStage_PrintLabels` ; ressources i18n ; commit `1b2570b164`) ; distinction big-bag CstAtt01 (réception) vs CstAtt02 (support) confirmée ; front matter sources/last_updated, Historique, Références. Réconcilié : `07-admin/ad-customs.md` (notes CstAtt13 = posé dès l'image de quai ; CstAtt12 = gate job LIM-71 + caveat, Historique), `glossaire-limagrain.md` (CstAtt12/CstAtt13 mis à jour), `08-transverse/questions-ouvertes.md` (question PS OE dès l'image de quai **résolue** + nouvelle question CstAtt12/LIM-71 à réconcilier). Pas de nouvelle page.
**Cross-refs** : gestion-camions.md (LIM-64/65/96), ad-customs.md (CstAtt12/13), reception-fournisseur.md (déclaration image de quai résumé), job-reception-production.md (LIM-71 gate CstAtt12), etiquette LIM-65, LIM-14 (séquence 800)
**Questions** : **caveat CstAtt12** — LIM-96 pose CstAtt12=true comme gate LIM-71 alors que la page LIM-71 indiquait la condition retirée → à réconcilier (@Vincent/@Maxime) ; question PS (OE dès l'image de quai) résolue
## [2026-07-20] session-022 (mode: limagrain)
> Source : lecture directe des tickets Jira LOT (pas de fichier déposé dans `sources/`).
- **Fichier** : `Jira LIM-97` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.1 [RECEPTION] Gestion camions V2 (Amélioration, statut : En cours de test client / préprod, validé Vincent Charvet 02/07)
**Action** : Intégration du détail définitif V2 (reprise de LIM-62 V1 annulé, notes de supersession déjà posées étapes 1-2) dans `limagrain/01-inbound/gestion-camions.md` : étape 2 réécrite en « Assignation du quai ET de l'image de quai » avec le **mécanisme faux stage / vrai stage** (faux stages A à K = stations fictives sélectionnables comme unité, une par image de quai ; vrai stage = poumon physique 26 emplacements avec route vers quai d'expédition ; motif : pas de commande standard pour assigner une station en Stage, sinon 286 sous-emplacements affichés) ; effet de bord routage faux stage→emplacement vrai stage→quai d'expédition (custom fin d'ordre PS) ; note de supersession réécrite (V2 intégrée, statut préprod) ; ajout vue `VAssistCreateReceptionOEFromReceptions` (contrôle classes OE) + ressource `CST_ViewField_VAssistantCreateReceptionOE_Truck` + Élément AD faux stages A-K ; libellé `CST_Prop_Station_Workload` corrigé (Réceptions / Camions + caveat divergence §8.4) ; 3 points d'attention V2 (débordement 27e palette, ordonnancement dépose AGV, routage à préserver) ; 3 questions ouvertes (routage §8.1, débordement §8.2, ordonnancement §8.3) ; front matter sources/last_updated, Historique, Références (statut préprod, commit `1d2acc3e6e`). Réconcilié : `glossaire-limagrain.md` (ajout Faux stage A-K + Vrai stage, last_updated), `08-transverse/questions-ouvertes.md` (2 questions LIM-97 + annotation plaque §8.5 + Historique + sources).
**Cross-refs** : gestion-camions.md ↔ assignation-image-quai.md (LIM-94 stages X_EXP expédition), sequencage-shipping-stop.md (LIM-88 STOP), glossaire-limagrain.md (faux/vrai stage), questions-ouvertes.md (routage, débordement)
**Questions** : routage faux stage→vrai stage→quai d'expédition (§8.1, custom fin d'ordre PS, cadencement AGV Still) ; débordement 27e palette (§8.2, @Justine) ; ordonnancement dépose AGV image de quai (§8.3, réunion Still, déjà tracé côté Expédition)
- **Fichier** : `Jira LIM-102` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.1 [RECEPTION] KPI Nombre de conteneur par type de réception (Tâche, statut : En cours de test client / préprod, revue de code validée 03/06)
**Action** : Intégration KPI dans `limagrain/01-inbound/gestion-camions.md` (page propriétaire de la déclaration image de quai, où les conteneurs sont créés) : nouvelle sous-section « KPI - conteneurs par type de réception (LIM-102) » (transaction `CON.CREATE.RECEP` créée à chaque conteneur du process de réception LIM-96 ; table des champs TransactionTypeCode/LocationCode/ContainerCode/`Document1`/IdOrig ; `Document1` = type de réception : PALETTE BOIS / PRODUCTION / `InboundClassCode` pour type AUTRES) ; enrichissement des 2 WF dans la table AD (`CST_Reception_DockStage_UI` récupère l'InboundClassCode, `CST_Reception_DockStage_CreateContainers_PR` crée la transaction) ; front matter jira_refs +LIM-102, Historique, Références (commit `5a7d213d48`). Réconcilié : `07-admin/parametres-projet.md` (enrichissement ligne transaction `CON.CREATE.RECEP` avec Document1 = type de réception + cross-ref, jira_refs/sources/last_updated, Historique, Références).
**Cross-refs** : gestion-camions.md ↔ parametres-projet.md (transaction CON.CREATE.RECEP), LIM-96 (création conteneurs déclaration image de quai)
**Questions** : aucune nouvelle (ticket KPI, revue de code validée)
- **Fichier** : `Jira LIM-103` (lecture directe, 7 commentaires inclus)
**Type** : Ticket Jira - #LOT 3 [AGV] Corrections bugs standard du module AGV (Tâche, statut : En cours de test client / préprod, revue de code à faire, assignée Vincent Charvet)
**Action** : Intégration dans `limagrain/05-agv/still-igo-integration.md` (page maître intégration AGV/iGO) : nouvelle section « Corrections des bugs du module AGV standard (LIM-103) » depuis les 7 commentaires (Vincent Charvet / Arthur / Michael Chaudier) - 2 queries standard corrigées (`Equipment_AgvTask_GetTask_ByWorkingZone_UI` null exception, `Equipment_AgvTask_LoadEquipment_UI` paramètre erroné) ; **dispatch d'events cassé** par la transformation Gateway `EventType = phase + 100` (ex 104→204 ≠ natif → silent fail dans `ProcessEvents_PR`, fix = patch -100 dans « Check parameters ») ; **bug majeur `canPick`/`canDrop` jamais assignés** dans `ProcessEvent_LoadPermission_PR`/`ProcessEvent_UnloadPermission_PR` (DecisionActivity toujours No → sous-WF jamais appelé ; fix = condition `!agvTask.CanPick`/`!agvTask.CanDrop` ; synthèse des 4 WF) ; **events 106/110 non gérés** (fix temporaire Michael : chargement/déchargement support dans `ProcessEvents_PR`) ; **refus de mission iGo** (Arthur : annulation tâche AGV + transition sequence 0) ; `Container_MovedEventHandler_PS_PR` = mouvement PS→PK première position libre (commit `9fa84a83e2`, base spécialisée ensuite par LIM-82/LIM-94). Réserve ajoutée sur le tableau « workflows inchangés » (ligne `ProcessEvents_PR` passée à Modifié). Front matter jira_refs/sources/last_updated, Historique, Références.
**Cross-refs** : still-igo-integration.md ↔ placement-ps-pk.md (LIM-82 spécialisation PS→PK par type de tâche) + assignation-image-quai.md (LIM-94 position X max), galileo-config.md (module AGV)
**Questions** : aucune nouvelle formalisée ; caveat = revue de code LIM-103 non encore réalisée (@Vincent) ; fix events 106/110 « temporaire à documenter » désormais documenté
- **Fichier** : `Jira LIM-104` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 3 [AGV] Refuser l'annulation/suppression d'une Task quand le support est déjà sur un AGV (Nouvelle fonctionnalité, statut : En cours de test client / préprod, revue de code validée 23/06)
**Action** : Intégration dans `limagrain/05-agv/still-igo-integration.md` : nouvelle sous-section « Refus WMS de l'annulation quand le support est sur un AGV (LIM-104) » sous « Logique d'annulation côté middleware » depuis la description + technical implementation (Maxime Halgand 04/06) : problème de désynchronisation (Task supprimée avant qu'iGo refuse l'annulation `>= Retrieved` → `ProcessEvents_PR` bloqué sur garde « CST Task exists = false » → notif refus AGE 255/1009 perdue + support figé sur AGE 110) ; solution = souscription **preview** sur la commande delete/cancel (critère `Container.StationType == Agv`, repli `LocationCode` AGV_) ; table AD (subscriptions `CST_TaskCancel_CheckAgv`/`CST_TaskDelete_CheckAgv`, WF `CST_CancelTask_CheckForAgv`, ressource `CST_CancelTask_NotPossible_2`) ; 2 cas de test (refus après pickup / autorisé avant pickup R4). Cross-ref ajoutée depuis le point d'attention « Annulation après chargement impossible ». Front matter jira_refs +LIM-104/sources, Historique, Références.
**Cross-refs** : still-igo-integration.md (LIM-103 ProcessEvents_PR, logique d'annulation middleware, FAQ #6 cancel après Retrieved)
**Questions** : aucune nouvelle (revue de code validée)
- **Fichier** : `Jira LIM-105` (lecture directe, 11 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [RECERTIFICATION] Workstation recertification (Tâche, statut : Attente déploiement pour test, revue de code validée 17/07)
**Action** : **Nouvelle page** `limagrain/03-picking/recertification.md` depuis la description + 11 commentaires (implémentation Vincent Charvet, revues Maxime Halgand, demandes Justine) : process workstation au PK en mode « Tâches automatiques » - 4 étapes (scan ancienne palette → nouvelle étiquette SSCC → vérification ASN via polling `SAP_ATH111_REFRESH_INTERVAL`/`TIMEOUT`/`MAX_RETRIES` → échange conteneur : ancien chargé au quai + ASN déplacé à la position PK) + étape 5 filmage (ajout 01/07) ; assignation quai auto (classe RECERTIFICATION) ; suppression des valeurs hard codées → paramètre `RECERTIFICATION_CODE_CLASSE` (01/07) ; ajout code OS sur l'écran (Justine 08/07, commit db4194c50e) ; table AD (WF `CST_Recertification_PickingStationProcess_UI`, `Task_AutomaticPicking_UI`, `Workstation_Picking_Default`, `Outbound_AutomaticLoadProcess_PR`, `Outbound_CreateShippingContainersTasks_PR`, `CST_JobAssignStage`, `Container_MovedEventHandler_PK_PR` ; query `CST_AsnContainer_ByCode` + 4 queries recertif ; dialog `CST_Recertification_ScanLabelPrompt` ; 6 ressources ; commits 8b4debc3da/3119445ff1/db4194c50e) ; question ouverte message déclencheur ASN (SOF par palette vs message custom). Réconcilié : `_index.md` racine (nouvelle entrée + entrée process-picking-pk manquante, compteur **44→45**), `README.md` + `03-picking/_index.md` (ajout recertification + process-picking-pk), `07-admin/parametres-projet.md` (ajout `RECERTIFICATION_CODE_CLASSE`, Historique, Références LIM-105 ; SAP_ATH111_* déjà présents), `04-outbound/flux-expedition.md` (renvoi section Re-certification → nouvelle page, jira_refs/sources/last_updated/Historique), `glossaire-limagrain.md` (RECERTIFICATION_CODE_CLASSE).
**Cross-refs** : recertification.md ↔ flux-expedition.md (flux outbound Re-certification), assignation-image-quai.md (LIM-94 quai auto recertif), job-assignation-pk.md (OS RECERTIFICATION exclus assignation picking), stations-picking.md (mode Tâches automatiques), parametres-projet.md (SAP_ATH111_*/RECERTIFICATION_CODE_CLASSE)
**Questions** : message déclenchant l'envoi de l'ASN par SAP (SOF par palette = OS mono-palette qui ralentit, ou message custom) → dans la page (@Vincent/@Justine) ; à retester suite customs LIM-110
- **Fichier** : `Jira LIM-106` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [RECERTIFICATION] MINI-JOB Assignation au PK et création des tâches (Tâche, statut : Attente déploiement pour test, livré préprod 03/06, revue de code Maxime 29/06)
**Action** : Intégration dans `limagrain/03-picking/job-assignation-pk.md` (page maître des mini jobs du Mega Job) : nouvelle section « Mini Job - Assignation recertification aux PK (LIM-106) » depuis la description + 3 commentaires (implémentation Vincent Charvet, corrections Maxime Halgand) - pendant du mini job picking LIM-80 mais pour les OS de classe RECERTIFICATION (que LIM-80 exclut) ; assignation triée priorité OS → date de libération (query `CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK`) ; création des tâches d'acheminement (interception du process d'expédition `Outbound_CreateShippingContainersTasks_PR` → redirection `CST_Outbound_Recertification_CreateShippingContainersTasks_PR` → tâches de mouvement conteneurs d'expédition → PK ; à l'arrivée `Container_MovedEventHandler_PK_PR` crée la tâche de chargement au quai recertification) ; flag tâche `CstAtt02` = recertification (déplacé du 01, Maxime 26/06) + `ProcessType="recertification"` (`Container_MovedEvent_PR_V1`) ; annulation sur `ShippingContainerDeletedEvent` (souscription `CST_ShippingContainerDeleted_CancelRecertificationTask` → `CST_Container_CancelRecertificationTasks`) ; garde-fous Maxime 29/06 (pas de tâche si conteneur a déjà une tâche ou sur AGV ; blocage si pas de quai assigné à l'OS RECERTIFICATION) ; table AD (11 éléments : WF/queries/subscription/vue TaskVList/ressource) ; ligne ajoutée à la table des sous-workflows ; front matter jira_refs +LIM-106/sources/last_updated, Historique, Références (commits 35214806ca/b268e62a70). Réconcilié : `03-picking/recertification.md` (renvoi amont vers le mini job d'acheminement au PK, jira_refs +LIM-106, Historique, Références), `07-admin/ad-customs.md` (attribution LIM-106 au CstAtt Tâche 02 + note déplacement 01→02, Historique, Références).
**Cross-refs** : job-assignation-pk.md ↔ recertification.md (workstation au PK), job-assignation-pk.md (LIM-80 exclusion recertif de l'assignation picking), ad-customs.md (CstAtt Tâche 02 recertification)
**Questions** : aucune nouvelle (garde-fous et flag CstAtt tranchés en revue de code)
- **Fichier** : `Jira LIM-107` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [EXPEDITION][INVENTAIRE] Etiquettes (Tâche, statut : En revue de code, assignée Maxime Halgand)
**Action** : Intégration du contenu des étiquettes d'expédition/échantillonnage par type depuis la description + 3 commentaires (question Arthur 02/07, arbitrage Justine 02/07, implémentation Vincent 07/07). Réparti sur 2 pages propriétaires : `04-outbound/flux-expedition.md` (nouvelle sous-section « Contenu des étiquettes d'expédition par type » sous Étiqueteuse automatique : format A5 ; Client/Production sur étiqueteuses automatiques, Échantillonnage sur étiqueteuses poste via flux COR/COF ; contenu étiquette Client 4 champs [tournée/OS/transporteur/adresse] + Production 3 champs [OS/128/SOR.Document] ; params EXPEDITION_CLASSE_CLIENT/PRODUCTION ; reports CST_RPT_OUTBOUND_CLIENT/PRODUCTION/ECHANTILLONAGE ; vues CST_VSearchPrintShipping*ContainerLabel + 2 boutons ContainerVList impression manuelle ; ressources i18n ; commit 10b0bc52fe) et `03-picking/echantillonnage.md` (nouvelle section « Étiquette d'échantillonnage » : format A5, 12 champs [ITM.CstAtt01/03/07/08/10, famille, ProductCode ligne inventaire, attribut taille stock, `_ / _` manuel, premier alias, COR.Code + 128], report CST_RPT_ECHANTILLONAGE, imprimé sur étiqueteuse poste via COR/COF ; **question format d'étiquette résolue** : A5). Réconcilié : `07-admin/parametres-projet.md` (params EXPEDITION_CLASSE_* déjà présents depuis LIM-14 → usage confirmé LIM-107, Historique + Références). Pas de nouvelle page.
**Cross-refs** : flux-expedition.md ↔ echantillonnage.md (étiquette échantillonnage COR/COF), flux-expedition.md ↔ parametres-projet.md (EXPEDITION_CLASSE_CLIENT/PRODUCTION), etiquette-rfid.md (étiqueteuse automatique)
**Questions** : format d'étiquette échantillonnage **résolu** (A5, LIM-107) ; aucune nouvelle
- **Fichier** : `Jira LIM-108` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 1.2 [SIMULATION] Set un poids aux palettes qui passent au PIE (Tâche, statut : En cours de test client / pré-production, non assignée)
**Action** : Intégration dans `limagrain/01-inbound/controle-qualite-reception.md` (page maître PIE/poids) : nouvelle section « [SIMULATION] Poids théorique en l'absence de poids Galileo (LIM-108) » depuis la description + 2 commentaires (implémentation Vincent 10/06, fix Maxime 18/06) - mode temporaire de simulation : quand la palette n'est pas créée au PIE (simple passage station), l'event Galileo ne descend pas toujours le poids → repli sur le poids théorique du conteneur ; gouverné par le toggle `CST_SimulatePIEScale` ; WF `PIE_EventHandler_CheckInvalidWeightWithScale_PR` (substitution) ajouté à la table AD ; note correction `CST_PIE_ApplyWeightRules_PR` (changement de version, Maxime 18/06) ; point d'attention « mode temporaire à ne pas laisser actif » ; front matter jira_refs +LIM-108/sources/last_updated, Historique, Références. Réconcilié : `07-admin/parametres-projet.md` (ajout toggle `CST_SimulatePIEScale` dans la table Toggles + cross-ref, jira_refs +LIM-108, Historique, Références). Pas de nouvelle page.
**Cross-refs** : controle-qualite-reception.md ↔ parametres-projet.md (toggle CST_SimulatePIEScale)
**Questions** : aucune nouvelle (mode simulation temporaire, implémentation et fix tranchés en revue de code)
- **Fichier** : `Jira LIM-109` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [EXPEDITION] Interdire les lignes d'OS sans lot (Tâche, statut : Attente déploiement pour test, revue de code validée Maxime 29/06)
**Action** : Intégration dans `limagrain/04-outbound/shipping-orders.md` (page maître des ordres de sortie) : nouvelle section « [CUSTOM] Lot obligatoire sur les lignes d'OS (LIM-109) » depuis la description + 2 commentaires (implémentation Vincent 29/06, revue validée Maxime 29/06) - interdiction de créer un OS / une ligne d'OS si l'attribut logistique lot n'est pas renseigné ; subscription en Preview `CST_OutboundOrderLineCreated_CheckLotRequired_PRE` → WF `CST_OutboundOrderLineCreated_CheckLotRequired_PRE_PR` (exception si lot vide), ressource `CST_OutboundOrderLineCreation_MissingLot` ; refus total via `TransactionalLineList=true` ; renvoi vers Assignation de stock (lot = critère) et Paramètres ERP ; table AD ; front matter jira_refs +LIM-109/sources/last_updated, Historique, Références (commit 6ea0af3256). Pas de nouvelle page.
**Cross-refs** : shipping-orders.md interne (Assignation de stock ↔ lot obligatoire, Paramètres ERP TransactionalLineList)
**Questions** : aucune nouvelle (revue de code validée)
- **Fichier** : `Jira LIM-110` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 2.1 [RECERTIFICATION] Quai Recertification & Stratégie d'assignation de stock (Tâche, statut : En cours de test client / pré-production, revue de code validée Maxime 03/07)
**Action** : Intégration dans `limagrain/04-outbound/shipping-orders.md` (page maître OS, propriétaire des sections Quai recertification + Assignation de stock) : refonte de la section « Quai recertification » depuis la description + 3 commentaires (implémentation Vincent 01/07, revue Maxime 03/07, ajout édition OS Vincent 09/07) - assignation AUTOMATIQUE du quai `QUAI_RECERTIFICATION` (param `RECERTIFICATION_CODE_QUAI`) à la création (`OutboundOrder_OutboundOrderCreatedEventHandler_PR`) ET à l'édition d'un OS auquel on ajoute la classe RECERTIFICATION ; blocage du changement manuel (boutons masqués dans `OutboundOrderVList`) ; évolution vs V1 (avant renseigné dans le SOR) ; note exclusion LIM-94 (X_EXP exclut recertif). Nouvelle sous-section « Stratégie d'assignation de stock RECERTIFICATION » : stratégie « supports complets uniquement » toujours désactivée mais FORCÉE pour les OS recertif (`StockAssignProcess_GetStockAssignStrategies_PR`), `AllowPick=false` (`StockAssignProcess_GetStockToAssignForStrategy_PR`), balise `[XXX]` dans le code de la stratégie (XXX = `RECERTIFICATION_CODE_QUAI`), query `CST_StockAssignStrategyV2_Recertification` ; table AD ; caveat param QUAI vs CLASSE. Front matter jira_refs +LIM-110/sources/last_updated, Historique, Références (commits 716988832c, 56d524eb34, 435b4f5e89). Réconcilié : `03-picking/recertification.md` (correction du renvoi quai auto → shipping-orders.md/LIM-110 au lieu de LIM-94, note « à retester » précisée, jira_refs +LIM-110, Historique, Références), `07-admin/parametres-projet.md` (ajout param `RECERTIFICATION_CODE_QUAI`, jira_refs/Historique/Références), `glossaire-limagrain.md` (QUAI_RECERTIFICATION redéfini auto WMS + ajout RECERTIFICATION_CODE_QUAI), `08-transverse/questions-ouvertes.md` (question relation QUAI vs CLASSE + Historique). Pas de nouvelle page.
**Cross-refs** : shipping-orders.md ↔ recertification.md (quai auto recertif) ↔ assignation-image-quai.md (LIM-94 exclut recertif) ↔ parametres-projet.md (RECERTIFICATION_CODE_QUAI) ↔ glossaire (QUAI_RECERTIFICATION) ↔ questions-ouvertes.md
**Questions** : relation `RECERTIFICATION_CODE_QUAI` (identifie aussi les OS recertif + balise stratégie) vs `RECERTIFICATION_CODE_CLASSE` (LIM-105, déjà l'identifiant de classe) → à clarifier (@Vincent), tracé dans questions-ouvertes.md
## [2026-07-20] session-023 (mode: limagrain)
> Source : lecture directe des tickets Jira LOT (pas de fichier déposé dans `sources/`).
- **Fichier** : `Jira LIM-111` (lecture directe, aucun commentaire)
**Type** : Ticket Jira - #LOT 2.1 Étiqueteuse automatique - intégration Galileo (Tâche, statut : Ouvert, assignée Vincent Charvet)
**Action** : Intégration dans `limagrain/04-outbound/flux-expedition.md` (page propriétaire de la section Étiqueteuse automatique) - formalisation du **mécanisme d'intégration Galileo** depuis la description (pas de commentaire) : bandeau de statut (mécanisme Galileo = LIM-111 Ouvert, contenu = LIM-107, pose flag PK = LIM-91) ; « Principe » enrichi (noms de stations `LBLM_01`/`LBLM_02` de type **ET**, uniquement pour les supports ASRS → image de quai directs, positionnement dans la chaîne sortie TK) ; **refonte « Comportement à la sortie TK »** en logique **2 étiquettes distinctes** (tableau : étiquette d'expédition LIM-107 imprimée dans tous les cas sauf palette trop basse PLC Height Type 1, indépendante du flag ; étiquette de picking HU RFID LIM-68 conditionnée par `CstAtt14` = false/vide + hauteur OK) + cas d'usage 2e étiquette (palette complète ASRS jamais passée au picking) + MAJ flag true/error ; **« Communication Galileo »** enrichie (subscription `MovementCreated` → si destination LBLM, MAJ CustomData de la tâche avec le nombre d'étiquettes → informe le bras articulé du nombre de positions ; à la fin d'ordre = palette arrivée → `printerCommand` ; contenu envoyé à l'imprimante via `printerService` ; même principe que le filmage CstAtt05) ; `CstAtt14` nommé explicitement ; front matter jira_refs +LIM-111/sources/last_updated, Historique ; 2 questions ouvertes (remontée erreur impression, palette à l'arrêt). Réconcilié : `07-admin/ad-customs.md` (note CstAtt14 précisée - 3 valeurs, lu/mis à jour à l'étiqueteuse de sortie LIM-111, conditionne uniquement la ré-impression étiquette picking LIM-68 pas l'expédition LIM-107, réservé LIM-14 ; table CstAtt14 → LIM-91 / 111 ; jira_refs +LIM-106/LIM-111 ; Historique, Références), `08-transverse/questions-ouvertes.md` (2 questions LIM-111 en Expédition/Outbound + sources + Historique). Pas de nouvelle page.
**Cross-refs** : flux-expedition.md ↔ ad-customs.md (CstAtt14 étiquetage) ↔ etiquette-rfid.md (étiquette HU RFID LIM-68) ↔ sequencage-shipping-stop.md (ordre STOP en sortie TK) ↔ questions-ouvertes.md ; renvoi LIM-107 (contenu) et LIM-91 (pose flag PK)
**Questions** : mécanisme de remontée d'une erreur d'impression par les automates au WMS - nécessaire pour le mode dégradé TRF (@Vincent) ; palette à l'arrêt en cas de problème d'impression - intervention opérateur + procédure de redémarrage (@Théo/@Vincent). Tracées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-112` (lecture directe, 1 commentaire inclus)
**Type** : Ticket Jira - #LOT 3 [INVENTAIRE][ECHANTILLONNAGE] Process d'échantillonnage sur poste de travail (Tâche, statut : Ouvert, assignée Vincent Charvet)
**Action** : Enrichissement de `limagrain/03-picking/echantillonnage.md` (page propriétaire du process) depuis la description + 1 commentaire (Arthur 02/07 : mail client pour consignes) - bandeau statut LIM-112 (flux complet COR→COF, contenu étiquette = LIM-107) ; section Création de l'ordre enrichie (priorité 3 basse, consignes = CstAtt02, **table de mapping COR SAP→WMS** : Code/Description ECHANTILLONNAGE/Priority 3/CstAtt01 nb palettes toujours 4/CstAtt02 consignes/ProductCode-LotCode **inversés**/Color-Source-Size) ; Assignation du stock refondue (max = CstAtt01 palettes, verrou Production prioritaire, prérequis palette [allée non bloquée/rangée/non client/sans tâche], OrderByDesc [bloquée puis moins profonde], éditabilité CstAtt01 en manuel tant qu'inventaire non lancé, **règle transverse** : stock en échantillonnage indisponible pour les OS) ; Assignation poste (orchestration via Mega Job PK LIM-70 + sous-workflow dédié à développer, PK autorisant big-bag) ; séquence opérateur (recomptage à dev standalone, étape « valider la ligne d'inventaire », évacuation AGV poste→table d'entrée→PIE filmée ou non) ; **nouvelle section « Clôture et émission du COF »** (CountCode/Status Closed-Cancelled/UpdateDate, traitement SAP hors périmètre) ; point d'attention big-bag ; question 200g **résolue** (négligé) ; 2 nouvelles questions (consignes CstAtt01 vs 02, dépendance CstAtt10 Stage) ; front matter jira_refs +LIM-112/sources/tags cor,cof, Historique, Références. Réconcilié : `07-admin/ad-customs.md` (table CstAtt Ligne d'ordre d'inventaire : ajout CstAtt02 consignes + attribution LIM-112 au CstAtt01 + note usage/caveat, jira_refs +LIM-112, Historique, Références), `08-transverse/questions-ouvertes.md` (annotation dépendance CstAtt10 Stage + question consignes CstAtt01/02 + sources + Historique). Pas de nouvelle page.
**Cross-refs** : echantillonnage.md ↔ ad-customs.md (CstAtt Ligne d'ordre d'inventaire 01/02) ↔ job-assignation-pk.md (Mega Job PK LIM-70) ↔ flux-expedition.md (étiquette échantillonnage LIM-107) ↔ controle-qualite-reception.md (PIE/poids) ↔ questions-ouvertes.md ; glossaire COR/COF déjà présents
**Questions** : consignes de l'ordre d'inventaire portées sur CstAtt02 (mapping) vs CstAtt01 (commentaire ticket) → mail client (@Arthur) ; dépendance CstAtt10 (Stage) côté ITM requis pour l'étiquette d'échantillonnage, à vérifier préprod (@Nicolas). Tracées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-113` (lecture directe, 2 commentaires inclus)
**Type** : Ticket Jira - #LOT 3 Flux API CHG (Changements support) (Tâche, statut : En cours - revue fonctionnelle uniquement, dévs non démarrés en attente validation client, assignée Vincent Charvet)
**Action** : Refonte complète de la section CHG dans `limagrain/06-erp-interface/mapping-erp-wms.md` (page propriétaire du CHG) depuis la description + 2 commentaires (Arthur 06/07 : revue fonctionnelle seule ; Vincent 07/07 : comment identifier la ligne de stock) - objectif/contexte (SAP modifie une ligne de stock sans mouvement physique, cas bascule de propriétaire en clôture fiscale FR10→FR02, va à l'encontre de la règle d'or, encadré : refus si HU/lignes engagées) ; mécanisme `StartWorkflowCommand` → WF custom `CST_CHG_WF` sur CustomApplication, identité complète de la HU ; **table des 9 champs JSON** (containerCode/ContainerTypeCode/productCode/Quantity/UnitOfMeasureCode/LotCode/Color=propriétaire/Source=description/Size=destination) ; **statut de stock EXCLU** (passe par STR, 2 appels distincts) ; **logique WF en 5 étapes** (récup HU + ID ligne, contrôle « libre de tout flux » façon ADB-117 appliqué à la HU/lignes, refus tout ou rien avec motif table/flux, idempotence, application + 200) ; acquittement **200/500** (throw exception = seul canal de message d'erreur, un refus métier remonte en 500) ; notification interne WMS en cas de refus ; volumétrie clôtures (~1000 lignes, un tiers du stock sur 2 jours, messages unitaires, sync/async à valider Mecalux) ; cible 90/10 ; diagramme de séquence CHG refondu ; points d'attention (200/500, statut exclu, tout ou rien) ; front matter jira_refs +LIM-113/sources/tags/last_updated, Historique, Références (+ADB-117, DevOps 88942). Réconcilié : `06-erp-interface/messages-reference.md` (refonte entrée catalogue CHG + point d'attention 500 + question « format CHG » résolue, jira_refs +LIM-113, Historique), `08-transverse/questions-ouvertes.md` (2 questions CHG résolues [format, acquittement] + 3 nouvelles [ID ligne @Vincent, sync/async, liste exhaustive tables] + sources + Historique). Pas de nouvelle page (CHG enrichi dans sa page propriétaire). Glossaire CHG déjà présent.
**Cross-refs** : mapping-erp-wms.md ↔ messages-reference.md (catalogue CHG) ↔ donnees-principales.md (attributs logistiques Color/Source/Size/Lot) ↔ questions-ouvertes.md ; STR (statut de stock, appel séparé)
**Questions** : identification de la ligne de stock concernée dans la HU (@Vincent) ; traitement synchrone/asynchrone pour la volumétrie (@Nicolas/Mecalux) ; liste exhaustive des tables où une HU/ligne est référencée (action dev). Tracées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-114` (lecture directe, aucun commentaire)
**Type** : Ticket Jira - #LOT 3 [REJET] Flux de rejet PIE - Renvoi au poste d'origine (Tâche, statut : Ouvert, non assignée, « rédaction en cours » côté ticket)
**Action** : **Nouvelle page** `limagrain/02-stockage/rejet-pie.md` depuis la description (pas de commentaire) - flux custom de rejet au PIE (causes dimension/poids/étiquette/palette bois) avec **renvoi au poste de travail d'origine** (revirement client vs approche poumon au sol + SmartUI de LIM-66) ; principe « le WMS répond la destination » (pas de reprise des routes EasyS) ; topologie EST/OUEST (production entrée EST directe, réception/picking via PK OUEST, bascule OUEST si PE01 fermé) ; **algorithme de destination** (lire CstAtt06 poste d'origine → candidat, contrainte big-bag CstAtt02/PK_BIGBAG, dispo poste, sinon PK_REJET_PROD si CstAtt06 vide [production CstAtt04=ASN], sinon fallback first-available, verrou « REJET PIE » porteur de la cause) ; affichage de la cause au poste (pas de SmartUI, dépendance Mecalux pour le type d'erreur PIE) ; correction/ré-injection via « Stocker support » standard + re-contrôle PIE, **pas de garde-fou anti-boucle**, palette bois non réparable → REJ01 ; prérequis report CstAtt06 sur le support réel (LIM-67 réception, LIM-91 picking) ; nouveau paramètre PK_REJET_PROD ; 27 cas de test résumés par famille ; 4 points ouverts. Réconcilié : `01-inbound/controle-qualite-reception.md` (renvoi du rejet ECART RETOUR / rejet PIE toutes causes → nouvelle page), `07-admin/ad-customs.md` (note usage rejet CstAtt06 + jira_refs/Historique/Références LIM-114), `07-admin/parametres-projet.md` (ajout param PK_REJET_PROD + jira_refs/Historique/Références LIM-114), `08-transverse/questions-ouvertes.md` (annotation B2 LIM-93 + 4 points ouverts LIM-114 + sources + Historique), `_index.md` racine (nouvelle entrée, compteur **45→46**), `README.md` + `02-stockage/_index.md` (ajout lien rejet-pie). Glossaire : REJ01/PK_REJET_PROD définis inline dans la page / params.
**Cross-refs** : rejet-pie.md ↔ controle-qualite-reception.md (PIE/LIM-66) ↔ ad-customs.md (CstAtt06/02/04) ↔ parametres-projet.md (PK_REJET_PROD/PK_BIGBAG/PIE_ENTRY_PK) ↔ job-assignation-pk.md (dispo poste LIM-70/74) ↔ questions-ouvertes.md (B2 LIM-93)
**Questions** : transmission de la cause de rejet EasyS/Galileo→WMS (@Mecalux) ; poste physique PK_REJET_PROD côté EST + joignabilité si PE01 fermé (layout) ; comportement si aucun poste disponible ; disponibilité imprimante au poste (cause étiquette). Tracées dans questions-ouvertes.md
- **Fichier** : `Jira LIM-115` (lecture directe, aucun commentaire)
**Type** : Ticket Jira - #LOT 3 Transmettre le programme de filmage à la filmeuse (Tâche, statut : Ouvert, assignée Vincent Charvet)
**Action** : Intégration dans `limagrain/02-stockage/galileo-config.md` (page propriétaire Galileo/PIE/filmeuse) : nouvelle section « Transmission du programme de filmage à la filmeuse (LIM-115) » depuis la description (pas de commentaire) - objectif (transmettre auto le programme de filmage à Galileo quand une palette quitte un PIE vers l'ASRS, sans action opérateur ; même principe custom data que l'étiqueteuse LIM-111, la tâche ne produit pas le programme mais le transmet) ; chaîne fonctionnelle (choix opérateur → CstAtt05 → évacuation AGV → filmeuse puis PIE → ASRS ; règle « on ne filme que si PIE OK » structurellement satisfaite) ; mécanisme en tableau (subscription `MovementCreated` légère, filtre station source = paramètre PIE concernés, lecture support→CstAtt05, force CstData=0 si vide/pas de filmage/**destination rejet**, écriture idempotente CustomData de la tâche parente, pas de collision étiqueteuse = type de tâche différent, lecture Galileo via `GalileoMovTrackingCreateCommand` Generated→Running) ; périmètre (déclencheur PIE_02 en paramètre, tous flux entrant ASRS via poste d'identification zone travail = réception ext/intersite/retour picking/recertif ; hors PIE_01 production, PIE_03 pas de filmeuse, pose CstAtt05 = LIM-67, mécanique physique filmeuse) ; **caveat réconciliation** PIE_03 (galileo-config dit « idem PIE_02 » pour l'insertion, mais pas de filmeuse) ; front matter jira_refs +LIM-115/sources/tags/last_updated, Historique, Références. Réconcilié : `07-admin/parametres-projet.md` (ajout param `PIE_FILMAGE` nom à confirmer + cross-ref, jira_refs +LIM-115, Historique, Références), `07-admin/ad-customs.md` (note CstAtt05 usage transmission LIM-115 + caveat type int vs code alphanumérique, table 05 → LIM-67 / 115, jira_refs +LIM-115, Historique, Références), `04-outbound/flux-expedition.md` (§Filmage : CstAtt05 + cross-ref mécanisme LIM-115). Pas de nouvelle page.
**Cross-refs** : galileo-config.md ↔ ad-customs.md (CstAtt05) ↔ parametres-projet.md (PIE_FILMAGE/FILMAGES) ↔ flux-expedition.md (§Filmage picking) ↔ flux-expedition.md §Communication Galileo (LIM-111, même principe custom data) ; LIM-67 (pose CstAtt05)
**Questions** : aucune nouvelle formalisée (périmètre validé) ; caveat = réconciliation PIE_03 (pas de filmeuse) et type CstAtt05 (int vs alphanumérique) notés dans les pages
- **Fichier** : `Jira LIM-116` (lecture directe, 3 commentaires inclus)
**Type** : Ticket Jira - #LOT 3 Mouvements manuels depuis la station de picking (Tâche, statut : Attente déploiement pour test, assignée Vincent Charvet)
**Action** : Intégration dans `limagrain/03-picking/process-picking-pk.md` (page propriétaire du process opérateur PK) depuis la description + 3 commentaires (Vincent 15/07 éléments modifiés ; Maxime 17/07 revue validée ProcessContext `Container_CloseClientContainerOnMP_PR` ; Maxime 17/07 fix temporaire MP → PE) - nouvelle section « Mouvements manuels du poste (appeler / renvoyer) » : filmage sur action « Stocker support » (`Return_ContainerFromPKStation_UI`, réutilise la sélection LIM-67 `CST_Workstation_Wrapping_UI`), filmage sur renvoi automatique quand le conteneur n'a plus de tâches (`Task_AutomaticPicking_UI`), sélection du PIE de retour via `ProcessContext` (`Container_MoveToStationTypeCodeListOrReject` + `Container_CloseClientContainerOnMP_PR`, PIE_ENTRY_PK/PIE02, même WF de destination que le rejet PIE LIM-114), capacité des buffers PK → PK (`Task_GenerateMovement_PR_V2`) ; optim Justine 16/07 (écran filmage sur Stocker support + PIE02) marquée **livrée par LIM-116**, reste distinction visuelle mère/client à confirmer ; caveat correction temporaire MP → PE (retirée après gestion complète MP → PK) ; front matter jira_refs +LIM-116/LIM-67/sources/last_updated, Historique, Références (commit LOT3 e79f385242). Réconcilié : `03-picking/placement-ps-pk.md` (note capacité buffers PK → PK `Task_GenerateMovement_PR_V2` + renvoi vers mouvements manuels, jira_refs +LIM-116, Historique, Références). Pas de nouvelle page (delta dans les pages propriétaires). Pas de nouveau CstAtt ni paramètre (réutilise CstAtt05 filmage LIM-67 et PIE_ENTRY_PK).
**Cross-refs** : process-picking-pk.md ↔ placement-ps-pk.md (buffers PK → PK) ↔ reception-fournisseur.md (LIM-67 sélection filmage) ↔ rejet-pie.md (WF destination `Container_MoveToStationTypeCodeListOrReject`, PIE_ENTRY_PK) ↔ parametres-projet.md (PIE_ENTRY_PK/FILMAGES)
**Questions** : aucune nouvelle formalisée ; caveats = distinction visuelle écran filmage mère vs client (optim Justine, à confirmer) et fix temporaire MP → PE (à retirer après MP → PK) notés dans process-picking-pk.md
- **Fichier** : `Jira LIM-117` (lecture directe, aucun commentaire)
**Type** : Ticket Jira - #LOT 2.1 [RUT] Mapping auto des adresses des SOR des tournées (Tâche, statut : Ouvert, assignée Vincent Charvet)
**Action** : Intégration dans `limagrain/04-outbound/flux-erp-outbound.md` (page propriétaire des messages RUT/SOR) depuis la description (pas de commentaire) - nouvelle section « [CUSTOM] Adresse de livraison des SOR de tournée (LIM-117) » : en standard le SOR porte l'adresse de livraison mais la liste de SOR d'un RUT (`RouteErpCommand`) ne l'expose pas ; SAP transmet l'adresse dans le `CustomAttribute` de chaque SOR (table Attribute1-7 = code postal/site/rue/commune/région/pays/téléphone-commentaire, libellés déduits de l'exemple SAP `RUT-2026-000451_BIS`, à confirmer), post-subscription WMS de mapping vers l'OS **à développer** ; point d'attention ; ajout des sections Historique + Références (absentes) ; front matter jira_refs +LIM-117/sources/tags/last_updated. Réconcilié : `06-erp-interface/messages-reference.md` (note « Adresse de livraison » sur le flux RUT + renvoi vers flux-erp-outbound.md, jira_refs +LIM-117, Historique). Pas de nouvelle page. Pas de nouveau CstAtt d'entité WMS (CustomAttribute du message SOR côté SAP) ni de paramètre.
**Cross-refs** : flux-erp-outbound.md (RUT/SOR) ↔ messages-reference.md (catalogue RUT) ; cible OS = shipping-orders.md
**Questions** : aucune nouvelle formalisée ; caveat = libellés des Attribute1-7 déduits de l'exemple SAP (à confirmer) et post-subscription WMS restant à développer (LIM-117 Ouvert), notés dans flux-erp-outbound.md
+4 -4
View File
@@ -1,11 +1,11 @@
---
title: "Inbound Vue d'ensemble"
title: "Inbound - Vue d'ensemble"
tags: [inbound, index]
status: draft
last_updated: 2026-05-12
---
# Inbound Vue d'ensemble
# Inbound - Vue d'ensemble
> **Périmètre** : réception fournisseur, retours, contrôle qualité à réception,
> messages ERP inbound.
@@ -15,11 +15,11 @@ last_updated: 2026-05-12
## Pages de cette section
- [Gestion des camions](gestion-camions.md) arrivée, quais, déclaration image de quai
- [Gestion des camions](gestion-camions.md) - arrivée, quais, déclaration image de quai
- [Réception fournisseur](reception-fournisseur.md)
- [Réception retour](reception-retour.md)
- [Contrôle qualité réception](controle-qualite-reception.md)
- [Étiquette RFID](etiquette-rfid.md) format A5, QR GS1, encodage ZPL
- [Étiquette RFID](etiquette-rfid.md) - format A5, QR GS1, encodage ZPL
- [Flux ERP inbound](flux-erp-inbound.md)
## Vue synthétique du flux inbound Limagrain
@@ -1,16 +1,16 @@
---
title: "Contrôle qualité réception Vérification poids PIE"
title: "Contrôle qualité réception - Vérification poids PIE"
tags: [inbound, PIE, poids, verrou, inventaire, qualité]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: [LIM-66]
jira_refs: [LIM-66, LIM-108, LIM-114]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", LIM-66_Passage_PIE.md, wiki-update-poids-PIE-tolerance.md]
last_updated: 2026-05-13
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", LIM-66_Passage_PIE.md, wiki-update-poids-PIE-tolerance.md, "Jira LIM-108 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Contrôle qualité réception Vérification poids PIE
# Contrôle qualité réception - Vérification poids PIE
> **Résumé** : mécanisme [CUSTOM] de contrôle de poids au passage PIE avec
> calcul de tolérance par type article, application automatique de verrous
@@ -39,20 +39,20 @@ Le PIE effectue les contrôles suivants :
| Poids | ≤ 1250 kg |
| État palette bois | Correct (lames TK ne doivent pas toucher le bois, pas de ski manquant) |
> Les erreurs sont configurables par type dans easyS possibilité
> Les erreurs sont configurables par type dans easyS - possibilité
> d'envoyer vers différentes destinations selon le type d'erreur
> (station error type). Exemple : scotch qui dépasse → station de
> reconditionnement, palette vraiment non conforme → rejet complet.
## Formule de calcul du poids
### Étape 1 Poids des lignes de stock
### Étape 1 - Poids des lignes de stock
```
Poids lignes de stock = Poids total mesuré Poids théorique support (PALETTE_US)
```
### Étape 2 Répartition au prorata entre lignes de stock
### Étape 2 - Répartition au prorata entre lignes de stock
Le poids mesuré est réparti au prorata entre les différentes lignes
de stock.
@@ -78,7 +78,7 @@ Poids mesuré au PIE = 60 kg (hors palette bois).
| B (× 1) | 40 kg (ITM) | 80 % | 48 kg |
| **Total** | 50 kg | 100 % | **60 kg** |
### Étape 3 Mise à jour du poids unitaire (CstAtt01)
### Étape 3 - Mise à jour du poids unitaire (CstAtt01)
Le **CstAtt01** de chaque ligne de stock est mis à jour avec le poids
unitaire mesuré :
@@ -93,15 +93,20 @@ Poids unitaire mesuré = Poids réel de la ligne / Quantité de la ligne
| Poids réel pesé (total) | Champ standard « poids balance » du support |
| Poids réel de la ligne | Champ « Poids réel » de la ligne de stock |
> **Priorité CstAtt01** : si CstAtt01 a déjà une valeur (pesée
> précédente), c'est ce poids unitaire qui est utilisé comme référence
> pour **tous les calculs du passage PIE** — ratio (étape 2) **et**
> seuil de tolérance (vérification ci-dessous) — à la place du poids
> théorique ITM.
> **Priorité CstAtt01 (répartition uniquement)** : si CstAtt01 a déjà une
> valeur (pesée précédente), c'est ce poids unitaire qui est utilisé pour
> la **répartition au prorata** (étape 2), à la place du poids ITM.
>
> ⚠️ **Mise à jour 19/06/2026** : cette priorité **ne s'applique plus au
> seuil de tolérance**. La détection d'écart utilise désormais **toujours
> le poids ITM théorique** (voir section suivante). L'idée d'utiliser
> CstAtt01 comme seuil (validée client en mai 2026) a été **abandonnée** :
> une pesée très erronée fixerait un CstAtt01 aberrant qui fausserait le
> seuil des passages suivants.
> **Mise à jour du stock : OUI** le poids calculé est stocké dans
> **Mise à jour du stock : OUI** - le poids calculé est stocké dans
> CstAtt01 de la ligne de stock.
> **Mise à jour de l'ITM : NON** le poids théorique de la fiche
> **Mise à jour de l'ITM : NON** - le poids théorique de la fiche
> article reste inchangé. Raison : le poids varie en fonction de la
> production (début/fin de prod), chaque pesée est unique.
@@ -110,40 +115,43 @@ Poids unitaire mesuré = Poids réel de la ligne / Quantité de la ligne
## Vérification de la tolérance et blocage
Ref. [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) en
revue de code.
Ref. [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) - **en
cours de test client (pré-production)**.
### Poids de référence pour le seuil de tolérance
Le "poids unitaire de l'article" utilisé comme seuil de tolérance suit
la même règle de priorité que le ratio :
> ⚠️ **Décision finale (19/06/2026)** : le seuil de tolérance utilise
> **toujours le poids unitaire ITM théorique** (conversion article), quel
> que soit l'état de CstAtt01.
| Situation | Poids de référence utilisé |
|-----------|---------------------------|
| CstAtt01 renseigné (pesée précédente) | **CstAtt01** (poids unitaire mesuré) |
| CstAtt01 vide (premier passage PIE) | **Poids ITM** (conversion article) |
| Situation | Poids de référence pour le seuil |
|-----------|----------------------------------|
| Premier passage PIE **et** passages suivants | **Poids ITM** (conversion article) |
**Conséquence sur les passages successifs** : après un premier passage
PIE qui recalibre le poids unitaire (ex. ITM = 10 kg, mesuré = 30 kg),
le seuil de tolérance au passage suivant sera basé sur 30 kg (CstAtt01).
Un écart de 20 kg (2 unités au poids ITM d'origine) ne déclenchera pas
de blocage car il reste inférieur à 1 unité au poids recalibré (30 kg).
**Historique de la décision** : une première approche (mai 2026, validée
client) prévoyait un seuil **dynamique** basé sur CstAtt01 (dernier poids
mesuré) si renseigné, sinon ITM. Elle a été **abandonnée le 19/06/2026** :
si une pesée très erronée fixe un CstAtt01 aberrant, comparer les pesées
suivantes à ce seuil fausserait la détection. Le seuil est donc revenu au
poids **théorique ITM**, stable et fiable.
> Validé par le client (échange Justine BEUTIN / Olivier, mai 2026).
> **Note** : CstAtt01 reste calculé et mis à jour à chaque pesée (étape 3)
> et sert à la **répartition au prorata**, mais **plus** au seuil de
> tolérance.
### [CUSTOM] Palettes mono-référence
**Condition de blocage** : si l'écart de poids correspond à un écart
d'une ligne de stock (article manquant ou en trop → écart ≥ poids
unitaire de référence, cf. tableau ci-dessus) → blocage via verrou sur
le **support** (pas sur le stock) + alerte SmartUI.
unitaire **ITM** de l'article) → blocage via verrou sur le **support**
(pas sur le stock).
### [CUSTOM] Palettes multi-références seuil d'alerte
### [CUSTOM] Palettes multi-références - seuil d'alerte
Pour les palettes contenant plusieurs articles différents, le système
utilise le **plus petit poids unitaire de référence** (CstAtt01 si
renseigné, sinon ITM, par ligne) comme seuil d'alerte. Si l'écart
total ≥ ce plus petit poids → blocage + alerte.
utilise le **plus petit poids unitaire ITM** parmi toutes les lignes de
stock comme seuil d'alerte. Si l'écart total ≥ ce plus petit poids →
blocage.
### Verrous appliqués
@@ -154,12 +162,17 @@ Deux verrous possibles selon le flux :
| **HORS TOLERANCE** | Tous sauf retour client | La palette **entre quand même dans l'ASRS** malgré le verrou |
| **ECART RETOUR** | Retour client uniquement | La palette est **refusée et envoyée en rejet** (destination gérée par EasyS) |
### Notification
### Gestion de l'erreur
- Création d'une **notification SmartUI** via le circuit classique de
notifications basé sur un event (pas d'event custom)
- La notification SmartUI custom envisagée initialement a été
**abandonnée** (barrée dans la spec). Le custom
`PIE_EventHandler_CheckToleranceWeight_PR` **redirige vers l'erreur de
poids standard** EasyWMS en cas de dépassement de tolérance.
- Le verrou est posé sur le **support** (pas sur le stock)
- Notification dédiée au rejet générée dans le cas ECART RETOUR
- Le **flux de rejet PIE** (toutes causes : dimension, poids, étiquette,
palette bois), avec renvoi au **poste de travail d'origine**, est documenté
dans [Flux de rejet PIE](../02-stockage/rejet-pie.md) (LIM-114). Il remplace
l'approche « poumon au sol + notification SmartUI ».
### Comportement selon le flux (détail)
@@ -174,7 +187,7 @@ Deux verrous possibles selon le flux :
Dans tous les cas, le poids est quand même appliqué et recalculé.
### [CUSTOM] Type ZSIZ Ajustement automatique
### [CUSTOM] Type ZSIZ - Ajustement automatique
Si le type d'article est **ZSIZ** (semi-fini calibré / big-bag), un
message d'ajustement de stock est envoyé vers SAP via **WSC** contenant
@@ -191,6 +204,36 @@ le poids réel de la HU, **indépendamment de la tolérance**.
- Le flag d'écart de poids est inclus dans le fichier **LOC** envoyé
à SAP
## [SIMULATION] Poids théorique en l'absence de poids Galileo (LIM-108)
> **Statut (LIM-108)** : en cours de test client (pré-production). Mode de
> fonctionnement **temporaire** pour la simulation.
Lors du passage au PIE, le poids **n'est pas toujours descendu** dans l'event
Galileo si la palette n'est **pas créée au PIE** (simple passage par la
station). Dans ce cas, un mode simulation permet de récupérer le **poids
théorique du conteneur** et de l'utiliser à la place du poids de l'event
Galileo.
Ce mode est gouverné par le toggle `CST_SimulatePIEScale` (voir
[Paramètres projet - Toggles](../07-admin/parametres-projet.md#toggles)) :
quand il est actif, le WMS vérifie si l'event PIE porte un poids ; sinon il
substitue le poids théorique du conteneur. Sans poids récupéré, les règles
de poids ([formule](#formule-de-calcul-du-poids), tolérance) s'appliquent
ensuite normalement.
## Implémentation technique (AD customs)
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_PIE_ApplyWeightRules_PR` | Workflow | Applique les contrôles et opérations liés au poids au passage PIE. Corrigé (LIM-108, Maxime 18/06/2026) suite à un changement de version. |
| `PIE_EventHandler_CheckInvalidWeightWithScale_PR` | Workflow | [SIMULATION, LIM-108] Si `CST_SimulatePIEScale` actif : vérifie si l'event porte un poids ; sinon récupère le poids théorique du conteneur et l'utilise. |
| `PIE_EventHandler_CheckToleranceWeight_PR` | Workflow | Contrôle de tolérance ; redirige vers l'erreur de poids standard en cas de dépassement |
| `CST_SimulatePIEScale` | Toggle | [SIMULATION, LIM-108] Active la simulation du poids d'event PIE. |
| `CST_StockView` | Entité | Affiche le CstAtt01 avec le bon type décimal |
| `CST_Stocks_ForView` | Query | Query de l'entité `CST_StockView` |
| `StockVList` | View | Affichage du CstAtt01 (poids unitaire mesuré) |
## Gestion des verrous
### Consultation
@@ -220,33 +263,41 @@ de travail **autoriser** la palette à passer le PIE même si hors tolérance.
## Points d'attention
⚠️ Le contrôle poids s'applique à **chaque** passage PIE une palette
⚠️ Le contrôle poids s'applique à **chaque** passage PIE - une palette
peut passer le PIE plusieurs fois (réception → picking → restockage).
⚠️ Le poids est porté par le **stock** (CstAtt01 de la ligne), pas par
la fiche article ITM chaque pesée est unique.
la fiche article ITM - chaque pesée est unique.
⚠️ Les palettes avec verrou « Réception » sont prioritaires dans
l'assignation de stock pour l'échantillonnage (permet de combiner
recomptage + échantillonnage).
⚠️ Verrou posé sur le **support** (pas sur le stock) différent du
⚠️ Verrou posé sur le **support** (pas sur le stock) - différent du
comportement standard.
⚠️ Pour les palettes multi-références, le seuil d'alerte est le plus
petit poids unitaire parmi toutes les lignes de stock.
petit poids unitaire **ITM** parmi toutes les lignes de stock.
⚠️ Après un passage PIE qui recalibre fortement le poids (ex. ITM
10 kg → CstAtt01 30 kg), le seuil de tolérance au passage suivant
est proportionnellement plus large. C'est le comportement attendu :
chaque pesée fait foi pour la suivante.
⚠️ Le seuil de tolérance est basé sur le poids **ITM théorique** (fixe),
pas sur CstAtt01 (décision 19/06/2026). CstAtt01 sert uniquement à la
répartition au prorata et à l'inventaire par pesée, et n'influence plus
la détection d'écart.
⚠️ [SIMULATION, LIM-108] Le repli sur le poids théorique du conteneur
(toggle `CST_SimulatePIEScale`) est un mode **temporaire** de simulation :
il ne doit pas rester actif quand les palettes sont réellement créées et
pesées au PIE.
## Questions ouvertes
- [x] Tolérances : le seuil est dynamique (CstAtt01 > ITM), validé par
le client (mai 2026). Pas de valeur fixe par type article.
- [ ] Valeur du poids palette bois fixe (PALETTE_US) (@Théo)
- [ ] Poids variable — vérifier si le standard gère la capture de
- **Résolu (19/06/2026)** - Tolérances : le seuil est finalement basé sur
le poids **ITM théorique** (fixe). L'approche dynamique CstAtt01 > ITM
(validée client mai 2026) a été abandonnée.
- **Ouvert** - Envoi d'un **STV** ou non lors de l'ajustement de stock pour
mettre à jour le poids (@Vincent)
- **Ouvert** - Valeur du poids palette bois fixe (PALETTE_US) (@Théo)
- **Ouvert** - Poids variable : vérifier si le standard gère la capture de
poids avec poids moyen activé (@Nicolas)
## Historique des modifications
@@ -257,6 +308,8 @@ chaque pesée fait foi pour la suivante.
| 2026-05-05 | Arthur | Enrichissement : prorata, multi-ref, verrou support, ZSIZ timing |
| 2026-05-12 | Arthur | LIM-66 : verrous HORS TOLERANCE / ECART RETOUR, CstAtt01 poids unitaire, comportement post-PIE |
| 2026-05-13 | Arthur | Clarification tolérance CstAtt01 > ITM pour passages PIE successifs (validation client) |
| 2026-07-16 | Arthur | LIM-66 : **abandon** du seuil CstAtt01 → retour au poids ITM théorique (décision 19/06) ; notification SmartUI abandonnée (redirection erreur standard) ; ajout éléments AD ; statut pré-production ; point ouvert STV ; rejet ECART RETOUR → LIM-114 |
| 2026-07-20 | Arthur | LIM-108 (lecture directe, pré-production) : section [SIMULATION] repli sur poids théorique du conteneur quand l'event Galileo PIE ne porte pas de poids (palette non créée au PIE), toggle `CST_SimulatePIEScale`, WF `PIE_EventHandler_CheckInvalidWeightWithScale_PR` ; note correction `CST_PIE_ApplyWeightRules_PR` (changement de version) ; point d'attention mode temporaire ; front matter jira_refs/sources/last_updated |
## Références
@@ -264,5 +317,7 @@ chaque pesée fait foi pour la suivante.
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira | 2026 |
| Échange Justine BEUTIN / Olivier (Limagrain) | Validation client | mai 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (PIE poids/verrous - pré-production) | 2026 |
| [LIM-108](https://easywmsfrance.atlassian.net/browse/LIM-108) | Ticket Jira (simulation poids PIE - pré-production) | 2026 |
| [LIM-114](https://easywmsfrance.atlassian.net/browse/LIM-114) | Ticket Jira (flux de rejet PIE) | 2026 |
| Échange Justine BEUTIN / Olivier (Limagrain) | Validation client (approche mai 2026, révisée 19/06) | mai 2026 |
+170 -37
View File
@@ -1,54 +1,65 @@
---
title: "Étiquette support RFID — Format mono-référence"
tags: [inbound, outbound, RFID, étiquette, ZPL, GS1, support]
title: "Étiquette support RFID - Mono-référence & Multiréférence"
tags: [inbound, outbound, RFID, étiquette, ZPL, EPC, GS1, support]
status: draft
standard_ref: concepts/reception.md
standard_ref: concepts/labels.md
jira_refs: [LIM-68]
confluence_refs: []
sources: [LIM-68_Etiquette_RFID.md]
last_updated: 2026-05-12
sources: ["Jira LIM-68 (lecture directe)", "CR réunion évolution encodage RFID 2026-07-06"]
last_updated: 2026-07-20
author: Arthur
---
# Étiquette support RFID — Format mono-référence
# Étiquette support RFID - Mono-référence & Multiréférence
> **Résumé** : étiquette A5 imprimée lors de la réception
> fournisseur/intersite, contenant les informations du support (code,
> article, lot, GTIN) avec un QR Code GS1 et un encodage RFID via ZPL.
> **Résumé** : étiquette support (HU) imprimée et encodée RFID via ZPL,
> dans deux flux - réception fournisseur/intersite et étiqueteuse
> automatique en expédition. Deux rapports : mono-référence (A5 détaillé,
> QR Code GS1) et multiréférence (SSCC seul). Une évolution de l'encodage
> RFID (7 bits en banque EPC) est décidée mais en attente de validation
> client.
> **Standard EasyWMS** : → voir [Reception](../../concepts/reception.md)
> **Standard EasyWMS** : → voir [Labels](../../concepts/labels.md),
> [Reception](../../concepts/reception.md) et
> [Stations](../../concepts/stations.md) (station ETQ type 58).
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Le client Limagrain souhaite un rapport d'étiquette personnalisé pour
ses HU (supports) dans le flux de réception fournisseur/intersite.
L'étiquette est imprimée automatiquement à la confirmation de création
du conteneur sur le poste de travail (voir
[Réception fournisseur](reception-fournisseur.md) — étape 5a). Elle
peut aussi être réimprimée depuis le menu principal du poste (action
« Imprimer étiquette »).
Le client Limagrain veut un rapport d'étiquette personnalisé pour ses HU
(supports). L'étiquette est produite dans deux flux :
Ref. [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) —
attente déploiement pour test.
- **Réception fournisseur/intersite** : impression automatique à la
confirmation de création du conteneur sur le poste de travail (voir
[Réception fournisseur](reception-fournisseur.md) - étape 5).
Réimpression possible via l'action « Imprimer étiquette » du menu poste.
- **Expédition - étiqueteuse automatique** : lorsque la palette arrive à la
station étiqueteuse (postes de sortie TK), la station demande au WMS quoi
faire ; le WMS envoie un *print command* avec l'un des deux rapports selon
que la palette est mono ou multiréférence (voir
[Étiqueteuse automatique](../04-outbound/flux-expedition.md#étiqueteuse-automatique)).
## Format A5 — Contenu de l'étiquette
Ref. [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) - revue de
code validée (24/03/2026) pour l'encodage actuel ; évolution encodage RFID
en attente client (voir plus bas).
## Rapport mono-référence - Format A5
| N | Champ | Source WMS | Remarque |
|---|-------|-----------|----------|
| | Quantité | Quantité + UdM | En haut de l'étiquette |
| - | Quantité | Quantité + UdM | En haut de l'étiquette |
| 1 | Code support (court) | 6 derniers chiffres du code support | **En gras** |
| 2 | Code-barres | Code 128 du code support au format GS1 | |
| 3 | Code support (complet) | Code support avec préfixe `(00)` | |
| 4 | Espèce (Specie) | `ITM.CstAtt01` | |
| 5 | Traitement commercial | `ITM.Family.Description` | |
| 6 | Variety print on bag | Tel quel | |
| 7 | | `ITM.CstAtt03` | |
| 7 | - | `ITM.CstAtt03` | |
| 8 | Lot officiel (Official Batch) | Premier Alias de l'article | |
| 9 | Lot interne (Internal Batch) | `ITM.Code` | = Lot SAP |
| 10 | Code GTIN | `ITM.CstAtt05` | |
| 11 | Date | | Vide (date non connue de l'ERP) |
| 11 | Date | - | Vide (date non connue de l'ERP) |
| 12 | QR Code GS1 | Voir section ci-dessous | |
## QR Code GS1
@@ -65,11 +76,47 @@ Le QR Code GS1 encode les identifiants suivants :
> La date de production (AI `11`) a été **supprimée** du QR Code.
## Encodage RFID (ZPL)
## Rapport multiréférence
L'impression de l'étiquette combine l'impression physique (texte,
codes-barres) et l'encodage de la puce RFID intégrée, le tout via
des commandes **ZPL** (Zebra Programming Language).
Pour une palette multiréférence (contenu hétérogène), le rapport se limite à
**imprimer et encoder le code SSCC** du support - aucun détail article/lot.
Le SSCC est encodé en RFID selon le même mécanisme ZPL que le
mono-référence.
## Variante mono-référence pour l'étiqueteuse automatique
Une variante du rapport mono-référence **affiche la quantité** ; elle est
utilisée par l'étiqueteuse automatique en expédition (demande d'optimisation
du 08/06/2026).
## Implémentation (workflows)
L'impression est portée par un workflow custom qui génère le code ZPL puis
lance l'impression. Process : obtenir le conteneur et son stock, remplir le
ZPL avec ces infos, puis appeler `PrinterJobPrintDocCommand`.
| Élément AD | Type | Rôle |
|---|---|---|
| `CST_PrintRFIDLabel` | Workflow | Génère le ZPL et envoie l'étiquette à l'imprimante. Entrée : conteneur (code ou Id) + imprimante. L'activité code « Set label data » construit les données ZPL depuis les infos conteneur, pour un conteneur mono ou multiréférence. Termine par `PrinterJobPrintDocCommand`. |
| `Reception_PrintContainerLabels_UI` | Workflow | Appelle `CST_PrintRFIDLabel` (génère l'étiquette depuis le code conteneur) - impression en réception. |
| `Container_MovedEvent_PR_V1` | Workflow | Ajoute l'attribut `taskFinish` à l'activité « labeller container moved ». |
| `Container_MovedEventHandler_Labeler_PR` | Workflow | Imprime l'étiquette si une imprimante est disponible (déclenché à l'étiqueteuse auto). |
| `CST_PrintInfo_2` | Ressource | Log FR/EN : « Printing report {0} from workflow {1} ». |
> ⚠️ **Contraintes techniques** :
>
> - Le code conteneur doit faire **18 caractères** (standard) pour être
> imprimé.
> - Le format étant du **ZPL**, PDF24 ne fonctionne pas : il faut installer
> une **imprimante virtuelle dédiée** ZPL.
> - Bonne pratique EasyWMS : tout WF qui lance une impression doit **logger**
> (d'où `CST_PrintInfo_2`).
## Encodage RFID (ZPL) - implémentation actuelle
L'impression combine l'impression physique (texte, codes-barres) et
l'encodage de la puce RFID, via des commandes **ZPL** (Zebra Programming
Language).
### Structure de base
@@ -104,25 +151,111 @@ des commandes **ZPL** (Zebra Programming Language).
^XZ
```
> Cet encodage **ASCII 8 bits en banque User (3)** est l'implémentation
> validée en mars 2026. Il est remplacé par l'encodage 7 bits EPC ci-dessous
> (décision 06/07/2026, en attente).
## Évolution - encodage 7 bits en banque EPC (en attente)
> **Statut** : décidé en réunion du 06/07/2026, **en attente de validation
> client** et de la spec de packing Bartender/Eliatys. Dev non démarré.
### Décision
Passage à un encodage **7 bits ASCII (table non étendue) en banque EPC**, en
remplacement de l'ASCII 8 bits en User memory. Motif : les HU_ID ne sont
plus uniquement numériques.
### Contraintes matériel
- Puce **Impinj M830**, EPC **128 bits**, **pas de mémoire User**.
- Deux formats de HU_ID à encoder :
- **SSCC** : 18 caractères numériques (ex. `036607231002097859`)
- **Contenant réutilisable** : 8 caractères alphanumériques, 4 lettres +
4 chiffres (ex. `VGOC2080`)
- 18 × 7 = 126 bits → tient dans 128 (marge de 2 bits, **nulle au-delà de
18 caractères**).
### Changements dans `CST_PrintRFIDLabel` (activité « Set label data »)
- Le packing 7 bits **n'existe pas nativement en ZPL** (`^RFW` = A/H/E
uniquement) : il doit être fait **en C# dans le WF** - prendre les 7 bits
de poids faible de chaque caractère, concaténer (18 car. → 126 bits),
padder à 128 bits, convertir en **32 caractères hexa**.
- Écrire en hexa dans la banque EPC : `^RFW,H,...,1`. Paramètres bloc/longueur
à valider sur la ZT421 prêtée. Tester aussi `^RFW,E` (gère automatiquement
le mot PC / la longueur).
- La convention de packing doit être **identique bit pour bit à celle de
Bartender** (ordre MSB/LSB, position du padding, longueur variable) - **ne
pas coder avant d'avoir la spec Eliatys**, sinon les puces prod (SAP) et
EasyWMS ne seront pas mutuellement décodables.
- **Verrouillage** : ajouter le perma-lock Zebra une fois l'encodage validé,
et le rendre **paramétrable** (activable/désactivable).
### Lecture côté WMS (à développer)
- Le portique **CIPAM** renvoie l'**hexa brut** ; **EasyWMS décode**.
- Il faut **distinguer** l'ancien encodage (prod déjà étiquetée cette année,
numérique) du nouveau 7 bits.
- **Discriminant retenu (MAJ 08/07/2026)** : la **longueur de l'hexa reçu**.
Chaque puce déclare sa longueur via son mot PC → l'inventaire renvoie
**32 hexa (128 bits)** pour une puce nouvelle et sa longueur d'origine
(probablement **24 hexa / 96 bits**) pour une legacy. Plus simple que
parser le PC. **Seuil exact à figer avec les échantillons legacy** (action
JBR/SVA).
### Points de vigilance
- **Lecture 96/128 bits - RÉSOLU (confirmé CIPAM, 07/2026)** : les 5 premiers
bits (0-4) du mot PC = longueur EPC en mots de 16 bits (**8** pour 128
bits). Si le PC est bien positionné à l'écriture, l'inventaire renvoie
automatiquement la bonne quantité de bits, sans reconfiguration globale des
lecteurs. → **À l'écriture : garantir PC = 8 mots** (`^RFW,E` le fait ;
en `^RFW,H`, écrire le PC à la main).
- **Perma-lock viable** : le numéro de palette n'est jamais réécrit (un
changement = nouvelle étiquette). À appliquer **uniformément** par tous les
émetteurs (EasyWMS/Zebra + Bartender/SAP).
### Séquencement
Dev à réaliser **après** : (1) validation par toutes les parties que le
7 bits convient, (2) réception de la spec de packing Bartender, (3) tests
physiques écriture/lecture sur les 2 formats + impact perma-lock. Un exemple
de code C# de packing/dépacking 7 bits est fourni dans le ticket
[LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) (commentaire
07/07/2026).
## Points d'attention
- L'imprimante doit être **compatible ZPL** avec encodage RFID
(contrainte fournisseur à valider voir question ouverte dans
[Réception fournisseur](reception-fournisseur.md))
- Le code support encodé en RFID fait **18 caractères** (5 blocs de
4 octets = 20 octets en banque User 3)
- L'étiquette est au format **A5 paysage**
- La date (champ 11) est volontairement vide car non connue de l'ERP
au moment de la réception
- L'imprimante doit être **compatible ZPL** avec encodage RFID (choix
fournisseur à valider - voir
[questions ouvertes](../08-transverse/questions-ouvertes.md))
- Code conteneur RFID = **18 caractères** (limite dure du nouvel encodage
7 bits : 18 × 7 = 126 bits ≤ 128)
- Étiquette mono-référence au format **A5 paysage** ; date (champ 11)
volontairement vide (non connue de l'ERP en réception)
- Deux émetteurs de puces coexistent (EasyWMS/Zebra et Bartender/SAP) : la
convention d'encodage et le perma-lock doivent être **strictement alignés**
## Questions ouvertes
- Validation client du passage à l'encodage **7 bits EPC** (attente réponse
au mail d'Arthur) - bloque le dev
- Réception de la **spec de packing Bartender** (Eliatys) - prérequis dev
- Seuil exact de longueur hexa pour discriminer legacy vs nouveau encodage
(échantillons legacy - action JBR/SVA)
- Tests physiques écriture/lecture sur ZT421 + impact perma-lock
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-68 |
| 2026-05-12 | Arthur | Création initiale depuis LIM-68 (mono-référence) |
| 2026-07-17 | Arthur | Relecture commentaires : multiréférence (SSCC), variante étiqueteuse auto, implémentation WF (`CST_PrintRFIDLabel`, revue validée 24/03), évolution encodage 7 bits EPC (décision 06/07, en attente) |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) | Ticket Jira | 2026 |
| [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) | Ticket Jira (9 commentaires) | 2026-03 → 2026-07 |
| Réunion évolution encodage RFID | CR réunion | 2026-07-06 |
+15 -15
View File
@@ -1,8 +1,8 @@
---
title: "Flux ERP inbound Messages réception"
title: "Flux ERP inbound - Messages réception"
tags: [inbound, ERP, ASN, ROR, ROF, REF, ITM, interface]
status: draft
standard_ref: architecture/erp-integration.md
standard_ref: concepts/erp-interface.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
@@ -10,7 +10,7 @@ last_updated: 2026-05-06
author: Arthur
---
# Flux ERP inbound Messages réception
# Flux ERP inbound - Messages réception
> **Résumé** : catalogue des messages ERP liés aux processus de réception
> chez Limagrain, avec direction, déclencheur et contenu principal.
@@ -27,7 +27,7 @@ Pour les messages d'expédition, voir
## Messages entrants (SAP → EasyWMS)
### ITM Item Master
### ITM - Item Master
| Champ | Description |
|-------|-------------|
@@ -39,13 +39,13 @@ Pour les messages d'expédition, voir
> ⚠️ Chez Limagrain, les **lots SAP** sont gérés comme des articles (descendus
> via ITM). L'article Limagrain est un attribut du lot SAP.
### ASN Advanced Shipping Notice
### ASN - Advanced Shipping Notice
| Champ | Description |
|-------|-------------|
| Direction | ERP → WMS |
| Déclencheur | Création HU avec code SSCC en production |
| Architecture | **1 ASN = 1 palette de production** (pas d'agrégation permet suppression individuelle en cas d'annulation) |
| Architecture | **1 ASN = 1 palette de production** (pas d'agrégation - permet suppression individuelle en cas d'annulation) |
| Contenu | Numéro HU, article, lot SAP, [CUSTOM] propriétaire Limagrain, statut de stock, quantité (unités de vente) |
| Timing | Envoyé dès création de la HU avec code SSCC |
@@ -65,7 +65,7 @@ statut (champ vide ou absent du JSON).
Height/Volume (recalculé au pesage PIE), dates fabrication/expiration,
numéro de série.
### ROR Reception Order Request
### ROR - Reception Order Request
| Champ | Description |
|-------|-------------|
@@ -80,7 +80,7 @@ numéro de série.
|-------------|-------|--------------------------|-----------|
| 0 (Fournisseur) | Livraisons DESADV | SupplierCode = "FOURNISSEUR" | Précisée par SAP (override profil) |
| 1 (Retour) | Retours clients ORDRSP | AccountCode = "CLIENT" | Illimitée (ReceiveLessAllowed=true) |
| 3 (Transfert) | Transferts inter-sites | | 0% (palettes identifiées) |
| 3 (Transfert) | Transferts inter-sites | - | 0% (palettes identifiées) |
**Paramètres clés** : SingleReceipt = true (pas de reliquat WMS),
FreeQuantity non nécessaire. Pas de SSCC dans le ROR (récupéré au scan
@@ -98,7 +98,7 @@ RFID en réception).
## Messages sortants (EasyWMS → SAP)
### REF Reception Fulfilled
### REF - Reception Fulfilled
| Champ | Description |
|-------|-------------|
@@ -109,7 +109,7 @@ RFID en réception).
| Contrainte | L'emplacement de rangement n'est connu qu'après le stockage en ASRS → attendre que toutes les palettes soient stockées avant d'envoyer le REF |
| Données | S'appuie sur les données **réelles** (pas théoriques) |
### ROF Reception Order Fulfilled
### ROF - Reception Order Fulfilled
| Champ | Description |
|-------|-------------|
@@ -119,7 +119,7 @@ RFID en réception).
| Reliquats | Pas de gestion de reliquats par EasyWMS. Si réception incomplète, c'est SAP qui gère le reliquat |
| Hors tolérance | ROF bloqué jusqu'à régularisation par le manager dans SAP (customisation requise) |
### [CUSTOM] LOC Location
### [CUSTOM] LOC - Location
| Champ | Description |
|-------|-------------|
@@ -128,7 +128,7 @@ RFID en réception).
| Contenu | Numéro HU, station départ, station arrivée, workzone arrivée, emplacement arrivée |
| Condition | Généré uniquement si stations départ et arrivée sont différentes |
## Diagramme de séquence Réception production
## Diagramme de séquence - Réception production
```mermaid
sequenceDiagram
@@ -147,7 +147,7 @@ sequenceDiagram
WMS->>SAP: LOC (emplacement)
```
## Diagramme de séquence Réception extérieure
## Diagramme de séquence - Réception extérieure
```mermaid
sequenceDiagram
@@ -174,7 +174,7 @@ sequenceDiagram
⚠️ Le message REF est retardé jusqu'à validation PIE de tous les conteneurs
(peut prendre du temps si file d'attente PIE longue).
⚠️ Le message LOC n'est pas standard c'est un [CUSTOM] spécifique
⚠️ Le message LOC n'est pas standard - c'est un [CUSTOM] spécifique
Limagrain pour traçabilité emplacement dans SAP.
⚠️ Les modifications dans les master data ne doivent **pas** être faites
@@ -185,7 +185,7 @@ directement dans EasyWMS (risque d'écrasement par prochain ITM).
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-06 | Arthur | Enrichissement ASN (1 par palette, attributs logistiques, champs non utilisés), ROR (InboundType, tolérances, SingleReceipt), REF (clôture manuelle, zone stockage, contrainte rangement), ROF (rôle, reliquats, hors tolérance) depuis CR consolidé ERP |
| 2026-05-06 | Arthur | Enrichissement ASN (1 par palette, attributs logistiques, champs non utilisés), ROR (InboundType, tolérances, SingleReceipt), REF (clôture manuelle, zone stockage, contrainte rangement), ROF (rôle, reliquats, hors tolérance) - depuis CR consolidé ERP |
## Références
+381 -54
View File
@@ -1,16 +1,16 @@
---
title: "Gestion des camions Arrivée, quais et déclaration image de quai"
title: "Gestion des camions - Arrivée, quais et déclaration image de quai"
tags: [inbound, camion, quai, TRF, image-de-quai, étiquette, SmartUI]
status: draft
standard_ref: concepts/reception.md
jira_refs: [LIM-62, LIM-63, LIM-64, LIM-65]
jira_refs: [LIM-62, LIM-63, LIM-64, LIM-65, LIM-96, LIM-97, LIM-102]
confluence_refs: []
sources: [LIM-62_gestion-camions.md, LIM-63_64_65.md]
last_updated: 2026-05-06
sources: [LIM-62_gestion-camions.md, LIM-63_64_65.md, "Jira LIM-96 (V2, préprod, revue de code validée 25/06)", "Jira LIM-97 (Gestion camions V2, préprod, validé Vincent 02/07)"]
last_updated: 2026-07-20
author: Arthur
---
# Gestion des camions Arrivée, quais et déclaration image de quai
# Gestion des camions - Arrivée, quais et déclaration image de quai
> **Résumé** : flux complet depuis l'arrivée physique d'un camion jusqu'à la
> déclaration des palettes sur une image de quai (poumon de réception). Couvre
@@ -24,6 +24,15 @@ author: Arthur
> camions (plaque, quai, affichage chauffeur) et un workflow TRF dédié pour la
> déclaration des palettes sur les images de quai.
> **Statut Jira (20/07/2026)** : LIM-62 (Gestion camions **V1**) est **clôturé /
> annulé** (validation fonctionnelle par Justine le 27/05/2026). La suite est
> reprise par
> [LIM-97 - Gestion camions V2](https://easywmsfrance.atlassian.net/browse/LIM-97)
> (**En cours de test client / préprod**, validée par Vincent Charvet le
> 02/07/2026). Les étapes 1 et 2 ci-dessous intègrent le détail définitif V2,
> dont le mécanisme **faux stage / vrai stage** d'assignation de l'image de
> quai.
## Contexte projet
Chez Limagrain, le flux de réception commence **avant** le déchargement : un
@@ -65,14 +74,14 @@ sequenceDiagram
AGV->>AGV: Récupère palettes sur image de quai
```
## Étape 1 Annonce du camion (LIM-62)
## Étape 1 - Annonce du camion (LIM-62)
### Création de la réception
L'agent de quai accède à la vue **Ordre d'entrée > Réceptions** dans SmartUI.
Il crée une nouvelle réception en saisissant :
- **Plaque d'immatriculation** (champ "Camion", ex-"Document") non
- **Plaque d'immatriculation** (champ "Camion", ex-"Document") - non
obligatoire à la création, peut être renseignée après coup
- **Destination** : `PARKING` (quai fictif d'attente) par défaut, ou un quai
réel si disponible
@@ -93,20 +102,60 @@ Ce contrôle est implémenté dans le `VAssistCreateReceptionOE` (steps 2 et 3)
et dans la vue des ordres d'entrées. L'exception compare le `InboundClassCode`
de chaque OE sélectionné au premier de la liste.
## Étape 2 Assignation du quai (LIM-62)
## Étape 2 - Assignation du quai ET de l'image de quai (LIM-62 → LIM-97 V2)
L'agent consulte les disponibilités via le **tableau d'occupation des quais**
(ViewDetailPanel dans la vue `ReceptionVList`). Il sélectionne la réception et
assigne un quai réel.
(ViewDetailPanel dans la vue `ReceptionVList`). Il sélectionne la réception,
puis assigne **deux éléments** :
- un **quai réel** (`QUAI_01` à `QUAI_06`) ou le quai fictif `PARKING` ;
- une **image de quai** (poumon de réception) sur laquelle les palettes seront
déposées.
L'assignation se fait au niveau de l'image de quai **prise comme une unité**,
et non au niveau de ses 26 sous-emplacements.
### Mécanisme faux stage / vrai stage (V2)
> [CUSTOM] Contournement mis en place car EasyWMS ne sait pas assigner une
> image de quai comme un objet unique.
Écart constaté au développement (LIM-97) par rapport à la tâche initiale
LIM-62 :
- Aucune commande standard ne permet d'assigner une station en tant que
**Stage / DockStage** : le WMS ne sait assigner qu'un **emplacement**. Une
assignation « station = Stage » devrait passer par un `CstAtt`.
- Si on proposait le **vrai stage** (le poumon physique réel) à l'assignation,
le WMS afficherait ses **26 sous-emplacements** (soit 286 au total sur les
11 poumons). L'opérateur ne pourrait pas le choisir comme une unité.
Solution retenue : deux notions de stage par image de quai.
| Notion | Rôle |
|--------|------|
| **Faux stage** (`A` à `K`) | Station fictive, une par image de quai, portant un nom propre simple. C'est ce que l'opérateur **sélectionne sur le PC**, en plus du quai réel. Sa seule raison d'être : présenter l'image de quai comme un **objet unique** (une seule sélection, sans dérouler les 286 emplacements). |
| **Vrai stage** | Le **poumon physique** de 26 emplacements où les palettes sont réellement déposées. Il conserve une **route vers le quai d'expédition** (à préserver pour le chargement camion). |
L'opérateur choisit donc, pour chaque réception : (1) un quai réel (ou
`PARKING`), (2) un faux stage (`A` à `K`) représentant l'image de quai.
> ⚠️ **Effet de bord** : les tâches générées ont pour destination le **faux
> stage** et non un emplacement réel du poumon. Le rattachement faux stage →
> emplacement du vrai stage → quai d'expédition relève d'un mécanisme de
> routage encore ouvert (custom sur la fin d'ordre au PS), car il touche au
> flux d'expédition. Voir [Questions ouvertes](#questions-ouvertes) et
> [Assignation automatique de l'image de quai](../04-outbound/assignation-image-quai.md)
> (LIM-94, stages virtuels `X_EXP` côté expédition).
### Règles d'assignation
- Le quai et l'image de quai sont réservés dès la sélection
- Un quai partiellement occupé peut être réutilisé (gestion manuelle de la
place restante)
- ~~Blocage si flux différent (ex : expédition)~~ supprimé
- Si aucun quai disponible → l'opérateur conserve `PARKING` et attend une
libération
- Le quai et l'image de quai (faux stage) sont réservés dès la sélection
- Un quai / une image de quai partiellement occupé peut être réutilisé
(gestion manuelle de la place restante)
- ~~Blocage si flux différent (ex : expédition)~~ - supprimé
- Si aucune image de quai disponible → l'opérateur conserve `PARKING` et attend
une libération
- Modification possible a posteriori
### Tableau d'occupation des quais
@@ -124,24 +173,67 @@ réceptions, tournées et OS associés avec les plaques correspondantes :
Ce tableau est aussi disponible dans le `VAssistReceptionAssignDock` (step 1
utilise l'entité `CST_DockStationsWorkloadForView` au lieu de `Station`).
## Étape 3 Affichage chauffeur (LIM-63)
## Étape 3 - Affichage chauffeur (LIM-63)
Un écran d'affichage extérieur (WS / dialogue EasyWMS) montre aux chauffeurs
sur le parking les quais assignés avec les plaques d'immatriculation.
> **Statut Jira (16/07/2026)** : En cours de test client (pré-production).
> Revue de code validée le 27/03/2026 (Nicolas Chabanis).
Une **station de travail dédiée** (`CST_Workstation_Docks`) affiche, sur un écran
extérieur au parking, les quais assignés avec les plaques d'immatriculation des
camions. La vue ouvre automatiquement un workflow qui récupère les quais et
appelle un dialogue d'affichage EasyBuilder. But : indiquer aux chauffeurs où
attendre / se garer.
### Spécifications
- Afficher uniquement les quais avec des réceptions ou OS associés
- Prévoir l'affichage de **6 quais + le parking** sans scroll
- Afficher uniquement les quais ayant des réceptions ou OS associés
- Prévoir l'affichage de **6 quais principaux + le parking** (placé en haut)
sans avoir à scroller
- Afficher les plaques (champ "Camion" / Document)
- Les plaques sont récupérées via la query `CST_DockStationsWorkload_ForView`
(mutualisée avec LIM-62)
### Implémentation technique (LIM-63)
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_Workstation_Docks_DisplayDocksInformation` | Dialog | Récupère la liste des quais et l'affiche ; place les 6 quais principaux + Parking en haut |
| `CST_Workstation_Dock` | Workflow | Récupère tous les quais (code + OE/OS assignés), filtre les quais 1 à 7 (`Take(7)`), les ordonne par numéro, puis appelle le dialogue |
| `CST_Workstation_Docks` | ViewGroup + View | Vue de la station de travail ; ouvre le workflow par défaut |
| `RealStationWF.CST_LicencePlates` | Champ (Record) | Nouveau champ stockant les plaques (préféré à un CustomAttribute - décision de revue de code) |
| `CST_Workstation_Docks` | Ressource i18n | FR « Quais » / EN « Docks » |
| MenuItem `PanelMode = true` | Menu | Entrée d'accès ouvrant la vue en mode panneau |
> **Référence technique** : dialogue EasyBuilder, cf. [documentation
> Mecalux](https://msscc.mecalux.com/documentation/Development/master/ES/map_working_easybuilder/user_manual/dialogs/index.md)
## Étape 4 Déclaration image de quai via TRF (LIM-64)
## Étape 4 - Déclaration image de quai (LIM-64 V1 → LIM-96 V2)
> **Statut Jira (17/07/2026)** : LIM-64 (déclaration image de quai **V1**)
> est **clôturé / annulé** (revue de code validée le 02/04/2026), repris par
> [LIM-96 - Déclaration image de quai V2](https://easywmsfrance.atlassian.net/browse/LIM-96)
> (**En cours de test client / préprod**, revue de code validée le 25/06/2026).
> Le contenu ci-dessous reflète la **V2**. Évolutions majeures V2 vs V1 :
> sélection / réservation de l'image de quai déplacée côté **SmartUI (web)** et
> non plus dans le TRF ; nouvel **écran de déclaration des ordres d'entrée**
> (rattachement de chaque emplacement occupé à un OE → `CstAtt13`) ; nouvel
> **écran de validation du collage des étiquettes** (pose `CstAtt12 = true`,
> qui conditionne la prise en charge par le job AGV LIM-71) ; bouton de
> réimpression dans la confirmation d'étiquetage.
Après déchargement physique, le cariste déclare les palettes via un menu TRF
dédié **Réceptions > Image de quai**.
dédié **Réceptions > Image de quai**. En V2, la sélection de l'image de quai
elle-même se fait côté **SmartUI** (vue d'assignation), le TRF se limitant à
confirmer l'image de quai puis à dérouler la déclaration.
> [CUSTOM] **Sélection image de quai côté SmartUI (V2, Vincent Charvet 17/06)** :
> l'image de quai est réservée depuis SmartUI (routes dock → stage virtuel
> ajoutées au layout, dialogues `CST_DockStageReception_SelectStage` /
> `CST_DockStageReception_ConfirmStage`, vue `VAssistReceptionAssignDock` avec
> conditions sur les stages proposés). Pour les types **Production** et **Pile
> de palette**, on reprend le fonctionnement antérieur : choisir directement
> l'image de quai, sans passer par la recherche d'une réception puis la
> confirmation de l'image associée (Arthur, 17/06).
### Règle de déchargement physique
@@ -149,14 +241,23 @@ Le cariste doit décharger en commençant par l'emplacement le **plus éloigné
du quai** en suivant un ordre précis. Cela permet d'identifier les
emplacements occupés pour les AGV.
### Workflow 7 écrans
### Workflow d'écrans (V2)
Le parcours d'écrans dépend du type de réception :
- **Production** : écrans 1, 3, 4, 5, 7
- **Autres** (fournisseur, intersite, retours) : écrans 1, 2, 3, 4, 5, 6, 7
- **Production / Pile de palette** : type → image de quai → nombre →
sous-emplacement → déclaration OE → validation
- **Autres** (fournisseur, intersite, retours) : type → réception →
confirmation image de quai → nombre → sous-emplacement → big-bag →
déclaration OE → validation → **validation du collage des étiquettes**
#### Écran 1 — Type de réception
> Les deux écrans **Déclaration des ordres d'entrée** et **Validation du
> collage des étiquettes** sont des ajouts V2 (voir ci-dessous). La
> numérotation ci-dessous suit l'ordre logique de la V1 ; le WF réel
> (`CST_Reception_DockStage_UI`) applique l'ordre V2 : image de quai
> d'abord, puis nombre, puis sous-emplacement.
#### Écran 1 - Type de réception
Choix parmi :
@@ -166,13 +267,13 @@ Choix parmi :
Échap : retour menu.
#### Écran 2 Sélection de la réception
#### Écran 2 - Sélection de la réception
Uniquement si type = **Autres**. L'opérateur choisit la réception concernée.
Échap : retour écran 1.
#### Écran 3 Nombre de palettes
#### Écran 3 - Nombre de palettes
Prompt : « Nombre de palettes de la réception »
@@ -183,7 +284,7 @@ Validation :
Message d'erreur explicatif si invalide. Échap : retour écran 2.
#### Écran 4 Choix image de quai (poumon)
#### Écran 4 - Choix image de quai (poumon)
Le workflow liste tous les poumons liés aux quais (réception + expédition)
puis filtre :
@@ -195,12 +296,12 @@ puis filtre :
dernier conteneur
> **Double check** : au moment du choix effectif, les vérifications sont
> refaites entre l'affichage de la liste et la sélection, la réalité a pu
> refaites - entre l'affichage de la liste et la sélection, la réalité a pu
> changer.
Échap : retour écran 3.
#### Écran 5 Sous-emplacement de départ
#### Écran 5 - Sous-emplacement de départ
Prompt : « Sous-emplacement de la première palette de la réception »
@@ -216,7 +317,7 @@ position 5 est occupée.
Échap : retour écran 4.
#### Écran 6 Présence de big-bags
#### Écran 6 - Présence de big-bags
Uniquement si type = **Autres**.
@@ -226,7 +327,32 @@ Boutons OUI / NON. L'information est conservée pour la suite du flux.
Échap : retour écran 4.
#### Écran 7 — Validation et création
#### Écran - Déclaration des ordres d'entrée (V2)
> Ajout V2 (LIM-96). Rattache chaque palette (emplacement occupé) à son
> **ordre d'entrée** → pose le `CstAtt13` (« Ordre d'entrée ») sur le
> support, **dès l'image de quai** (et non plus seulement au PK).
> **Ordre d'exécution** : côté implémentation, les conteneurs sont
> **déjà créés** quand cet écran s'affiche (l'écran scanne des palettes
> existantes pour vérifier leur appartenance à la réception). La création
> décrite à l'écran 7 ci-dessous intervient donc **en amont** de la
> déclaration OE dans le WF réel.
Pour chaque OE de la réception, l'opérateur sélectionne les emplacements
concernés :
- La liste ne propose que les **emplacements portant une palette de la
réception en cours**
- Boucle sur un dialogue avec un **compteur** de conteneurs qui
s'incrémente, et un bouton **« Ordre suivant »** pour passer à l'OE
suivant
- À chaque scan, le WMS vérifie le conteneur sur l'emplacement (qui vient
d'être créé) et qu'il correspond bien à la réception en cours
- Si le conteneur a **déjà été sélectionné**, l'opérateur en est informé ;
une confirmation permet de **corriger** une erreur de saisie antérieure
#### Écran 7 - Validation et création
Récapitulatif affiché :
@@ -242,7 +368,7 @@ Récapitulatif affiché :
sous-emplacements consécutifs à partir de la position de départ
2. **Séquence spéciale** : 18 caractères commençant par `8`
(ex : `800000000000000001`, `800000000000000002`, etc.)
cf. [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14)
- cf. [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14)
3. **Impression étiquettes** : uniquement si type = **Autres**, une étiquette
par palette déclarée (format LIM-65)
@@ -252,10 +378,145 @@ Récapitulatif affiché :
> devenu indisponible entre l'écran 5 et la validation, un message d'erreur
> est affiché. Idem si la réception sélectionnée a été supprimée entre-temps.
> **Séquence** : le préfixe de la séquence 18 caractères a été corrigé de
> `800000` à `800` en revue de code (cf. [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14)).
#### Écran - Validation du collage des étiquettes (V2)
> Ajout V2 (LIM-96), affiché après impression pour les réceptions de type
> **Autres**.
Dialogue : « Confirmez-vous avoir collé toutes les étiquettes ? Oui
entraînera la récupération des palettes par les AGV » avec un bouton
**Oui** et un bouton de **réimpression** (`CST_Reception_DockStage_ConfirmLabels`).
À la confirmation (Oui) :
- Le `CstAtt12` (« Conteneur étiqueté ») de **toutes les palettes
virtuelles** de la réception est mis à `true` - **y compris** les
palettes qui n'ont pas besoin d'étiquette (Production / Pile)
- Ce flag conditionne la prise en charge par le **job AGV
[LIM-71](https://easywmsfrance.atlassian.net/browse/LIM-71)** : les
palettes ne sont **déplacées que si `CstAtt12 = true`** (« on ne bouge
pas les palettes s'il n'y a pas d'étiquettes »)
> ⚠️ **À réconcilier avec LIM-71** : la page
> [Job réception production](../05-agv/job-reception-production.md) indique
> que la condition `CstAtt12` avait été **retirée** du job (palettes
> production / piles sans étiquette). LIM-96 réintroduit un contrôle
> `CstAtt12 = true` comme **gate de prise AGV** en le posant pour *toutes*
> les palettes à cet écran. Confirmer la logique effective côté job LIM-71
> (voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)).
### Attributs de support renseignés
Chaque palette virtuelle créée porte des CustomAttributes exploités en aval,
affichés dans la vue des supports (`ContainerVList`) :
| Attribut | Contenu | Libellé vue support |
|----------|---------|---------------------|
| `CustomAttribute1` | Réception big-bag | Reception big-bag [CST 1] |
| `CustomAttribute4` | Réception ASN | Reception ASN [CST 4] |
| `CustomAttribute8` | Code de la réception | Reception [CST 8] |
| `CustomAttribute13` | Code de l'ordre d'entrée (posé à l'écran déclaration OE, V2) | Ordre d'entrée [CST 13] |
| `CustomAttribute12` | Conteneur étiqueté (posé à `true` à l'écran collage étiquettes, V2) | - |
Le `CstAtt08` (code réception) sert notamment à compter les palettes déjà
déclarées pour une réception. Le `CstAtt13` (ordre d'entrée) est désormais
posé **dès l'image de quai** (écran déclaration OE), et non plus seulement
au PK. La vue `ContainerVList` affiche les CstAtt 1, 4, 8 et 13.
> **Distinction big-bag (confirmée V2)** : le `CstAtt01` du support virtuel
> (« Réception big-bag ») est le flag **au niveau réception** saisi à l'écran
> big-bag de la déclaration image de quai. Le flag big-bag **par support**
> (posé au poste de travail réception) est porté par le `CstAtt02` (cf.
> glossaire). Les deux coexistent : réception vs support.
### Compteur de palettes déjà déclarées
L'écran de données de réception affiche le **nombre de supports déjà déclarés**
pour la réception en cours, à côté du « Nombre de supports prévus ». Ce nombre
est calculé en comptant les conteneurs dont le `CustomAttribute8` = code de la
réception (query `CST_Reception_NumDeclaredContainers`).
### Réimpression d'étiquette
Un bouton de **réimpression** est disponible depuis la vue des supports
(`ContainerVList`). Il n'est visible que pour un **support fictif** (code
commençant par `800`) et **actif** (`IsActive`). Une seule impression regroupe
toutes les étiquettes demandées. Un message d'erreur est levé si aucune
imprimante n'est configurée.
### Mode « Pile de palettes » (palettes bois)
Un mode de réception **pile de palettes** a été ajouté (Justine, 16/04/2026) :
le stock créé utilise un produit dédié de type `PALETTES BOIS`, récupéré via la
query `CST_GetPileProduct`.
### KPI - conteneurs par type de réception (LIM-102)
> Statut : préprod, revue de code validée le 03/06/2026 (Maxime Halgand),
> commit [`5a7d213d48`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/5a7d213d48bcfa4aa78cca511ce172cb226e9883).
Pour tracer le **nombre de conteneurs créés par type de réception**, chaque
conteneur créé par le process de réception custom (LIM-96) génère une
transaction **`CON.CREATE.RECEP`** (catalogue :
[Paramètres projet](../07-admin/parametres-projet.md#transactions-customs)).
| Champ | Contenu |
|-------|---------|
| `TransactionTypeCode` | `CON.CREATE.RECEP` |
| `LocationCode` | Emplacement du conteneur |
| `ContainerCode` | Code conteneur |
| `Document1` | **Type de réception** (dimension du KPI) |
| `IdOrig` | Id du conteneur |
Le `Document1` prend l'une des valeurs suivantes :
- `PALETTE BOIS` (mode pile de palettes) ;
- `PRODUCTION` ;
- pour une réception de type **AUTRES** : le `InboundClassCode` de la réception.
Le WF `CST_Reception_DockStage_UI` récupère le `InboundClassCode` de la
réception, et `CST_Reception_DockStage_CreateContainers_PR` crée la transaction.
### Implémentation technique (LIM-64 V1 → LIM-96 V2)
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_Reception_DockStage_UI` | Workflow | Process principal : ordre V2 (image de quai → nombre → sous-emplacement), déclaration OE, confirmation collage ; gère le mode pile de palettes ; récupère le `InboundClassCode` de la réception pour le KPI (LIM-102) |
| `CST_Reception_DockStage_CreateContainers_PR` | Workflow | Création des conteneurs (code via séquence) ; crée la transaction `CON.CREATE.RECEP` avec `Document1` = type de réception (KPI, LIM-102) |
| `CST_Reception_DockStage_PrintLabels` | Workflow | Impression des étiquettes des conteneurs créés (V2) |
| `CST_DockStageReception_SelectStage` | Dialog | Sélection de l'image de quai (renommé depuis `CST_DockStageReception_GetStage`, V2) |
| `CST_DockStageReception_ConfirmStage` | Dialog | Confirmation de l'image de quai sélectionnée (V2) |
| `CST_DockStageReception_BigBag` | Dialog | Sélection présence big-bag |
| `CST_DockStageReception_Validation` | Dialog | Récapitulatif et validation |
| `CST_Reception_DockStage_ConfirmLabels` | Dialog | Confirmation du collage des étiquettes + bouton réimpression (V2) |
| `CST_DockStageStations_WithoutAssignation` | Query | Poumons disponibles (renommé depuis `CST_DockStageStations_WithoutOutbound`, supprimée ; ajout de conditions sur réceptions / OS / routes assignés). Ne renvoie que les **stages physiques**, pas les stages virtuels d'expédition |
| `CST_Receptions_PendingAndReceiving_WithDockStageAssigned` | Query | Clone de `Receptions_PendingAndReceiving` avec condition sur le quai et le stage associé (V2) |
| `CST_Reception_NumDeclaredContainers` | Query | Nombre de conteneurs d'une réception (via `CstAtt08`) |
| `CST_GetPileProduct` | Query | Produit `PALETTES BOIS` (mode pile de palettes) |
| `StageWF.CST_GreatestOccupiedPosition` | Champ (Record) | Position X la plus haute occupée sur l'image de quai |
| `CST_RPT_DOCKSTAGERECEPTION_VIRTUAL_CONTAINER_LABEL` | Report | Étiquette support virtuel (impression multiple simultanée) |
| `ContainerVList` | View | Bouton réimpression + colonnes CstAtt 1, 4, 8, 13 |
| `VAssistReceptionAssignDock` / `VAssistOutboundOrderAssignDock` / `VAssistRouteAssignDock` | Vue | Conditions sur les stages proposés lors de l'assignation SmartUI (V2) |
| Routes dock → stage virtuel | Layout | Ajoutées pour l'assignation de l'image de quai côté SmartUI (V2) |
Ressources i18n V2 : `CST_Reception_DockStage_ConfirmPrinting`,
`CST_Reception_DockStage_NoInboundOrder`, `CST_View_InboundOrder`
(« Ordre d'entrée [CST 13] »), `CST_InboundOrder_Asociated_1`,
`CST_InboundOrderSelection_End`, `CST_NextOrder`.
Commit V2 : [`1b2570b164`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/1b2570b16429102b93d1f1d860f6fa807ee5ede8)
(migration sélection image de quai vers SmartUI).
## Étiquette support image de quai (LIM-65)
Format **A5 paysage**. Imprimée pour chaque palette de type "Autres"
(pas pour la production).
> **Statut Jira (16/07/2026)** : En cours de test client (pré-production).
> Revue de code validée le 25/06/2026.
Format **A5 paysage**. Imprimée pour chaque palette d'une réception qui n'est
**pas de type PRODUCTION** (impression déclenchée par le workflow de LIM-96).
| Champ | Contenu |
|-------|---------|
@@ -263,7 +524,29 @@ Format **A5 paysage**. Imprimée pour chaque palette de type "Autres"
| RECEPTION | Code de la réception |
| DATE | Date d'impression |
| EMPL. | Sous-emplacement du poumon |
| QR Code | Code du support |
| OE | Code de l'ordre d'entrée (ajouté 06/2026 - en texte sous la réception) |
| QR Code | Code support + code OE au format GS1 |
### QR Code GS1
Le QR Code encode deux données au format GS1 :
- AI `00` → code du support (SSCC)
- AI `91` → code de l'ordre d'entrée
Exemple : `#00800000000000000001#91804565206`
Ce label GS1 est réutilisé dans le **flux retour fournisseur** : le scan permet
de récupérer à la fois le support et l'OE.
### Implémentation technique (LIM-65)
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_RPT_DOCKSTAGERECEPTION_VIRTUAL_CONTAINER_LABEL` | Report | Étiquette support virtuel - ajout du code OE + QR Code (support + OE) |
| `ParsedContainerLabelWF` | Record | Ajout du champ code d'ordre d'entrée |
| `ParseContainerLabel` | Workflow | Parse de l'identifiant GS1 `#91` → code OE |
| `CST_Reception_Return_ATH214_CheckData_UI` | Workflow | Parse container sur le dialog du code OE (scan QR) - flux retour |
## Implémentation technique (AD customs)
@@ -283,9 +566,16 @@ Format **A5 paysage**. Imprimée pour chaque palette de type "Autres"
| Vue | Modification |
|-----|-------------|
| `ReceptionVList` | ViewDetailPanel `CST_Docks_Workload` (Column Span = 2) occupation quais |
| `VAssistCreateReceptionOE` | Exception steps 2 et 3 blocage classes OE différentes |
| `VAssistReceptionAssignDock` | Step 1 : entité `CST_DockStationsWorkloadForView` remplace `Station` |
| `ReceptionVList` | ViewDetailPanel `CST_Docks_Workload` (Column Span = 2) - occupation quais |
| `VAssistCreateReceptionOE` | Exception steps 2 et 3 - blocage classes OE différentes |
| `VAssistCreateReceptionOEFromReceptions` | Mêmes conditions sur les classes d'OE - blocage à la création de réception depuis la vue des ordres d'entrées (LIM-97) |
| `VAssistReceptionAssignDock` | Step 1 : entité `CST_DockStationsWorkloadForView` remplace `Station` ; assignation du quai réel + du faux stage (image de quai en unité) |
### Élément AD - faux stages (LIM-97)
| Élément AD | Type | Rôle |
|-----------|------|------|
| Faux stages `A` à `K` | Station fictive | Une par image de quai ; sélectionnable comme unité à l'assignation SmartUI (voir [Mécanisme faux stage / vrai stage](#mécanisme-faux-stage--vrai-stage-v2)). Nouveau, à formaliser dans l'AD |
### Ressources i18n
@@ -293,24 +583,30 @@ Format **A5 paysage**. Imprimée pour chaque palette de type "Autres"
|------|----|----|
| `CST_Reception_MultiClassError` | Impossible de créer une réception avec des ordres d'entrée ayant des classes de préavis de réception différentes | Can't create reception with inbound orders with different inbound order class |
| `CST_Prop_Reception_Document` | Camion | Truck |
| `CST_Prop_Station_Workload` | Assignations / Camions | Assignations / Trucks |
| `CST_ViewField_VAssistantCreateReceptionOE_Truck` | #KEY#[CST_Prop_Reception_Document, PARAMS[]] | #KEY#[CST_Prop_Reception_Document, PARAMS[]] |
| `CST_Prop_Station_Workload` | Réceptions / Camions | Receptions / Trucks |
| `CST_Reception_DockWorkload_Panel_Title` | Occupation des quais | Docks workload |
> **Note** : toutes les ressources custom sont préfixées `CST_` (convention
> Mecalux France validée lors de la revue de code).
> **Divergence de libellé (LIM-97 §8.4)** : `CST_Prop_Station_Workload` a été
> commentée « Assignations / Camions » (Vincent, 05/03) puis « Réceptions /
> Camions » en revue de code (Nicolas, 06/03) - valeur retenue par défaut,
> alignée sur le tableau d'occupation ci-dessus. À confirmer.
### Revue de code
- **05/03/2026** Vincent Charvet : implémentation initiale
- **05/03/2026** - Vincent Charvet : implémentation initiale
([`1d2acc3e6e`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/1d2acc3e6efef09df3e2a760574e35afd30ca166))
- **06/03/2026** Nicolas Chabanis : revue non valide (préfixes ressources,
- **06/03/2026** - Nicolas Chabanis : revue non valide (préfixes ressources,
commentaire `//Custom end` manquant, Column Span, titre colonne)
- **09/03/2026** Nicolas Chabanis : **revue validée**
- **09/03/2026** - Nicolas Chabanis : **revue validée**
## Points d'attention
- La plaque du camion n'est **pas obligatoire** à la création de la réception
elle peut être renseignée après coup (confirmé 09/03/2026)
- elle peut être renseignée après coup (confirmé 09/03/2026)
- Le déchargement doit respecter l'ordre : emplacement le plus éloigné
d'abord, sinon les AGV ne peuvent pas identifier correctement les positions
occupées
@@ -320,29 +616,60 @@ Format **A5 paysage**. Imprimée pour chaque palette de type "Autres"
- Le double-check de disponibilité du poumon au moment du choix est
**critique** pour éviter les collisions entre opérateurs simultanés
- Les séquences de supports virtuels commencent par `8` et font 18 caractères
ne pas confondre avec les séquences SSCC standard
- ne pas confondre avec les séquences SSCC standard
- **V2 (LIM-97)** : la tâche générée vise le **faux stage**, pas un emplacement
réel du poumon ; un custom (fin d'ordre au PS) doit rediriger la destination
vers le bon emplacement du vrai stage, et la **route vers le quai
d'expédition** doit être préservée pour le chargement camion
- **V2 (LIM-97)** : une **27e palette** ne tient pas sur l'image de quai
(capacité 26) ni dans le camion ; sans traitement, le process plante
- **V2 (LIM-97)** : la **dépose AGV** sur des positions serrées de l'image de
quai peut se bloquer si l'ordre de dépose n'est pas respecté (un AGV en
position 26 avant un AGV en position 23)
## Questions ouvertes
- [ ] Gestion TRF si AGV pas prêts au démarrage lié aussi à la déclaration
- Gestion TRF si AGV pas prêts au démarrage - lié aussi à la déclaration
image de quai (@Théo)
- [ ] Position étiquette image de quai (devant/côté palette) à valider
- Position étiquette image de quai (devant/côté palette) - à valider
avec le client (@Justine)
- [ ] Faut-il rendre la saisie du camion (plaque) obligatoire pour garantir
- Faut-il rendre la saisie du camion (plaque) obligatoire pour garantir
la cohérence de l'affichage chauffeur ? (@Justine)
- Routage de la tâche faux stage → emplacement du vrai stage → quai
d'expédition (LIM-97 §8.1) : proposition = custom sur la fin d'ordre au PS
qui redirige la destination, logique différenciée par `locationType` (buffer
vs DockStage). Risque de rollback en boucle (mouvement généré à la fin
d'ordre au PS) ; cadencement AGV à reconfirmer avec Still (@Vincent / @Still)
- Débordement au-delà de 26 palettes sur l'image de quai (27e palette,
LIM-97 §8.2) : à arbitrer (ne pas générer la tâche tant qu'aucune place ne
se libère, ou maintenir la palette en zone tampon ASRS) (@Justine)
- Ordonnancement de la dépose AGV sur l'image de quai (positions serrées,
LIM-97 §8.3) : dépose sans position précise (l'AGV choisit l'emplacement
libre le plus proche puis le remonte au WMS) ou respect strict de l'ordre
des STOP (LIM-88) ; à valider en réunion technique dédiée (@Théo / @Still)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-05-06 | Arthur | Création initiale depuis LIM-62, LIM-63, LIM-64, LIM-65 |
| 2026-07-16 | Arthur | Mise à jour statut LIM-62 : V1 clôturée/annulée, validée fonctionnellement (Justine 27/05), suite en LIM-97 (V2) |
| 2026-07-16 | Arthur | LIM-63 : ajout implémentation technique (station `CST_Workstation_Docks`, workflow, dialog, champ `CST_LicencePlates`) + statut pré-production |
| 2026-07-16 | Arthur | LIM-64 : statut V1 annulée → LIM-96 (V2) ; ajout attributs support (CstAtt01/04/08), compteur palettes déclarées, réimpression, mode pile de palettes, éléments AD |
| 2026-07-16 | Arthur | LIM-65 : ajout champ OE sur l'étiquette + QR Code GS1 (AI 00 support / AI 91 OE) réutilisé flux retour fournisseur, éléments AD parsing ; statut pré-production |
| 2026-07-17 | Arthur | Intégration LIM-96 V2 (préprod, revue de code validée 25/06) : étape 4 réécrite (statut V1→V2), sélection image de quai côté SmartUI (dialogues `CST_DockStageReception_SelectStage`/`ConfirmStage`, `VAssistReceptionAssignDock`, routes dock→stage virtuel), écran **Déclaration des OE** (CstAtt13 posé dès l'image de quai), écran **Validation collage étiquettes** (CstAtt12=true, gate job LIM-71 + caveat réconciliation), workflow d'écrans V2, attributs support (+CstAtt12/CstAtt13), table AD V2 (query renommée `CST_DockStageStations_WithoutAssignation`, clone `CST_Receptions_PendingAndReceiving_WithDockStageAssigned`, WF `CST_Reception_DockStage_PrintLabels`, ressources, commit `1b2570b164`), distinction big-bag CstAtt01/CstAtt02 confirmée ; front matter sources/last_updated |
| 2026-07-20 | Arthur | Intégration LIM-97 (Gestion camions V2, préprod, validé Vincent 02/07) : étape 2 réécrite (assignation quai + image de quai, **mécanisme faux stage A-K / vrai stage**, effet de bord routage) ; ajout vue `VAssistCreateReceptionOEFromReceptions` + ressource `CST_ViewField_VAssistantCreateReceptionOE_Truck` + Élément AD faux stages A-K ; libellé `CST_Prop_Station_Workload` corrigé (Réceptions / Camions + caveat §8.4) ; 3 points d'attention V2 (débordement 27e palette, ordonnancement dépose AGV, routage à préserver) ; 3 questions ouvertes (routage §8.1, débordement §8.2, ordonnancement §8.3) ; front matter sources/last_updated |
| 2026-07-20 | Arthur | Intégration LIM-102 (KPI conteneurs par type de réception, préprod, revue validée 03/06) : nouvelle sous-section KPI (transaction `CON.CREATE.RECEP`, `Document1` = type de réception : PALETTE BOIS / PRODUCTION / InboundClassCode) ; enrichissement des WF `CST_Reception_DockStage_UI` (récupération InboundClassCode) et `CST_Reception_DockStage_CreateContainers_PR` (création transaction) ; jira_refs +LIM-102 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-62](https://easywmsfrance.atlassian.net/browse/LIM-62) | Ticket Jira | 18/02/2026 |
| [LIM-63](https://easywmsfrance.atlassian.net/browse/LIM-63) | Ticket Jira | 2026 |
| [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) | Ticket Jira | 2026 |
| [LIM-65](https://easywmsfrance.atlassian.net/browse/LIM-65) | Ticket Jira | 2026 |
| [LIM-62](https://easywmsfrance.atlassian.net/browse/LIM-62) | Ticket Jira (V1 - Annulé, suite LIM-97) | 18/02/2026 |
| [LIM-97](https://easywmsfrance.atlassian.net/browse/LIM-97) | Ticket Jira (Gestion camions V2 - préprod, validé Vincent 02/07/2026, faux stages A-K, commit `1d2acc3e6e`) | 2026 |
| [LIM-63](https://easywmsfrance.atlassian.net/browse/LIM-63) | Ticket Jira (affichage chauffeurs - pré-production) | 2026 |
| [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) | Ticket Jira (V1 - Annulé, suite LIM-96) | 18/02/2026 |
| [LIM-96](https://easywmsfrance.atlassian.net/browse/LIM-96) | Ticket Jira (déclaration image de quai V2 - préprod, revue de code validée 25/06, commit `1b2570b164`) | 2026-06 → 07 |
| [LIM-65](https://easywmsfrance.atlassian.net/browse/LIM-65) | Ticket Jira (étiquette support - pré-production) | 2026 |
| [LIM-102](https://easywmsfrance.atlassian.net/browse/LIM-102) | Ticket Jira (KPI conteneurs par type de réception - préprod, revue validée 03/06, commit `5a7d213d48`) | 2026 |
| [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14) | Ticket Jira (séquences supports) | 2026 |
@@ -1,18 +1,18 @@
---
title: "Réception fournisseur Production et extérieures/intersites"
title: "Réception fournisseur - Production et extérieures/intersites"
tags: [inbound, réception, production, ASN, ROR, PIE, clôture, REF, ROF]
status: draft
standard_ref: concepts/reception.md
jira_refs: [LIM-67, LIM-73]
jira_refs: [LIM-67, LIM-68, LIM-71, LIM-73, LIM-93]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", LIM-67_Postes_Travail_Reception.md, "LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md"]
last_updated: 2026-05-12
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", LIM-67_Postes_Travail_Reception.md, "Jira LIM-67 (relecture commentaires 2026-07-16)", "LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md", "Jira LIM-73 (revue de code validée 2026-06-02, relecture 2026-07-17)"]
last_updated: 2026-07-17
author: Arthur
---
# Réception fournisseur Production et extérieures/intersites
# Réception fournisseur - Production et extérieures/intersites
> **Résumé** : deux flux de réception distincts chez Limagrain production
> **Résumé** : deux flux de réception distincts chez Limagrain - production
> (directe ASRS via ASN) et extérieures/intersites (passage poste de travail
> via ROR). Le déchargement camion est une étape commune.
@@ -29,7 +29,7 @@ Limagrain gère 3 types de réception. Cette page couvre les deux premiers :
Le troisième type (retours client) est couvert dans
[Réception retour](reception-retour.md).
## Étape commune Arrivée et déclaration du camion
## Étape commune - Arrivée et déclaration du camion
> **Page dédiée** : le flux complet d'arrivée camion, d'assignation de quai,
> d'affichage chauffeur et de déclaration image de quai via TRF est documenté
@@ -42,7 +42,7 @@ Le troisième type (retours client) est couvert dans
« Ordre d'entrée > Réceptions » (SmartUI)
2. Saisie de la **plaque d'immatriculation** et de la **destination** :
« PARKING » par défaut (quai fictif d'attente) ou quai réel si disponible
3. Sélection des OE (ordres d'entrée) concernés chaque OE est flagué
3. Sélection des OE (ordres d'entrée) concernés - chaque OE est flagué
via un CstAtt
4. Agent consulte la disponibilité des quais via un graphique dans la vue
des réceptions et assigne un quai réel
@@ -50,7 +50,7 @@ Le troisième type (retours client) est couvert dans
**Contraintes d'assignation image de quai :**
- Quai et image de quai **réservés** dès la sélection réutilisation possible
- Quai et image de quai **réservés** dès la sélection - réutilisation possible
si place restante (gestion manuelle)
- Blocage si flux différent (ex : expédition en cours sur ce quai)
- Blocage si l'image de quai a des supports associés à un OS (expédition)
@@ -78,7 +78,7 @@ Menu TRF custom : Réception > Images de quai > Déclaration
3. Saisie du nombre de palettes + emplacement de départ
4. Association à la réception (auto pour Production via CstAtt « ASN »,
sélection manuelle de l'OE pour les autres)
5. Prompt big-bag (Oui/Non) sauté pour Production
5. Prompt big-bag (Oui/Non) - sauté pour Production
6. Écran de validation
7. Création des supports dans le WMS
@@ -105,7 +105,7 @@ Menu TRF custom : Réception > Images de quai > Déclaration
---
## Flux 1 Réception depuis la production
## Flux 1 - Réception depuis la production
### Flux physique
@@ -164,7 +164,7 @@ Batch possible : jusqu'à **500 conteneurs par message ASN**.
- Le tracking s'effectue avec le support virtuel sur le premier convoyeur
**Destination** : entrée production (convoyeur vers ASRS). L'AGV dépose
sur un **buffer d'entrée** (type POUMON MINILOAD AD) jamais directement
sur un **buffer d'entrée** (type POUMON MINILOAD AD) - jamais directement
sur le PIE.
**Suppression du support virtuel :**
@@ -178,7 +178,7 @@ sur le PIE.
En cas de blocage long terme sur l'entrée production :
- **Solution standard** : système de routes avec distances route
- **Solution standard** : système de routes avec distances - route
principale distance 1, routes secondaires distance 2
- On ferme le PIE de production → le WMS redirige automatiquement vers
les autres entrées disponibles
@@ -205,11 +205,11 @@ détail des contrôles PIE et la répartition du poids.
**PIE OK :**
- [CUSTOM] Aucun message ASO généré
- [CUSTOM] Vérification poids tolérance par type article, verrou
- [CUSTOM] Vérification poids - tolérance par type article, verrou
« Réception » sur le **support** si écart > seuil
- Mise à jour CstAtt01 de la ligne de stock (poids unitaire calculé)
- [CUSTOM] Si type article ZSIZ → message ajustement stock vers SAP
via WSC (poids réel HU) voir
via WSC (poids réel HU) - voir
[Contrôle qualité réception](controle-qualite-reception.md) pour
la gestion du timing avec le REF
- Stratégie de rangement appliquée
@@ -217,7 +217,7 @@ détail des contrôles PIE et la répartition du poids.
**PIE NOK :**
- Rejet standard plus besoin d'étiquette spécifique
- Rejet standard - plus besoin d'étiquette spécifique
- Palette dirigée automatiquement vers un **poumon au sol** (zone de
rejet)
- **Notification SmartUI** envoyée aux opérateurs
@@ -230,7 +230,7 @@ détail des contrôles PIE et la répartition du poids.
---
## Flux 2 Réceptions extérieures / transferts intersites
## Flux 2 - Réceptions extérieures / transferts intersites
### Flux physique (extérieur)
@@ -278,31 +278,51 @@ Message **ROR** de SAP → EasyWMS :
- Tolérance quantité : **0 %** pour intersites (palettes déjà
identifiées), paramétrable **par ligne ROR** pour extérieures
(uniquement en dépassement %)
- `IsSingleReceipt = true` le WMS ne gère pas de reliquats
- `IsSingleReceipt = true` - le WMS ne gère pas de reliquats
automatiques. Si réception incomplète, SAP crée une nouvelle
livraison
- `InboundType = 0` (Standard) pour les deux sous-types
| Élément SAP | Correspondance EasyWMS | Remarque |
|-------------|------------------------|----------|
| Commande d'achat | | Peut être cadencée en plusieurs livraisons |
| Commande d'achat | - | Peut être cadencée en plusieurs livraisons |
| Livraison | 1 ROR | Un ROR = une livraison |
| Camion | N livraisons | Un camion peut contenir plusieurs livraisons |
> Les transferts intersites : le site émetteur est considéré comme un
> fournisseur dans EasyWMS.
### 2) [CUSTOM] Gestion des SSCC
### 2) [CUSTOM] Gestion des SSCC et codes conteneurs du ROR
Deux cas selon que le ROR fournit ou non des codes conteneurs
(`LineList>ContainerCode`) :
**a) Le ROR fournit des codes conteneurs attendus** (livraison Limagrain
avec supports identifiés)
- Avant la création du support, un écran analyse si l'ordre d'entrée
associé à la palette scannée contient des **numéros de supports
attendus** dans ses lignes
- Si oui : l'opérateur doit **scanner le code support "LIMAGRAIN"**
(un bouton **Liste** affiche les codes attendus au cas où l'étiquette
serait illisible)
- Au scan, vérification que le code fait partie de la liste des codes
attendus, sinon message d'erreur
- Le code conteneur retenu est celui du ROR ; le code de l'ordre
d'entrée du conteneur est conservé dans le **CstAtt13** du support
- Réf. commentaires LIM-67 des 19-23/06/2026 (livré préprod)
**b) Le ROR ne fournit aucun code conteneur** (fournisseur/intersite
classique)
- Les numéros SSCC **ne sont pas envoyés** dans le ROR
(`LineList>ContainerCode`)
- Le SSCC est récupéré au moment du **scan RFID** en réception
- Si SSCC présent sur la palette → conservation lors de la réédition
RFID
- Si SSCC absent → création d'un nouveau SSCC et ré-étiquetage
- Si SSCC absent → **création d'un nouveau SSCC** et ré-étiquetage
> Raison : éviter la complexification du process si l'étiquette est
> endommagée.
> Règle : un SSCC n'est généré que si le ROR ne fournit **aucun** code
> support dans ses lignes. Raison : éviter la complexification du process
> si l'étiquette est endommagée.
### 3) [CUSTOM] Déplacement vers poste de travail
@@ -325,36 +345,66 @@ que possible. Si multi-référence à l'arrivée :
(non géré par le WMS)
- Tri de marchandise pour constituer des conteneurs mono-ref
> Le process de constitution mono-référence est **standard** pas de
> Le process de constitution mono-référence est **standard** - pas de
> développement spécifique.
#### [CUSTOM] Tables de préparation et poste de picking adjacent
Le développement gère **6 tables de préparation** pour les réceptions
(commentaire LIM-67 du 30/04/2026). La station de réception est couplée
à un **poste de picking adjacent** (voir paramètre `PK_ADJACENT`) :
- avant l'ouverture d'un poste de picking, vérification que le poste
**adjacent** n'utilise pas déjà les tables de préparation (sinon
blocage avec message « Impossible d'ouvrir le poste de travail.
Utilisation des tables de préparation par le poste adjacent ») ;
- les palettes **liées** au poste adjacent restent utilisables sans
forcer leur déplacement vers le poste en cours d'utilisation ;
- le conteneur créé porte le code du poste de picking lié dans son
`CstAtt06`.
### 5) [CUSTOM] Traitement au poste de travail
Ref. [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) — en
attente CDP.
Ref. [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) - revue
de code validée le 29/06/2026, **livré en préprod** le 09/07/2026
(en cours de test client).
Les opérateurs utilisent le mode **Tâches automatiques** sur PC. Le
code de réception est récupéré automatiquement via le `CstAtt08` du
conteneur présent sur le poste.
**Affichage fournisseur** : sur **tous les écrans** du process,
afficher `"Fournisseur: CODE - NOM"`.
afficher `"Fournisseur: CODE - NOM"`. Le nom est porté par le champ
`CST_SupplierName` du record `ReceptionWF` (pas par le `SupplierCode`,
pour éviter les bugs d'usage ultérieur).
#### a) Confirmation de création support (Big Bag)
#### a) Scan du conteneur virtuel et création du support réel (Big Bag)
Si le conteneur scanné est un **conteneur virtuel** de réception, un
écran de confirmation crée le nouveau support « réel ». Sur cet écran :
Le process démarre par le **scan du conteneur virtuel** posé sur le
poste (créé à la déclaration image de quai). Ce scan :
- récupère la **réception associée** via le `CstAtt08` du conteneur
virtuel ;
- **génère automatiquement** un nouveau code de conteneur (généré dans
EasyWMS, plus saisi par l'opérateur) ;
- après le paramétrage Big Bag et filmage, **supprime le conteneur
virtuel** et crée le nouveau conteneur réel **sur le même
emplacement** ;
- reporte le `CstAtt08` sur le nouveau conteneur pour **conserver la
réception** si l'opérateur quitte avant la fin.
Sur l'écran de confirmation de création du support réel :
- Ligne `"BIG BAG : NON"` (état initial)
- Bouton **"BIG BAG ON"** → toggle vers `"BIG BAG : OUI"` / **"BIG BAG
OFF"**
- Valeur `true`/`false` stockée dans **CstAtt02** du support
- Impression automatique d'une **étiquette RFID** dès confirmation
- Impression automatique d'une **étiquette RFID** dès confirmation -
voir [Étiquette RFID](etiquette-rfid.md) (LIM-68)
#### b) Menu principal du poste
Écran central avec 5 actions les informations du support actuel sont
Écran central avec 6 actions - les informations du support actuel sont
toujours affichées à droite. Après chaque action, retour à ce menu.
| Action | Description |
@@ -362,6 +412,7 @@ toujours affichées à droite. Après chaque action, retour à ce menu.
| **Ajouter stock** | Sélection article, lot, quantité (écrans standard). Afficher quantité attendue + UdM sans pré-remplir le prompt. Statut de stock affiché mais **non modifiable** (boutons masqués). Écrans date fin de statut et commentaire **skippés**. Pour l'anoxie : set **CstAtt03** du support à `true` |
| **Nouveau support** | Scan emplacement, confirmation de création (retour à l'étape a). Le nouveau conteneur devient le support actif |
| **Changer de support** | Scan du code support à sélectionner comme support actif |
| **Retirer support** | Suppression d'un conteneur du poste. Si le support contient du stock déclaré, un message d'avertissement demande confirmation avant suppression (ajouté au commentaire LIM-67 du 30/04/2026) |
| **Imprimer étiquette** | Réimpression de l'étiquette RFID (voir [Étiquette RFID](etiquette-rfid.md)) |
| **Terminer** | Vérification fermeture + filmage + évacuation (voir ci-dessous) |
@@ -393,8 +444,20 @@ transport AGV du poste de travail vers la table d'entrée.
| CstAtt02 | Flag Big Bag (`true`/`false`) | Écran confirmation support |
| CstAtt03 | Flag anoxie (`true`) | Action « Ajouter stock » |
| CstAtt05 | Programme de filmage (`0`, `A`, `B`…) | Action « Terminer » |
| CstAtt06 | Code du poste de picking lié au conteneur (LIM-67, 30/04/2026) - conflit levé : LIM-71 a abandonné son marquage CstAtt06 ; usage confirmé par LIM-70 et le job de régénération LIM-71 | Création du conteneur au poste |
| CstAtt08 | Code de réception | Déclaration image de quai |
| CstAtt10 | Flag support traité (`true`) | Fin de traitement |
| CstAtt13 | Code de l'ordre d'entrée du conteneur (quand le ROR fournit un code support attendu) | Sélection du code conteneur du ROR |
#### Validation des attributs logistiques (optimisation → LIM-93)
Demande d'optimisation portée par
[LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93) : les
attributs logistiques sont **validés automatiquement** s'ils sont bien
renseignés dans le ROR ; s'il en manque un, il est demandé à
l'opérateur. Si le ROR possède plusieurs lignes avec le **même lot SAP**
mais des attributs logistiques différents, ils sont aussi demandés
(EasyWMS ne peut pas deviner la ligne concernée à la réception).
### 6) Déplacement AGV → table d'entrée et filmage
@@ -412,7 +475,7 @@ mêmes contrôles PIE). Voir
**Différence en cas de rejet PIE** : la palette est dirigée vers un
**poumon au sol** avec **notification SmartUI** (ancienne approche de
renvoi au poste de travail d'origine abandonnée risque de blocage
renvoi au poste de travail d'origine abandonnée - risque de blocage
AGV/table/poste). CstAtt du support flagué avec le poste de travail
d'origine.
@@ -420,7 +483,7 @@ d'origine.
## Clôture des réceptions (extérieures/intersites)
Ref. [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) LOT
Ref. [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) - LOT
1.3.
La clôture concerne uniquement les flux passant par un poste de travail
@@ -434,11 +497,13 @@ livraison (donc nouvel OE).
### Paramétrage
- `IsSingleReceipt = true` une seule réception par OE, pas de
- `IsSingleReceipt = true` - une seule réception par OE, pas de
reliquats WMS
- `AutoCloseReception = true` le WMS clôture automatiquement la
réception quand les conditions custom sont remplies (§ Déclenchement)
- `AutoCloseInboundOrder = true` — à la clôture de la réception, chaque
- `AutoCloseReception = true` - le WMS clôture automatiquement la
réception quand les conditions custom sont remplies (§ Déclenchement).
Valeur confirmée `true` ; le tableau [LIM-14](../07-admin/parametres-projet.md)
affiche encore `false` (à corriger côté ticket)
- `AutoCloseInboundOrder = true` - à la clôture de la réception, chaque
OE complété à 100 % ou dans la tolérance est auto-clôturé (ROF
envoyé) et auto-archivé (absent de la vue). Les OE en écart hors
tolérance restent ouverts
@@ -452,8 +517,8 @@ livraison (donc nouvel OE).
### Déclenchement de l'auto-close (LIM-73 §1.1)
L'auto-close de la réception se déclenche et le bouton « Fermer
réception » n'est visible que si les deux conditions suivantes sont
L'auto-close de la réception se déclenche - et le bouton « Fermer
réception » n'est visible - que si les deux conditions suivantes sont
**simultanément** remplies :
1. **Aucune palette fictive** ayant `CstAtt08 = <code de la réception>`
@@ -473,12 +538,12 @@ puis fermer l'ordre d'entrée ».
Le workflow standard de clôture est modifié pour deux comportements :
**Partie A Condition retours** : si la réception est de type retour
**Partie A - Condition retours** : si la réception est de type retour
client, la clôture et le REF sont différés jusqu'au rangement ASRS
complet. Voir [Réception retour Clôture](reception-retour.md) pour le
complet. Voir [Réception retour - Clôture](reception-retour.md) pour le
détail (CstAtt11, CstAtt01 réception, statut « Clôture en cours »).
**Partie B Pose CstAtt01 OE hors tolérance** : à la clôture effective,
**Partie B - Pose CstAtt01 OE hors tolérance** : à la clôture effective,
pour chaque **ligne article hors tolérance** (en plus ou en moins) :
1. Rechercher le **premier OE** (FirstOrDefault) parmi les OE associés
@@ -486,9 +551,16 @@ pour chaque **ligne article hors tolérance** (en plus ou en moins) :
2. Poser `CstAtt01 = true` sur cet OE
> En pratique un combo code article/lot n'est jamais partagé entre
> plusieurs OE d'une même réception le FirstOrDefault est
> plusieurs OE d'une même réception - le FirstOrDefault est
> déterministe.
**Contrôle de tolérance (custom)** : dans le standard la tolérance ne
sert que pour l'excès ; ici elle est vérifiée **dans les deux sens**
(quantité reçue inférieure ou supérieure à l'attendu). Le pourcentage
`ReceiveMorePercent` provient de la **valeur de la ligne du ROR**, et à
défaut de la **valeur du profil de réception de l'article**
(WF `Reception_CheckIfAllReceptionLinesAreCompleted_PR`).
Les OE flaggés ne se clôturent pas automatiquement (ROF bloqué) et
s'affichent en rouge dans la vue (voir § Clôture des OE ci-dessous).
@@ -499,18 +571,19 @@ Un seul REF est envoyé par réception (pas de REF progressif, car
- Numéros de conteneurs réceptionnés
- Lignes de stocks associées
- [CUSTOM] **Zone de stockage** (récupérée depuis le code emplacement
du support) :
- [CUSTOM] **Zone de stockage** dans le champ **`LneStockCstAtt01`**
(récupérée depuis le code emplacement du support, GNA
`REF01Observer.boo`) :
- Fournisseur / intersite : si un support se trouve hors de l'ASRS
au moment du REF → valeur **"NON RANGEE"**
- Retour client : ce cas ne se produit pas (REF conditionné au
rangement complet voir [Réception retour](reception-retour.md))
rangement complet - voir [Réception retour](reception-retour.md))
- [CUSTOM] Attributs stock remontés : code produit SAP, code
propriétaire réel, description courte, pays de destination, lot SAP
**LOC** : envoyé sur delta de 5 min (palette créée/déplacée/supprimée).
Le LOC ne prend pas en compte les palettes liées à une réception non
fermée (standard dans le WSC forké développement dédié
fermée (standard dans le WSC forké - développement dédié
[LIM-76](https://easywmsfrance.atlassian.net/browse/LIM-76)).
### Clôture des ordres d'entrée (OE) (LIM-73 §2)
@@ -519,7 +592,7 @@ fermée (standard dans le WSC forké — développement dédié
|--------------|---------|-----|------------------|
| Reçu = attendu | Auto-close | Envoi auto | Auto-archivé → absent |
| Écart dans la tolérance | Auto-close (custom) | Envoi auto | Auto-archivé → absent |
| Écart hors tolérance (`CstAtt01 OE = true`) | Manuelle par non-opérateur | Envoyé manuellement | **Rouge** bouton restreint |
| Écart hors tolérance (`CstAtt01 OE = true`) | Manuelle par non-opérateur | Envoyé manuellement | **Rouge** - bouton restreint |
**Visibilité du bouton « Clôturer l'OE »** :
@@ -532,9 +605,35 @@ fermée (standard dans le WSC forké — développement dédié
Le manager régularise dans SAP (envoi éventuel d'un nouveau ROR) puis
clôture manuellement l'OE → ROF envoyé.
### [CUSTOM] Éléments techniques (revue de code validée 2026-06-02)
Implémentation définitive issue de la revue de code LIM-73. Éléments
clés au-delà de `Reception_Close_PR_V2` (§ ci-dessus) :
| Élément | Type | Rôle |
|---------|------|------|
| `InboundOrder_AutoCloseInboundOrder_PR_V2` | WF | Ne clôture pas l'OE si `CstAtt01 OE = true` (blocage ROF hors tolérance). Résout la question « modifier le WF existant vs en créer un » : c'est le V2 existant qui est adapté |
| `Container_MovedEventHandler_Warehouse_PR` | WF | Pose `CstAtt11 = true` sur le conteneur quand la tâche de rangement se termine en APS (retour) |
| `ReceiptLine_AutoClose_PR_V2` | WF | Auto-close des **lignes de réception désactivé** (causait des problèmes avec le process de réception au poste ; la clôture est gérée par le process ci-dessus) |
| `Reception_CheckReceiveMore_UI` | WF | Ne bloque plus l'excédent au poste : le client peut recevoir autant qu'il veut (l'écart est traité à la clôture via `CstAtt01 OE`) |
| `Reception_CheckIfAllReceptionLinesAreCompleted_PR` | WF | Vérifie la tolérance sur chaque ligne dans les deux sens ; source `ReceiveMorePercent` = ligne ROR ou profil article |
| `InboundOrder_UpdateStatus_By_Reception_ChangedStatus_PR_V2` | WF | Un OE partiellement reçu **et** `CstAtt01 = true` est considéré comme clôturé |
| `WorkStation_Reception_Supplier_UI` | WF/UI | Activité « Close Reception » après avoir informé l'opérateur que le manager devra clôturer l'OE manuellement |
| `CST_View_RecOrder_ToleranceError` | Ressource | Message d'avertissement hors tolérance affiché à la fermeture (FR/EN) |
| `REF01Observer.boo` | GNA | Zone de stockage du support dans `LneStockCstAtt01` (« NON RANGEE » si hors ASRS) |
> **Revue de code (points corrigés)** : test de nullité de
> `CST_InboundOrder` après la query `CST_GetInboundOrder`
> (`InboundOrder_AutoCloseInboundOrder_PR_V2`) et test de nullité après
> les `FirstOrDefault` dans `REF01Observer.boo`.
### Réception excédentaire (> % autorisé)
Le WMS bloque. Solutions possibles :
> ⚠️ Depuis LIM-73, `Reception_CheckReceiveMore_UI` **ne bloque plus**
> l'opérateur sur un excédent : le client peut réceptionner autant qu'il
> veut. L'excès est traité à la clôture (flag `CstAtt01 OE`, affichage
> rouge, régularisation SAP). Les solutions ci-dessous restent valables
> côté SAP pour régulariser l'attendu.
| Solution | Description |
|----------|-------------|
@@ -560,7 +659,7 @@ notification SmartUI (ancienne approche de renvoi au PK abandonnée).
⚠️ Le process de constitution mono-référence est **standard** (pas de
développement spécifique).
⚠️ Filmage : transmis à Galileo via custom data (CstAtt05) uniquement
⚠️ Filmage : transmis à Galileo via custom data (CstAtt05) - uniquement
si PIE OK. Paramètre SmartUI `FILMAGES` définit la liste des programmes.
⚠️ `AutoCloseReception = true` mais la clôture effective dépend des
@@ -572,27 +671,35 @@ poids ITM pour tous les calculs suivants.
## Questions ouvertes
- [x] Programme de filmage exact documenté, 8 programmes A→H,
- [x] ~~Programme de filmage exact~~ - documenté, 8 programmes A→H,
paramètre SmartUI `FILMAGES` (LIM-67)
- [ ] Gestion TRF si AGV pas prêts au démarrage (@Théo)
- [ ] Utilisation du ROC (confirmation de réception) point interne
- Gestion TRF si AGV pas prêts au démarrage (@Théo)
- Utilisation du ROC (confirmation de réception) - point interne
Limagrain (@Justine)
- [ ] Création fournisseurs/clients à la volée dans EasyWMS
- Création fournisseurs/clients à la volée dans EasyWMS -
faisabilité technique (@Nicolas)
- [ ] Vérifier fonctionnement ExceedPercentageAllowed vs profil de
- Vérifier fonctionnement ExceedPercentageAllowed vs profil de
réception (@Nicolas)
- [ ] Choix fournisseur imprimantes RFID exiger compatibilité
- Choix fournisseur imprimantes RFID - exiger compatibilité
ZPL (@Théo)
- [ ] Position étiquette image de quai (devant/côté) à valider
- Position étiquette image de quai (devant/côté) - à valider
avec le client (@Justine)
- [ ] Poids variable vérifier si le standard gère la capture de
- Poids variable - vérifier si le standard gère la capture de
poids (@Nicolas)
- [ ] Surplus non réceptionné hors tolérance quelle solution pour
- Surplus non réceptionné hors tolérance - quelle solution pour
les palettes impossibles à réceptionner ? (@Justine)
- [ ] Palette refusée PIE mais non supprimée comment gérer le
- Palette refusée PIE mais non supprimée - comment gérer le
support qui reste en base ? (@Nicolas) (LIM-73)
- [ ] WF clôture OE : faut-il modifier le WF existant ou en créer
un nouveau pour la condition CstAtt01 ? (@Fabien) (LIM-73)
- [x] ~~WF clôture OE : faut-il modifier le WF existant ou en créer
un nouveau pour la condition CstAtt01 ? (@Fabien) (LIM-73)~~ →
**Résolu** (revue de code validée 2026-06-02) : le WF existant
`InboundOrder_AutoCloseInboundOrder_PR_V2` est adapté pour ne pas
clôturer l'OE si `CstAtt01 = true` (pas de nouveau WF)
- ~~Conflit d'usage `CstAtt06` (support) : LIM-71 marqueur de destination
vs LIM-67 code du poste de picking~~ → **Résolu** : LIM-71 a abandonné
son marquage `CstAtt06` (destination via stratégies de rangement).
`CstAtt06` = uniquement code du PK lié (LIM-67), confirmé par LIM-70 et
le job de régénération réception→PK (LIM-71).
## Historique des modifications
@@ -603,6 +710,9 @@ poids ITM pour tous les calculs suivants.
| 2026-05-12 | Arthur | Réécriture section traitement poste travail (LIM-67) : menu 5 actions, CstAtt02/03/05/08/10, filmage FILMAGES |
| 2026-05-12 | Arthur | Réécriture section clôture (LIM-73) : AutoCloseReception=true, Reception_Close_PR_V2, REF custom, clôture OE 3 cas |
| 2026-05-13 | Arthur | Restauration sections tronquées (points d'attention, questions, historique, références) |
| 2026-07-16 | Arthur | Relecture commentaires LIM-67 (revue de code, livré préprod 09/07) : scan conteneur virtuel + code auto-généré, gestion codes conteneurs ROR / support LIMAGRAIN (CstAtt13), 6 tables préparation + poste adjacent (CstAtt06), action « Retirer support », optimisation attributs logistiques → LIM-93, conflit CstAtt06 signalé |
| 2026-07-17 | Arthur | Conflit CstAtt06 résolu (LIM-71 a abandonné son marquage) : note tableau CstAtt et question ouverte mises à jour |
| 2026-07-17 | Arthur | Relecture commentaires + revue de code LIM-73 (validée 02/06, préprod) : section « Éléments techniques » (WF définitifs), champ REF `LneStockCstAtt01`, source tolérance (ligne ROR / profil article), excédent non bloquant (`Reception_CheckReceiveMore_UI`), question WF clôture OE résolue (`InboundOrder_AutoCloseInboundOrder_PR_V2`) |
## Références
@@ -610,5 +720,6 @@ poids ITM pour tous les calculs suivants.
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (postes travail) | 2026 |
| [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) | Ticket Jira (clôture/REF) | 2026 |
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (postes travail) - relecture commentaires + revue de code | 2026-07-16 |
| [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) | Ticket Jira (clôture/REF) - revue de code validée, préprod | 2026-06-02 |
| [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93) | Ticket Jira (optimisation attributs logistiques) | 2026 |
+348 -107
View File
@@ -3,10 +3,10 @@ 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]
jira_refs: [LIM-93, LIM-72, LIM-67, LIM-68, LIM-66, LIM-64, LIM-70, LIM-73, LIM-90]
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", "recap_session_LIM-72_13-05-2026.md"]
last_updated: 2026-05-13
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", "Jira LIM-93 (V2, préprod, revue de code en cours 2026-07-17)", "Jira LIM-73 (revue de code validée 2026-06-02, relecture 2026-07-17)", "Jira LIM-90 (revue de code terminée 2026-06-03)", "recap_session_LIM-72_13-05-2026.md"]
last_updated: 2026-07-17
author: Arthur
---
@@ -19,16 +19,30 @@ author: Arthur
> **Standard EasyWMS** : → voir [Reception](../../concepts/reception.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> ⚠️ **V1 annulé → V2 (LIM-93) intégré** : le ticket
> [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) « Flux complet
> PK V1 » est **Annulé(e)**. Le traitement retour au PK est repris et livré
> par [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93) (V2,
> **En cours de test client / préprod**). Le contenu ci-dessous reflète la
> version définitive V2 (description + revue de code, relecture
> 2026-07-17). Différences majeures V2 vs V1 : appel ATH214
> **systématique** (plus de branche « lot connu »), champ `ZDEPLOY`
> confirmé, nouveaux champs `ET_BATCH`, sélection du statut de stock en
> **étape dédiée** avant la quantité (statut fictif « Stock conforme »),
> étiquette = **RFID LIM-68 enrichie** (A5 Zebra, pas de rapport séparé),
> rejet PIE **renvoyé au PK** pour recomptage (placeholder, solution
> technique à définir).
## 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
- `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
- `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)
@@ -38,12 +52,12 @@ Les retours client suivent un flux similaire aux réceptions extérieures
|-------|-------------|--------|
| 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é) | |
| 3 | **Traitement au poste de travail** | [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) (V1 annulé) → [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93) (V2) |
| 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 | |
| 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
@@ -57,17 +71,24 @@ 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é)
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
## [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 :
Lors du scan du lot officiel sur le poste de travail, le WMS appelle
**systématiquement** l'API SAP ATH214, que le lot soit déjà connu en
base ou non.
> **Changement V2 (confirmation Vincent Goyet, 13/05)** : l'appel ATH214
> est désormais systématique. Il n'y a plus de branche « lot connu → pas
> d'appel ». La vérification « vendu par Limagrain » (flag `ZDEPLOY`)
> passe toujours par SAP. Cela ferme le trou fonctionnel A4 (lots connus
> non re-vérifiés).
### Rappel : structure des articles chez Limagrain
@@ -85,24 +106,26 @@ SAP d'envoyer la fiche article complète.
```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
A[Scan / saisie lot officiel] --> D[Appel API SAP ATH214<br/>SYSTÉMATIQUE<br/>IV_BATCH_OFF + IV_RETURN]
D --> R{EV_RETURN = X ?}
R -- Non --> Z[Erreur SAP<br/>afficher ET_RETURN]
R -- Oui --> C{Au moins un<br/>ZDEPLOY = X ?}
C -- Non --> K[Erreur : lot non vendu<br/>par Limagrain]
C -- Oui --> B{Article déjà en base ?<br/>= alias existant ?}
B -- Non --> E[SAP pousse l'ITM<br/>via ATH002/ITM01<br/>Écran attente refresh 5s / timeout 1 min]
E --> F{Alias trouvé en base ?}
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]
F -- Oui --> J
B -- Oui --> J{Plusieurs lots<br/>ZDEPLOY = X ?}
J -- Non --> L[Sélection automatique<br/>→ déclaration contenu]
J -- Oui --> M[Dialogue choix article<br/>par pays d'origine]
J -- Oui --> M[Dialogue choix lot SAP<br/>Variété - Trt commercial - Destination code]
M --> L
```
### Appel API SAP Vérification du lot officiel (ATH214)
### Appel API SAP - Vérification du lot officiel (ATH214)
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.
@@ -176,7 +199,7 @@ GET /http/ATHInboundMessage
| `IV_BATCH_OFF` | CHAR 30 | Lot officiel scanné sur le sac |
| `IV_RETURN` | CHAR 10 | Numéro du document de retour (code OE) |
> ⚠️ **Méthode HTTP** : `GET` avec body JSON spécifique SAP CPI.
> ⚠️ **Méthode HTTP** : `GET` avec body JSON - spécifique SAP CPI.
> Header `Connection: keep-alive` requis.
**Payload de réponse :**
@@ -190,7 +213,12 @@ GET /http/ATHInboundMessage
"MATNR": "000000000000020955",
"CHARG": "2023293649",
"BATCH_OFF": "F0964D002488",
"EV_DEPLOY": "X"
"DESCRIPTION": "Tournesol variété XYZ",
"DESTINATION": "FR",
"OWNER": "LFS",
"ZDEPLOY": "X",
"VAR_DESC": "LG50459 SX",
"COM_TRT_DESC": "Korit"
}
]
}
@@ -203,7 +231,12 @@ GET /http/ATHInboundMessage
| `ET_BATCH[].MATNR` | CHAR 40 | Code lot WMS = product code SAP |
| `ET_BATCH[].CHARG` | CHAR 10 | Code article WMS = lot SAP |
| `ET_BATCH[].BATCH_OFF` | CHAR 30 | Lot officiel |
| `ET_BATCH[].EV_DEPLOY` | CHAR 1 | `"X"` = déployé/vendu, `""` = non |
| `ET_BATCH[].DESCRIPTION` | CHAR 40 | Description article SAP |
| `ET_BATCH[].DESTINATION` | CHAR 18 | Pays de destination |
| `ET_BATCH[].OWNER` | CHAR 10 | Propriétaire Limagrain |
| `ET_BATCH[].ZDEPLOY` | CHAR 1 | `"X"` = déployé/vendu, `""` = non |
| `ET_BATCH[].VAR_DESC` | - | Variété (ajout Justine 08/07) |
| `ET_BATCH[].COM_TRT_DESC` | - | Traitement commercial (ajout Justine 08/07) |
> ⚠️ **Mapping inversé CHARG / MATNR** : contrairement à la
> nomenclature SAP standard, `MATNR` (Material Number) porte ici le
@@ -211,14 +244,16 @@ GET /http/ATHInboundMessage
> **code article WMS** (= lot SAP). Ce mapping est confirmé par Michael
> Chaudier et Vincent Goyet (avril 2026).
> ⚠️ **À confirmer** : le nom du champ de déploiement est ambigu dans
> les échanges — `EV_DEPLOY` ou `ZDEPLOY` ? En attente de clarification
> (question A2 dans
> [Questions ouvertes](../08-transverse/questions-ouvertes.md)).
**Traitement de la réponse (V2) :**
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.
1. Si `EV_RETURN = ""` → afficher le message d'erreur de `ET_RETURN`
à l'opérateur
2. Si `EV_RETURN = "X"` → filtrer `ET_BATCH` pour ne garder que les
entrées avec `ZDEPLOY = "X"` (lots déployés/vendus)
3. Si aucune entrée `ZDEPLOY = "X"` → erreur « le lot n'a pas été vendu
par Limagrain »
4. Sinon → vérifier l'existence des articles en base (voir écran
d'attente ITM), puis sélection automatique ou dialogue multi-lot
### Écran d'attente pendant la réception de l'ITM
@@ -240,20 +275,30 @@ l'ITM. Pendant cette attente :
### 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).
entrées avec `ZDEPLOY = "X"`), le dialogue `CST_EtBatchSelector` est
affiché avec la liste des lots SAP disponibles. L'opérateur en choisit un.
Si un **seul résultat** → sélection automatique, pas de dialogue.
**Format d'affichage d'une ligne (revu Justine, 08/07)** :
**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.
```text
VAR_DESC - COM_TRT_DESC - DESTINATION (MATNR)
```
soit `Variété - Traitement commercial - Pays destination (product code)`.
Ce format remplace l'affichage d'origine `CHARG / BATCH_OFF / DESCRIPTION
/ DESTINATION / OWNER`.
Si un **seul résultat** `ZDEPLOY = "X"` → sélection automatique, pas de
dialogue.
**Pourquoi le choix article ?** Un lot officiel peut correspondre à
plusieurs lots SAP (dépend notamment de la destination). L'opérateur doit
choisir le lot 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)
## Déclaration au poste de travail (LIM-93)
Le traitement au PK reprend les mêmes étapes que le flux fournisseur
([LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67)) avec des
@@ -263,28 +308,74 @@ 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 |
| 2 | Big bag (CstAtt02) | Identique - toggle ON/OFF |
| 3 | Scan lot officiel + vérification | **+ Vérification API SAP systématique** (voir section ci-dessus) |
| 4 | Statut de stock | **Étape dédiée AVANT la quantité** (V2) - dialogue avec statut fictif « Stock conforme » en tête (voir ci-dessous) |
| 5 | Déclaration quantité | Identique - affichage qté attendue + UdM, prompt non pré-rempli. Bouton statut supprimé (ESC renvoie au dialogue statut) |
| 5bis | Flag big-bag (bouton custom) | Identique (CstAtt02) |
| 6 | Attributs logistiques | **Auto-validés si présents/uniques dans le ROR**, sinon demandés (voir ci-dessous) |
| 7 | Flag "À anoxier" | Identique (CstAtt03 = true) |
| 8 | Programme de filmage | Identique (paramètre FILMAGES → CstAtt05) |
| 9 | Impression étiquette RFID | **Enrichie** - RFID [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) + code produit / lots SAP / lot officiel, format A5 Zebra (voir ci-dessous) |
| 10 | Validation → évacuation AGV | Identique |
### Statut de stock Modifiable
### Statut de stock - Modifiable, en étape dédiée (V2)
Contrairement au flux fournisseur (LIM-67) où le statut de stock est
verrouillé (boutons masqués), dans le flux retour client :
verrouillé (boutons masqués), dans le flux retour client l'opérateur
peut **choisir** le statut. Le choix se fait désormais dans une **étape
dédiée, avant la saisie de la quantité** (et non plus via un bouton sur
l'écran quantité).
- Les **boutons de changement de statut sont visibles** et fonctionnels
- L'opérateur peut modifier le statut (ex : Conforme, Sac sale,
Non conforme, etc.)
- Un dialogue liste les statuts autorisés en retour
(query `CST_StockStatus_AllowedForReturn`, CstAtt1 = applicable en
réception)
- En **position 0** de la liste : un statut fictif « **Stock
conforme** » qui, s'il est choisi, **n'applique aucun statut**
(paramètre `RECEPTION_CONFORM_STOCK_STATUS`). Cela permet à
« n'avoir aucun statut » d'être un vrai choix explicite (demande
client 09/06)
- Le bouton « statut » de l'écran quantité est **supprimé** ; la touche
**ESC** depuis l'écran quantité **renvoie au dialogue des statuts**
- Les écrans de **date de fin de statut** et **commentaire** suivent
le comportement standard (non skippés contrairement au fournisseur)
- Un message d'avertissement s'affiche si « Stock conforme » est
sélectionné pour une ligne qui ne demande pas de statut
- [CUSTOM] Statuts spécifiques retour : **F9** (sacs sales), **B6**
(non conforme) assignables uniquement dans ce processus
(non conforme) - assignables uniquement dans ce processus.
Catalogue complet des 8 statuts et remontée REF : voir
[Statuts de stock retour et remontée REF (LIM-90)](#statuts-de-stock-retour-et-remontée-ref-lim-90)
### Attributs logistiques - Auto-validation (V2)
Les attributs logistiques (lot officiel, etc.) sont **validés
automatiquement** s'ils sont renseignés dans le ROR **et uniques** pour
l'article. Sinon :
- Un attribut manquant → **demandé à l'opérateur**
- Le ROR possède **plusieurs lignes avec le même lot SAP mais des
attributs logistiques différents** → l'attribut est demandé
(EasyWMS ne peut pas deviner à quelle ligne la réception se rattache)
### Étiquette RFID enrichie (V2)
Il n'y a **pas de rapport d'étiquette stock séparé**. L'étiquette
imprimée automatiquement après validation du filmage est l'**étiquette
HU/RFID de [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68)**,
enrichie de champs supplémentaires. Elle est glissée entre les sacs de
la palette.
Champs ajoutés (en plus du contenu standard LIM-68) :
- Code produit (`MATNR` / product code SAP)
- Lot SAP (`CHARG` / code article WMS)
- Lot officiel (`BATCH_OFF` / alias)
Format : **A5 Zebra** (pas A6). Imprimante : **dédiée au PK**.
> **Impact LIM-68** : la tâche
> [LIM-68](https://easywmsfrance.atlassian.net/browse/LIM-68) devra
> intégrer ces champs supplémentaires et le format A5 Zebra.
### Tolérance illimitée
@@ -295,7 +386,7 @@ verrouillé (boutons masqués), dans le flux retour client :
manuellement)
> Le prompt type de poste (3 ou 6 TP) prévu initialement est
> **abandonné** remplacé par un message d'avertissement si le poste
> **abandonné** - remplacé par un message d'avertissement si le poste
> adjacent est déjà ouvert (voir
> [Stations picking](../03-picking/stations-picking.md)).
@@ -315,18 +406,40 @@ prorata, mêmes contrôles). Voir
**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
- Verrou si écart poids : **« ECART RETOUR »** (vs « HORS TOLERANCE »
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)
### Flux de rejet PIE (⚠️ placeholder V2 - solution technique à définir)
> **Changement V2 (confirmation Leila Chajjaoui, 13/05)** : le client
> souhaite que les palettes retour rejetées au PIE (verrou ECART RETOUR)
> **retournent au PK pour recomptage immédiat**. L'approche V1 (poumon de
> rejet au sol + notification SmartUI) **ne correspond pas** au besoin et
> est abandonnée.
Points à résoudre avant implémentation :
- Routage AGV retour **PIE → PK** : comment EasyS gère-t-il le renvoi
vers un PK ?
- Relance du workflow de déclaration sur la même palette : peut-on
ré-ouvrir la palette au PK sans perdre les données déjà déclarées, ou
faut-il repartir de zéro ?
- Gestion du verrou ECART RETOUR : levé automatiquement au retour au PK,
ou levé manuellement par le responsable ?
- Impact sur la clôture : une palette en boucle PIE ↔ PK bloque-t-elle
indéfiniment la clôture ?
Cette section sera complétée une fois la solution technique définie
(question B2 dans
[Questions ouvertes](../08-transverse/questions-ouvertes.md)).
## 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
[Réception fournisseur - Clôture](reception-fournisseur.md). Cette
section décrit le **delta retour client** : le REF est conditionné au
rangement ASRS complet.
@@ -341,9 +454,10 @@ 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
### CstAtt11 - Marqueur de rangement ASRS
À chaque fin de tâche de rangement dans l'ASRS :
À chaque fin de tâche de rangement dans l'ASRS
(WF `Container_MovedEventHandler_Warehouse_PR`, sur fin de tâche APS) :
- Vérifier si le support provient d'une réception de type **retour**
- Si oui → `CstAtt11 = true` sur le support
@@ -367,7 +481,7 @@ Dans la vue des réceptions, le statut visuel est piloté par le
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)
### Adaptation Reception_Close_PR_V2 - Partie A (retours)
- **Si non-retour** → clôture immédiate, génération REF (standard)
- **Si retour** :
@@ -391,57 +505,177 @@ en ASRS → la valeur sera toujours une zone réelle (jamais "NON RANGEE").
| 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 de traitement |
| CstAtt11 | Palette réelle | `true` quand rangée en ASRS condition de clôture retour |
| 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 de traitement |
| CstAtt11 | Palette réelle | `true` quand rangée en ASRS - condition de clôture retour |
| CstAtt01 | Réception | `true` = clôture en attente de rangement ASRS (affichage jaune) |
## État du développement LIM-72
### [CUSTOM] Détection du mode retour (revue de code validée 2026-06-02)
### Implémenté (commit 8401f5456d, 28/04/2026)
Éléments techniques propres au flux retour issus de la revue de code
LIM-73 (le socle clôture / tolérance est dans
[Réception fournisseur](reception-fournisseur.md#custom-éléments-techniques-revue-de-code-validée-2026-06-02)) :
- Entité `CST_StockStatus` : CstAtt 1 applicable en retour, CstAtt 2 =
ZLOG, CstAtt 3 = ZINCO
- Query `CST_StockStatus_AllowedForReturn` : filtre statuts autorisés
- Workflow `CST_Return_Stock_GetStatus_UI` : sélection statut simplifié
- Workflow `Reception_FilterLinesByProductAndContainer_UI_V1` : retrait
filtre quantité (tolérance illimitée)
- Dialog `CST_GetProductQuantity_Prompt` : option SelectStatus ajoutée
| Élément | Type | Rôle |
|---------|------|------|
| `CST_Reception_GetReceptionFromContainer` | WF | Si aucune réception trouvée pour le conteneur, recherche un **retour** au code correspondant ; si trouvé → `returnMode = true` |
| `Reception_Supplier_ChooseReception_UI` | WF/UI | Ajout du paramètre formel `CST_ReturnMode` |
| `WorkStation_Reception_Supplier_UI` | WF/UI | Ajout de l'attribut `CST_ReturnMode` |
| `WorkStation_Reception_Supplier_ConfirmReceivedStock_UI` | WF/UI | Si retour → création du stock via une **commande différente** |
| `CST_View_WaitForFullPutaway` | Ressource | Libellé du statut « Clôture en cours » : FR « En attente de rangement [CST 1] », EN « Waiting for full putaway [CST 1] » |
### Reste à développer
## Statuts de stock retour et remontée REF (LIM-90)
- Appel API SAP ATH214 + gestion token OAuth 2.0
- Écran d'attente ITM (polling alias 5s, timeout 1 min, 5 tentatives)
- Dialogue choix multi-lot (quand ET_BATCH contient plusieurs articles)
- Impression étiquette stock retour client (rapport custom à créer)
- Configuration flux de rejet PIE retours (verrou ECART RETOUR,
destination, notification)
> **Statut** : préprod / test client. Revue de code terminée (03/06,
> après une première itération NOK 02/06 : commentaires `// Custom`
> manquants sur `REF01.boo` / `REF01Observer.boo`).
Custom du message REF + GNA pour remonter à SAP le **statut de stock**
(codes SAP ZLOG/ZINCO) et le **lot officiel** lors des réceptions retour
client. Réutilise la détermination retour/fournisseur de
[LIM-89](../06-erp-interface/gna-sap-cpi.md) : les balises ZLOG/ZINCO ne
sont posées que si la réception est de **type retour**.
Le STC étant désactivé (décision 30/04), le REF est le seul canal de
remontée des statuts pour les retours.
### Catalogue des 8 statuts (master data)
`F2` (« Conforme sac propre ») = **absence de statut** dans le WMS : rien
à créer. SAP interprète l'absence de statut comme F2 (ZLOG `0002` /
ZINCO `0001`).
| Libellé statut WMS | ZLOG (CstAtt2) | ZINCO (CstAtt3) | Bloque picking | Bloque shipping |
|---|---|---|---|---|
| (F9) Conforme sac sale | 0002 | 0091 | Non | Non |
| (B6) Non conforme - Sacs ouverts | 0001 | 0002 | Oui | Oui |
| (B6) Non conforme - Lot de l'année précédente | 0001 | 0003 | Oui | Oui |
| (B6) Non conforme - Certificat absent | 0001 | 0004 | Oui | Oui |
| (B6) Non conforme - Anomalie couture | 0001 | 0005 | Oui | Oui |
| (B6) Non conforme - Article externe - Hors LMG | 0001 | 0006 | Oui | Oui |
| (B6) Non conforme - Article non prévu | 0001 | 0007 | Oui | Oui |
| (B6) Non conforme - Sac ouvert / endommagé | 0001 | 0008 | Oui | Oui |
> ⚠️ Les blocages picking/shipping par statut sont **à confirmer avec
> le client** (proposition ci-dessus : F9 ne bloque rien, tous les B6
> bloquent picking et shipping).
### Balises REF ajoutées (par ligne de stock)
| Balise | Contenu | Cas F2 (sans statut) |
|---|---|---|
| `LneStockStatus` | Libellé du statut (ex. « (B6) Non conforme - Sacs ouverts ») | vide |
| `LneStockZLOG` | Valeur CstAtt2 du statut | vide |
| `LneStockZINCO` | Valeur CstAtt3 du statut | vide |
| `LneStockOfficialLot` | Alias de l'article WMS = lot officiel SAP (1er alias dont la valeur diffère du code article), ajouté sous `LneItemCode` | vide/absent si pas d'alias |
### Implémentation GNA (revue de code)
| Fichier | Rôle |
|---|---|
| `REF01.boo` | Ajout du header du message REF (nouvelles données) |
| `REF01Observer.boo` | Cœur : récupère l'alias selon le code produit ; récupère les CstAtt du statut de stock et les pose **uniquement si la réception est de type retour** |
| `REF01.xsd` | Structure du message REF avec les données custom |
Entité `CST_StockStatus` (déjà cataloguée, CstAtt2 = ZLOG, CstAtt3 =
ZINCO) : voir [AD Customs](../07-admin/ad-customs.md).
> Un REF **non-retour** (fournisseur / intersite) ne porte pas de
> ZLOG/ZINCO ; le lot officiel reste présent si l'article a un alias.
> Prérequis : le REF retour est conditionné au **rangement ASRS complet**
> (LIM-73, CstAtt11).
## [CUSTOM] Éléments techniques (LIM-93, revue de code)
> **Statut** : LIM-93 « En cours de test client (préprod) ». Le socle
> statut de stock a une revue de code validée (26/06) ; la partie API
> ATH214 est en cours de revue (voir caveat plus bas).
### Statut de stock - sélection en étape dédiée
Implémentation (commits `5b36a4c5a3` 11/06, `55f8ced13f` 12/06 ; revue
de code validée 26/06) :
| Élément | Type | Rôle |
|---------|------|------|
| `CST_StockStatus` | Entité | CstAtt1 = applicable en réception, CstAtt2 = ZLOG, CstAtt3 = ZINCO |
| `CST_StockStatus_AllowedForReturn` | Query | Statuts sélectionnables en réception retour (CstAtt1) |
| `CST_StockStatus_ForView` | Query | Query de la vue `StockStatusVList` |
| `StockStatusVList` | Vue | Affichage des CstAtt 1, 2 et 3 |
| `CST_Return_Stock_GetStatus_UI` | WF | Clone simplifié de `Stock_GetStatus_UI` pour le retour ; ajoute le statut fictif « Stock conforme » en tête (paramètre `RECEPTION_CONFORM_STOCK_STATUS`) |
| `Reception_GetQuantityAndUom_UI` | WF | Suppression du bouton de sélection de statut sur l'écran quantité |
| `WorkStation_Reception_Supplier_UI` | WF | Déplacement de la sélection du statut **avant** la quantité |
| `Reception_FilterLinesByProductAndContainer_UI_V1` | WF | Retrait du filtre qui exclut les lignes déjà réceptionnées → autorise la réception en excès (tolérance illimitée) |
| `Reception_Supplier_CheckReceptionStatus_UI_V1` | WF | Autorise la création de ligne pour les réceptions de type retour |
| `CST_GetProductQuantity_Prompt` | Dialog | Suppression de l'option de sélection de statut |
| `RECEPTION_CONFORM_STOCK_STATUS` | Paramètre | Nom du statut fictif « Stock conforme » |
### API ATH214 - vérification lot
Implémentation (commit `d33037da72` 25/05 ; champs VAR_DESC/COM_TRT_DESC
`fa5f2f863d` 08/07 ; auto-validation attributs `02364f440f` 07/07) :
| Élément | Type | Rôle |
|---------|------|------|
| `CST_Reception_Return_ATH214_Request_UI` | WF | Gère la requête ATH214 vers SAP CPI et renvoie la liste `ET_BATCH` |
| `CST_Reception_Return_ATH214_CheckData_UI` | WF | Process réception classe « Retour » : demande le code OE et la sélection du lot parmi ceux renvoyés par SAP |
| `CST_Reception_Return_ATH214_CheckData_Product_UI` | WF | Vérifie l'existence du produit en base et gère l'attente de l'ITM (ATH002) |
| `CaptureProductLotAttributeForReception_UI` | WF | Réutilise le lot sélectionné dans `CST_Reception_Return_ATH214_CheckData_UI` |
| `GetReceptionProductByIA` | WF | En classe « Retour », permet de sélectionner un article/alias qui n'existe pas encore |
| `CST_EtBatch` | Record | Modèle de données d'une entrée `ET_BATCH` (+ champs VarDesc, ComTrtDesc) |
| `CST_EtBatchList` | List | Liste de `CST_EtBatch` |
| `CST_EtBatchSelector` | Dialog | Sélecteur multi-lot (`VAR_DESC - COM_TRT_DESC - DESTINATION (MATNR)`) |
| `CST_Reception_Return_API_TimeoutOption` | Dialog | Options en cas d'échec de communication selon le nombre de timeouts |
| `CST_LogWebServiceCommunication` | Toggle | Active le logging de la communication API ATH214 |
Ressources principales : `CST_Reception_Return_API_SelectLot`,
`..._Error`, `..._MultiLot`, `..._NoDeployedLot`, `..._Timeout`,
`..._TimeoutExceededTry_1`, `..._WaitingResponse`,
`CST_Reception_Return_Prompt_InboundOrderCode`,
`CST_Reception_Return_API_LotSelectionColumnHeader`.
> ⚠️ **Caveat revue de code (Maxime Halgand 16/07 → Vincent Charvet
> 17/07)** : sur `CST_Reception_Return_ATH214_Request_UI`, l'appel est
> lancé en tâche `async` (`Task.Factory.StartNew`) pour afficher les
> écrans sans attendre ; `callResult` est mis à jour dans la tâche. Le
> timeout vient du `HttpClient` (100 s par défaut, soit ~200 s max :
> token + data). **Seul cas de boucle infinie résiduel** : si
> `LogManager.GetLogger` lève une exception (hors try/catch),
> `callResult` n'est jamais mis à jour → à corriger avant validation.
## Points d'attention
⚠️ Le paramètre `SAP_LOT_VERIFY_URL` doit pointer vers l'endpoint CPI
unique `/http/ATHInboundMessage`, pas vers `/api/v1/lot/verify`.
⚠️ Endpoint CPI unique `/http/ATHInboundMessage` avec `MessageType =
"ATH214"` dans l'enveloppe JSON. Les paramètres V1 `SAP_LOT_VERIFY_*`
sont **remplacés** par `SAP_CPI_TOKEN_URL`, `SAP_CPI_ENDPOINT_URL`,
`SAP_ATH214_TIMEOUT` (60 s), `SAP_ATH214_MAX_RETRIES` (5),
`SAP_ATH214_REFRESH_INTERVAL` (5000 ms) - voir
[Paramètres projet](../07-admin/parametres-projet.md).
⚠️ Le `MessageType` doit être `"ATH214"` dans l'enveloppe JSON.
⚠️ Pour les lots **déjà connus** en base WMS, le flag "déployé" n'est
pas vérifié dans le design actuel — trou fonctionnel identifié (question
A4 dans [Questions ouvertes](../08-transverse/questions-ouvertes.md)).
⚠️ La vérification « déployé » (`ZDEPLOY`) des lots **déjà connus** en
base est désormais assurée par l'appel ATH214 **systématique** (V2). Le
trou fonctionnel A4 est fermé.
## Questions ouvertes
- [ ] Champs manquants ET_BATCH : description article, pays destination,
propriétaire (@Vincent Goyet) — A1
- [ ] Nom final champ déploiement : EV_DEPLOY ou ZDEPLOY ?
(@Vincent Goyet) — A2
- [ ] Délai ATH214 → push ITM dimensionnement polling
(@Vincent Goyet) — A3
- [ ] Vérification "déployé" pour lots déjà connus sans ATH214
(@Vincent Goyet) — A4
- [ ] Étiquette stock retour : format, champs, imprimante
(@Leila / @Antoine) — B1
- [ ] Flux rejet PIE retour : destination, notification, actions
(@Leila / @Antoine) — B2
- [x] ~~Champs manquants ET_BATCH : description article, pays destination,
propriétaire - A1~~ → Résolu : `DESCRIPTION`, `DESTINATION`, `OWNER`
ajoutés, plus `VAR_DESC` (variété) et `COM_TRT_DESC` (traitement
commercial)
- [x] ~~Nom final champ déploiement : EV_DEPLOY ou ZDEPLOY ? - A2~~
Résolu : `ZDEPLOY` (confirmé V2)
- [x] ~~Délai ATH214 → push ITM dimensionnement polling - A3~~ → Résolu :
polling 5000 ms, timeout 60 s, 5 tentatives (paramétrés)
- [x] ~~Vérification "déployé" pour lots déjà connus sans ATH214 - A4~~
Résolu : appel ATH214 systématique
- [x] ~~Étiquette stock retour : format, champs, imprimante - B1~~
Résolu : pas de rapport séparé, RFID LIM-68 enrichie (A5 Zebra,
imprimante dédiée PK)
- Flux rejet PIE retour (B2) : le client veut un **renvoi au PK pour
recomptage** (approche poumon abandonnée). Routage AGV PIE → PK, relance
du workflow sur la même palette, levée du verrou ECART RETOUR, impact
clôture - **solution technique à définir** (@Leila / @Antoine)
## Historique des modifications
@@ -452,13 +686,20 @@ A4 dans [Questions ouvertes](../08-transverse/questions-ouvertes.md)).
| 2026-05-12 | Arthur | Intégration LIM-72 (process complet 8 étapes, API SAP, CstAtt) |
| 2026-05-12 | Arthur | Intégration LIM-73 (clôture retour, CstAtt11, REF conditionné) |
| 2026-05-13 | Arthur | Correction API : endpoint CPI unique + ATH214, auth OAuth 2.0, mapping CHARG/MATNR, état dev, questions ouvertes |
| 2026-07-17 | Arthur | LIM-72 confirmé Annulé(e) (V1) → repris par LIM-93 (V2) : notes de supersession ajoutées (résumé, table process, état dev) ; contenu V1 conservé comme référence à valider. Détail définitif différé à la relecture de LIM-93 |
| 2026-07-17 | Arthur | Relecture revue de code LIM-73 (validée 02/06, préprod) : sous-section « Détection du mode retour » (WF returnMode, `Container_MovedEventHandler_Warehouse_PR` pour CstAtt11, ressource `CST_View_WaitForFullPutaway`) |
| 2026-07-17 | Arthur | Intégration LIM-90 (revue de code terminée 03/06, préprod) : section « Statuts de stock retour et remontée REF » (catalogue 8 statuts ZLOG/ZINCO + blocage picking/shipping, F2 = absence de statut, balises `LneStockStatus`/`LneStockZLOG`/`LneStockZINCO`/`LneStockOfficialLot`, GNA `REF01.boo`/`REF01Observer.boo`/`REF01.xsd`, réutilise détermination retour LIM-89) |
| 2026-07-17 | Arthur | Intégration LIM-93 V2 (préprod, revue de code en cours) : appel ATH214 **systématique** (résout A4), champs `ET_BATCH` `DESCRIPTION`/`DESTINATION`/`OWNER`/`ZDEPLOY`/`VAR_DESC`/`COM_TRT_DESC` (résout A1/A2), dialogue multi-lot reformaté, statut de stock en **étape dédiée** + statut fictif « Stock conforme » (`RECEPTION_CONFORM_STOCK_STATUS`), auto-validation attributs logistiques, **étiquette RFID enrichie** A5 Zebra (résout B1, impact LIM-68), rejet PIE **renvoi au PK** placeholder (B2), section « Éléments techniques » (WF/dialogs/records ATH214 + caveat boucle infinie), verrou PIE renommé « ECART RETOUR » |
## Références
| Source | Type | Date |
|--------|------|------|
| Jira LIM-72 | Ticket | 2025 |
| Jira LIM-73 | Ticket | 2025 |
| [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) | Ticket Jira (V1, Annulé) | 2026 |
| [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93) | Ticket Jira (V2 - description + revue de code, préprod) | 2026-07-17 |
| Commits LIM-93 : `d33037da72` (API ATH214), `5b36a4c5a3` / `55f8ced13f` (statut de stock), `02364f440f` (auto-validation attributs), `fa5f2f863d` (VAR_DESC/COM_TRT_DESC) | Git | 2026-05/07 |
| [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) | Ticket Jira (clôture/REF retour) - revue de code validée, préprod | 2026-06-02 |
| [LIM-90](https://easywmsfrance.atlassian.net/browse/LIM-90) | Ticket Jira (statuts ZLOG/ZINCO + lot officiel) - revue de code terminée, préprod | 2026-06-03 |
| Jira LIM-14 | Ticket (CstAtt) | 2025 |
| Athenzat SAP-CPI Webservices Documentation v1.0 | PDF | 2026-04-24 |
| Mail Michael Chaudier ↔ Vincent Goyet | Échange | 2026-04-07/10 |
+3 -2
View File
@@ -1,11 +1,11 @@
---
title: "Stockage Vue d'ensemble"
title: "Stockage - Vue d'ensemble"
tags: [stockage, asrs, galileo, index]
status: draft
last_updated: 2026-05-05
---
# Stockage Vue d'ensemble
# Stockage - Vue d'ensemble
> **Périmètre** : miniload, transstockeurs, stations Galileo, stratégies de
> putaway, zones de stockage, défragmentation.
@@ -22,6 +22,7 @@ last_updated: 2026-05-05
- [Défragmentation](defragmentation.md)
- [Processus d'anoxie](processus-anoxie.md)
- [Gestion des palettes vides](palettes-vides.md)
- [Flux de rejet PIE](rejet-pie.md)
## Vue synthétique du stockage Limagrain
+6 -6
View File
@@ -1,5 +1,5 @@
---
title: "ASRS Entrepôt automatique Limagrain"
title: "ASRS - Entrepôt automatique Limagrain"
tags: [stockage, ASRS, transstockeur, racks, emplacements]
status: draft
standard_ref: architecture/galileo-integration.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-05
author: Arthur
---
# ASRS Entrepôt automatique Limagrain
# ASRS - Entrepôt automatique Limagrain
> **Résumé** : description de l'installation automatique Limagrain : 4 allées
> de transstockeurs, racks multi-profondeur, nomenclature des emplacements,
@@ -31,7 +31,7 @@ graines (sacs, big-bags) sur palettes US.
| Code | Description |
|------|-------------|
| **LM** | Organisation LIMAGRAIN |
| **MAG01** | Magasin automatique 4 allées |
| **MAG01** | Magasin automatique - 4 allées |
## Racks et capacités
@@ -48,8 +48,8 @@ Format : **AAAXXXYYYS(D)**
| Code | Nb caractères | Description |
|------|---------------|-------------|
| AAA | 3 | Nom de l'allée (001004) |
| XXX | 3 | Coordonnée X travée le long de l'allée |
| YYY | 3 | Coordonnée Y hauteur dans la travée |
| XXX | 3 | Coordonnée X - travée le long de l'allée |
| YYY | 3 | Coordonnée Y - hauteur dans la travée |
| S | 1 | Côté de l'allée (1 = gauche, 2 = droite) |
| D | 1 | Profondeur (1 = premier, 2 = second, ...) |
@@ -63,7 +63,7 @@ profondeur 1.
| Type | Largeur (mm) | Longueur (mm) | Hauteur (mm) | Poids max (kg) |
|------|--------------|---------------|--------------|----------------|
| 1 Palette US | 1000 | 1200 | 800 à 1900 | 1250 |
| 1 - Palette US | 1000 | 1200 | 800 à 1900 | 1250 |
## Contrôles au PIE
+55 -15
View File
@@ -1,16 +1,16 @@
---
title: "Défragmentation Zone client et ordonnancement par tournée"
title: "Défragmentation - Zone client et ordonnancement par tournée"
tags: [stockage, défragmentation, expédition, zone-client, planning, tournée, STOP, custom]
status: draft
standard_ref: concepts/defragmentation.md
jira_refs: [LIM-85, LIM-87]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "LIM-85 LOT2.1 Configuration stratégies defragmentation du stock client par tournée.md", "LIM-87 LOT2.1 [TOURNÉES] Défragmentation client - quai non assigné ATTENTE_CLIENT CT-13.md"]
last_updated: 2026-05-12
last_updated: 2026-07-17
author: Arthur
---
# Défragmentation Zone client et ordonnancement par tournée
# Défragmentation - Zone client et ordonnancement par tournée
> **Résumé** : processus de défragmentation pour préparer les palettes
> d'expédition vers la zone de défragmentation client dans l'ASRS.
@@ -37,7 +37,7 @@ répond au besoin Limagrain** :
|---------------|-------------|----------|
| Shipping Only | Défrag uniquement les palettes complètes | Les palettes de picking ne sont pas repositionnées → ordonnancement STOP faux dans le canal |
| Picking & Shipping | Défrag toutes les palettes (y compris celles à picker) | Les palettes sortent pour être défragmentées alors qu'elles doivent d'abord passer au PK → casse l'ordonnancement |
| Picking Only | Non applicable au besoin | |
| Picking Only | Non applicable au besoin | - |
**Contrainte métier** : le stock doit être rangé dans le canal
d'expédition ASRS dans l'**ordre inverse des STOP** de la tournée, de
@@ -62,7 +62,7 @@ de l'expédition.
- **Priorité** : basse (s'exécute en arrière-plan)
- **Planification** : horaires configurables par Limagrain
- **Zone cible** : zone défragmentation client (TK02, 03, 04
- **Zone cible** : zone défragmentation client (TK02, 03, 04 -
rangées 60-69, profondeurs 2-10)
- **Déclencheur** : stratégie de défragmentation par rotation (standard)
+ custom défrag client par tournée (ci-dessous)
@@ -88,7 +88,29 @@ La défragmentation est l'étape 4 du flux d'expédition (voir
3. Palettes picking → poste de travail d'abord, puis zone client
4. Depuis zone client → sortie vers poumon le jour J
## [CUSTOM] Défrag client par tournée — Quai non assigné (LIM-87)
## [CONFIG] Stratégies de défragmentation client par tournée (LIM-85)
> **Statut (LIM-85)** : **en cours de test client (pré-production)**.
> Stratégies importées sur Git le 23/04/2026 (suite à l'atelier du 2 avril).
> Ticket de suivi - peu de contenu technique, il sert à tracer la
> configuration.
Ce ticket couvre la **configuration des stratégies de défragmentation** du
stock client par tournée : définition des stratégies (mode Shipping, type
d'ordre Tournée) et de la zone cible ASRS (zone client TK02-04, rangées
60-69). Ces stratégies sont le socle sur lequel s'appuie le custom
d'éligibilité par tournée ci-dessous (LIM-87).
La logique custom (filtre « toutes les palettes du RUT prêtes »,
ordonnancement inverse des STOP, quai non assigné) relève de
[LIM-87](https://easywmsfrance.atlassian.net/browse/LIM-87).
## [CUSTOM] Défrag client par tournée - Quai non assigné (LIM-87)
> **Statut (LIM-87)** : **en cours de test client (pré-production)**. Revue
> de code validée le **28/04/2026** (après un NOK le 24/04 : bug de nommage
> de paramètre `c` réutilisé entre le `Any` et le `Where` de la query,
> corrigé le 27/04).
### Objectif
@@ -114,6 +136,14 @@ de la tournée** (RUT), pas de l'OS individuel.
qui exclut de l'éligibilité toute tournée dont au moins une palette
(d'au moins un OS) n'est pas encore prête dans l'ASRS
La sélection des candidats passe par la query standard
`OutboundDefragContainers_PendingByWarehouseExcludedIds`, **modifiée en
custom** : elle ne retient un conteneur que si sa tournée (ou son OS) n'a
**plus de picking en cours**. Elle exclut donc les conteneurs de picking
restants **et** les conteneurs pas encore rangés dans l'ASRS (encore en
mouvement, `LocationType != Aps`). S'il en existe au moins un, aucun
conteneur de cet ordre n'est retenu pour la défrag.
### Règle d'éligibilité (pseudocode)
```
@@ -140,7 +170,8 @@ du **STOP 1** en dernier. Ainsi les palettes sortent dans le bon ordre
lors du chargement camion (STOP 1 chargé en premier).
Le rangement se fait dans un canal (ou plusieurs canaux) par tournée
— pas un canal par STOP.
- pas un canal par STOP.
### Paramètre MAX_DEFRAG_ATTEMPT
@@ -154,6 +185,10 @@ un emplacement de destination et n'en a pas trouvé. Si le filtre
custom exclut la tournée avant même de chercher une destination,
aucune tentative n'est décomptée.
> **Résolu (LIM-87, 23/04/2026)** : `MAX_DEFRAG_ATTEMPT` ne concerne que la
> défrag **par rotation**, **pas** la défrag d'expédition/client. Le custom
> de défrag client par tournée n'est donc **pas** plafonné par ce compteur.
## Cas de tests (LIM-87)
Légende : PC = palette complète, PP = palette de picking (mère),
@@ -175,7 +210,7 @@ PF = palette fille (sortie du picking, retour ASRS).
|----|-------------|---------------|------------------|
| 06 | PP partie, PF pas encore revenue | 2 SOR, SOR1 prêt, SOR2 avec PF pas revenue | **NON éligible** (un OS bloque tout le RUT) |
| 07 | PF encore sur AGV (en mouvement) | Multi-OS, 1 PF en transit AGV | **NON éligible** tant que PF pas dans ASRS |
| 08 | Quai déjà assigné à la tournée | Toutes palettes prêtes, quai assigné | **NON éligible** pour custom défrag flux standard prend le relais |
| 08 | Quai déjà assigné à la tournée | Toutes palettes prêtes, quai assigné | **NON éligible** pour custom défrag - flux standard prend le relais |
| 09 | Picking partiel sur un OS | 1 SOR, 3 lignes picking, 2 PF revenues, 1 PP au PK | **NON éligible** (on attend la totalité) |
### Cas dégradés
@@ -184,7 +219,7 @@ PF = palette fille (sortie du picking, retour ASRS).
|----|-------------|---------------|------------------|
| 11 | AGV HS pendant retour PF | PF bloquée sur PK/buffer | **NON éligible** jusqu'à rangement ASRS |
| 12 | Support sous révision | PP → buffer litige, stock réassigné sur PP' | Éligible quand toutes les palettes (réassignations incluses) dans ASRS |
| 13 | Rupture de stock (ATTENTE CLIENT) | SOR1 prêt, SOR2 avec 1 ligne en rupture | **À trancher** : option A (RUT bloqué) ou option B (défrag partielle) |
| 13 | Rupture de stock (ATTENTE CLIENT) | SOR1 prêt, SOR2 avec 1 ligne en rupture | Implémentation : commande incomplète → **pas de défrag** (proche option A). Arbitrage client à confirmer (option A vs B) |
| 14 | Modification quantité (bouton Problème) | OnStockAdjust recalcule | Si stock suffisant → PF revient, RUT éligible. Si réassignation → attendre PP'/PF' |
| 15 | RUT libéré, aucune PP partie (figé) | Pas de PK disponible | **NON éligible** (picking pas déclenché ≠ prêt). Pas de MAX_DEFRAG_ATTEMPT |
| 16 | Ajout SOR à un RUT déjà éligible | Nouveau SOR avec lignes picking non traitées | **Redevient NON éligible** jusqu'à fin du nouveau SOR |
@@ -196,7 +231,7 @@ exemple si l'activité reprend la nuit).
## Points d'attention
⚠️ Les tâches de défragmentation ont une priorité **basse** elles ne
⚠️ Les tâches de défragmentation ont une priorité **basse** - elles ne
perturbent pas l'activité normale mais peuvent être longues.
⚠️ MECALUX conseille une présence sur site lors de la défragmentation
@@ -209,10 +244,13 @@ non prêt bloque toute la défrag du RUT.
## Questions ouvertes
- [ ] Rupture de stock CT-13 : option A (RUT bloqué tant que rupture
- Rupture de stock CT-13 : option A (RUT bloqué tant que rupture
non résolue) ou option B (défrag sur les palettes dispo) ? (@Justine)
- [ ] MAX_DEFRAG_ATTEMPT : scope défrag client seul ou aussi défrag par
rotation ? Impact sur la valeur à configurer (@Nicolas)
Implémentation actuelle : commande incomplète → pas de défrag (proche
option A), à confirmer client
- [x] ~~MAX_DEFRAG_ATTEMPT : scope défrag client seul ou aussi défrag par
rotation ?~~ → Résolu (LIM-87) : uniquement la défrag par rotation, pas
la défrag d'expédition
## Historique des modifications
@@ -221,11 +259,13 @@ non prêt bloque toute la défrag du RUT.
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-12 | Arthur | Refonte : ajout custom défrag client par tournée (LIM-87), mécanisme filtre éligibilité, ordonnancement STOP, 16 cas de tests |
| 2026-05-13 | Arthur | Restauration contenu tronqué (caractéristiques, config, custom, cas de tests, points d'attention) |
| 2026-07-17 | Arthur | Relecture LIM-85 (lecture directe, 1 commentaire) : ajout section « [CONFIG] Stratégies de défragmentation (LIM-85) » distinguant la config des stratégies (LIM-85, préprod, import Git 23/04) du custom d'éligibilité par tournée (LIM-87) ; statut + Références |
| 2026-07-17 | Arthur | Relecture revue de code LIM-87 (préprod, validée 28/04) : ajout statut + query `OutboundDefragContainers_PendingByWarehouseExcludedIds` (filtre custom picking restant + conteneurs pas en Aps ; bug nommage paramètre corrigé 27/04) ; résolution MAX_DEFRAG_ATTEMPT (uniquement défrag rotation, pas expédition) ; CT-13 précisé (commande incomplète → pas de défrag, proche option A) |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| [LIM-85](https://easywmsfrance.atlassian.net/browse/LIM-85) | Ticket Jira (stratégies défrag) | 2026 |
| [LIM-87](https://easywmsfrance.atlassian.net/browse/LIM-87) | Ticket Jira (défrag client quai non assigné) | 2026 |
| [LIM-85](https://easywmsfrance.atlassian.net/browse/LIM-85) | Ticket Jira (config stratégies défrag, préprod, import Git 23/04) | 2026 |
| [LIM-87](https://easywmsfrance.atlassian.net/browse/LIM-87) | Ticket Jira (défrag client quai non assigné, 5 commentaires, préprod) | 2026-04 |
+65 -11
View File
@@ -1,16 +1,16 @@
---
title: "Configuration Galileo Limagrain"
tags: [stockage, galileo, TMS, architecture, IT]
title: "Configuration Galileo - Limagrain"
tags: [stockage, galileo, TMS, architecture, IT, filmage, PIE]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: []
jira_refs: [LIM-115]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Jira LIM-115 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Configuration Galileo Limagrain
# Configuration Galileo - Limagrain
> **Résumé** : architecture logicielle IT de l'installation Limagrain et
> spécificités de la configuration Galileo (TMS).
@@ -61,7 +61,7 @@ graph TD
- **ERP** : SAP EWM
- **Direction** : bidirectionnelle (voir [Messages ERP](../06-erp-interface/messages-reference.md))
## Stations PIE Configuration spécifique
## Stations PIE - Configuration spécifique
3 stations PIE installées :
@@ -85,7 +85,7 @@ graph TD
| Dimensions max | 1300 × 1100 × 1900 mm |
| Poids max | 1250 kg |
| État palette bois | Correct (visuel Galileo) |
| Lecture RFID | Obligatoire doit être connue (ASN) |
| Lecture RFID | Obligatoire - doit être connue (ASN) |
## Flux physiques dans l'entrepôt
@@ -103,6 +103,58 @@ Deux entrées dans l'ASRS :
> En cas de blocage long terme sur une entrée, un bouton permet de
> rediriger les flux vers l'autre entrée.
## Transmission du programme de filmage à la filmeuse (LIM-115)
> **Statut (LIM-115)** : Ouvert. Cette tâche **transmet** le programme de
> filmage à Galileo ; elle ne le **produit** pas (choix opérateur au poste,
> stocké dans `CstAtt05`, voir LIM-67).
**Objectif** : quand une palette quitte un poste d'identification (PIE) pour
entrer dans l'ASRS, le WMS transmet automatiquement à Galileo le programme de
filmage choisi par l'opérateur, sans action supplémentaire. Même principe que
l'étiqueteuse automatique (custom data, pas de changement de route - voir
[Flux expédition - Communication Galileo](../04-outbound/flux-expedition.md#communication-galileo-lim-111)).
### Chaîne fonctionnelle
L'opérateur choisit le programme au poste (action « Terminer » en réception,
ou avant évacuation en picking) → valeur dans `CstAtt05` → tâche d'évacuation
AGV vers la table d'entrée → passage **filmeuse** puis PIE → stockage ASRS. La
règle « on ne filme que si le PIE valide la palette » est **structurellement**
satisfaite : un mouvement de source PIE vers la table d'entrée (et non vers le
poumon de rejet) n'existe que si le PIE a dit OK.
### Mécanisme
| Étape | Détail |
|-------|--------|
| Abonnement | Subscription custom sur l'event **`MovementCreated`** (modèle des `Galileo_*EventHandler_PR`), appelant un WF qui gère le CstData. Handler **léger** (event fréquent). |
| Filtre source | Récupérer la station **source** du mouvement (StationType + StationNumber) ; la comparer au paramètre des PIE concernés. Si absente → sortie immédiate. |
| Lecture programme | Depuis le mouvement → remonter au **support (Container)** → lire `CstAtt05`. Si vide ou = code « pas de filmage » (`0`) → forcer CstData à `0`. Si **destination = rejet** (type de tâche) → forcer CstData à `0`. |
| Écriture CustomData | Écrire dans le **CustomData de la tâche** parente. **Idempotent** (une tâche peut générer plusieurs mouvements). Pas de collision avec l'étiqueteuse : c'est un **type de tâche différent** (une même tâche n'est jamais à la fois filmage et étiquetage). |
| Transmission Galileo | Aucune commande spécifique : Galileo lit le CustomData à la transmission du mouvement (`GalileoMovTrackingCreateCommand`, transition Generated → In progress) et pilote la filmeuse. |
Séquence : Easy crée le mouvement en `Generated` → Galileo fait une recherche
d'ordre → Easy répond via `GalileoMovTrackingCreateCommand` (infos mouvement +
tâche liée) → le mouvement passe en `Running`.
### Périmètre
- **Stations déclenchantes** : **PIE_02**, définies dans un **paramètre** (pas
de code en dur) pour absorber une évolution de topologie.
- **Flux couverts** : **tous les flux entrant vers l'ASRS** via un poste
d'identification zone travail (réception extérieure/intersite, retour picking
vers ASRS, recertification, etc.). Mécanisme **générique** : teste uniquement
la station source + la présence d'un programme sur le support.
- **Hors périmètre** : PIE_01 (entrée production, non filmée), PIE_03 (pas de
filmeuse après ce PIE), la pose de `CstAtt05` (LIM-67) et la mécanique
physique de la filmeuse (Galileo/TMS).
> ⚠️ Réconciliation : le tableau des stations PIE ci-dessus indique
> « PIE_03 = idem PIE_02 ». Pour le **filmage**, LIM-115 exclut PIE_03 (pas de
> filmeuse en aval). L'identité PIE_02/PIE_03 vaut pour le **mode d'insertion**,
> pas pour la filmeuse.
## Rétention des données
| Entité | Durée standard | Souhait Limagrain |
@@ -123,21 +175,23 @@ Deux entrées dans l'ASRS :
peuvent impacter les flux fonctionnels.
⚠️ La banderoleuse (filmeuse) est située avant le PIE côté postes de
travail un contrôle capacité filmeuse est fait en amont du PIE.
travail - un contrôle capacité filmeuse est fait en amont du PIE.
## Questions ouvertes
- [ ] Impact rétention 2 ans sur les performances Oracle (@Nicolas)
- [ ] Fournisseur AGV définitif et protocole d'interface (@Théo)
- Impact rétention 2 ans sur les performances Oracle (@Nicolas)
- Fournisseur AGV définitif et protocole d'interface (@Théo)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-07-20 | Arthur | LIM-115 (lecture directe, Ouvert) : nouvelle section « Transmission du programme de filmage à la filmeuse » (subscription MovementCreated, filtre station source PIE_02 via paramètre, lecture CstAtt05, force CstData=0 si vide/pas de filmage/destination rejet, écriture idempotente CustomData tâche, lecture Galileo via GalileoMovTrackingCreateCommand ; périmètre tous flux entrant ASRS via PIE_02, hors PIE_01/PIE_03) + caveat réconciliation PIE_03 (pas de filmeuse) ; front matter jira_refs/sources/tags/last_updated |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| [LIM-115](https://easywmsfrance.atlassian.net/browse/LIM-115) | Ticket Jira (transmission du programme de filmage à Galileo/filmeuse) | 2026 |
+6 -6
View File
@@ -2,7 +2,7 @@
title: "Gestion des palettes vides"
tags: [stockage, palettes-vides, réapprovisionnement, expédition]
status: draft
standard_ref: concepts/container-management.md
standard_ref: concepts/container.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md"]
@@ -12,7 +12,7 @@ author: Arthur
# Gestion des palettes vides
> **Résumé** : gestion des piles de palettes vides dans EasyWMS
> **Résumé** : gestion des piles de palettes vides dans EasyWMS -
> réception, stockage, réapprovisionnement des postes et expédition.
> **Standard EasyWMS** : → voir [Container Management](../../concepts/container.md)
@@ -21,7 +21,7 @@ author: Arthur
## Contexte projet
Les palettes vides sont intégrées dans le périmètre EasyWMS. Leur gestion
est faite **uniquement en pile** aucune palette vide n'est traitée de
est faite **uniquement en pile** - aucune palette vide n'est traitée de
façon unitaire.
## Typologie
@@ -36,7 +36,7 @@ Les piles de palettes vides sont réceptionnées au niveau des quais.
Type de réception : **Réception palettes vides**. L'article est nommé
« PILE DE 10 PALETTES ».
**Règles** : toujours reçu par paquet de 10 palettes (sinon refusé
**Règles** : toujours reçu par paquet de 10 palettes (sinon refusé -
contrainte de hauteur). Aucun scan demandé. Pas de passage par poste
de travail. Destination : stockage direct dans l'ASRS.
@@ -52,7 +52,7 @@ de travail. Destination : stockage direct dans l'ASRS.
- Position : au plus proche de l'entrée/sortie pour réapprovisionner
rapidement les postes
- Stratégie de rangement : voir
[Stratégies de rangement](putaway-strategies.md) type 5
[Stratégies de rangement](putaway-strategies.md) - type 5
- Consultation : vue des stocks avec filtre sur l'article « palettes vides »
### Au niveau des postes de travail
@@ -100,7 +100,7 @@ Les piles de palettes vides peuvent être expédiées :
## Points d'attention
⚠️ Gestion uniquement en pile (jamais unitaire) simplifie le suivi
⚠️ Gestion uniquement en pile (jamais unitaire) - simplifie le suivi
mais impose des manipulations par lot de 10.
⚠️ Le nombre de piles en stock est visible en filtrant la vue des stocks
+12 -12
View File
@@ -1,8 +1,8 @@
---
title: "Processus d'anoxie TK01"
title: "Processus d'anoxie - TK01"
tags: [stockage, anoxie, TK01, flag, custom, processus]
status: draft
standard_ref: concepts/warehouse-processes.md
standard_ref: concepts/quality-control.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
@@ -10,7 +10,7 @@ last_updated: 2026-05-05
author: Arthur
---
# Processus d'anoxie TK01
# Processus d'anoxie - TK01
> **Résumé** : processus [CUSTOM] de traitement par anoxie dans l'allée 1,
> incluant le flag « A anoxier », la relocalisation et le blocage d'allée.
@@ -63,7 +63,7 @@ spécifiques depuis la vue des stocks.
## Cas particuliers
- Des stocks d'une même référence (article-lot) peuvent posséder des dates
de dernière anoxie différentes ces stocks ne sont pas physiquement
de dernière anoxie différentes - ces stocks ne sont pas physiquement
différenciables
- Si une palette contient du stock « mixte » dont certaines lignes ont le
flag et d'autres pas → toutes les lignes sont considérées « A anoxier »
@@ -77,20 +77,20 @@ flowchart TD
RELOC1 --> SEL2[2. Sélection palettes à anoxier]
SEL2 --> RELOC2[Relocalisation vers TK01]
RELOC2 --> BLOCK[3. Blocage manuel allée 01]
BLOCK --> WAIT[Anoxie en cours 3 à 4 semaines]
BLOCK --> WAIT[Anoxie en cours - 3 à 4 semaines]
WAIT --> FIN[4. Bouton « Fin d'anoxie »]
FIN --> UPDATE[MAJ date dernière anoxie + suppression flag]
UPDATE --> DEBLOCK[Déblocage manuel allée 01]
```
### Étape 1 Évacuation des palettes non concernées
### Étape 1 - Évacuation des palettes non concernées
- Sélection manuelle depuis la vue des conteneurs (filtre sur flag
« A anoxier »)
- Relocalisation vers une autre allée (en masse, voir déplacement
de conteneurs)
### Étape 2 Relocalisation des palettes à anoxier
### Étape 2 - Relocalisation des palettes à anoxier
- Sélection manuelle des palettes avec flag « A anoxier »
- Relocalisation vers TK01 dans la mesure des emplacements disponibles
@@ -98,12 +98,12 @@ flowchart TD
[CUSTOM] Les étapes 1 et 2 peuvent être **automatisées** afin de créer
automatiquement les tâches de relocalisation.
### Étape 3 Blocage
### Étape 3 - Blocage
- Blocage **manuel** de l'allée 01 sur EasyWMS
- Le stock et l'allée deviennent indisponibles
### Étape 4 Fin d'anoxie
### Étape 4 - Fin d'anoxie
- [CUSTOM] Bouton « Fin d'anoxie » qui :
- Met à jour la date de dernière anoxie
@@ -122,7 +122,7 @@ automatiquement les tâches de relocalisation.
Les palettes avec flag « A anoxier » ont une stratégie de rangement
dédiée qui priorise TK01 (voir
[Stratégies de rangement](putaway-strategies.md) type 1).
[Stratégies de rangement](putaway-strategies.md) - type 1).
## Points d'attention
@@ -138,8 +138,8 @@ en cas de reprise d'activité.
## Questions ouvertes
- [ ] Automatisation étapes 1 et 2 développement custom validé ? (@Nicolas)
- [ ] Interface du bouton « Fin d'anoxie » écran dédié ou menu existant ? (@Fabien)
- Automatisation étapes 1 et 2 - développement custom validé ? (@Nicolas)
- Interface du bouton « Fin d'anoxie » - écran dédié ou menu existant ? (@Fabien)
## Historique des modifications
@@ -21,36 +21,36 @@ author: Arthur
## Contexte projet
Le premier filtre appliqué aux palettes détermine la stratégie de rangement.
Limagrain n'utilise pas de classes de rotation ABC la répartition se fait
Limagrain n'utilise pas de classes de rotation ABC - la répartition se fait
sur la nature fonctionnelle de la palette.
## Stratégie 1 Palettes avec flag « A Anoxier » (mono ou multi lot)
## Stratégie 1 - Palettes avec flag « A Anoxier » (mono ou multi lot)
Objectif : stocker en priorité dans TK_01 (zone anoxie).
| Priorité | Règle |
|----------|-------|
| 1 | TK01 canal incomplet, même lot SAP + mêmes attributs logistiques (article, propriétaire, statut) |
| 2 | TK01 canal vide |
| 3 | TK01 canal incomplet avec autre référence |
| 1 | TK01 - canal incomplet, même lot SAP + mêmes attributs logistiques (article, propriétaire, statut) |
| 2 | TK01 - canal vide |
| 3 | TK01 - canal incomplet avec autre référence |
| 4 | Appliquer la stratégie sans flag « A Anoxier » (stratégie 2 ou 3) |
| 5 | REJET |
## Stratégie 2 Palettes mono lot sans flag « A Anoxier »
## Stratégie 2 - Palettes mono lot sans flag « A Anoxier »
Objectif : optimiser le taux de remplissage et répartir le stock entre allées.
| Priorité | Règle |
|----------|-------|
| 1 | Canal incomplet même lot SAP + mêmes attributs logistiques |
| 2 | Canal le plus adapté dans un TK qui n'a **pas** de stock équivalent (répartition inter-allées) taille optimale vs nb palettes ASN restantes |
| 2 | Canal le plus adapté dans un TK qui n'a **pas** de stock équivalent (répartition inter-allées) - taille optimale vs nb palettes ASN restantes |
| 3 | Canal le plus adapté aux nb palettes ASN restantes (toute allée) |
| 4 | REJET |
**Sélection du canal** : canal le plus grand possible qui sera rempli
complètement, ou canal qui laissera le moins de positions vides.
## Stratégie 3 Palettes multi lot sans flag « A Anoxier »
## Stratégie 3 - Palettes multi lot sans flag « A Anoxier »
| Priorité | Règle |
|----------|-------|
@@ -59,17 +59,17 @@ complètement, ou canal qui laissera le moins de positions vides.
| 3 | Canal incomplet (tout) |
| 4 | REJET |
## Stratégie 4 Palettes d'expédition (mono ou multi lot)
## Stratégie 4 - Palettes d'expédition (mono ou multi lot)
Objectif : stocker dans la zone défragmentation client, regroupées par route.
| Priorité | Règle |
|----------|-------|
| 1 | Canal incomplet avec palettes de la même route zone défragmentation client |
| 2 | Canal vide zone défragmentation client |
| 1 | Canal incomplet avec palettes de la même route - zone défragmentation client |
| 2 | Canal vide - zone défragmentation client |
| 3 | PAS DE MOUVEMENT (palette reste en place) |
## Stratégie 5 Piles de palettes vides
## Stratégie 5 - Piles de palettes vides
Article type « Palette » (NIMP15).
@@ -98,7 +98,7 @@ rejet configuré (sauf stratégie 4 où la palette reste sur place).
qu'après assignation de stock (post-libération de l'OS).
⚠️ La stratégie 1 (anoxie) utilise un fallback vers les stratégies 2/3
si TK_01 est plein important en période hors-anoxie.
si TK_01 est plein - important en période hors-anoxie.
## Historique des modifications
+255
View File
@@ -0,0 +1,255 @@
---
title: "Flux de rejet PIE - Renvoi au poste d'origine"
tags: [stockage, rejet, PIE, poste, big-bag, production, custom, agv]
status: draft
standard_ref: concepts/reception.md
jira_refs: [LIM-114]
confluence_refs: []
related:
- limagrain/01-inbound/controle-qualite-reception.md
- limagrain/07-admin/ad-customs.md
- limagrain/07-admin/parametres-projet.md
sources: ["Jira LIM-114 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Flux de rejet PIE - Renvoi au poste d'origine
> **Résumé** : logique [CUSTOM] qui, lorsqu'une palette est rejetée au PIE
> avant stockage ASRS, calcule et renvoie au WMS la destination de la palette
> (renvoi au **poste de travail d'origine**), y pose un verrou porteur de la
> cause, et gère la correction puis la ré-injection.
> **Standard EasyWMS** : → voir [Reception](../../concepts/reception.md) et le
> [Contrôle qualité à réception (PIE)](../01-inbound/controle-qualite-reception.md)
> (contrôles PIE, LIM-66). Ce qui suit documente la **spécificité Limagrain**
> du rejet.
> **Statut (LIM-114)** : Ouvert, non assignée, **rédaction en cours** côté
> ticket. Contenu susceptible d'évoluer.
## Contexte projet
Le passage au **PIE** (voir
[Contrôle qualité à réception](../01-inbound/controle-qualite-reception.md),
LIM-66) contrôle chaque support avant stockage dans l'ASRS. Si un contrôle
échoue, la palette est **rejetée** et ne rentre pas dans l'ASRS.
Causes de rejet fonctionnelles attendues : **dimension**, **poids**,
**étiquette (RFID non lue)**, **palette bois**.
### Revirement client
Cette tâche **remplace** l'approche « poumon au sol + notification SmartUI »
(esquissée dans LIM-66, Confluence « Réception » §3.2). Le client confirme
vouloir le **renvoi de la palette rejetée vers le poste de travail où elle a
été précédemment traitée**, malgré la charge AGV supplémentaire.
Risque assumé (justification initiale de l'abandon) : renvoyer au poste
d'origine mobilise l'AGV et le poste, avec un risque de blocage table/poste et
une perte de temps. **Accepté par le client.** La mise à jour Confluence sera
faite en fin de projet ; pas de modification de LIM-66 (uniquement un lien).
## Principe - le WMS répond la destination
Les routes de rejet **EasyS** amènent la palette rejetée jusqu'à un poste de
sortie (PS). Une fois au PS, la **recherche d'ordre** déclenche l'interrogation
du WMS par Galileo : **c'est le WMS qui répond la destination**. Il n'y a donc
pas de conflit avec les routes EasyS existantes et **pas de reprise de routes**
à demander à Mecalux.
Cette tâche porte uniquement sur la **logique WMS** (calcul de destination),
le report du poste d'origine (`CstAtt06`) sur le support réel, et un nouveau
paramètre `PK_REJET_PROD`.
## Topologie EST / OUEST
- Les palettes de **production** entrent obligatoirement par l'**entrée EST**
(image de quai → PIE, sans poste de travail). Exception standard : si le
`PE01` (EST) est fermé, tout le flux (y compris production) bascule côté
**OUEST** via les routes EasyS existantes.
- Les palettes de **réception** (fournisseur / intersite / retour) et les
palettes **sources de picking** passent par un poste de travail (PK) côté
OUEST, qui devient leur **poste d'origine**.
Le WMS est **agnostique du côté** : EasyS achemine le rejet vers le PS local
(EST ou OUEST), et le WMS répond la destination à partir des attributs du
support.
## Détermination de la destination de rejet
Au moment de la recherche d'ordre sur le support rejeté arrivé au PS, le WMS
calcule la destination :
```
1. Lire CstAtt06 (Code du PK assigné = poste d'origine) du support.
2. SI CstAtt06 renseigné (poste d'origine connu) : // réception, picking
candidat = poste CstAtt06
SI big-bag (CstAtt02 = true) ET candidat ∉ PK_BIGBAG : candidat = INVALIDE
SI candidat non disponible (fermé / mode incompatible / saturé) : candidat = INVALIDE
SI candidat VALIDE : destination = candidat
SINON : destination = fallback (étape 4)
3. SINON (CstAtt06 vide) : // production (CstAtt04 = ASN) ou origine inconnue
destination = PK_REJET_PROD
SI PK_REJET_PROD non disponible : destination = fallback (étape 4)
4. FALLBACK : premier poste ouvert et disponible (first-available),
compatible big-bag si CstAtt02 = true.
SI big-bag ET aucun poste PK_BIGBAG disponible :
LOG erreur + la palette attend sur le PS (pas de destination)
5. Poser un verrou "REJET PIE" sur le support, portant la cause du rejet.
6. Répondre la destination à Galileo.
```
Notes :
- Le routage vers la destination est **automatique** (convoyeurs PE/PS/PIE
sans opérateur), notamment pour les palettes de production qui partent
directement vers `PK_REJET_PROD`.
- La sélection d'un poste « disponible » réutilise la logique de disponibilité
de l'assignation des postes (mode actif, saturation), voir
[Mini jobs d'assignation au PK](../03-picking/job-assignation-pk.md)
(LIM-70 / LIM-74).
- « Origine inconnue » (`CstAtt06` vide sur un support non production) est
traitée comme production → `PK_REJET_PROD` (filet de sécurité).
## Affichage de la cause au poste
Le support arrive au poste avec le verrou « REJET PIE ». À l'arrivée / au scan
du support, le WMS **affiche la cause du rejet** (dimension, poids, étiquette,
palette bois) portée par le verrou. **Pas de notification SmartUI** (aligné
avec l'abandon des notifications de LIM-66) : l'information est portée par le
verrou et visible au scan.
> ⚠️ **Dépendance Mecalux à confirmer** : pour afficher la cause, EasyS/Galileo
> doit transmettre au WMS le **type d'erreur PIE** au moment du rejet. À
> défaut, le WMS n'affichera que « REJET PIE » sans le détail de la cause.
## Correction et ré-injection
L'opérateur traite la palette au poste selon la cause :
| Cause | Action opérateur |
|-------|------------------|
| Étiquette | Réétiquetage (impression au poste) |
| Dimension / poids | Correction physique (reconditionnement, retrait/ajout) |
| Palette bois réparable | Repalettisation |
| Palette bois **non réparable** | Déclaration « non réparable » → mouvement vers **REJ01** |
**REJ01** = sortie de rejet dur côté OUEST. Elle évite d'abîmer la navette
avec des palettes portant des flags non conformes ; la palette ne repart pas
vers l'ASRS.
Après correction, l'opérateur utilise l'option **standard « Stocker support »**
(aucun dév custom) : le support repart vers l'ASRS via le PIE (`PIE_ENTRY_PK`)
et **repasse le contrôle PIE nominal**.
- Contrôle PIE **OK** → rangement ASRS, le verrou « REJET PIE » est **levé**.
- Contrôle PIE **échoue à nouveau** → nouveau rejet, retour au poste d'origine.
**Pas de garde-fou anti-boucle** : tant qu'il y a un rejet, on renvoie au
poste d'origine (comportement stable et identique à chaque cycle).
## Prérequis - report du poste d'origine (CstAtt06)
Le `CstAtt06` « Code du PK assigné » (Support, String, créé en LIM-70)
matérialise le poste d'origine. Il est posé sur le support **fictif** de
l'image de quai par LIM-70/LIM-74, mais le support **réel** qui passe au PIE
ne l'hérite pas automatiquement. Il faut donc le **reporter** :
- **Réception (LIM-67)** : à la création du support réel au poste, renseigner
`CstAtt06` = code du PK courant.
- **Picking (LIM-91)** : sur la palette source traitée au poste de picking,
renseigner `CstAtt06` = code du PK picking (pour qu'un rejet au ré-stockage
revienne au bon poste).
- **Production** : pas de poste d'origine. `CstAtt06` reste **vide** ; le
support est identifié production via `CstAtt04` = ASN. Destination =
`PK_REJET_PROD`.
## Paramètres et attributs
Nouveau paramètre (à déclarer dans LIM-14) :
| Paramètre | Description | Défaut |
|-----------|-------------|--------|
| `PK_REJET_PROD` | Poste de rejet des palettes sans poste d'origine (production). À câbler physiquement côté EST (ex. `PS01`). | (à définir) |
Paramètres existants réutilisés : `PK_BIGBAG` (postes compatibles big-bag),
`PIE_ENTRY_PK` (PIE de ré-insertion après poste), `MODES_PKxx` (modes actifs).
Voir [Paramètres projet](../07-admin/parametres-projet.md).
Attributs utilisés (Support - voir [AD Customs](../07-admin/ad-customs.md#cstatt-support-container--palette)) :
| Attribut | Rôle dans le rejet |
|----------|--------------------|
| `CstAtt06` | Poste d'origine. Lu pour déterminer la destination. |
| `CstAtt02` | Big-bag. Contraint la destination aux postes de `PK_BIGBAG`. |
| `CstAtt04` | ASN (production). Identifie les palettes sans poste d'origine. |
## Cas de test
27 cas de test définis dans le ticket, regroupés par famille :
- **Destination réception / picking** (CT 1-4) : renvoi au poste `CstAtt06` ;
chaque cause (dimension, poids, étiquette, palette bois) route au poste
d'origine avec sa cause dans le verrou.
- **Destination production** (CT 5-7) : `CstAtt04` = ASN + `CstAtt06` vide →
`PK_REJET_PROD` (routage auto sans opérateur) ; fallback si indisponible ;
origine inconnue traitée comme production.
- **Big-bag** (CT 8-11) : poste d'origine compatible `PK_BIGBAG` ; origine
incompatible → fallback big-bag ; aucun poste compatible → log + attente PS ;
non big-bag sans contrainte.
- **Poste d'origine indisponible** (CT 12-14) : poste fermé/saturé → fallback
first-available ; aucun poste dispo → attente PS (à confirmer).
- **Affichage cause** (CT 15-17) : cause visible au scan ; pas de SmartUI ;
« REJET PIE » générique si cause non transmise par EasyS.
- **Correction / ré-injection** (CT 18-21) : « Stocker support » standard →
re-contrôle PIE ; re-rejet → retour poste sans garde-fou ; boucle stable ;
aucun écran custom.
- **Palette bois non réparable** (CT 22-23) : déclaration → REJ01 ; réparable
→ ré-injection normale.
- **Prérequis CstAtt06** (CT 24-27) : report réception (LIM-67), pose picking
(LIM-91), production sans `CstAtt06`, support réel sans report → traité
comme origine inconnue (`PK_REJET_PROD`).
## Points d'attention
⚠️ **Pas de garde-fou anti-boucle** : une palette qui échoue plusieurs fois
au PIE revient à chaque fois au poste d'origine. Aucune sortie litige
automatique.
⚠️ Le renvoi au poste d'origine mobilise l'AGV et le poste (risque de blocage
table/poste). Choix assumé par le client.
⚠️ Tâches liées à modifier : **LIM-67** (report `CstAtt06` sur support réel),
**LIM-91** (pose `CstAtt06` sur palette source picking), **LIM-14**
(déclaration `PK_REJET_PROD`), **LIM-66** (ajout d'un lien, sans modification).
## Questions ouvertes
- Transmission de la cause de rejet (type d'erreur PIE) d'EasyS/Galileo vers
le WMS - conditionne l'affichage de la cause (@Mecalux)
- Poste physique `PK_REJET_PROD` côté EST (ex. `PS01`) et sa joignabilité si
`PE01` fermé (bascule OUEST) - à valider layout
- Comportement si aucun poste disponible (attente sur PS vs autre) - à confirmer
- Disponibilité de l'imprimante d'étiquette au poste d'origine (cause
étiquette) - à valider
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-07-20 | Arthur | Création depuis LIM-114 (lecture directe, Ouvert, rédaction en cours) : flux de rejet PIE avec renvoi au poste d'origine, algorithme de destination, topologie EST/OUEST, affichage de la cause, correction/ré-injection + REJ01, report CstAtt06, paramètre PK_REJET_PROD, 27 cas de test résumés |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-114](https://easywmsfrance.atlassian.net/browse/LIM-114) | Ticket Jira (flux de rejet PIE, rédaction en cours) | 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (contrôles PIE, approche poumon abandonnée) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) / [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Tickets Jira (CstAtt06, disponibilité poste, PK_BIGBAG) | 2026 |
+1 -1
View File
@@ -47,7 +47,7 @@ zones de stockage ont été définies pour répondre à deux besoins métier :
- Réservée **en priorité** aux palettes avec le flag « A anoxier »
- Hors période d'anoxie, utilisée comme stockage normal (priorité anoxie)
- Durant l'anoxie (3-4 semaines, 2x/an) : allée + stock bloqués
- Voir [Processus d'anoxie](../08-transverse/decisions-architecture.md)
- Voir [Processus d'anoxie](processus-anoxie.md)
### Zone Principale (TK_02, 03 & 04)
+12 -11
View File
@@ -1,11 +1,11 @@
---
title: "Picking Vue d'ensemble"
title: "Picking - Vue d'ensemble"
tags: [picking, combinatoire, stations, index]
status: draft
last_updated: 2026-05-13
last_updated: 2026-07-20
---
# Picking Vue d'ensemble
# Picking - Vue d'ensemble
> **Périmètre** : picking combinatoire (CR V3.0, 4-job, CstAtt), stations de
> picking, job d'assignation PK, waves et groupes, replenishment.
@@ -17,23 +17,23 @@ last_updated: 2026-05-13
- [Picking combinatoire](picking-combinatoire.md)
- [Stations de picking](stations-picking.md)
- [Job d'assignation PK (Mega Job)](job-assignation-pk.md)
- [Waves et groupes](waves-groupes.md)
- [Replenishment](replenishment.md)
- [Séquençage TK → PS](sequencage-tk-ps.md)
- [Séquençage TK → PS Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Séquençage TK → PS - Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Placement PS → PK (choix de table)](placement-ps-pk.md)
- [Consolidation / Regroupement](consolidation-regroupement.md)
- [Échantillonnage](echantillonnage.md)
- [Process de picking au poste de travail (PK)](process-picking-pk.md)
- [Recertification - Workstation au poste de picking](recertification.md)
## Chaîne picking Ordre des traitements
## Chaîne picking - Ordre des traitements
L'ordre réel de la chaîne picking est le suivant :
1. **LIM-80** [Assignation PK](job-assignation-pk.md) : quelle commande
1. **LIM-80** - [Assignation PK](job-assignation-pk.md) : quelle commande
sur quel poste → déclenche la génération des tâches de picking
2. **LIM-84** [Séquençage TK → PS](sequencage-tk-ps.md) : ordonne les
2. **LIM-84** - [Séquençage TK → PS](sequencage-tk-ps.md) : ordonne les
sorties des TK vers les PS
3. **LIM-82** [Placement PS → PK](placement-ps-pk.md) : la palette
3. **LIM-82** - [Placement PS → PK](placement-ps-pk.md) : la palette
arrivant au PS va sur quelle table du PK
4. Workflow opérateur au PK (picking effectif)
@@ -55,4 +55,5 @@ flowchart TD
PNEG --> FILM[Choix filmage]
PPOS --> FILM
FILM --> PIE[Passage PIE]
PIE --> DEFRAG[Zone défrag client]
```
@@ -1,5 +1,5 @@
---
title: "Consolidation (regroupement) Processus sur poste"
title: "Consolidation (regroupement) - Processus sur poste"
tags: [picking, regroupement, consolidation, MOV, poste, custom]
status: draft
standard_ref: concepts/picking.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-05
author: Arthur
---
# Consolidation (regroupement) Processus sur poste
# Consolidation (regroupement) - Processus sur poste
> **Résumé** : processus [CUSTOM] de consolidation de palettes incomplètes
> partageant les mêmes critères de stock, sur poste de travail.
@@ -121,7 +121,7 @@ Vérification avec tolérance par type d'article (voir
## Points d'attention
⚠️ Le message MOV est envoyé à chaque mouvement unitaire volumétrie
⚠️ Le message MOV est envoyé à chaque mouvement unitaire - volumétrie
potentiellement élevée pour un regroupement complexe.
⚠️ Les 3 tables de préparation d'un même poste peuvent être occupées
@@ -132,8 +132,8 @@ physique + système).
## Questions ouvertes
- [ ] Programme de filmage exact pour le regroupement (@Théo)
- [ ] Interface opérateur vue regroupement maquette validée ? (@Fabien)
- Programme de filmage exact pour le regroupement (@Théo)
- Interface opérateur vue regroupement - maquette validée ? (@Fabien)
## Historique des modifications
+120 -25
View File
@@ -1,16 +1,16 @@
---
title: "Échantillonnage Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom]
title: "Échantillonnage - Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom, cor, cof]
status: draft
standard_ref: concepts/inventory.md
jira_refs: []
standard_ref: concepts/count.md
jira_refs: [LIM-107, LIM-112]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Jira LIM-107 (lecture directe 2026-07-20)", "Jira LIM-112 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Échantillonnage Processus de contrôle qualité
# Échantillonnage - Processus de contrôle qualité
> **Résumé** : processus [CUSTOM] d'échantillonnage pour contrôle qualité,
> assimilé à un inventaire dans EasyWMS, avec prélèvement sur poste de travail.
@@ -18,6 +18,11 @@ author: Arthur
> **Standard EasyWMS** : → voir [Inventory](../../concepts/count.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> **Statut (LIM-112)** : Ouvert. Cette page décrit le **flux complet**
> (message COR → ordre d'inventaire → assignation stock/poste → process
> opérateur → COF). Le **contenu de l'étiquette** relève de LIM-107 (cette
> tâche ne fait que déclencher l'impression au poste).
## Contexte projet
L'échantillonnage sert au contrôle qualité sur une partie des lots
@@ -34,11 +39,30 @@ Deux modes de création :
| Mode | Origine | Détail |
|------|---------|--------|
| Interface ERP | Message de l'ERP (COR) | Spécifie un lot à inventorier |
| Interface ERP | Message **COR** | Spécifie un lot à échantillonner |
| Manuel | Interface EasyWMS | Choix d'un lot par l'opérateur |
[CUSTOM] Un champ texte est disponible pour donner des **consignes**
rattachées à l'ordre d'inventaire.
L'ordre d'inventaire est créé avec une **priorité 3 (basse)**.
[CUSTOM] Un champ texte libre est disponible pour des **consignes**
rattachées à l'ordre (porté par `CstAtt02` de la ligne d'inventaire - voir
[AD Customs](../07-admin/ad-customs.md#cstatt-ligne-dordre-dinventaire)).
### Mapping du message COR (SAP → WMS)
| Balise | Valeur |
|--------|--------|
| `Code` | Numéro du lot d'inspection SAP |
| `Description` | `ECHANTILLONNAGE` (déclencheur de création de l'ordre) |
| `Priority` | 3 (basse) |
| `CstAtt01` | Nombre de palettes à inventorier (toujours 4 d'après SAP) |
| `CstAtt02` | Texte libre de consignes rattaché à l'ordre |
| `ProductCode` | Code **lot** SAP |
| `LotCode` | Code **produit** SAP |
| `Color` / `Source` / `Size` | Propriétaire réel SAP / Description produit / Destination (pays) |
> ⚠️ Mapping **inversé** `ProductCode` / `LotCode` : côté SAP,
> `ProductCode` porte le code **lot** et `LotCode` le code **produit**.
## [CUSTOM] Assignation du stock
@@ -46,22 +70,36 @@ L'assignation diffère selon le mode de création :
### Création par interface ERP
- Maximum **4 palettes** échantillonnées :
- Si stock global < 4 → toutes les palettes
- Si stock global ≥ 4 → 4 palettes sélectionnées
- Maximum **`CstAtt01` palettes** échantillonnées (valeur du COR, toujours
4 d'après SAP) ; moins si le stock total n'atteint pas `CstAtt01`.
- [CUSTOM] Les palettes avec un verrou d'écart de poids (« Production »)
sont **prioritaires** pour permettre une vérification simultanée
sont **prioritaires** (vérification simultanée au recomptage).
- **Prérequis** de chaque palette assignée : allée non bloquée, palette
rangée, non client, aucune tâche associée au support.
- **Ordre de sélection** (`OrderByDesc`) : palette bloquée d'abord, puis
par profondeur (la **moins profonde** en premier).
### Création manuelle
- Nombre de palettes choisi par l'opérateur
- Nombre de palettes choisi par l'opérateur (input custom). `CstAtt01` est
saisissable/éditable après la création de l'inventaire manuel, mais
**plus une fois l'inventaire lancé**.
> **Règle transverse** : un article en cours d'échantillonnage **n'est plus
> disponible** pour les ordres de sortie (comportement standard d'un
> inventaire).
## Assignation poste de travail
- Automatique, à condition que le poste soit ouvert et autorise le
mode « échantillonnage »
- Si aucun poste paramétré en mode échantillonnage → tâches en attente
- Une fois le poste assigné → création des tâches de mouvement
mode « échantillonnage » (= mode **Inventaire** EasyWMS).
- L'orchestration passe par le **Mega Job d'assignation PK** (LIM-70), qui
appelle un sous-workflow dédié (développé dans LIM-112) pour trouver et
assigner le bon PK. Si le support est un **Big-bag**, sélection d'un PK
qui l'autorise. Voir
[Mini jobs d'assignation au PK](job-assignation-pk.md).
- Si aucun poste paramétré en mode échantillonnage → tâches en attente.
- Une fois le poste assigné → création des tâches de mouvement.
## Processus sur poste de travail
@@ -90,14 +128,45 @@ Le processus est démarré et effectué sur **une seule palette à la fois**.
### Séquence opérateur
1. [CUSTOM] Si verrou « Réception » → recomptage avant échantillonnage
(à développer en **standalone**, car réutilisé dans plusieurs process)
2. Prendre une pochette d'échantillonnage vide (hors EasyWMS)
3. Effectuer un prélèvement dans un des sacs (~200g, hors EasyWMS)
4. Déposer le prélèvement dans la pochette (hors EasyWMS)
5. Éditer et imprimer une **étiquette d'échantillonnage**
5. Éditer et imprimer une **étiquette d'échantillonnage** (LIM-107)
6. Coller l'étiquette sur la pochette (hors EasyWMS)
7. Scotcher le sac ouvert sur la palette (hors EasyWMS)
8. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
9. Évacuer la palette vers le stockage
8. [CUSTOM] Choix du programme de filmage depuis une vue spécifique
9. **Valider la ligne d'inventaire**
10. Évacuer la palette vers le stockage : l'AGV déplace le conteneur du
poste vers la table d'entrée ; la palette est filmée ou non avant de
passer le PIE
## Étiquette d'échantillonnage (LIM-107)
> **Statut (LIM-107)** : en revue de code.
L'étiquette d'échantillonnage (étape 5 ci-dessus) est imprimée au **format
A5** sur l'**étiqueteuse du poste de travail** (et non sur les étiqueteuses
automatiques d'expédition), via le **flux inventaire COR/COF** (report
`CST_RPT_ECHANTILLONAGE`). Voir aussi
[Flux expédition - Étiquettes par type](../04-outbound/flux-expedition.md#contenu-des-étiquettes-dexpédition-par-type-lim-107).
Contenu de l'étiquette :
| # | Champ |
|---|-------|
| 1 | `ITM.CstAtt01` |
| 2 | `ITM.CstAtt03` |
| 3 | `ITM.CstAtt07` |
| 4 | `ITM.CstAtt08` |
| 5 | `ITM` - Famille de l'article |
| 6 | `ProductCode` de la ligne d'inventaire |
| 7 | `ITM.CstAtt10` |
| 8 | `Stock` - Attribut taille |
| 9 | « `_ / _` » laissé vide (complété au stylo par l'opérateur) |
| 10 | `ITM` - Premier alias différent du code article |
| 11 | `COR.Code` encodé en 128 |
| 12 | `COR.Code` |
## Passage PIE post-échantillonnage
@@ -114,10 +183,23 @@ Contrôle identique aux autres processus :
Si PIE NOK → rejet vers poste d'origine. Possibilité de forcer le
passage en cas d'excédent de poids non corrigeable.
## Clôture et émission du COF (LIM-112)
À la clôture de l'ordre d'inventaire (ou en cas d'**annulation**), le WMS
émet le message **COF** (WMS → SAP) :
| Balise | Description |
|--------|-------------|
| `CountCode` | Numéro du lot d'inspection |
| `Status` | `Closed` (effectué) ou `Cancelled` (annulé) |
| `UpdateDate` | Date/heure du changement d'état |
Le traitement du COF côté SAP est **hors périmètre** (équipes IT Limagrain).
## Points d'attention
⚠️ L'échantillonnage est un processus d'**inventaire** dans EasyWMS,
pas un processus de picking important pour le paramétrage des modes
pas un processus de picking - important pour le paramétrage des modes
de poste.
⚠️ Les palettes avec verrou « Production » (écart poids) sont traitées
@@ -126,20 +208,33 @@ en priorité pour optimiser le recomptage.
⚠️ La quantité prélevée (~200g) n'est pas déduite du stock dans EasyWMS
(négligeable par rapport au poids total).
⚠️ Des **big-bags** peuvent être présents dans ce process (LIM-112) → le
poste assigné doit autoriser les big-bags.
## Questions ouvertes
- [ ] Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)
- [ ] Programme de filmage exact (@Théo)
- [ ] Format de l'étiquette d'échantillonnage validé ? (@Justine)
- [x] ~~Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)~~**Résolu** (LIM-112) : négligé, non déduit du stock
- Programme de filmage exact (@Théo)
- [x] ~~Format de l'étiquette d'échantillonnage - validé ? (@Justine)~~ → Résolu (LIM-107) : format **A5**, contenu défini (12 champs), report `CST_RPT_ECHANTILLONAGE`, imprimé sur l'étiqueteuse du poste de travail
- Consignes d'échantillonnage : le mapping COR porte les consignes sur
`CstAtt02`, mais le commentaire du ticket évoque `CstAtt01` → point à
confirmer avec le client (mail à faire, @Arthur)
- Dépendance `CstAtt10` (Stage) côté ITM : requis pour l'étiquette
d'échantillonnage (LIM-107) ; à vérifier en préprod (@Nicolas) → voir
[Questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-07-20 | Arthur | LIM-107 (lecture directe) : section « Étiquette d'échantillonnage » (format A5, 12 champs, report `CST_RPT_ECHANTILLONAGE`, impression étiqueteuse poste via flux COR/COF) ; question format d'étiquette résolue ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-112 (lecture directe, Ouvert) : flux complet - mapping COR (Code/Description/Priority 3/CstAtt01 nb pal/CstAtt02 consignes/ProductCode-LotCode inversés/Color-Source-Size) ; assignation stock refondue (CstAtt01, prérequis palette, OrderByDesc bloquée puis profondeur, éditabilité CstAtt01 manuel) ; règle transverse indisponibilité stock ; orchestration Mega Job PK LIM-70 + sous-workflow + big-bag ; séquence opérateur (recomptage standalone, validation ligne inventaire, AGV→table entrée→PIE) ; nouvelle section « Clôture et émission du COF » ; big-bag confirmé ; 200g non déduit résolu ; 2 questions ouvertes (consignes CstAtt01/02, dépendance CstAtt10 Stage) ; front matter jira_refs +LIM-112/sources/tags |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| [LIM-107](https://easywmsfrance.atlassian.net/browse/LIM-107) | Ticket Jira (étiquettes expédition/échantillonnage, en revue de code) | 2026 |
| [LIM-112](https://easywmsfrance.atlassian.net/browse/LIM-112) | Ticket Jira (process échantillonnage complet COR→COF, Ouvert) | 2026 |
+226 -64
View File
@@ -1,16 +1,16 @@
---
title: "Mega Job Assignation des tâches aux PK"
title: "Mega Job - Assignation des tâches aux PK"
tags: [picking, job, assignation, agv, workflow]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80]
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80, LIM-82, LIM-106]
confluence_refs: []
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md"]
last_updated: 2026-05-12
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md", "Jira LIM-106 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Mega Job Assignation des tâches aux PK
# Mega Job - Assignation des tâches aux PK
> **Résumé** : job unique « chef d'orchestre » qui analyse les postes de
> travail éligibles et leur assigne des tâches de mouvement selon les
@@ -24,6 +24,11 @@ author: Arthur
## Contexte projet
> **Statut (LIM-70)** : dev terminé, **en préprod / attente déploiement pour
> test**. Deux revues de code validées : la première le 03/04/2026, la
> seconde le 29/06/2026 après ajout de la condition « OS en Releasing » et du
> contrôle `CstAtt06` sur l'éligibilité.
Chez Limagrain, les postes de travail (PK) sont polyvalents : réception,
picking, regroupement, échantillonnage, re certification. Plusieurs
flux différents génèrent des tâches de mouvement vers les PK. Sans
@@ -41,14 +46,36 @@ conditions suivantes doivent être remplies :
- **Aucun ordre de sortie** assigné au PK (écran Menu > Contrôle >
Affectation des postes de prélèvements)
- **Aucune tâche de mouvement** ayant pour destination ce PK
- **Aucune palette** présente sur un des sous-emplacements du PK
- **Aucune palette** présente sur un des sous-emplacements du PK (table de
préparation associée comprise)
- **Aucun conteneur de réception assigné au PK via son `CstAtt06`** (le
`CstAtt06` porte le code du picking lié à un conteneur de réception) -
contrôle ajouté le 26/06/2026
- **Le poste est ouvert** (mode actif)
- **Le paramètre MODES_PKxx existe et n'est pas vide** sinon le PK
- **Le paramètre MODES_PKxx existe et n'est pas vide** - sinon le PK
est ignoré
Si un PK ne remplit pas ces conditions, le job le saute et passe au
suivant.
> Le contrôle `CstAtt06` confirme l'usage de cet attribut côté réception
> (conteneur ↔ poste de picking lié, cf. LIM-67) - voir le point de conflit
> d'usage dans [questions ouvertes](../08-transverse/questions-ouvertes.md).
### Condition de sortie globale - OS en Releasing
Avant toute assignation, le job vérifie qu'**aucun ordre de sortie (OS)
n'est au statut `Releasing`** (query `CST_AnyOutboundOrderReleasingStatus`).
Si au moins un OS est en Releasing → le job **sort immédiatement** sans
essayer aucun mode (réception, picking, recertif…).
**Motif** : lors de la libération d'un lot de commandes, le WMS les libère
dans un ordre quelconque (pas forcément par priorité). Assigner pendant le
release risquerait de placer une commande peu prioritaire au détriment d'une
commande plus prioritaire libérée quelques secondes plus tard - ou de lancer
une réception sur un PK en priorité picking.
## Logique principale
```mermaid
@@ -82,6 +109,14 @@ Pour chaque PK éligible :
5. Sinon → exécution du sous-WF du mode suivant dans l'ordre de priorité
6. Si aucun sous-WF n'a rien assigné → le PK reste en attente
## Éléments AD (LIM-70)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Job` | Workflow + Job | Job orchestrateur : vérifie les modes autorisés des PK et tente d'assigner un ordre selon les priorités définies pour la station (LIM-69). **Intervalle : 5 secondes**. |
| `CST_PickingStations_AvailableForAssignation` | Query | Récupère les PK disponibles pour une nouvelle assignation : poste ouvert, sans conteneur ni tâche vers sa position (ni sa table de préparation), sans ordre assigné, et sans conteneur de réception assigné via `CstAtt06`. |
| `CST_AnyOutboundOrderReleasingStatus` | Query | Indique s'il existe au moins un OS au statut `Releasing` → condition de sortie globale du job. |
## Gestion des Big-Bags
Le paramètre `PK_BIGBAG` définit quels PK autorisent la présence de
@@ -100,91 +135,211 @@ spécialisés :
| Sous-WF | Ticket | Process | Page wiki |
|---------|--------|---------|-----------|
| Mini Job images de quai → PK | [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Réception fournisseur / intersite / retour client (depuis images de quai) | [Job réception PK](../05-agv/job-reception-pk.md) |
| Mini Job PS → PK | [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | _(tâche à écrire)_ | — |
| Mini Job PS → PK | ~~[LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75)~~ **Annulé** → [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | PS (picking station) → PK. Détail reporté à LIM-82 | _(à écrire sur LIM-82)_ |
| Mini Job assignation commandes → PK | [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Assignation des ordres de sortie (commandes) aux PK pour picking | Voir section ci-dessous |
| Mini Job assignation recertification → PK | [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Assignation des OS de classe RECERTIFICATION aux PK + création des tâches d'acheminement (conteneurs d'expédition → PK) et de chargement au quai recertification | Voir section ci-dessous |
Chaque sous-workflow retourne une information au WF principal indiquant
s'il a assigné quelque chose ou non.
## Mini Job Assignation commandes aux PK (LIM-80)
## Mini Job - Assignation commandes aux PK (LIM-80)
Ce sous-workflow est appelé par le Mega Job quand le mode **Picking** est
actif sur un PK. Il assigne un ordre de sortie (commande) au poste.
> **Statut (LIM-80)** : dev terminé, **en cours de test client
> (pré-production)**. Revue de code validée le **26/06/2026**.
### Éligibilité du PK pour une commande
Ce sous-workflow est le **mode Picking** du Mega Job. Il est appelé quand le
mode Picking est actif sur un PK éligible et assigne un **ordre de sortie
(OS)** au poste.
Le PK peut recevoir une commande si **toutes** les conditions sont
remplies :
En standard EasyWMS, l'assignation des commandes aux PK est gérée par le
workflow `OutboundOrder_AssignPKMP_ByWarehouse_WF`, déclenché par des
subscriptions événementielles (ouverture de station, changement de mode de
travail, etc.). Chez Limagrain ce déclenchement événementiel est
**désactivé** (8 subscriptions passées en `Disabled`, cf. tableau plus
bas) : c'est le Mega Job qui orchestre l'assignation lorsqu'un PK est
éligible en mode Picking.
- Le PK **autorise la préparation de commande** (mode Picking actif)
- Le PK **n'a pas de commande déjà assignée**
- Le PK **est vide** (aucune palette présente)
- Le PK **n'a aucune tâche en direction de celui-ci**
### Éligibilité du PK
### Choix de la commande
L'éligibilité du PK est **entièrement vérifiée par le Mega Job** (cf.
section [Éligibilité d'un PK](#éligibilité-dun-pk) ci-dessus) avant l'appel
de ce mini job. Le mini job ne refait pas ces contrôles : il reçoit un PK
déjà qualifié en mode Picking.
```mermaid
flowchart TD
A[PK éligible en mode Picking] --> B{Commande Messagerie\ndisponible ?}
B -- Oui --> C{PK_TRANSPORTEUR_MESSAGERIE\ncontient une valeur ?}
C -- Non --> D[Assigner 1ère Messagerie\net enregistrer PK dans param]
C -- Oui --> E{Valeur = ce PK ?}
E -- Oui --> F[Assigner prochaine Messagerie\ndu même transporteur]
F --> G{Commande trouvée ?}
G -- Non --> H[Vider le paramètre]
E -- Non --> I[Ignorer les Messagerie\nde ce transporteur]
I --> J[Chercher autre commande]
B -- Non --> J
H --> J
J --> K[Assignation standard\npar tournée / numéro d'arrêt]
```
### OS concernés
#### Commandes Messagerie (prioritaires)
Tous les OS au statut `Release` ayant du stock assigné avec du picking à
réaliser sont concernés, quel que soit leur type (commande client,
messagerie palette, messagerie carton), **sauf la recertification**
(`OutboundClassCode == RECERTIFICATION`).
Les commandes de **classe Messagerie** sont expédiées le jour même et
sont donc **prioritaires** sur les commandes standard.
Le PK ayant déjà été choisi par le Mega Job, le mini job assigne l'OS sur
**ce PK** (contrairement au standard, pas de recalcul de routage ni de
choix de PK).
Une fois un PK choisi pour une commande Messagerie, **toutes les
commandes Messagerie du même transporteur** doivent être assignées au
même PK. Pour cela, un paramètre par transporteur est créé :
`PK_TRANSPORTEUR_MESSAGERIE`.
### Choix de la commande - critères de tri
Règles :
L'OS le mieux assignable est sélectionné par la query
`CST_OutboundOrder_BestPendingAssignment_ForPK` (OS `Released`, hors classe
`RECERTIFICATION`, sans assignation existante, disposant de supports de
picking). Les OS candidats sont triés dans cet ordre (**arbitrage Justine
du 19/06/2026**) :
- À l'assignation d'une commande Messagerie au PK, le nom du PK est
enregistré dans le paramètre
- Si le paramètre contient le nom de ce PK → assigner **uniquement**
des commandes Messagerie du même transporteur. Si aucune n'est
trouvée → vider le paramètre
- Si le paramètre contient un autre PK → ignorer toutes les commandes
Messagerie de ce transporteur pour ce PK
1. **Priorité de l'OS** - définie par l'ERP dans le SOR/RUT
2. **Tâches de shipping** - un OS déjà en cours de shipping passe en
priorité, pour finir la commande en cours
3. **Date de libération** - la plus ancienne en premier
#### Commandes standard
> Le premier jet (revue de code du 05/06/2026) triait par priorité →
> nombre de conteneurs de picking (décroissant) → date de libération. Le
> tri a été revu le 19/06/2026 : le critère « OS déjà en cours de shipping »
> remonte au-dessus du nombre de conteneurs, pour ne pas laisser une
> commande à moitié préparée.
Le processus standard est utilisé pour assigner une commande à une
table de préparation et un PK. Les commandes d'une même tournée sont
préparées en respectant le **numéro d'arrêt** (plus petit numéro
d'arrêt en premier).
> **Priorité Messagerie** : il n'y a **pas** de priorisation custom côté WMS
> pour les commandes Messagerie. C'est SAP qui gère leur priorité en amont
> via la priorité du SOR (une Messagerie à expédier le jour même reçoit une
> priorité plus haute). Le paramètre `PK_TRANSPORTEUR_MESSAGERIE` envisagé
> initialement n'a **pas** été implémenté.
> ⚠️ À confirmer côté client (cf.
> [questions ouvertes](../08-transverse/questions-ouvertes.md)).
### Création des tâches de picking
Après l'assignation, les tâches de picking sont créées (sortie des palettes
source du TK vers le PS/PK). Elles alimentent le séquençage TK → PS
([LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84)).
### Éléments AD (LIM-80)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Picking_PR` | Workflow | Mode Picking du Mega Job : récupère le meilleur OS assignable et crée l'assignation PK. |
| `CST_OutboundOrder_BestPendingAssignment_ForPK` | Query | Meilleur OS assignable (Released, hors RECERTIFICATION, sans assignation, avec supports de picking), trié priorité → tâches de shipping → date de libération. |
> Le workflow orchestrateur `CST_PickingStationAssignment_Job` (déjà décrit
> dans [Éléments AD (LIM-70)](#éléments-ad-lim-70)) a été enrichi de l'appel
> de ce mini job d'assignation picking.
### Subscriptions désactivées
Le déclenchement événementiel standard de
`OutboundOrder_AssignPKMP_ByWarehouse_WF` est neutralisé (le Mega Job prend
le relai). Les 8 subscriptions suivantes sont passées en `Disabled` :
| Subscription | Event |
|---|---|
| `PickingStationOpenedStationEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Ouverture d'un PK |
| `PickingStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail PK |
| `PickingStationChangedMaxOutboundOrdersEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement max OS sur PK |
| `MpStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail MP |
| `MpStationAssignedModeEvent_OutboundOrder_AssignPKMP_ByWarehouse_WF` | Mode assigné à MP |
| `DockStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail Dock |
| `OrderAssignDeletedEvent` | Suppression d'une assignation de PK |
| `OutboundOrderAssignedRouteEvent_OutboundOrder_AssingPKMP_ByWarehouse` | Assignation d'un OS à une route |
## Mini Job - Assignation recertification aux PK (LIM-106)
> **Statut (LIM-106)** : dev terminé, **en attente de déploiement pour test**
> (livré en préprod le 03/06/2026). Revue de code Maxime le 29/06/2026
> (ajustements ci-dessous).
Ce sous-workflow est le **mode Recertification** du Mega Job. Il est le
pendant du mini job picking ([LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80)),
mais pour les OS de classe **RECERTIFICATION** - que LIM-80 exclut
justement de l'assignation picking standard. Le process de poste associé
est décrit dans [Recertification - Workstation au PK](recertification.md).
### Assignation du PK
Le meilleur OS recertification en attente est sélectionné par la query
`CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` et assigné
au PK éligible. Les candidats sont triés dans cet ordre :
1. **Priorité de l'OS**
2. **Date de libération** - la plus ancienne en premier
### Création des tâches
Les palettes à acheminer au poste sont des **conteneurs d'expédition**. Le
process de création des tâches d'expédition standard est donc intercepté :
`Outbound_CreateShippingContainersTasks_PR` filtre les OS de classe
RECERTIFICATION et redirige vers le sous-WF custom
`CST_Outbound_Recertification_CreateShippingContainersTasks_PR`, qui
récupère le PK assigné à l'OS et crée les **tâches de mouvement** des
conteneurs vers ce PK.
À l'arrivée du conteneur au PK (`Container_MovedEventHandler_PK_PR`), une
**tâche de chargement vers le quai de recertification** est créée. La tâche
de mouvement est marquée `ProcessType = "recertification"`
(`Container_MovedEvent_PR_V1`) et porte le flag **`CstAtt02` = Recertification**
(affiché « Recertification » dans la vue des tâches `TaskVList`) - voir
[Catalogue AD customs - CstAtt Tâche](../07-admin/ad-customs.md#cstatt-tâche-task).
> **CstAtt de recertification : 01 → 02.** Le premier jet (revue Vincent
> 03/06) posait le flag sur le `CstAtt01` de la tâche ; il a été **déplacé
> sur le `CstAtt02`** (Maxime 26/06/2026), le `CstAtt01` étant réservé au
> numéro de séquence picking (LIM-84).
### Annulation des tâches
Si le conteneur d'expédition est supprimé (`ShippingContainerDeletedEvent`),
la souscription `CST_ShippingContainerDeleted_CancelRecertificationTask`
appelle `CST_Container_CancelRecertificationTasks` qui **annule les tâches
de mouvement** de recertification associées au conteneur.
### Garde-fous (revue Maxime 29/06/2026)
- **Pas de tâche générée** si le conteneur porte déjà une tâche, ou si le
support est **sur l'AGV**.
- **Blocage de la génération** de tâche si **aucun quai n'est assigné** à
l'OS de type RECERTIFICATION (erreur dans l'ordre de sortie).
### Éléments AD (LIM-106)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Recertification_PR` | Workflow | Mode Recertification du Mega Job : sélectionne le meilleur OS recertification en attente et crée l'assignation PK. |
| `CST_Outbound_Recertification_CreateShippingContainersTasks_PR` | Workflow | Récupère le PK assigné à l'OS et crée les tâches de mouvement des conteneurs d'expédition vers le PK. |
| `Outbound_CreateShippingContainersTasks_PR` | Workflow | Modifié : filtre les OS de classe RECERTIFICATION et redirige vers le sous-WF custom de création de tâches. |
| `Outbound_GetOutboundOrderShippingContainersAndPsGroup_PR` | Workflow | Modifié : remonte le code de classe et la priorité de l'OS. |
| `Container_MovedEvent_PR_V1` | Workflow | Modifié : positionne `ProcessType = "recertification"` sur la tâche si l'OS est de classe recertification. |
| `Container_MovedEventHandler_PK_PR` | Workflow | Modifié : crée une tâche de chargement vers le quai de recertification quand un conteneur termine une tâche de mouvement d'un OS recertification. |
| `CST_Container_CancelRecertificationTasks` | Workflow | Récupère et annule les tâches de recertification d'un conteneur (appelé par la souscription). |
| `CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` | Query | Meilleur OS recertification assignable à un PK (tri priorité → date de libération). |
| `CST_OutboundOrderLineDetails_ByRecertificationContainer` | Query | Détails de ligne d'OS pour un conteneur d'un OS recertification. |
| `CST_RecertificationTasks_ByContainer` | Query | Tâches de recertification associées à un conteneur. |
| `CST_ShippingContainerDeleted_CancelRecertificationTask` | Subscription | Sur `ShippingContainerDeletedEvent`, appelle `CST_Container_CancelRecertificationTasks`. |
| `TaskVList` | Vue | Ajout du `CstAtt02` (flag « tâche de recertification »). |
| `CST_Task_CustomAttribute1` | Ressource i18n | Libellé FR/EN « Recertification » de la colonne CstAtt tâche. |
## Points d'attention
⚠️ Le Mega Job est le chef d'orchestre du picking : il distribue le
travail aux PK en fonction des modes configurés par PK.
⚠️ Les commandes Messagerie sont prioritaires et ont une affinité
transporteur/PK via `PK_TRANSPORTEUR_MESSAGERIE`.
⚠️ Priorité Messagerie gérée par SAP via la priorité du SOR - pas de
custom WMS (`PK_TRANSPORTEUR_MESSAGERIE` non implémenté).
⚠️ L'éligibilité PK vérifie 4 conditions (mode autorisé, pas de
commande, vide, pas de tâche en cours).
⚠️ L'éligibilité PK vérifie plusieurs conditions (poste ouvert, pas de
commande, vide, pas de tâche en cours, pas de conteneur réception lié via
`CstAtt06`, `MODES_PKxx` non vide).
⚠️ Le job **sort globalement** si au moins un OS est en `Releasing` (pas
d'assignation pendant une libération de commandes).
## Questions ouvertes
- [ ] Fréquence du Mega Job toutes les N secondes ou événementiel ?
(@Nicolas)
- [ ] Sous-WF regroupement et échantillonnage quand les documenter ?
- ~~Fréquence du Mega Job - toutes les N secondes ou événementiel ?~~
**Résolu (LIM-70)** : job périodique, intervalle **5 secondes**.
- Sous-WF regroupement et échantillonnage - quand les documenter ?
(@Arthur)
- [ ] Interaction PK_BIGBAG et modes de travail un PK en mode
- Interaction PK_BIGBAG et modes de travail - un PK en mode
Big-Bag peut-il aussi traiter du picking normal ? (@Nicolas)
- Confirmer côté client que SAP gère la priorité des commandes Messagerie
dans le SOR - `PK_TRANSPORTEUR_MESSAGERIE` abandonné (LIM-80)
(@Arthur → Nicolas/Olivier) → voir
[questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
@@ -193,11 +348,18 @@ commande, vide, pas de tâche en cours).
| 2026-05-12 | Arthur | Création initiale depuis LIM-70 (Mega Job) |
| 2026-05-12 | Arthur | Ajout sous-WF assignation commandes (LIM-80) : Messagerie prioritaire, affinité transporteur/PK |
| 2026-05-13 | Arthur | Restauration sections tronquées (Messagerie détail, commandes standard, points d'attention, questions, historique, références) |
| 2026-07-17 | Arthur | Relecture commentaires LIM-70 : section Éléments AD (CST_PickingStationAssignment_Job intervalle 5s, CST_PickingStations_AvailableForAssignation, CST_AnyOutboundOrderReleasingStatus), condition de sortie globale « OS en Releasing », contrôle éligibilité CstAtt06, statut préprod + 2 revues de code, résolution question fréquence (5s) |
| 2026-07-17 | Arthur | LIM-75 (Mini Job PS → PK) confirmé Annulé → repris par LIM-82 : table sous-workflows annotée |
| 2026-07-17 | Arthur | Relecture revue de code LIM-80 (préprod, validée 26/06) : refonte section mini job assignation (query `CST_OutboundOrder_BestPendingAssignment_ForPK`, WF `CST_PickingStationAssignment_Picking_PR`, 8 subscriptions désactivées, OS hors RECERTIFICATION) ; tri final priorité → tâches de shipping → date de libération (arbitrage Justine 19/06) ; abandon `PK_TRANSPORTEUR_MESSAGERIE`, priorité Messagerie gérée par SAP/SOR |
| 2026-07-20 | Arthur | LIM-106 (lecture directe, attente déploiement test) : nouvelle section « Mini Job assignation recertification aux PK » (assignation OS RECERTIFICATION triée priorité → date de libération, création tâches de mouvement conteneurs d'expédition → PK + tâche chargement quai recertification, annulation sur suppression conteneur, garde-fous Maxime 29/06, flag CstAtt02 tâche déplacé du 01) ; ligne ajoutée à la table des sous-workflows |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation commandes) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job, 7 commentaires) | 2026-04 → 2026-06 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation OS aux PK, 6 commentaires, préprod) | 2026-06 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) | 2026 |
| [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | Ticket Jira (Mini Job PS → PK, **Annulé** → LIM-82) | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (Mini Job PS → PK, reprise) | 2026 |
| [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Ticket Jira (Mini Job assignation recertification aux PK, 3 commentaires, attente déploiement test) | 2026-06 |
@@ -1,5 +1,5 @@
---
title: "Picking sur poste de travail Expédition client"
title: "Picking sur poste de travail - Expédition client"
tags: [picking, poste, expédition, ordonnancement, MOV, PCK]
status: draft
standard_ref: concepts/picking.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-13
author: Arthur
---
# Picking sur poste de travail Expédition client
# Picking sur poste de travail - Expédition client
> **Résumé** : processus [CUSTOM] de picking sur poste de travail pour
> les commandes client, avec ordonnancement par espèce, règles de picking
@@ -61,7 +61,7 @@ sur une même palette fille.~~
Limagrain ne fait pas de bio, pas de raison de maintenir cette
contrainte. Paramètre réactivable si besoin futur.
> Voir [Séquençage TK → PS Arbitrage](sequencage-tk-ps.md#arbitrage-des-contradictions-reu-11052026)
> Voir [Séquençage TK → PS - Arbitrage](sequencage-tk-ps-historique.md#arbitrage-des-contradictions-réu-11052026)
> pour le détail de l'analyse comparative.
## [CUSTOM] Règle du picking négatif
@@ -83,7 +83,7 @@ classique.
> Le picking négatif est **prioritaire sur Maïs first** et toutes les
> autres règles de tri (confirmé par Olivier, réu. 11/05/2026).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1--picking-négatif-en-premier).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1---picking-négatif-en-premier).
## [CUSTOM] Calcul équivalent palette (pro rata Bag/pal)
@@ -109,13 +109,13 @@ Seuil cible : **~95%** de remplissage (marge de sécurité).
Poids max palette : **1 250 kg** (AF fait foi, corrige 1 200 kg du
DevOps).
## [CUSTOM] Verrou « HORS TOLERANCE » Recomptage
## [CUSTOM] Verrou « HORS TOLERANCE » - Recomptage
Si la palette source porte le verrou « HORS TOLERANCE » → recomptage
demandé avant le picking (inventaire).
- Si stock restant suffisant après inventaire → assignation maintenue
(workflow `OnStockAdjust` recalcule uniquement si nécessaire ne casse
(workflow `OnStockAdjust` recalcule uniquement si nécessaire - ne casse
pas la tâche en cours)
- Si plus assez de stock → réassignation ailleurs + retrait verrou
@@ -168,16 +168,16 @@ sur les tables élévatrices des PK.
### Règles de priorité
1. **Picking négatif toujours en premier** une seule palette à la fois
1. **Picking négatif toujours en premier** - une seule palette à la fois
pour ce process, toujours déposée sur la **table du centre**
2. **Picking classique ensuite** jusqu'à **2 palettes simultanées** au
2. **Picking classique ensuite** - jusqu'à **2 palettes simultanées** au
PK, déposées sur les **tables latérales**
3. Le WMS peut envoyer **1 palette picking négatif + 1 palette picking
classique** en même temps (pour compléter la palette post-picking
négatif)
4. Le nombre de palettes de prélèvement au PK ne dépasse **jamais 2**
### Picking négatif Détail
### Picking négatif - Détail
À chaque tâche de picking négatif :
@@ -240,7 +240,7 @@ Contrôle PIE identique aux autres processus (voir
## Points d'attention
⚠️ Le picking négatif (seuil 55% + poids ≥ 7 kg, deux conditions
cumulatives) est une règle métier intégrée dans EasyWMS c'est un
cumulatives) est une règle métier intégrée dans EasyWMS - c'est un
développement custom.
⚠️ Le traitement commercial est **désactivé**
@@ -255,17 +255,17 @@ développement custom.
l'assignation si le stock restant est suffisant.
⚠️ L'algorithme de répartition TP est le « gros morceau » custom du
picking gestion combinatoire de tous les cas.
picking - gestion combinatoire de tous les cas.
## Questions ouvertes
- [x] Programme de filmage exact documenté, 8 programmes A→H
- [x] ~~Programme de filmage exact~~ - documenté, 8 programmes A→H
(voir [Flux expédition](../04-outbound/flux-expedition.md#filmage))
- [x] Process sans picking négatif / seuil confirmé 55% + poids ≥ 7 kg
- [x] ~~Process sans picking négatif / seuil~~ - confirmé 55% + poids ≥ 7 kg
(réu. 11/05/2026)
- [x] Traitement commercial supprimé
- [x] ~~Traitement commercial~~ - supprimé
(`CONTROLE_TRAITEMENT_COMMERCIAL = false`, réu. 11/05/2026)
- [ ] Gestion du picking négatif dans l'interface opérateur (@Nicolas)
- Gestion du picking négatif dans l'interface opérateur (@Nicolas)
## Historique des modifications
+140 -9
View File
@@ -3,10 +3,10 @@ title: "Placement des palettes PS → PK (choix de table)"
tags: [picking, placement, table, buffer, ping-pong, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-82]
jira_refs: [LIM-82, LIM-84, LIM-91, LIM-95, LIM-116]
confluence_refs: []
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md"]
last_updated: 2026-05-12
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md", "Jira LIM-82 (commentaires revue de code)", "Jira LIM-95 (Annulé, mergé dans LIM-82)", "Jira LIM-116 (capacité buffers PK → PK)"]
last_updated: 2026-07-20
author: Arthur
---
@@ -22,6 +22,27 @@ author: Arthur
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
> **Statut (LIM-82)** : dev terminé, **en attente de déploiement pour
> test**. Livré en préprod le 25/06/2026, revue de code validée le
> **03/07/2026** (après une itération NOK le 02/07). Ce ticket est la
> reprise de [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75)
> (V1 annulé). Positionnement dans la chaîne :
> [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) assignation →
> [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) séquençage
> TK → PS → **LIM-82 placement PS → PK**
> [Process picking au PK (LIM-91)](process-picking-pk.md).
> ⚠️ **LIM-95 (Annulé) mergé ici** : le ticket
> [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95)
> « [JOB] génération des mouvements depuis les buffers » est
> **Annulé(e)** ; ses modifications ont été intégrées à **LIM-82**
> (commentaire Maxime Halgand, 26/06). Ses deux demandes sont couvertes
> ici : (1) ne pas générer le mouvement d'une palette si une autre tâche
> du même OS a une séquence prioritaire → voir
> [Gate de séquence (critère B)](#gate-de-séquence-critère-b) ; (2)
> contrôler la capacité de la **TP** (sous-emplacement) en plus de celle
> du PK → voir la note ci-dessous.
## Contexte projet
Chaque PK dispose de **3 tables** soumises à une contrainte d'adjacence
@@ -31,7 +52,7 @@ stricte :
TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE
✅ adjacentes ✅ adjacentes
TABLE_GAUCHE ←————————————————→ TABLE_DROITE
TABLE_GAUCHE ←----------------→ TABLE_DROITE
❌ INTERDIT
```
@@ -41,7 +62,7 @@ Règles de mouvement :
la table
- L'opérateur peut déplacer du **stock** (sacs, colis) d'une palette à
une autre **uniquement entre deux tables adjacentes**
- Il est **interdit de déplacer une palette d'une table à une autre**
- Il est **interdit de déplacer une palette d'une table à une autre** -
ni par l'opérateur, ni par l'AGV. Une palette arrive sur une table
et ne peut que repartir (évacuation)
- **TABLE_CENTRE** est le pivot : seule table adjacente aux deux autres
@@ -87,6 +108,12 @@ FONCTION décider_destination(palette, PK) :
RETOURNER ATTENTE
```
> [CUSTOM] **Capacité TP (LIM-95)** : dans tous les flux qui vérifient la
> capacité du PK, la capacité de la **TP** (sous-emplacement de la table)
> doit aussi être contrôlée. Attention : **aucun capteur de présence
> n'est relié à Galileo** - la capacité est donc suivie logiquement par
> le WMS, pas par un signal physique.
## Décision niveau 2 : choix de la table
Le choix dépend du **type de picking** de la tâche associée.
@@ -232,7 +259,7 @@ PICKING_DIRECT restants ≥ `SEUIL_RECENTRAGE_PF` (défaut : 3), le WMS
peut déclencher un mouvement AGV pour recentrer la PF sur
TABLE_CENTRE.
## Évacuation des tables Priorité
## Évacuation des tables - Priorité
Lorsqu'aucune table n'est libre et qu'il faut en libérer une :
@@ -259,6 +286,13 @@ buffer affectées à ce PK :
**Règle critique** : l'ordre de sortie des buffers est dicté par
`Line.CstAtt`, **pas** par l'ordre d'arrivée physique en buffer.
> [CUSTOM] **Capacité buffers PK → PK (LIM-116)** : la génération de
> mouvement depuis le picking (`Task_GenerateMovement_PR_V2`) contrôle la
> capacité des buffers lorsqu'une palette va d'un poste de picking à un
> autre. Les mouvements manuels du poste (appeler / renvoyer, filmage au
> retour) sont détaillés dans
> [Process picking au PK](process-picking-pk.md#mouvements-manuels-du-poste-appeler--renvoyer---lim-116).
## Palettes multi-commandes
Une palette source peut être assignée à plusieurs OS.
@@ -288,11 +322,91 @@ séquence du mode "Picking" dans `MODES_PKxx`
| `MAX_PRELOAD_PAR_PK` | Nombre max de palettes pré-chargées en buffer ES par PK | 3 |
| `SEUIL_RECENTRAGE_PF` | Nombre min de PICKING_DIRECT restants pour recentrer la PF au centre | 3 |
| `CONTROLE_TRAITEMENT_COMMERCIAL` | Séparer ou non les articles par TC sur les palettes filles | `false` (V1.1) |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | - |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | - |
## Implémentation définitive (LIM-82)
> Cette section reflète le **code livré et validé** (revue de code du
> 03/07/2026). Elle prime sur l'algorithme V1.0 ci-dessus en cas d'écart -
> ce dernier reste documenté comme référence de conception.
### Records et workflows
| Élément AD | Type | Rôle |
|------------|------|------|
| `TaskWF` | Record | Ajout d'un CstAtt de tâche (dont `CstAtt3`, flag « palette passée au shuttle »). |
| `CST_ChooseDestinationFromPS` | Workflow | Décision principale : table de picking (avec choix de la position), buffer ES si aucune place, ou attente au PS s'il n'y a plus de place (selon `MAX_PRELOAD_PAR_PK`). |
| `Container_MovedEventHandler_PS_PR` | Workflow | À l'arrivée d'une palette de tâche picking au PS, appelle `CST_ChooseDestinationFromPS`. |
| `Container_MovedEventHandler_ET_PR` | Workflow | Passe `CstAtt3` de la tâche à `True` **après** que la palette a quitté le shuttle, pour autoriser la sortie des palettes suivantes du TK. |
| `Container_MovedEventHandler_MS_PR` | Workflow | Idem : passe `CstAtt3` à `True` quand une palette atteint `TS_12` (sortie du `TK_01`, qui ne passe pas par le shuttle). |
| `CST_Job_CheckPSBufferContainers` | Job | Ré-évalue les palettes en attente au PS et en buffer : quand une place picking se libère, envoie la bonne palette au picking. |
### Queries
| Query | Rôle |
|-------|------|
| `CST_Picking_GetSiblingTasks` | Récupère les tâches de picking du même **ordre de sortie** (OS). |
| `CST_GetTasksWaitingOnPSAndBufffer` | Récupère toutes les tâches sans mouvement présentes sur un PS ou un buffer (en attente de picking ou de stage). |
| `CST_GetStationRoutes_ToDisable` | Récupère les routes à désactiver pour le mouvement PS : route PS → PK, et routes PS → buffer plein. |
### Gate de séquence (critère B)
Avant toute pose sur une table, le WMS vérifie via
`CST_Picking_GetSiblingTasks` s'il existe une autre palette du **même OS**
avec un `Line.CstAtt` (séquence, écrit par
[LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84)) **inférieur**
encore à traiter en amont (buffer / shuttle). Si oui, la palette qui arrive
n'est **pas** posée sur une table : elle part en buffer ES (ou en attente si
buffer indisponible).
> Cette règle correspond à la 1re demande de
> [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95) (Annulé,
> mergé ici) : « le job traite chaque tâche une par une ; si une autre
> tâche de l'OS a une séquence prioritaire (`Task.CstAtt01` plus faible),
> ne pas générer le mouvement ». `Task.CstAtt01` et `Line.CstAtt`
> désignent la même **séquence de picking** (voir
> [ad-customs](../07-admin/ad-customs.md), CstAtt Tâche 01).
> ⚠️ **Correction revue de code (02→03/07)** : le contrôle portait
> initialement sur les tâches de la **route** ; il a été ramené au périmètre
> de l'**OS**. Vérifier sur la route provoquait un faux blocage quand deux OS
> d'une même route étaient préparés simultanément sur deux PK différents.
### Gating shuttle (CstAtt3)
Le shuttle est le goulot d'ordonnancement entre le TK et les PS. Le flag
`CstAtt3` de la tâche est mis à `True` une fois la palette sortie du shuttle
(handler `ET`) ou arrivée à `TS_12` pour le `TK_01` qui ne passe pas par le
shuttle (handler `MS`). Ce flag conditionne la sortie des palettes suivantes
du TK, garantissant l'ordre de passage (cf.
[ad-customs](../07-admin/ad-customs.md) CstAtt Tâche 03).
### Écarts avec l'algorithme V1.0
- Les états `EN_ATTENTE_EVACUATION` et la « réactivation » d'une
`PALETTE_FILLE_EN_ATTENTE` sont **abandonnés** dans LIM-82 (barrés dans la
description du ticket). Les priorités V1.0 qui s'y réfèrent (ex. cas
picking direct « adjacente en cours d'évacuation ») ne sont donc plus
applicables.
- Picking négatif (critère C) : `TABLE_CENTRE` libre **ET** au moins une
table de côté adjacente libre → palette source sur `TABLE_CENTRE` ; sinon
buffer ES. Une seule palette négative à la fois par PK.
- Picking direct (critère D) : table de côté libre **adjacente** à la
`PALETTE_FILLE_ACTIVE` ; en cas de double disponibilité, `TABLE_GAUCHE`
prioritaire sur `TABLE_DROITE` ; sinon buffer ES.
- Les mécanismes `SEUIL_RECENTRAGE_PF` (recentrage AGV) et
`CONTROLE_TRAITEMENT_COMMERCIAL` proviennent de la spec V1.0 et ne
figurent pas dans les critères validés de LIM-82.
→ ⚠️ À confirmer côté implémentation.
## Points d'attention
⚠️ L'implémentation livrée (LIM-82) prime sur l'algorithme V1.0 ci-dessus :
voir [Implémentation définitive (LIM-82)](#implémentation-définitive-lim-82)
(états `EN_ATTENTE_EVACUATION` / réactivation abandonnés, gate de séquence
OS, gating shuttle `CstAtt3`).
⚠️ La contrainte d'adjacence est **physique** : l'opérateur ne peut pas
déplacer de sacs entre TABLE_GAUCHE et TABLE_DROITE directement.
@@ -307,7 +421,15 @@ d'entrée en buffer.
## Questions ouvertes
(Aucune identifiée — algorithme V1.0 complet)
- Big-bag : comportement attendu si une palette big-bag arrive et qu'aucun
PK `PK_BIGBAG` autorisé n'est disponible (attente dédiée, refus, autre
file) ? (question ouverte LIM-82)
- Confirmer si les mécanismes V1.0 `SEUIL_RECENTRAGE_PF` (recentrage AGV) et
`CONTROLE_TRAITEMENT_COMMERCIAL` sont réellement implémentés (absents des
critères validés LIM-82).
- LIM-75 est cité comme pré-requis « Mini Job picking négatif » (évaluation
du `TaskType` OrdinaryPicking/NegativePicking) alors qu'il est confirmé
Annulé → LIM-82 : clarifier où le `TaskType` est réellement écrit.
## Historique des modifications
@@ -315,11 +437,20 @@ d'entrée en buffer.
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis spec "Logique combinatoire picking - PS vers PK - V1.0" |
| 2026-05-13 | Arthur | Correction règle déplacement palette (jamais déplacée, ni AGV ni opérateur), ajout jira_ref LIM-82 |
| 2026-07-17 | Arthur | Relecture revue de code LIM-82 (préprod, validée 03/07) : ajout section « Implémentation définitive » (WF `CST_ChooseDestinationFromPS`, `Container_MovedEventHandler_PS/ET/MS_PR`, job `CST_Job_CheckPSBufferContainers`, queries `CST_Picking_GetSiblingTasks` / `CST_GetTasksWaitingOnPSAndBufffer` / `CST_GetStationRoutes_ToDisable`) ; gate de séquence OS (correction route → OS) ; gating shuttle `CstAtt3` ; abandon états `EN_ATTENTE_EVACUATION` + réactivation PF ; statut préprod ; questions big-bag / recentrage / TaskType LIM-75 |
| 2026-07-17 | Arthur | LIM-95 confirmé Annulé(e) → mergé dans LIM-82 (pattern V1/V2, pas de duplication) : note de supersession (chaîne), rattachement des 2 demandes (gate de séquence `Task.CstAtt01`=`Line.CstAtt` ; note capacité TP + absence capteurs Galileo), jira_refs/sources/Références |
| 2026-07-20 | Arthur | Note capacité buffers PK → PK (LIM-116, `Task_GenerateMovement_PR_V2`) + renvoi vers les mouvements manuels du poste (process-picking-pk.md) ; jira_refs +LIM-116, sources, last_updated, Références |
## Références
| Source | Type | Date |
|--------|------|------|
| Logique combinatoire picking - PS vers PK - V1.0 | Spécification technique | 27/04/2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, 5 commentaires, préprod) | 2026-06 → 07 |
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira (séquençage TK → PS, écrit `Line.CstAtt`) | 2026 |
| [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | Ticket Jira (picking négatif TaskType, **Annulé** → LIM-82) | 2026 |
| [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95) | Ticket Jira ([JOB] mouvements depuis buffers, **Annulé** → mergé LIM-82) | 2026 |
| [LIM-91](https://easywmsfrance.atlassian.net/browse/LIM-91) | Ticket Jira (workflow opérateur au PK) | 2026 |
| [LIM-116](https://easywmsfrance.atlassian.net/browse/LIM-116) | Ticket Jira (LOT 3, mouvements manuels station picking - capacité buffers PK → PK `Task_GenerateMovement_PR_V2`) | 2026-07 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (modes PK) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
@@ -0,0 +1,326 @@
---
title: "Process de picking au poste de travail (PK)"
tags: [picking, PK, opérateur, étiquetage, filmage, picking-négatif, MII, custom]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-91, LIM-80, LIM-84, LIM-82, LIM-75, LIM-66, LIM-76, LIM-68, LIM-67, LIM-116]
confluence_refs: []
sources: ["Jira LIM-91 (lecture directe, en revue de code)", "Jira LIM-116 (lecture directe, revue de code)"]
last_updated: 2026-07-20
author: Arthur
---
# Process de picking au poste de travail (PK)
> **Résumé** : workflow opérateur de picking au poste de travail (PK).
> L'opérateur prélève les sacs d'une palette source vers une palette
> fille (client), gère l'étiquetage (RFID + intercalaires MII), le
> filmage et l'évacuation. Dernière étape de la chaîne picking.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Le WF standard `WorkStation_Picking_Default` sert de socle ; toute la
> logique Limagrain est construite en custom par-dessus.
> **Statut (LIM-91)** : **En revue de code** (assignée Maxime Halgand).
> Implémentation livrée le 16/07, revue de code du 17/07 avec plusieurs
> corrections en attente (voir Points d'attention). Le contenu ci-dessous
> reflète l'implémentation en cours, à reconfirmer à la validation.
## Positionnement dans la chaîne picking
Ce ticket est l'étape finale de la chaîne :
- [LIM-80](job-assignation-pk.md) assignation OS → PK (génère les tâches)
- [LIM-84](sequencage-tk-ps.md) séquençage TK → PS (écrit `Line.CstAtt`)
- [LIM-82](placement-ps-pk.md) placement PS → PK (choix de table, buffers)
- **LIM-91 (cette page)** : picking effectif au PK → étiquetage → filmage
→ évacuation
Le périmètre commence à la **détection de la palette source sur une
table du PK** et se termine à l'**évacuation de la palette fille**.
Hors périmètre (couvert ailleurs) : tri/séquençage (LIM-84), placement et
ping-pong (LIM-82), assignation PK (LIM-80), conditions de déclenchement
du picking négatif (LIM-75).
## Architecture du poste
Le picking se fait toujours sur **un seul poste = 3 tables (TP)** ;
jamais sur les 6 TP d'un îlot en même temps. Contrainte d'adjacence :
`TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE` (gauche et droite **non**
adjacentes). Détail dans [Placement PS → PK](placement-ps-pk.md).
- Une palette ne se déplace **jamais** d'une table à une autre (ni
opérateur, ni AGV) : elle arrive sur une table et n'en repart que pour
évacuation.
- Les **big-bags ne transitent jamais par les PK** : expédiés en palettes
complètes via le flux shipping direct. Seuls les sacs sont prélevés.
- Équipement par poste : 1 poste léger EasyWMS sur 2 écrans, 1 imprimante
Zebra (HU RFID), 1 imprimante A4, 1 douchette multi-format.
Le process démarre en mode **Tâches automatiques** sur PC (même mode que
la réception).
## Spécifications fonctionnelles
### Picking direct
Cas standard : l'opérateur prélève les sacs de la palette source (déjà
sur une table adjacente à la palette fille) et les dépose sur la palette
fille, confirme, puis la source est évacuée (retour ASRS si stock
restant) ou mise en attente si d'autres tâches l'utilisent. Le ping-pong
gauche/droite est géré par LIM-82.
Palette **multi-commandes** : si la source a encore des tâches pour
d'autres OS, elle est marquée `MULTI_COMMANDE` et envoyée vers un buffer
ES (LIM-82).
### Picking négatif
Optimisation physique : au lieu de déplacer les N sacs à expédier,
l'opérateur déplace les sacs **qui restent** (moins nombreux) vers une
autre palette. Toujours sur la **table du centre**, une seule palette en
picking négatif à la fois. Un nouveau SSCC est généré pour la palette
d'excédent (retour ASRS) et une étiquette RFID lui est imprimée.
Les **conditions de déclenchement** sont évaluées en amont (LIM-75 /
LIM-84), pas dans ce workflow : `QttyNegPick.PickingPercent` (défaut 50),
`QttyNegPick.MinCompletePercent` (défaut 55) et poids unitaire du sac
≥ 7 kg. Le dispatcher standard route selon le `TaskType` déjà déterminé
(pas de custom ici). La fusion standard neg+ord sur la même ligne de
commande est déjà gérée par EasyWMS.
### Verrou HORS TOLERANCE et recomptage
Si une palette source porte le verrou « HORS TOLERANCE » (posé au PIE,
[LIM-66](../01-inbound/controle-qualite-reception.md)), un **recomptage
obligatoire** est déclenché avant le picking :
- Stock suffisant après inventaire → assignation maintenue, picking
continue, verrou retiré sur la palette comptée.
- Stock insuffisant → réassignation sur une autre palette + retrait du
verrou.
Palette `MULTI_COMMANDE` revenant pour un autre OS : **pas besoin de
recompter** (le premier recomptage fait foi).
### Étiquetage au picking
Dépend de la **classe de commande**, détectée via le RUT
(`OutboundType = 0`, `AccountCode = MII`, `OutboundClassCode = MII`).
- **MII / multi-lots** : 1 étiquette HU **RFID** (palette mère physique,
à chaque nouvelle palette) + 1 étiquette HU **sans RFID** (intercalaire
/ palette fille, à chaque nouvelle ligne de stock flaggée). Pas de HU
imbriquée : le **SSCC virtuel** de la palette fille est porté par le
`CstAtt2` de la **ligne de stock** (ressource `SSCC MII [CST 2]`).
- **Non-MII (ou MII mono-lot)** : une seule étiquette HU RFID, pas
d'intercalaire.
Les rapports d'étiquette réutilisent ceux de
[LIM-68](../01-inbound/etiquette-rfid.md) (mono/multiref RFID, monoref
sans RFID pour l'intercalaire).
**Flag `CstAtt14` Container** (`true` après étiquetage au PK) consommé en
aval par l'**étiqueteuse automatique au poste de sortie TK** :
`true` → n'imprime pas ; `false` → imprime puis passe à `true` ;
`error` → échec impression. Voir [AD Customs](../07-admin/ad-customs.md).
> **Messagerie carton (phase 1)** : aucun traitement spécifique. Les
> supports suivent le flux client déjà en place et retournent à l'ASRS
> (pas d'emplacement au sol, pas de SSCC colis, pas de poumon
> transporteur).
### Filmage avant évacuation
Avant chaque évacuation de palette fille, l'opérateur choisit le
programme de filmage via un prompt. Valeur stockée dans le **`CstAtt05`
Container** et transmise en custom data à Galileo (TMS), qui arrête les
rouleaux et lance le programme. Choix **obligatoire** (« 0 - pas de
filmage » possible), **toujours proposé** à l'opérateur (pas de
pré-sélection par espèce/contenant).
Programmes : `0` (pas de filmage), `A-H` selon espèce (Tournesol /
Maïs & Blé) × contenant (Sacs / Big Bag) × mode (Complet / Réduit).
Détail dans [Stations picking](stations-picking.md).
### Évacuation et retour ASRS
- **Palette fille** : tâche AGV PK → Entrée TK, replacement **direct** en
zone client / défragmentation de l'ASRS (pas de stockage temporaire).
Le passage en « conteneur client » est remonté à SAP via le **LOC**
(`ACTION=P`, delta 5 min, [LIM-76](../06-erp-interface/loc-message-periodique.md)).
- **Palette source** : retour ASRS si stock restant ; si vidée, remise
manuelle sur la pile de palettes vides (pas de tâche AGV).
- Les transferts inter-HU au picking génèrent des lignes `ACTION=T` dans
le LOC.
> L'opérateur ne déplace **jamais** de sacs d'une TP à une autre (sacs de
> 25 à 50 kg). Garanti par le placement LIM-82.
### Mouvements manuels du poste (appeler / renvoyer) - LIM-116
Les actions standard « **Appeler** » (faire venir un conteneur au poste)
et « **Renvoyer conteneur** » sont customisées au PK pour tenir compte
des **AGV** et du besoin de **filmage** des palettes (LIM-116, LOT 3).
- **Renvoi manuel - bouton « Stocker support »** : avant le calcul de la
destination, l'opérateur choisit le **programme de filmage** (même
sélection que [LIM-67](../01-inbound/reception-fournisseur.md), WF
`CST_Workstation_Wrapping_UI`). WF modifié : `Return_ContainerFromPKStation_UI`.
- **Renvoi automatique (plus de tâches)** : dans le process tâche
automatique du poste, quand le conteneur est renvoyé parce qu'il n'a
**plus de tâches**, la sélection du **programme de filmage** est demandée
de la même manière. WF modifié : `Task_AutomaticPicking_UI`.
- **Destination du retour (PIE de filmage)** : le retour d'une palette
depuis le PK passe par le **custom de sélection du PIE** (PIE de
ré-insertion `PIE_ENTRY_PK`, défaut PIE02, pour que la palette soit
filmée). Une valeur a été ajoutée au `ProcessContext` de
`Container_MoveToStationTypeCodeListOrReject` (et de
`Container_CloseClientContainerOnMP_PR`) pour piloter ce choix - même WF
de destination que le [rejet PIE](../02-stockage/rejet-pie.md).
- **Capacité des buffers PK → PK** : la génération de mouvement depuis le
picking (`Task_GenerateMovement_PR_V2`) gère la capacité des buffers
quand une palette va d'un poste de picking à un autre (cf. buffers ES,
[Placement PS → PK](placement-ps-pk.md)).
### Cas 100 % : tâche de shipping, pas de picking
Quand la quantité assignée sur une palette source correspond à **100 % de
son stock**, on génère une **tâche de shipping** (pas de picking) :
inutile de déplacer tous les sacs pour rebaptiser la palette
(décision Vincent Charvet, 02/07). Solution testée : activer « Expédier
uniquement conteneur complet » ; en dessous de la valeur « palette
pleine » de la conversion de support, le WMS tente le picking négatif si
les critères sont réunis, sinon la palette est reprise par le calcul
global d'optimisation du volume.
### Modes opératoires
Fonctionne en **Full AGV**, **Mixte** (AGV + caristes) et **Full TRF**
(4 caristes, mode dégradé, finalisation manuelle du module AGV). Le
workflow opérateur au PK est **identique** quel que soit le mode ; seul
le transport physique change.
## Implémentation (revue de code en cours)
Custom construit au-dessus du framework standard `WorkStation_Picking_Default`
`Task_Automatic_PickingProcessType_UI``Expedition_Picking_UI_V1`.
### Workflows
| Workflow | Modification |
|---|---|
| `Task_AutomaticPicking_SelectTask_PR` | Si verrou « HORS TOLERANCE » → appelle `CST_Count_Picking_UI` (inventaire), puis relit les données du conteneur pour décider si la tâche de picking reste possible |
| `CST_Count_Picking_UI` | Compte chaque ligne de stock, affiche les infos utiles au client, message de confirmation avant ajustement ; corrige le process de retour |
| `Task_AutomaticPicking_UI` | Appelle `CST_Container_Picking_Options` (bouton « Retour » si stock, « Retirer » si vide) |
| `Expedition_Picking_GetInitialParameters_PR` | Ajout de `OutboundClassCode` à la query |
| `Expedition_Picking_ExecutePicking_UI` | Commandes MII : pose un code conteneur virtuel sur chaque ligne de stock, sauvé dans `CstAtt2` de stock, imprime l'étiquette correspondante |
| `Expedition_Picking_Finish_UI` | Appelle le WF de filmage (wrapping) à la fermeture du conteneur client |
| `Expedition_Picking_RequestProduct_UI_V1` | Dialog `CST_Picking_AutoReadQuantity_Prompt_V1` + paramètre poids produit |
| `Expedition_Picking_AutoreadQuantity_UI_V2` | Dialog `CST_Picking_ManualReadQuantity_Prompt_V2` + paramètre poids produit |
| `Container_MoveContainerListToLostAndFound` | Si conteneur vide → suppression au lieu d'envoi en Lost & Found |
| `PickingStation_RemoveOrReturnContainer_UI` | Appelle `CST_Container_Picking_Options` (option « Retirer » seule, conteneurs vides) |
| `PrintLabels_PrintSSCCList_PR` | Appelle le WF custom `CST_PrintRFIDLabel` |
| `PrintLabels_AutoPrintOnCloseClientContainer_PR` | Récupère l'imprimante et appelle `CST_PrintRFIDLabel` |
### Dialogs
| Dialog | Rôle |
|---|---|
| `CST_Count_Picking_GetQuantity` | Demande à l'opérateur de compter le stock de la palette |
| `CST_Container_Picking_Options` | Clone de `Container_Picking_Options` + paramètre bouton retour |
| `CST_Picking_ManualReadQuantity_Prompt_V2` | Clone + poids produit mesuré |
| `CST_Picking_AutoReadQuantity_Prompt_V1` | Clone + poids produit mesuré |
### Vues et ressources
- Vue `StockVList` : ajout de `CstAtt2` (SSCC MII).
- Ressources : `CST_Stock_CustomAttribute2` (« SSCC MII [CST 2] »),
`CST_MeasuredProductWeight_Prompt`, `CST_Alias_Prompt` (« Code lot
officiel »), `Product_Prompt` (« Code lot SAP »), `Shared_Alias`,
`Source_Prompt` (« Description courte SAP »),
`CST_Container_RemoveQuestion_1`, `CST_Container_StoreQuestion_1`.
## CstAtt impliqués
| CstAtt | Entité | Donnée |
|---|---|---|
| `CstAtt05` | Container | Programme de filmage (0, A-H), transmis à Galileo |
| `CstAtt06` | Container | Code PK assigné |
| `CstAtt14` | Container | Flag étiquetage PK (`true`/`false`/`error`) - LIM-91 |
| `CstAtt02` | Stock (StockLine) | SSCC virtuel palette MII - LIM-91 |
> `CstAtt14` a remplacé `CstAtt13` pour l'étiquetage (CstAtt13 déjà
> utilisé pour le code OE) - décision 01/07. Voir
> [AD Customs](../07-admin/ad-customs.md).
## Communication ERP
| Message | Direction | Déclencheur |
|---|---|---|
| ~~MOV~~ | ~~WMS → SAP~~ | **Annulé** (jugé inutile, décision client) |
| LOC (`ACTION=P`) | WMS → SAP | Passage en conteneur client (delta 5 min) |
| LOC (`ACTION=T`) | WMS → SAP | Transfert inter-HU au picking (delta 5 min) |
## Points d'attention
⚠️ **Revue de code en cours (17/07)** - corrections en attente :
- `PrintLabels_PrintSSCCList_PR` : arrêter la boucle si un SSCC est vide
(transition depuis « Set current SSCC »).
- `PrintLabels_AutoPrintOnCloseClientContainer_PR` : la transaction
`CON.PRINT` puis l'appel à `CST_PrintLabel` provoquent une **double
impression**.
- `Expedition_Picking_RequestProduct_UI_V1` / `AutoreadQuantity_UI_V2` :
`CustomAttribute1` non mappé, poids produit non affiché.
- En **picking négatif**, les écrans sont différents (pas de poids
produit) - à harmoniser.
⚠️ **Demande d'optimisation (Justine, 16/07)** à intégrer :
- Remplacer l'écran « Stocker support » de la palette mère par un écran
de filmage, et distinguer clairement (texte + couleur) l'écran de
filmage palette mère vs palette client.
- La palette client doit passer par **PIE02** et non PIE01 (pour pouvoir
être filmée).
> → Le filmage sur « Stocker support » et le passage par le PIE de retour
> (`PIE_ENTRY_PK`, PIE02) sont **livrés dans LIM-116** (voir
> [Mouvements manuels du poste](#mouvements-manuels-du-poste-appeler--renvoyer---lim-116)).
> Reste à confirmer la distinction visuelle (texte + couleur) mère vs client.
⚠️ **Correction temporaire (17/07, LIM-116)** : un fix a été posé sur le
mouvement `MP → PE` ; il sera **retiré** une fois la gestion complète des
mouvements `MP → PK` en place.
⚠️ L'impression de l'étiquette standard à la fermeture du conteneur
client a été retirée (elle s'ajoutait à tort à l'étiquette custom).
## Questions ouvertes
- Messagerie - choix du poumon : afficher uniquement les poumons
compatibles avec le transporteur, ou tous ? Ou retour ASRS pour le flux
classique ? (@Justine)
- Recomptage HORS TOLERANCE : dialog retenu = `CST_Count_Picking_GetQuantity`
(custom) ; confirmer l'ergonomie finale avec le client (@Justine)
- Étiquetage intercalaire (HU fille sans RFID, MII/multi-lots) : format
et rapport Zebra à créer (tâche à écrire par Arthur avec modèle rapport)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-07-17 | Arthur | Création depuis LIM-91 (lecture directe, en revue de code) : workflow opérateur PK, picking direct/négatif, HORS TOLERANCE, étiquetage MII (Stock CstAtt2 SSCC + CstAtt14), filmage CstAtt05, évacuation, cas 100 % → shipping, implémentation (WF/dialogs/vues/ressources), corrections revue de code 17/07 + optim Justine |
| 2026-07-20 | Arthur | Ajout LIM-116 (LOT 3, lecture directe + revue de code) : nouvelle section « Mouvements manuels du poste (appeler / renvoyer) » - filmage sur « Stocker support » (`Return_ContainerFromPKStation_UI`) et sur renvoi automatique sans tâches (`Task_AutomaticPicking_UI`), sélection PIE de retour via `ProcessContext` (`Container_MoveToStationTypeCodeListOrReject` + `Container_CloseClientContainerOnMP_PR`, PIE_ENTRY_PK/PIE02), capacité buffers PK → PK (`Task_GenerateMovement_PR_V2`) ; optim Justine 16/07 marquée livrée par LIM-116 ; caveat fix temporaire MP → PE ; jira_refs +LIM-116/LIM-67, sources, last_updated |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-91](https://easywmsfrance.atlassian.net/browse/LIM-91) | Ticket Jira (en revue de code) | 2026 |
| Revue de code LIM-91 (M. Halgand, V. Charvet) | Implémentation + revue | 2026-07-16/17 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) / [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) / [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Chaîne picking amont | 2026 |
| [LIM-116](https://easywmsfrance.atlassian.net/browse/LIM-116) | Ticket Jira (LOT 3, mouvements manuels station picking - filmage retour + capacité buffers, attente déploiement test) | 2026-07 |
| Revue de code LIM-116 (V. Charvet, M. Halgand) | Implémentation + revue (commit LOT3 e79f385242) | 2026-07-15/17 |
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (sélection programme filmage `CST_Workstation_Wrapping_UI`) | 2026 |
@@ -0,0 +1,195 @@
---
title: "Recertification - Workstation au poste de picking"
tags: [picking, recertification, workstation, ASN, MII, SmartUI, outbound]
status: review
standard_ref: concepts/shipping.md
jira_refs: [LIM-105, LIM-106, LIM-110]
confluence_refs: []
sources: ["Jira LIM-105 (lecture directe 2026-07-20)", "Jira LIM-106 (lecture directe 2026-07-20)", "Jira LIM-110 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Recertification - Workstation au poste de picking
> **Résumé** : process de recertification exécuté au **poste de picking** en
> mode « Tâches automatiques ». L'opérateur échange une palette existante
> contre une nouvelle identité (nouvelle HU / ASN) sans déplacer physiquement
> le stock, avec vérification de l'ASN auprès de SAP.
> **Standard EasyWMS** : → voir [Shipping](../../concepts/shipping.md) et
> [Picking](../../concepts/picking.md).
> Ce qui suit documente les **spécificités Limagrain** (LIM-105). Le contexte
> outbound de la recertification (SOR Recertification, quai, route via PK) est
> décrit dans [Flux expédition - Re-certification](../04-outbound/flux-expedition.md#re-certification).
## Contexte projet
La recertification consiste à **ré-étiqueter** une palette complète pour lui
donner une nouvelle identité, sans picking ni déplacement physique du stock :
c'est une **sortie administrative** suivie d'une **réception administrative**
(nouvelle HU en ASN). Un ordre de sortie de classe **RECERTIFICATION** est
descendu, contenant les quantités à recertifier (équivalentes à des supports
complets sans picking).
Le quai est **assigné automatiquement** quand la classe de l'OS est
Recertification (`QUAI_RECERTIFICATION`, param `RECERTIFICATION_CODE_QUAI`,
LIM-110), avec blocage du changement manuel du quai - voir
[Quai recertification](../04-outbound/shipping-orders.md#quai-recertification).
Ce mécanisme est **distinct** du job d'assignation des images de quai X_EXP
(LIM-94), qui exclut la classe Recertification.
Les palettes sont acheminées vers un poste de picking où l'opérateur effectue
des actions **hors WMS** (dont l'impression d'une nouvelle étiquette), puis
scanne la nouvelle étiquette pour déclencher l'échange de conteneur.
Le process est **intégré au flux « Tâches automatiques »** du poste de picking
(même mode que le picking et la réception - voir
[Stations de picking](stations-picking.md)). À l'arrivée au poste, les palettes
portent une **tâche de chargement** vers le quai de recertification.
> **Amont - acheminement au PK ([LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106))** :
> l'assignation du PK et la création des tâches d'acheminement (mouvement des
> conteneurs d'expédition vers le PK, puis chargement au quai de recertification)
> sont assurées par un **mini job dédié du Mega Job**, pendant du mini job
> picking (LIM-80). Voir
> [Mini Job - Assignation recertification aux PK](job-assignation-pk.md#mini-job---assignation-recertification-aux-pk-lim-106).
## Flux fonctionnel
```mermaid
sequenceDiagram
participant OP as Opérateur (PK)
participant WMS as EasyWMS
participant SAP as SAP
OP->>WMS: Scan ancienne palette
WMS->>SAP: Demande d'un nouvel ASN pour la palette
OP->>OP: Recertifie + ré-étiquette (hors WMS)
OP->>WMS: Scan de la nouvelle étiquette (SSCC)
WMS->>WMS: Attente ASN (polling ATH111)
alt ASN reçu
WMS->>WMS: Charge l'ancien conteneur au quai + déplace l'ASN au PK
WMS->>WMS: Filmage (emballage)
else Timeout / max retries
WMS-->>OP: Message d'erreur (réessai ou fin de process)
end
```
## Étapes détaillées
### Étape 1 - Scan de l'ancienne palette
Le code palette est scanné. Un message (à définir, voir Questions ouvertes) est
généré pour signaler à SAP le **besoin d'un nouvel ASN** pour cette palette.
### Étape 2 - Scan de la nouvelle étiquette
Le nouveau code palette (SSCC) est scanné (dialogue
`CST_Recertification_ScanLabelPrompt`, qui affiche le code et l'emplacement du
conteneur courant).
### Étape 3 - Vérification de l'ASN
Un écran d'attente vérifie qu'un **ASN existe** pour le nouveau code conteneur
scanné (query `CST_AsnContainer_ByCode`) :
- intervalle entre deux vérifications : paramètre `SAP_ATH111_REFRESH_INTERVAL` ;
- timeout : `SAP_ATH111_TIMEOUT` → message d'erreur avec **option de relance**
d'un cycle d'attente ;
- nombre maximum d'essais : `SAP_ATH111_MAX_RETRIES` → message d'erreur mettant
**fin au process**.
### Étape 4 - Échange des conteneurs
Une fois l'ASN existant : l'**ancien conteneur est chargé sur le quai**
(validation de la tâche de chargement) et le **conteneur en ASN est déplacé à
la position de l'ancienne palette** (au PK).
### Étape 5 - Filmage (emballage)
Un sous-processus de **filmage** est déclenché en fin de process (ajout
LIM-105, 01/07/2026), avec gestion des erreurs.
## Paramètres
| Paramètre | Rôle | Défaut |
|-----------|------|--------|
| `SAP_ATH111_REFRESH_INTERVAL` | Intervalle de polling de l'existence de l'ASN (ms) | `500` |
| `SAP_ATH111_TIMEOUT` | Timeout d'attente de l'ASN (s) | `60` |
| `SAP_ATH111_MAX_RETRIES` | Nombre maximum de tentatives | `5` |
| `RECERTIFICATION_CODE_CLASSE` | Code de la classe d'OS recertification (remplace les valeurs hard codées) | - |
Voir [Paramètres projet](../07-admin/parametres-projet.md).
## Implémentation technique
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_Recertification_PickingStationProcess_UI` | Workflow | Process principal : prompt nouveau SSCC, vérification ASN, gestion attente / timeout, échange des conteneurs, filmage |
| `Task_AutomaticPicking_UI` | Workflow | Redirige vers le process de recertification en mode « Tâches automatiques » du PK |
| `Workstation_Picking_Default` | Workflow | Prend en compte la tâche de chargement pour afficher le nombre de tâches en attente du conteneur au PK ; affichage du **code OS** (Justine 08/07) |
| `Outbound_AutomaticLoadProcess_PR` | Workflow | Ne crée **pas** automatiquement le chargement camion pour les OS de classe RECERTIFICATION (`RECERTIFICATION_CODE_CLASSE`) |
| `Outbound_CreateShippingContainersTasks_PR` | Workflow | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_JobAssignStage` | Workflow | Ajout du paramètre `warehouseCode` dans la query modifiée |
| `Container_MovedEventHandler_PK_PR` | Workflow | Ajout du paramètre `warehouseCode` dans la query modifiée |
| `CST_AsnContainer_ByCode` | Query | Conteneur en emplacement ASN par code |
| `CST_GetOutboundOrderAndRoutes_ToAssignStage` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_OutboundOrderLineDetails_ByRecertificationContainer` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_OutboundOrder_BestPendingAssignment_ForPK` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` (exclusion recertif de l'assignation PK) |
| `CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_Recertification_ScanLabelPrompt` | Dialog | Prompt nouveau SSCC ; affiche code + emplacement du conteneur courant |
Ressources i18n : `CST_Recertification_SSCCPrompt` (« Scanner la nouvelle
étiquette »), `CST_Recertification_CheckingAsn` (« Récupération des
informations... »), `CST_Recertification_Timeout` (« Erreur de communication
avec SAP. Réessayer ? »), `CST_Recertification_TimeoutExceededTry_1`
(« Impossible de contacter SAP après {0} tentatives... »),
`CST_RecertificationWorkstation_Header` (« Recertification »),
`CST_Recertification_Error` (erreur en cours de process).
Commits : [`8b4debc3da`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/8b4debc3daf22e59979f5c5949526796d7256a6f)
(process initial), [`3119445ff1`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/3119445ff1e3bfce3979e5678b3b80255ddefbae)
(filmage + suppression valeurs hard codées),
[`db4194c50e`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/db4194c50e0cc54716c90fb804f65b33084889c2)
(code OS sur la workstation).
## Points d'attention
- Le process est en **mode « Tâches automatiques »** du PK ; le PK doit être
passé en **mode recertif** par le manager (bloque le poste pour les autres
types de tâches). Voir [Job d'assignation PK](job-assignation-pk.md) : les OS
RECERTIFICATION sont exclus de l'assignation picking standard.
- Les **valeurs hard codées** d'identification des OS de classe recertification
ont été supprimées au profit du paramètre `RECERTIFICATION_CODE_CLASSE`
(01/07/2026).
- À **retester** suite aux customs de
[LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) (quai
recertification auto + stratégie d'assignation de stock, désormais
documentés dans [Quai recertification](../04-outbound/shipping-orders.md#quai-recertification)).
Retest côté process workstation encore à faire (note Arthur 30/06/2026).
- Risque connu : si l'**ASN n'est pas encore arrivé** au scan, l'écran
d'attente boucle jusqu'au timeout / max retries.
## Questions ouvertes
- Message déclenchant l'envoi de l'ASN par SAP à l'étape 1 : l'AF évoque un
**SOF par palette**. Deux options envisagées (LIM-105, Vincent 02/06/2026) :
soit imposer des **OS de recertification à une seule palette** (ralentit
l'acheminement, 1 palette par poste), soit créer un **message custom** avec
les informations nécessaires à SAP pour créer le nouvel ASN. À trancher
(@Vincent / @Justine).
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-07-20 | Arthur | Création depuis LIM-105 (lecture directe) : process workstation recertification au PK, 4 étapes + filmage, paramètres SAP_ATH111_* et RECERTIFICATION_CODE_CLASSE, éléments AD (WF / queries / dialog / ressources), question ouverte message ASN |
| 2026-07-20 | Arthur | LIM-106 (lecture directe) : renvoi amont vers le mini job d'assignation recertification + acheminement au PK (détaillé dans job-assignation-pk.md) |
| 2026-07-20 | Arthur | LIM-110 (lecture directe) : correction du renvoi quai auto (mécanisme QUAI_RECERTIFICATION/RECERTIFICATION_CODE_QUAI vers shipping-orders.md, distinct de LIM-94) ; note « à retester » précisée ; jira_refs +LIM-110 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-105](https://easywmsfrance.atlassian.net/browse/LIM-105) | Ticket Jira (workstation recertification - attente déploiement test, revue validée 17/07) | 2026 |
| [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Ticket Jira (mini job assignation recertification au PK + acheminement) | 2026 |
| [LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) | Ticket Jira (quai recertification auto + stratégie assignation stock ; customs à retester) | 2026 |
@@ -1,47 +1,50 @@
---
title: "Séquençage TK → PS Historique et arbitrage"
title: "Séquençage TK → PS - Historique et arbitrage"
tags: [picking, séquençage, historique, décision]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
last_updated: 2026-07-20
author: Arthur
---
# Séquençage TK → PS Historique et arbitrage
# Séquençage TK → PS - Historique et arbitrage
> **Résumé** : historique des solutions envisagées pour le séquençage
> TK → PS, et arbitrage des contradictions entre les 3 sources
> (DevOps #64854, AF §6.4.8, réunion 11/05/2026).
> **Standard EasyWMS** : → voir [Picking standard](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> Pour l'algorithme retenu, voir
> [Séquençage TK → PS](sequencage-tk-ps.md).
## Solutions envisagées
### Solution 1 Process isolé sur finalisation des tâches d'OS
### Solution 1 - Process isolé sur finalisation des tâches d'OS
Séquençage via `OS.Line.CstAtt`, marquage OS traité via
`OS.CstAtt = true`.
**Problème** : pas assez dynamique en cas de recréation de tâches.
### Solution 2 Calcul dans le workflow stacker_crane
### Solution 2 - Calcul dans le workflow stacker_crane
Intégration dans `Galileo_StackerCraneSearch_PR` /
`StackerCrane_SortTasks_PR`, recalcul complet à chaque exécution.
**Problème** : complexité élevée (requêtes LINQ imbriquées multi-OS).
### Solution 3 Solution 1 transformée en job
### Solution 3 - Solution 1 transformée en job
Job planifié, excluant les tâches en cours.
**Problème** : pas assez réactif par rapport à la cadence des TK.
### Solution 4 Process événementiel (retenue)
### Solution 4 - Process événementiel (retenue)
Solution 1 déclenchée sur `TaskCreatedEvent` et
`OutboundOrderReleasedEvent`, avec verrouillage `OS.CstAtt`.
@@ -61,8 +64,8 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
| Poids max palette | 1 200 kg | 1 250 kg | **1 250 kg** (AF) |
| Négatif vs Maïs first | Pas de hiérarchie | Maïs en tête | **Négatif prioritaire** |
| Semences essais | Dédié en haut | Non mentionné | **Couvert par poids** |
| Lots même Bag/pal | Prioriser | | **Retenu** |
| Différenciation marque | Aucune | | **Confirmé** |
| Lots même Bag/pal | Prioriser | - | **Retenu** |
| Différenciation marque | Aucune | - | **Confirmé** |
| Calcul Bag/pal | "Prendre le max" | Équivalent palette | **Pro rata** |
## Changelog V1.1 (11/05/2026)
@@ -86,7 +89,7 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création extraction depuis sequencage-tk-ps.md |
| 2026-05-12 | Arthur | Création - extraction depuis sequencage-tk-ps.md |
## Références
@@ -94,5 +97,5 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
| DevOps #64854 | Note historique | |
| DevOps #64854 | Note historique | - |
| AF §6.4.8 | Analyse fonctionnelle V1.5 | 28/11/2025 |
+113 -28
View File
@@ -3,10 +3,10 @@ title: "Séquençage des tâches de picking TK → PS"
tags: [picking, séquençage, transstockeur, événement, workflow, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84, LIM-61]
jira_refs: [LIM-84, LIM-61, LIM-80, LIM-82]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md", "Jira LIM-84 (commentaires revue de code)"]
last_updated: 2026-07-17
author: Arthur
---
@@ -20,15 +20,31 @@ author: Arthur
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> **Statut (LIM-84)** : dev terminé, **en attente de déploiement pour
> test**. Revue de code validée le **02/07/2026** (après une itération NOK
> le 29/06 et corrections le 01/07).
## Déclenchement
L'algorithme est déclenché sur **deux événements** :
> **Implémentation définitive (revue de code 02/07/2026)** : le séquençage
> est réalisé **pendant l'assignation de stock**, et non sur
> `TaskCreatedEvent` comme le proposait la note de conception (Solution 4,
> voir [historique](sequencage-tk-ps-historique.md)).
- **TaskCreatedEvent** — nouvelle tâche de picking créée (MINI JOB
LIM-75 ou réassignation). Condition : tâche type PICKING et OS
statut Released
- **OutboundOrderReleasedEvent** — OS passe en Released (lancement
ou relance après arrêt)
Le workflow de séquençage `CST_PickingTasksSequencing_PR` est appelé par les
workflows d'assignation de stock :
- `Outbound_StockAssignProcess_PR` - assignation de stock (à la libération
de l'OS)
- `OutboundOrder_StockReassign_PR` - réassignation de stock (imprévu,
blocage, relance)
La **libération de l'OS** est déclenchée par la subscription
`CST_PKAssigned_ReleaseOrder` (WF
`CST_OutboundOrder_PKAssigned_ReleaseOrder_PR`) lorsqu'un PK est assigné à
l'OS ([LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80)), ce qui
déclenche l'assignation de stock. L'assignation/réassignation se fait **par
job** (les subscriptions standard sont désactivées, cf. LIM-80).
## Process principal
@@ -41,11 +57,11 @@ L'algorithme est déclenché sur **deux événements** :
## Contraintes amont (constitution palettes filles)
**C1. Palettes les plus complètes possible** seuil ~95%. Calcul en
**C1. Palettes les plus complètes possible** - seuil ~95%. Calcul en
pro rata Bag/pal : chaque sac = `1/Bag_pal` de son lot. Additif,
gère nativement les multi-lots.
**C2. Ne pas splitter les lignes de stock** prioritaire sur les
**C2. Ne pas splitter les lignes de stock** - prioritaire sur les
règles de tri. Regrouper la ligne complète quitte à décaler le maïs.
| Contrainte | Valeur |
@@ -68,25 +84,25 @@ tâches.trier_par(
)
```
### Critère 1 Picking négatif en premier
### Critère 1 - Picking négatif en premier
Prioritaire sur tout, y compris Maïs first. Condition cumulative
(V1.1) : % quantité > seuil fiche article (défaut 55%) **ET** poids
unitaire sac ≥ 7 kg.
### Critère 2 Espèce Maïs en premier
### Critère 2 - Espèce Maïs en premier
Le maïs est lourd/stable → base de palette fille.
### Critère 3 Espèce la plus volumineuse
### Critère 3 - Espèce la plus volumineuse
Espèce avec la plus grande quantité totale de sacs dans l'OS.
### Critère 4 Article le plus lourd en base
### Critère 4 - Article le plus lourd en base
Les semences essais (légères) se retrouvent naturellement en haut.
### Critère 5 Regroupement par palette source
### Critère 5 - Regroupement par palette source
L'opérateur enchaîne toutes les tâches d'une palette avant de la
libérer.
@@ -98,28 +114,94 @@ séquence (ex-aequo), laissant au stacker_crane la liberté
d'optimiser. Interchangeables si : même palette source, OU tous les
critères de tri identiques.
## Détermination picking négatif (MINI JOB LIM-75)
## Détermination picking négatif
> Le `TaskType` (OrdinaryPicking / NegativePicking) est déterminé à la
> création des tâches. Conditions **définitives** (revue de code LIM-84) :
```
SI quantité_à_prélever > seuil_article × quantité_palette_source
ET article unique dans la palette source
ET pas d'attribut logistique à capturer
ET poids_unitaire_sac ≥ 7 kg
SI % à prélever ≥ NegativePickingPercent (55% du stock actuel de la source)
ET remplissage source ≥ NegativeMinCompletePercent (25% de la capacité pleine)
ET palette source mono-lot
ET poids_unitaire_sac ≥ 7 kg // check custom Limagrain
ALORS → PICKING_NÉGATIF
SINON → PICKING_DIRECT
```
- Le picking négatif est désormais **autorisé même si des attributs
logistiques sont précisés dans la commande** (levée d'une restriction
initiale).
- Les 2 conditions de pourcentage sont **standard EasyWMS**
(`Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1`) ;
seul le check de poids (≥ 7 kg) est custom
(`Outbound_CreatePickingContainerTasksNegative_PR_V1` récupère le lot et
le poids de l'article).
## Paramètres WMS
| Paramètre | Défaut | Note V1.1 |
|-----------|--------|-----------|
| `CONTROLE_TRAITEMENT_COMMERCIAL` | **false** | Désactivé |
| Seuil picking négatif (fiche article) | 55% | Inchangé |
| Poids min picking négatif | **7 kg** | Nouveau |
| `NegativePickingPercent` (% à prélever du stock actuel) | 55% | Standard |
| `NegativeMinCompletePercent` (% remplissage min source) | 25% | Standard, capacité pleine |
| Poids min picking négatif | **7 kg** | Custom Limagrain |
| Seuil remplissage palette | **~95%** | Nouveau |
| Poids max palette | **1 250 kg** | Corrigé |
| `MAX_NB_BUFFER_PK` | 3 | Inchangé |
## Implémentation définitive (LIM-84)
> Reflète le **code livré et validé** (revue de code du 02/07/2026, après
> une itération NOK le 29/06 et corrections le 01/07). Prime sur les notes
> de conception ci-dessus en cas d'écart.
Le séquençage ne se contente pas de trier : `CST_PickingTasksSequencing_PR`
calcule d'abord la **composition des palettes finales** (quels stocks vont
sur quelle palette fille, via les records `CST_PickingPalletList` /
`CST_PickingStockList`), puis écrit le numéro de séquence (`CstAtt1` de la
tâche) sur chaque tâche. Le stacker crane consomme ensuite les tâches via
`CST_Tasks_PendingOutboundForStackerCrane`, en respectant le verrou
`OS.CstAtt` et l'ordre `Line.CstAtt` croissant.
### Workflows
| Workflow | Rôle |
|----------|------|
| `CST_PickingTasksSequencing_PR` | Calcule la constitution des palettes finales pour les tâches de picking d'un OS selon les critères actifs, puis écrit le numéro de séquence sur chaque tâche. |
| `CST_OutboundOrder_PKAssigned_ReleaseOrder_PR` | Libère l'OS (appelé par la subscription `CST_PKAssigned_ReleaseOrder`). |
| `Outbound_StockAssignProcess_PR` | Assignation de stock - appelle le séquençage. |
| `OutboundOrder_StockReassign_PR` | Réassignation de stock - appelle le séquençage. |
| `NegativePicking_CheckAllowsNegativePickingTask_PR` | Conditions picking négatif : palette source **mono-lot** ; négatif autorisé **même si** des attributs logistiques sont précisés dans la commande. |
| `Outbound_CreatePickingContainerTasksNegative_PR_V1` | Récupère le lot du stock et le poids de l'article. |
| `Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1` | Ajoute la condition de poids unitaire min (≥ 7 kg) aux 2 checks % standard. |
### Records / Lists
| Élément | Rôle |
|---------|------|
| `CST_PickingPalletList` | Palette construite au picking (caractéristiques physiques + stocks), pour le calcul de constitution des palettes finales. |
| `CST_PickingStockList` | Stock à prélever au picking et sa tâche, pour le calcul de constitution. |
### Queries et vue
| Élément | Rôle |
|---------|------|
| `CST_PickingStocksToSequence_ByOutboundOrder` | Stocks à prélever d'un OS qui ne font pas déjà partie du séquençage. |
| `CST_Tasks_ForView` | Format du `CstAtt1` (numéro de séquence). |
| `CST_Tasks_PendingOutboundForStackerCrane` | Tâches en attente pour le stacker crane (corrigée le 29/06 pour les tâches de mouvement - test recertification). |
| `TaskVList` (vue) | Ajout de `CstAtt1` : le numéro de séquence est visible dans la vue des tâches. |
### Points confirmés en revue de code
- **Recalcul** : les tâches déjà en cours conservent leur séquence ; seules
les tâches en attente sont re-séquencées.
- **Réassignation après épuisement** : si une réassignation de stock survient
alors que toutes les tâches précédentes sont faites, le séquençage repart
de 0. L'info de séquence sert **uniquement** à l'ordonnancement.
- **Concurrence inter-OS** : plusieurs OS simultanés sur un même PK est
**interdit** ; chaque OS a son propre pool de tâches et son propre verrou
`OS.CstAtt`.
## Points d'attention
⚠️ Le custom LIM-61 (capacité buffer) doit gérer les palettes
@@ -132,9 +214,9 @@ ramenés sur petits sacs).
## Liens
- [Placement PS → PK](placement-ps-pk.md) algorithme aval
- [Picking combinatoire](picking-combinatoire.md) vue d'ensemble
- [Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Placement PS → PK](placement-ps-pk.md) - algorithme aval
- [Picking combinatoire](picking-combinatoire.md) - vue d'ensemble
- [Historique et arbitrage](sequencage-tk-ps-historique.md) -
solutions envisagées + arbitrage contradictions réunion 11/05/2026
## Historique des modifications
@@ -144,12 +226,15 @@ ramenés sur petits sacs).
| 2026-05-12 | Arthur | Création initiale depuis LIM-84 |
| 2026-05-12 | Arthur | Refonte V1.1 : algo complet, 5 critères, contraintes amont, arbitrage réunion 11/05 |
| 2026-05-12 | Arthur | Découpage : historique solutions + arbitrage → page dédiée |
| 2026-07-17 | Arthur | Relecture revue de code LIM-84 (préprod, validée 02/07) : nouvelle section « Implémentation définitive » (WF `CST_PickingTasksSequencing_PR` = constitution palettes + séquence, records `CST_PickingPalletList`/`CST_PickingStockList`, queries `CST_PickingStocksToSequence_ByOutboundOrder` / `CST_Tasks_ForView` / `CST_Tasks_PendingOutboundForStackerCrane`, vue `TaskVList` +CstAtt1) ; déclenchement réel = pendant l'assignation de stock (`Outbound_StockAssignProcess_PR` / `OutboundOrder_StockReassign_PR`) + subscription `CST_PKAssigned_ReleaseOrder`, et non `TaskCreatedEvent` ; conditions picking négatif définitives (mono-lot, autorisé même avec attributs logistiques, poids ≥ 7 kg) + ajout NegativeMinCompletePercent 25% ; points confirmés (recalcul, repart de 0, inter-OS interdit) ; statut préprod |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira | 2026 |
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira (séquençage, 5 commentaires, préprod) | 2026-06 → 07 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira (capacité PK/buffer) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation PK, release OS) | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, consomme Line.CstAtt) | 2026 |
| Logique combinatoire picking - TK vers PS - V1.1 | Spec technique | 11/05/2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
+48 -10
View File
@@ -6,7 +6,7 @@ standard_ref: concepts/stations.md
jira_refs: [LIM-69, LIM-70]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-69 - LOT1.3 Modes de travail des PK.md"]
last_updated: 2026-05-12
last_updated: 2026-07-17
author: Arthur
---
@@ -67,7 +67,7 @@ dynamiquement.
| P1 à P6 | Postes de travail 01 à 06 |
| TP11 à TP63 | Tables de préparation 11 à 63 |
## Postes de travail Architecture physique
## Postes de travail - Architecture physique
### 3 îlots de 2 postes
@@ -113,11 +113,18 @@ de big-bags. Toute opération impliquant un big-bag (bag/pal ≤ 2) doit
est déjà plugué au mode Automatic tasks (custom) → même mode pour le
picking et la recertification.
Voir [Flux expédition Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
Voir [Flux expédition - Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
pour les règles détaillées (arrivée palettes 3 TP, algorithme répartition,
ordonnancement par gerbabilité).
### Modes de travail Configuration et fonctionnement
### Modes de travail - Configuration et fonctionnement
> **Statut (LIM-69)** : revue de code validée le 31/03/2026, livré en
> **pré-production** (test client). Une première revue (26/03) avait été
> rejetée : préfixe `CST_` manquant sur le paramètre
> `AdjacentPickingStation``CST_AdjacentPickingStation`, et suffixe `_1`
> à ajouter sur la ressource paramétrée `CST_Picking_ConfirmOpenWithAdjacent`
> → `CST_Picking_ConfirmOpenWithAdjacent_1`.
Chaque poste est **polyvalent** et peut être utilisé pour différents flux.
Le manager configure les modes autorisés et leur priorité ; l'opérateur
@@ -134,7 +141,7 @@ la palette qui arrive.
| Échantillonnage | Inventaire |
| Re certification | Picking |
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** remplacé par un simple
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** - remplacé par un simple
> message d'avertissement poste adjacent (voir section dédiée ci-dessous).
#### Configuration par le manager (vassist SmartUI)
@@ -154,6 +161,14 @@ ouvre une **vassist** qui permet de :
- Au moins un mode doit être coché (pour bloquer un PK, utiliser le
bouton standard dédié)
> **Reversal** : les contraintes initialement prévues sur les priorités
> (séquence continue à partir de 1, pas de doublon, pas de trou) ont été
> **abandonnées**. Les priorités sont de simples entiers libres ; seuls
> subsistent les contrôles ci-dessus. Deux ressources d'erreur portent la
> validation : `CST_VAssistantAssignWorkMode_Error_NoMode` (aucun mode
> coché) et `CST_VAssistantAssignWorkMode_Error_ParamNotFound` (paramètre
> système manquant).
**Stockage** : la configuration est enregistrée dans un **paramètre
SmartUI dédié par PK** au format :
@@ -194,7 +209,7 @@ en mode tâche automatique) :
- Bouton **Confirmer** : le PK s'ouvre normalement
- Bouton **Annuler** : le PK reste inactif
**Pas de blocage technique** uniquement informatif. Les opérateurs sont
**Pas de blocage technique** - uniquement informatif. Les opérateurs sont
physiquement à ~2 mètres et peuvent se coordonner verbalement. Les AGV
ont des capteurs de sécurité et demandent l'autorisation de dépose.
@@ -215,6 +230,26 @@ Au clic :
| MODES_PKxx | Modes autorisés + priorité pour le PK xx (un par PK, via vassist) | _(vide)_ | `RECEPTION;1\|PICKING;2` |
| PK_ADJACENT | Paires de postes adjacents | _(vide)_ | `PK01;PK02\|PK03;PK04` |
#### Éléments AD (LIM-69)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PkStationWorkMode` | Entité | Contient le mode et la priorité - sert à afficher les modes configurés dans `PkMpVList` |
| `CST_PkStationWorkMode_ForView` | Query | Récupère les modes autorisés (paramètre `MODES_PKxx`) pour toutes les stations de picking |
| `CST_PickingStation_Adjacent` | Query | Récupère la station adjacente configurée dans `PK_ADJACENT` |
| `CST_VAssistAssignWorkMode` | Vue (vassist) | Assistant de choix des modes autorisés et de leur priorité sur un PK |
| `PkMpVList` | Vue | Ajout du bouton « Choix modes de travail » ; bouton d'ouverture modifié pour contrôler le statut du poste adjacent et demander confirmation |
| `WorkStation_Picking_OpenCloseStation_UI` | Workflow | Contrôle le statut du poste adjacent et demande confirmation s'il est ouvert (paramètre `CST_AdjacentPickingStation`) |
**Ressources** (FR / EN) : `CST_Prop_WorkMode_Mode` (Mode de travail / Working
mode), `CST_Prop_WorkMode_Priority` (Priorité / Priority),
`CST_PkMpVList_WorkModes` (Modes de travail / Working modes),
`CST_VAssistantAssignWorkMode_Title` (Choix modes de travail / Working modes
selection), libellés des 5 modes
(`CST_VAssistantAssignWorkMode_Reception|Picking|Consolidation|Count|Certification`),
et `CST_Picking_ConfirmOpenWithAdjacent_1` (message d'avertissement poste
adjacent).
### Équipement par poste
- 1 poste léger EasyWMS dupliqué sur 2 écrans
@@ -229,7 +264,7 @@ Au clic :
Job unique « chef d'orchestre » qui vérifie les modes de travail pour
chaque PK et orchestre l'envoi de tâches via des sous-workflows dédiés
(LIM-74, LIM-75). Transverse à tous les flux (réception, picking,
(LIM-74, LIM-75 annulé → LIM-82). Transverse à tous les flux (réception, picking,
regroupement, échantillonnage, re certification).
## Buffer postes de travail
@@ -260,7 +295,7 @@ une palette du buffer vers le convoyeur d'entrée pour stockage.
- Emplacement picking dédié pour réapprovisionnement automatique sur
seuil
- Aide à la manutention sur chaque poste pour prendre/poser des palettes
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile -
l'opérateur choisit la pile à réapprovisionner parmi une liste
Voir [Palettes vides](../02-stockage/palettes-vides.md) pour le détail.
@@ -280,7 +315,9 @@ redirection).
## Questions ouvertes
- [ ] Détail de la gestion des tables de préparation bloquées (@Nicolas)
- Détail de la gestion des tables de préparation bloquées (@Nicolas)
- Affichage des priorités de modes dans un ordre croissant dans la vassist -
demandé par Justine (20/05/2026), non tranché (LIM-69).
## Historique des modifications
@@ -290,6 +327,7 @@ redirection).
| 2026-05-05 | Arthur | Mode esclave abandonné, job transverse, vassist modes, 2 piles/îlot |
| 2026-05-05 | Arthur | Cross-ref flux expédition, picking WS vs RF, contrainte Big-Bag |
| 2026-05-12 | Arthur | Détail modes de travail (LIM-69) : vassist manager, paramètres MODES_PKxx/PK_ADJACENT, tâche automatique, avertissement adjacent, fermeture poste. Renvoi job vers page dédiée (LIM-70) |
| 2026-07-17 | Arthur | Relecture commentaires LIM-69 : ajout éléments AD (CST_PkStationWorkMode, queries, vassist, WF OpenCloseStation, ressources), statut pré-production + historique revue de code (préfixe CST_, suffixe _1), reversal contraintes de priorité (entiers libres), question ordre croissant (Justine) |
## Références
@@ -298,4 +336,4 @@ redirection).
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (6 commentaires) | 2026-03 → 2026-06 |
+3 -2
View File
@@ -1,11 +1,11 @@
---
title: "Outbound Vue d'ensemble"
title: "Outbound - Vue d'ensemble"
tags: [outbound, expédition, shipping, index]
status: draft
last_updated: 2026-05-05
---
# Outbound Vue d'ensemble
# Outbound - Vue d'ensemble
> **Périmètre** : flux SOR → RUT → SOF → LOF, consolidation, chargement,
> messages ERP outbound.
@@ -18,6 +18,7 @@ last_updated: 2026-05-05
- [Flux expédition](flux-expedition.md)
- [Shipping Orders](shipping-orders.md)
- [Séquençage shipping par STOP](sequencage-shipping-stop.md)
- [Assignation automatique de l'image de quai](assignation-image-quai.md)
- [Consolidation et chargement](consolidation-chargement.md)
- [Flux ERP outbound](flux-erp-outbound.md)
@@ -0,0 +1,207 @@
---
title: "Assignation automatique de l'image de quai (OS/Tournée)"
tags: [outbound, expédition, image-quai, stage, job, assignation, AGV]
status: review
standard_ref: concepts/shipping.md
jira_refs: [LIM-94, LIM-88]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: ["Jira LIM-94 (lecture directe, 7 commentaires, revue de code)"]
last_updated: 2026-07-17
author: Arthur
---
# Assignation automatique de l'image de quai (OS/Tournée)
> **Résumé** : job périodique qui assigne automatiquement une image de
> quai (poumon d'expédition) aux ordres de sortie (OS) et tournées (RUT)
> éligibles, via un « faux » stage `X_EXP`. Automatise ce qui était une
> assignation manuelle et fournit le stage dont dépend le séquençage
> shipping (LIM-88).
> **Standard EasyWMS** : → voir [Shipping](../../concepts/shipping.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Par défaut, l'assignation quai + image de quai pour l'expédition est
**manuelle** (voir
[Quais, poumons et chargement](consolidation-chargement.md)). LIM-94
automatise l'assignation de l'**image de quai** aux OS et tournées.
Ce job est **en amont** du
[séquençage shipping par STOP (LIM-88)](sequencage-shipping-stop.md) :
le garde-fou `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR` de
LIM-88 refuse de créer une tâche de chargement tant qu'aucun stage
(image de quai) n'est associé à l'OS. LIM-94 fournit cette association.
## Stages virtuels `X_EXP`
Un OS ou une Route ne peut être assigné qu'à un **« faux » stage** nommé
`X_EXP`, où `X` = code de l'image de quai (`A_EXP` pour l'image de quai
A). Ce sont les **seuls stages assignables** à un OS/Route.
- **Layout** : ajout des stages `A_EXP`, `B_EXP`, ... avec une
**capacité de 26** mais **un seul emplacement**
- **Pourquoi un stage virtuel à 1 emplacement ?** L'assignation doit
porter sur un **emplacement** et non une station. Sans ce stage
virtuel, il faudrait choisir une position précise (1 parmi 26) de
l'image de quai
- **Identification de l'image de quai associée à un stage** : c'est la
**seule image de quai ayant une route vers ce stage** (ex : la seule
route vers `A_EXP` part de l'image de quai A)
## Job `CST_AssignDockStage`
Job `CST_AssignDockStage` → WF `CST_Job_AssignStage`, exécuté **toutes
les 30 secondes**.
Le job récupère les Routes et les OS (OS **hors route**, en excluant les
OS de classe **Recertification**) et tente d'assigner une image de quai :
1. Vérifie via `CST_GetOutboundOrderAndRoutes_ToAssignStage` s'il existe
des ordres à assigner
2. Si oui, cherche les stages disponibles via
`CST_DockStage_GetAvailableStageToAssign`
3. Boucle simple : assigne les ordres un par un jusqu'à épuisement des
ordres ou des stages disponibles
4. La commande d'assignation diffère selon le type (Route ou OS)
**Priorisation** : par **priorité**, puis par **date de libération**.
### Conditions d'éligibilité de l'OS / Route
- **Libéré**
- **Toutes les palettes de picking sont revenues dans le TK** (même
principe que la tâche d'ordonnancement TK)
- Date actuelle à **H-3 de la date d'expédition prévue**
> La query contrôle en pratique : OS Released, non déjà assigné à un
> stage, date d'expédition prévue < 3 h, picking terminé (aucun
> conteneur picking + tous les conteneurs client en APS). Correction
> revue de code (05/06) : utiliser la **date d'expédition prévue** (et
> non la date de chargement prévue) pour les OS.
### Conditions d'assignabilité du stage
Un stage n'est assignable pour expédition que si le **stage virtuel**
`X_EXP` **et** l'**image de quai physique** associée sont libres.
**Stage virtuel `X_EXP`** :
- Non verrouillé
- Aucune tâche vers lui
- Aucun conteneur dessus
- Aucun autre OS, Route **ou réception** assigné
**Image de quai physique** (identifiée par la route qui va vers le
stage virtuel) :
- Non verrouillée
- Aucun conteneur dessus
- Aucune tâche vers elle
Ces contrôles sont portés par la query
`CST_DockStage_GetAvailableStageToAssign`.
## Génération des mouvements (PS → image de quai)
Le placement final vers l'image de quai est calculé au **poste de sortie
(PS)**, pas à l'assignation du stage. Quand un conteneur arrive au PS, le
WF `Container_MovedEventHandler_PS_PR` :
1. Récupère l'image de quai correspondant au stage assigné (la seule
image de quai ayant une route vers ce stage)
2. Change la destination de la tâche vers le **premier emplacement libre
calculé** de l'image de quai : l'emplacement avec le **X le plus
grand** n'ayant ni conteneur ni conteneur en mouvement
> Ce calcul « X le plus grand d'abord » rejoint le sens de dépose décrit
> dans [Quais, poumons et chargement](consolidation-chargement.md)
> (décharger en commençant par l'emplacement le plus éloigné du quai) et
> limite le problème de dépose AGV sur emplacements serrés.
## Désassignation à l'arrêt de l'OS / Route
Quand un OS (ou une Route) ayant une image de quai associée est
**stoppé** (repasse au statut « En attente »), l'association est
**supprimée**.
**Pourquoi ?** Sans cela, l'association peut devenir caduque : ex. image
B choisie, puis 2 jours plus tard, après re-libération, l'image B est
entre-temps réservée par une réception, ce qui pose problème.
- WF `CST_OutboundOrderUnassignStage_PR` : désassigne le stage de l'OS
s'il y en a un **et** que l'OS n'est pas inclus dans une route
- WF `CST_RouteUnassignStage_PR` : désassigne le stage de la route
- Souscription async `CST_OutboundOrderStopped_UnassignStage` sur
l'événement `OutboundOrderSetStoppingOperationEvent`
- Souscription async `CST_RouteStopped_UnassignStage` sur l'événement
`RouteStoppedEvent`
> Correction revue de code (05/06) : ces WF vérifient l'**image de quai**
> et non le quai de chargement.
## Assignation manuelle (VAssist)
L'assignation manuelle reste possible : les vues
`VAssistOutboundOrderAssignDock` et `VAssistRouteAssignDock` sont
restreintes pour n'afficher que les `DockStage` disponibles, selon les
**mêmes critères** que `CST_DockStage_GetAvailableStageToAssign`.
## [CUSTOM] Éléments techniques (revue de code)
> **Statut** : LIM-94 « En cours de test client (préprod) ». Revue de
> code réalisée (Maxime Halgand, Vincent Charvet).
| Élément | Type | Rôle |
|---|---|---|
| Stages `A_EXP`, `B_EXP`, ... | Layout | Stage virtuel par image de quai (capacité 26, 1 emplacement) |
| `CST_DockStage_GetAvailableStageToAssign` | Query | Liste des stages virtuels assignables (contrôle virtuel + image de quai physique) |
| `CST_GetOutboundOrderAndRoutes_ToAssignStage` | Query | Liste unifiée (Id + Description) des OS et Routes éligibles, pour un tri indépendant du type ; exclut la classe Recertification |
| `CST_Job_AssignStage` | WF | Boucle d'assignation, appelée toutes les 30 s |
| `CST_AssignDockStage` | Job | Appelle `CST_Job_AssignStage` toutes les 30 s |
| `Container_MovedEventHandler_PS_PR` | WF | Fin d'ordre au PS : redirige la tâche vers le 1er emplacement libre (X max) de l'image de quai du stage |
| `CST_OutboundOrderUnassignStage_PR` | WF | Désassigne le stage d'un OS stoppé (hors route) |
| `CST_RouteUnassignStage_PR` | WF | Désassigne le stage d'une route stoppée |
| `CST_OutboundOrderStopped_UnassignStage` | Souscription | Async sur `OutboundOrderSetStoppingOperationEvent` |
| `CST_RouteStopped_UnassignStage` | Souscription | Async sur `RouteStoppedEvent` |
| `VAssistOutboundOrderAssignDock` / `VAssistRouteAssignDock` | Vue | Assignation manuelle restreinte aux stages disponibles |
Commits : `f0536cce0c` (stages virtuels + redirection PS + vues),
`e3889b8003` (fix quai désassigné au passage du job + optim query),
`5de1618104` (désassignation à l'arrêt OS/Route).
## Points d'attention
⚠️ Le garde-fou LIM-88
(`Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`) dépend de
l'association de stage posée ici : sans stage assigné, pas de tâche de
chargement, les palettes bloquent aux PS.
⚠️ La désassignation à l'arrêt évite les réservations caduques d'image
de quai (conflit possible avec une réception qui réserverait entre-temps
la même image).
## Questions ouvertes
- Condition « l'image de quai n'a aucune réception assignée » : marquée
**TBD** dans la description initiale. La query intègre bien un contrôle
« aucune réception assignée » sur le stage virtuel ; confirmer le
périmètre exact (@Justine)
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-07-17 | Arthur | Création depuis LIM-94 (lecture directe + revue de code) : stages virtuels `X_EXP`, job `CST_AssignDockStage`/`CST_Job_AssignStage` (30 s), conditions d'éligibilité OS/Route et d'assignabilité stage, redirection PS `Container_MovedEventHandler_PS_PR` (X max), désassignation à l'arrêt (WF + souscriptions), VAssist restreintes, éléments techniques + commits |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-94](https://easywmsfrance.atlassian.net/browse/LIM-94) | Ticket Jira (statut préprod / test client) | 2026-07-17 |
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira (séquençage shipping, dépend du stage) | 2026 |
| Revue de code LIM-94 (M. Halgand, V. Charvet) | Commits `f0536cce0c` / `e3889b8003` / `5de1618104` | 2026-05/06 |
| Expédition - LIMAGRAIN - DEV | Page Confluence | 2026 |
@@ -3,10 +3,10 @@ title: "Quais, poumons et chargement"
tags: [outbound, quais, poumons, chargement, AGV, étiqueteuse]
status: draft
standard_ref: concepts/shipping.md
jira_refs: []
jira_refs: [LIM-94]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md"]
last_updated: 2026-05-05
last_updated: 2026-07-17
author: Arthur
---
@@ -39,7 +39,7 @@ Modes de fonctionnement configurables par quai :
Chaque poumon est composé de **26 emplacements palettes au sol**, répartis en
2 colonnes de 13 emplacements numérotés.
Toutes les combinaisons quai/poumon sont possibles aucune restriction.
Toutes les combinaisons quai/poumon sont possibles - aucune restriction.
La cohérence des assignations est de la responsabilité de Limagrain.
### [CUSTOM] Quai fictif « Parking »
@@ -79,6 +79,11 @@ poumon pour lancer la livraison.
**Dès qu'un poumon est assigné** : les tâches de mouvement vers ce poumon
sont générées, **même si aucun quai n'est encore assigné**.
> [CUSTOM] Depuis LIM-94, l'assignation de l'**image de quai** aux OS et
> tournées peut être **automatique** (job périodique via un stage virtuel
> `X_EXP`), en plus de l'assignation manuelle. Voir
> [Assignation automatique de l'image de quai](assignation-image-quai.md).
**Libération** :
- Image de quai : **automatique** à la dernière palette chargée
@@ -113,18 +118,18 @@ respectés par les caristes pour les prises/déposes AGV.
| Quai bloqué | Plus assignable → assigner un autre quai manuellement |
| Poumon bloqué | Plus assignable → assigner un autre poumon. Palettes déjà présentes traitées normalement, les suivantes réorientées |
### Cas particulier Messagerie carton
### Cas particulier - Messagerie carton
- Pas d'image de quai assignée
- **Emplacement au sol dédié** par transporteur (ex: « Colissimo »,
« Chronopost ») ne pas utiliser d'image de quai classique pour ne
« Chronopost ») - ne pas utiliser d'image de quai classique pour ne
pas perdre 25 places
- [CUSTOM] À l'import du SOR, vérification combo shipping class code +
transporteur → poumon associé automatiquement
## Points d'attention
⚠️ Le process de messagerie carton n'utilise pas d'image de quai un
⚠️ Le process de messagerie carton n'utilise pas d'image de quai - un
emplacement au sol spécifique est réservé (à définir).
⚠️ Possibilité de modifier quai/image de quai a posteriori manuellement
@@ -143,10 +148,15 @@ emplacements serrés).
laisser l'AGV (iGO/Still) choisir l'emplacement disponible le plus
proche, puis remonter l'emplacement exact au WMS
2. OU imposer à Still de **respecter l'ordre des STOP** tel que sorti par
le WMS c'est Still qui est responsable de l'ordonnancement
le WMS - c'est Still qui est responsable de l'ordonnancement
> ⚠️ À valider avec Still lors d'une réunion technique dédiée.
> [CUSTOM] LIM-94 atténue ce problème côté WMS : le placement final est
> calculé au PS (`Container_MovedEventHandler_PS_PR`) vers le premier
> emplacement libre à **X le plus grand** de l'image de quai. Voir
> [Assignation automatique de l'image de quai](assignation-image-quai.md).
## Confirmation prise/dépose AGV
Quand l'AGV prend une palette (sortie TK, sortie buffer, sortie PK), il
@@ -157,7 +167,7 @@ doit **informer le WMS** que la palette est sur l'AGV (emplacement =
incorrecte (occupée informatiquement alors que physiquement vide), ce qui
bloque les flux suivants.
Confirmation de dépose (fin de mission) déjà prévue par Still il faut
Confirmation de dépose (fin de mission) déjà prévue par Still - il faut
aussi le **début de mission** (prise palette).
Les AGV déposent les palettes sur le poumon en respectant l'**ordre des
@@ -165,8 +175,8 @@ arrêts (STOP)** pour la livraison.
## Questions ouvertes
- [ ] Emplacement au sol exact par transporteur pour messagerie carton (@Théo)
- [ ] Validation réunion technique Still pour le problème dépose AGV
- Emplacement au sol exact par transporteur pour messagerie carton (@Théo)
- Validation réunion technique Still pour le problème dépose AGV
sur image de quai (@Théo)
## Historique des modifications
@@ -175,6 +185,7 @@ arrêts (STOP)** pour la livraison.
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | QUAI_TEMPORAIRE, messagerie carton, problème dépose AGV, confirmation prise/dépose |
| 2026-07-17 | Arthur | Renvois vers la nouvelle page LIM-94 (assignation auto image de quai via stage `X_EXP` ; placement PS X max) dans « Règles d'assignation » et « Problème de dépose AGV » ; front matter jira_refs/last_updated |
## Références
+52 -20
View File
@@ -1,16 +1,16 @@
---
title: "Flux ERP outbound Messages expédition"
tags: [outbound, ERP, SOR, RUT, SOF, LOF, PCK, MOV, interface]
title: "Flux ERP outbound - Messages expédition"
tags: [outbound, ERP, SOR, RUT, SOF, LOF, PCK, MOV, interface, adresse, tournee]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
standard_ref: concepts/erp-interface.md
jira_refs: [LIM-117]
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
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", "Jira LIM-117 (lecture directe)"]
last_updated: 2026-07-20
author: Arthur
---
# Flux ERP outbound Messages expédition
# Flux ERP outbound - Messages expédition
> **Résumé** : catalogue des messages ERP liés aux processus d'expédition
> chez Limagrain, avec direction, déclencheur et contenu principal.
@@ -26,7 +26,7 @@ Pour les messages de réception, voir
## Messages entrants (SAP → EasyWMS)
### RUT Route
### RUT - Route
| Champ | Description |
|-------|-------------|
@@ -35,7 +35,7 @@ Pour les messages de réception, voir
| Contenu | Image camion (tournée), 1+ ordres de sortie (SOR), date/heure libération, n° stops |
| Types | « Client » (commandes client + messagerie palette), « Messagerie » (messagerie carton) |
### SOR Shipping Order Request
### SOR - Shipping Order Request
| Champ | Description |
|-------|-------------|
@@ -44,9 +44,35 @@ Pour les messages de réception, voir
| Contenu | Lignes de stock (article/lot SAP, propriétaire Limagrain, statut de stock, quantité), priorité, date/heure libération |
| Types | « Production » (consommation OF hors recert), « Recert » (consommation OF avec recert) |
### [CUSTOM] Adresse de livraison des SOR de tournée (LIM-117)
En standard, le SOR porte des champs d'adresse de livraison, mais la
**liste de SOR d'un RUT** (`RouteErpCommand`) ne les expose pas. SAP
transmet donc l'adresse dans le bloc **`CustomAttribute` de chaque SOR**
du RUT. Un **post-subscription** WMS (à développer) lit ces attributs et
les mappe sur l'**ordre de sortie (OS)** correspondant.
| CstAtt du SOR | Contenu (déduit de l'exemple SAP) | Exemple |
|---|---|---|
| `Attribute1` | Code postal | `63720` |
| `Attribute2` | Site / lieu-dit | `Biopôle Clermont-Limagne` |
| `Attribute3` | Rue | `Rue Henri Mondor` |
| `Attribute4` | Commune | `SAINT-BEAUZIRE` |
| `Attribute5` | Région | `AUVERGNE-RHONE-ALPES` |
| `Attribute6` | Pays | `FR` |
| `Attribute7` | Téléphone / commentaire | `0415400300 ou commentaire` |
Les attributs sont portés au niveau de chaque SOR de la `SorList`, quel
que soit le type (l'exemple SAP `RUT-2026-000451_BIS` concerne un SOR
`AccountCode = PRODUCTION`).
> ⚠️ Statut LIM-117 **Ouvert** : mapping validé côté SAP (exemple fourni),
> le post-subscription WMS reste **à développer**. Les libellés de champs
> ci-dessus sont déduits des valeurs de l'exemple - à confirmer avec SAP.
## Messages sortants (EasyWMS → SAP)
### SOF Shipping Order Fulfilled
### SOF - Shipping Order Fulfilled
| Champ | Description |
|-------|-------------|
@@ -61,7 +87,7 @@ Pour les messages de réception, voir
- **Cancelled** = commande annulée, ShippedQuantity = 0 sur les lignes non
expédiées
### LOF Load Order Fulfilled
### LOF - Load Order Fulfilled
| Champ | Description |
|-------|-------------|
@@ -81,18 +107,18 @@ Palette support (IsSlave=TRUE) → Palette fille (IsSlave=FALSE) → Lignes
de stock avec attributs logistiques. Cas des supports remontés M2I :
Palette US (IsSlave=TRUE) → Séparateur 1 → Séparateur 2.
### [CUSTOM] PCK Passage Conteneur Client
### [CUSTOM] PCK - Passage Conteneur Client
| Champ | Description |
|-------|-------------|
| Direction | WMS → ERP |
| Déclencheur | Stock préparé passage en conteneur client EasyWMS |
| Déclencheur | Stock préparé - passage en conteneur client EasyWMS |
| Contenu | Information passage conteneur client |
| Envoyé pour | Commande client, consommation OF hors recert, messagerie carton |
### ~~[CUSTOM] MOV Movement~~ ANNULÉ
### ~~[CUSTOM] MOV - Movement~~ ANNULÉ
> **ANNULÉ** décision réunion client, jugé inutile.
> **ANNULÉ** - décision réunion client, jugé inutile.
| Champ | Description |
|-------|-------------|
@@ -100,7 +126,7 @@ Palette US (IsSlave=TRUE) → Séparateur 1 → Séparateur 2.
| Déclencheur | ~~Déplacement de stock entre palettes (picking, regroupement)~~ |
| Contenu | ~~Palette d'origine, palette de destination, nouvelle palette (Oui/Non), quantité + caractéristiques~~ |
## Communication ERP : LOC Détails
## Communication ERP : LOC - Détails
### Principe retenu
@@ -135,7 +161,7 @@ les mouvements (et non une autre date).
| Chargement camion terminé | LOF |
| Réception palette re-certifiée | ASN (depuis MII) |
## Diagramme de séquence Expédition client complète
## Diagramme de séquence - Expédition client complète
```mermaid
sequenceDiagram
@@ -164,7 +190,7 @@ sequenceDiagram
WMS->>SAP: LOF (camion chargé)
```
## Diagramme de séquence Consommation OF avec recertification
## Diagramme de séquence - Consommation OF avec recertification
```mermaid
sequenceDiagram
@@ -196,12 +222,16 @@ sequenceDiagram
## Points d'attention
⚠️ Le message MOV est **ANNULÉ** (décision réunion client jugé inutile).
⚠️ Le message MOV est **ANNULÉ** (décision réunion client - jugé inutile).
⚠️ Le SOF est automatique quand tous les conteneurs sont chargés.
En cas d'expédition partielle, la clôture (et le SOF) est manuelle.
Les lignes sans quantité expédiée n'apparaissent pas dans le SOF.
⚠️ **Adresse de livraison (LIM-117)** : non exposée dans la liste de SOR
d'un RUT ; transmise par SAP dans le `CustomAttribute` de chaque SOR et
mappée sur l'OS par un post-subscription WMS à développer.
⚠️ Pour la recertification, le SOF est envoyé **avant** la réception
de la nouvelle HU (séquence SOF → ASN).
@@ -215,7 +245,8 @@ le flag « client ».
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | MOV annulé, LOC détaillé (5 min, delta, structure), synthèse communications |
| 2026-05-06 | Arthur | Enrichissement SOF (phase 2, statuts, contenu), LOF (structure conteneurs, articulation SOF/LOF), PCK remplacé par LOC depuis CR consolidé |
| 2026-05-06 | Arthur | Enrichissement SOF (phase 2, statuts, contenu), LOF (structure conteneurs, articulation SOF/LOF), PCK remplacé par LOC - depuis CR consolidé |
| 2026-07-20 | Arthur | Ajout LIM-117 (LOT 2.1, lecture directe, Ouvert) : section « Adresse de livraison des SOR de tournée » (`CustomAttribute` Attribute1-7 des SOR du RUT, post-subscription WMS de mapping vers l'OS à développer) ; point d'attention ; front matter jira_refs/sources/tags/last_updated |
## Références
@@ -224,3 +255,4 @@ le flag « client ».
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| [LIM-117](https://easywmsfrance.atlassian.net/browse/LIM-117) | Ticket Jira (LOT 2.1, mapping adresse SOR de tournée, Ouvert) | 2026-07 |
+174 -49
View File
@@ -1,16 +1,16 @@
---
title: "Flux expédition Processus complet"
title: "Flux expédition - Processus complet"
tags: [outbound, expédition, défragmentation, étiquetage, chargement, recertification, messagerie, litiges, AGV]
status: draft
standard_ref: concepts/shipping.md
jira_refs: []
jira_refs: [LIM-105, LIM-107, LIM-111]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md"]
last_updated: 2026-05-13
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "Jira LIM-105 (lecture directe 2026-07-20)", "Jira LIM-107 (lecture directe 2026-07-20)", "Jira LIM-111 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Flux expédition Processus complet
# Flux expédition - Processus complet
> **Résumé** : processus d'expédition de bout en bout en 12 étapes, de la
> réception de l'OS jusqu'à la libération du quai, incluant les flux
@@ -63,7 +63,7 @@ ordonnancés par n° de STOP). Voir [Ordres de sortie](shipping-orders.md).
### 3. Assignation du stock
Voir [Ordres de sortie Assignation](shipping-orders.md#assignation-de-stock)
Voir [Ordres de sortie - Assignation](shipping-orders.md#assignation-de-stock)
pour les stratégies détaillées (FIFO 24h, économie de mouvement, pas de
FEFO, max palettes complètes).
@@ -71,12 +71,12 @@ FEFO, max palettes complètes).
| Type de palette | Action |
|-----------------|--------|
| Palettes complètes / picking terminées | [CUSTOM] Tâche de défragmentation (reloc) vers zone d'expédition ASRS. Ne se déclenche que si **toutes** les palettes clientes sont « terminées » et qu'aucun quai n'est associé à l'OS. Voir [Défragmentation custom](../02-stockage/defragmentation.md#custom-défrag-client-par-tournée--quai-non-assigné-lim-87). |
| Palettes complètes / picking terminées | [CUSTOM] Tâche de défragmentation (reloc) vers zone d'expédition ASRS. Ne se déclenche que si **toutes** les palettes clientes sont « terminées » et qu'aucun quai n'est associé à l'OS. Voir [Défragmentation custom](../02-stockage/defragmentation.md#custom-défrag-client-par-tournée---quai-non-assigné-lim-87). |
| Palettes picking | Aucune tâche tant qu'un poste de travail n'est pas assigné |
> **Règle générale** : on n'envoie aucune palette sur l'image de quai tant
> que le picking n'est pas terminé (et que les palettes sont revenues à
> l'ASRS) sauf si le stop précédent est fini.
> l'ASRS) - sauf si le stop précédent est fini.
>
> **Deux customs complémentaires** gèrent l'ordonnancement par STOP :
> quai non assigné → [Défragmentation custom](../02-stockage/defragmentation.md),
@@ -126,7 +126,7 @@ workflow `StackerCrane_SortTasks_PR`.
| Règle | Détail |
|-------|--------|
| Picking négatif | **Deux conditions cumulatives** (réu. 11/05/2026) : seuil fiche article (défaut **55%**, pas 50%) ET poids unitaire sac **≥ 7 kg**. Si l'une des deux n'est pas remplie → picking direct classique. Voir [Picking combinatoire](../03-picking/picking-combinatoire.md#custom-règle-du-picking-négatif). |
| ~~Traitement commercial~~ | ~~Articles avec/sans traitement sur palettes filles séparées~~ **SUPPRIMÉ** (réu. 11/05/2026, `CONTROLE_TRAITEMENT_COMMERCIAL = false`). L'entrepôt ne fait pas de bio. |
| ~~Traitement commercial~~ | ~~Articles avec/sans traitement sur palettes filles séparées~~ - **SUPPRIMÉ** (réu. 11/05/2026, `CONTROLE_TRAITEMENT_COMMERCIAL = false`). L'entrepôt ne fait pas de bio. |
| Verrou « HORS TOLERANCE » | Si présent → recomptage avant picking. Si stock restant suffisant après inventaire → assignation maintenue. Sinon → réassignation ailleurs + retrait verrou. |
#### Algorithme de répartition des palettes sur les TP
@@ -135,7 +135,7 @@ workflow `StackerCrane_SortTasks_PR`.
enchaînements, ordonnancement par espèce, terminer une palette pleine
avant d'en entamer une autre, cadencement des buffers, pas de mélange
traitement commercial, contrainte opérateur (pas de déplacement de sacs
d'une table à l'autre sacs lourds).
d'une table à l'autre - sacs lourds).
**Table du milieu** : toujours occupée soit par une palette de picking
négatif, soit par une palette vide de dépôt. Palette vide remise
@@ -154,12 +154,16 @@ classe de commande.
#### Message MOV
~~À chaque déplacement de stock durant le picking, un message MOV est
envoyé à SAP.~~ **ANNULÉ** vu en réunion client, jugé inutile.
envoyé à SAP.~~ **ANNULÉ** - vu en réunion client, jugé inutile.
#### Filmage
Avant chaque évacuation, l'opérateur choisit le programme de filmage
(CstData transmis à Galileo). Possibilité de choisir « pas de filmage ».
(stocké dans `CstAtt05`, transmis à Galileo). Possibilité de choisir « pas
de filmage ». Le mécanisme de transmission (event `MovementCreated` sur
source PIE_02 → CustomData de la tâche) est décrit dans
[Configuration Galileo - Transmission du filmage](../02-stockage/galileo-config.md#transmission-du-programme-de-filmage-à-la-filmeuse-lim-115)
(LIM-115).
**Programmes de filmage disponibles** :
@@ -264,47 +268,90 @@ deuxième chargement est recréé automatiquement pour le reliquat.
| Élément | Mode de libération |
|---------|-------------------|
| Image de quai | **Automatique** dernière palette chargée |
| Quai | **Manuel** départ du camion |
| Image de quai | **Automatique** - dernière palette chargée |
| Quai | **Manuel** - départ du camion |
## Étiqueteuse automatique
> **Statut** : le **mécanisme d'intégration Galileo** est spécifié dans
> **LIM-111** (Ouvert) ; le **contenu des rapports** relève de **LIM-107** ;
> la **pose initiale du flag `CstAtt14` au PK** relève de **LIM-91**. Cette
> section documente le fonctionnement au poste de sortie TK.
### Principe
Deux étiqueteuses au niveau des deux postes de sortie TK, pouvant imprimer
une ou plusieurs étiquettes selon le processus.
Deux étiqueteuses automatiques, **LBLM_01** et **LBLM_02** (stations de type
**ET**), équipent les deux postes de sortie de l'ASRS, sur les convoyeurs
allant vers les images de quai. Elles servent **uniquement** aux supports
qui sortent de l'ASRS pour aller **directement sur une image de quai** dans
un flux d'expédition. Elles peuvent poser une ou deux étiquettes selon le
processus. Le WMS envoie un *print command* avec l'un des rapports (mono ou
multiréférence) - voir
[Étiquette support RFID](../01-inbound/etiquette-rfid.md).
Positionnement dans la chaîne : sortie TK (ordonnancée par n° STOP, voir
[Séquençage shipping par STOP](sequencage-shipping-stop.md)) → table de
sortie TK → **étiqueteuse ET** → poste de sortie PS → AGV Still → image de
quai → chargement camion.
### Étiquetage au picking (étiqueteuse auto)
100% des palettes passant par le picking sont étiquetées (étiquette
d'expédition) directement au PK. Un `CstAtt` est positionné à `true` sur
la palette pour indiquer qu'elle a déjà été étiquetée.
100% des palettes passant par le picking sont étiquetées (étiquette de
picking HU RFID) directement au PK. Le flag `CstAtt14` est positionné à
`true` sur la palette (LIM-91) pour indiquer qu'elle a déjà été étiquetée.
### Comportement à la sortie TK
### Comportement à la sortie TK - décision d'impression (LIM-111)
L'étiqueteuse **n'imprime pas** si :
Deux étiquettes **distinctes** peuvent être posées, avec des règles
**séparées**. Le flag **`CstAtt14`** (Container, String - voir
[AD Customs](../07-admin/ad-customs.md#cstatt-support-container--palette)) ne conditionne
que la **2e** (étiquette de picking), pas l'étiquette d'expédition.
- `CstAtt` = `true` (palette déjà étiquetée au picking)
- OU hauteur palette trop faible (PLC height type = 1)
| Étiquette | Rapport | Condition d'impression |
|-----------|---------|------------------------|
| Expédition (client / production) | LIM-107 | **Toujours**, sauf palette trop basse (PLC Height Type = 1). Indépendante de `CstAtt14`. |
| Picking (HU RFID mono/multiréférence) | LIM-68 | Uniquement si `CstAtt14` = `false`/vide **et** PLC Height Type ≠ 1. Non imprimée si `CstAtt14` = `true` (déjà étiquetée au PK) ou palette trop basse. |
L'étiqueteuse **imprime** si :
**Cas d'usage de la 2e étiquette** : une palette complète sortie
directement de l'ASRS vers l'image de quai **sans passer par un poste de
picking** n'a pas ses étiquettes HU RFID → `CstAtt14` vide → l'étiqueteuse
les pose (monoref ou multiref RFID selon le nombre de lignes de stock).
- `CstAtt` = `false` ET PLC height type ≠ 1
- Si impression réussie → `CstAtt` passe à `true`
- Si impression échouée → `CstAtt` passe à `error`
**Mise à jour du flag** après passage à l'étiqueteuse :
### Mode dégradé — Chargement camion
- Impression OK → `CstAtt14` passe à `true`
- Impression échouée → `CstAtt14` passe à `error` (voir Gestion des pannes)
Si l'opérateur scanne une palette sans étiquette (`CstAtt` = `false` ou
`error`, PLC height type ≠ 1) au chargement camion → impression
automatique sur une imprimante proche du quai.
> ⚠️ La condition « PLC Height Type ≠ 1 » sur l'étiquette d'expédition
> reste **à vérifier** avec le fournisseur (LIM-111 §4.2).
### Communication Galileo
### Mode dégradé - Chargement camion
On envoie un **custom data** à Galileo (pas de changement de
destination/route). Galileo, en recevant le custom data avec le bon
tracking de palette, arrête les rouleaux et lance l'impression. Un seul
chemin — l'arrêt est piloté par le custom data.
Si l'opérateur scanne une palette sans étiquette (`CstAtt14` = `false` ou
`error`, PLC height type ≠ 1) au chargement camion → le WMS propose de
réimprimer le rapport d'expédition (LIM-107), avec prompt du code
imprimante. Réimpression via imprimante proche du quai (menu TRF dédié).
### Communication Galileo (LIM-111)
Pilotage **par custom data**, sans changement de destination ni de route
(un seul chemin physique). Même principe que le filmage (CstAtt05 → custom
data, voir LIM-91).
Points d'insertion :
- **Subscription sur l'event `MovementCreated`** : si la destination est
une étiqueteuse (`LBLM_01`/`LBLM_02`), le WMS met à jour le **CustomData
de la tâche** avec le **nombre d'étiquettes** à imprimer. Ce nombre est
essentiel : il indique au **bras articulé** s'il y a une ou deux
positions de collage.
- Galileo, en recevant le custom data avec le bon tracking de palette,
**arrête les rouleaux**.
- À la **fin d'ordre** (event = palette arrivée à l'étiqueteuse), le WMS
lance le **`printerCommand`**. Le contenu du rapport est envoyé
directement à l'imprimante par EasyWMS via le **`printerService`**.
- Galileo gère l'impression et le **collage**, puis la **relance des
rouleaux**.
### Multi-étiquettes (2 étiquettes)
@@ -321,10 +368,68 @@ la palette (positions à définir avec Théo).
- [CUSTOM Galileo] Communication HS imprimante → mise en défaut ET à
documenter dans le document TMS
### Contenu des étiquettes d'expédition par type (LIM-107)
> **Statut (LIM-107)** : en revue de code.
Dès qu'une palette sort de l'installation pour expédition, un rapport est
imprimé **selon le type d'expédition** (classe de l'OS). Format **A5**. Le
type est déterminé par la classe de l'OS via les paramètres
`EXPEDITION_CLASSE_CLIENT` / `EXPEDITION_CLASSE_PRODUCTION` (voir
[Paramètres projet](../07-admin/parametres-projet.md)).
Où l'étiquette est imprimée (arbitrage Justine 02/07/2026) :
- **Client** et **Production** → sur les **étiqueteuses automatiques**
d'expédition (sortie TK).
- **Échantillonnage** → sur les **étiqueteuses des postes de travail**, via
le flux inventaire COR/COF. Contenu détaillé dans
[Échantillonnage - Étiquette d'échantillonnage](../03-picking/echantillonnage.md#étiquette-déchantillonnage-lim-107).
Étiquette **CLIENT** (report `CST_RPT_OUTBOUND_CLIENT`) :
| # | Champ |
|---|-------|
| 1 | Code de la tournée |
| 2 | Code de l'OS |
| 3 | Code du transporteur de l'OS |
| 4 | Adresse de livraison de l'OS |
Étiquette **PRODUCTION** (report `CST_RPT_OUTBOUND_PRODUCTION`) :
| # | Champ |
|---|-------|
| 1 | Code de l'OS |
| 2 | Code-barre 128 du code de l'OS |
| 3 | `SOR.Document` |
Une **impression manuelle** est aussi disponible depuis la vue conteneurs
(`ContainerVList`) via deux boutons (« Imprimer étiquette d'expédition
client / production »), affichés sous condition que le conteneur soit un
conteneur client ou d'expédition de la bonne classe d'OS.
| Élément AD | Type | Rôle |
|------------|------|------|
| `EXPEDITION_CLASSE_CLIENT` / `EXPEDITION_CLASSE_PRODUCTION` | Paramètre | Classe d'OS identifiant le type d'expédition (client / production). |
| `CST_RPT_OUTBOUND_CLIENT` | Report | Étiquette d'expédition client. |
| `CST_RPT_OUTBOUND_PRODUCTION` | Report | Étiquette d'expédition production. |
| `CST_RPT_ECHANTILLONAGE` | Report | Étiquette d'échantillonnage (voir [Échantillonnage](../03-picking/echantillonnage.md)). |
| `CST_VSearchPrintShippingClientContainerLabel` | Vue | Génération de l'étiquette d'expédition client. |
| `CST_VSearchPrintShippingProductionContainerLabel` | Vue | Génération de l'étiquette d'expédition production. |
| `ContainerVList` | Vue | Ajout des 2 boutons de génération d'étiquette (sous condition de classe d'OS). |
| `CST_ContainerVList_Action_PrintShippingClientLabel` / `...ProductionLabel` | Ressource i18n | Libellés des boutons d'impression. |
| `CST_ShippingClientContainerLabel` (client + production) | Ressource i18n | Libellés « Générer étiquette expédition client / production ». |
## Flux spécifiques
### Re-certification
> **Workstation LIM-105** : le **process opérateur détaillé au poste de
> picking** (scan ancienne/nouvelle étiquette, vérification ASN via
> `SAP_ATH111_*`, échange de conteneur, filmage, éléments AD) est documenté
> dans [Recertification - Workstation au poste de picking](../03-picking/recertification.md).
> La section ci-dessous décrit le **flux outbound** de bout en bout.
La re-certification consiste à ré-étiqueter une palette existante pour
lui donner une nouvelle identité (nouvelle HU) sans déplacer physiquement
le stock. C'est une **sortie administrative** suivie d'une **réception
@@ -343,7 +448,7 @@ manager), ce qui bloque le PK pour les autres types de tâches.
(ex: PK02) dans un CstAtt de la palette
5. **Route virtuelle** : la palette est déplacée informatiquement du PK
vers QUAI_RECERTIF
6. [CUSTOM] **Event sur le déplacement vers QUAI_RECERTIF** 3 actions :
6. [CUSTOM] **Event sur le déplacement vers QUAI_RECERTIF** - 3 actions :
- Récupération du CstAtt (code PK d'origine)
- Fermeture de la commande → expédition du stock → génération du SOF
- Création d'une **palette vide** sur le PK d'origine (pour maintenir
@@ -426,7 +531,7 @@ SOR.Line si besoin.
- S'il reste du stock dispo : assignation maintenue (workflow
`OnStockAdjust` recalcule uniquement si nécessaire)
- Si plus assez de stock → réassignation ailleurs
3. Autre problème le support n'est pas ok (90% du stock a un problème) :
3. Autre problème - le support n'est pas ok (90% du stock a un problème) :
- **Verrou de support** interdisant le picking (bouton « mettre sous
révision » en standard, à configurer)
- Tâche créée pour que l'AGV dépose la palette sur un **emplacement
@@ -464,20 +569,26 @@ documentés pour chaque process.
## Questions ouvertes
- [ ] Ordonnancement des palettes dans le canal du poumon d'expé du
magasin automatique géré par le WMS ou naturellement via l'ordre
- Ordonnancement des palettes dans le canal du poumon d'expé du
magasin automatique - géré par le WMS ou naturellement via l'ordre
de stockage ? (@Nicolas)
- [ ] Fermeture auto OS si chargement complet standard ou custom ?
- Fermeture auto OS si chargement complet - standard ou custom ?
(@Nicolas)
- [ ] Comportement du reliquat chargement camion avec fichier RUT
- Comportement du reliquat chargement camion avec fichier RUT -
à paramétrer et tester (@Fabien)
- [ ] Positions des 2 étiquettes articulées sur la palette (@Théo)
- [ ] Custom Galileo : communication HS imprimante → mise en défaut ET
à documenter dans le TMS (@Théo)
- [ ] Combien de commandes messagerie en parallèle sur un poste ? (@Justine)
- [ ] Emplacement au sol buffer litige — localisation exacte (@Théo)
- [ ] Emplacement au sol messagerie carton par transporteur (@Théo)
- [ ] Réunion technique avec Still pour valider le problème de dépose
- Positions des 2 étiquettes articulées sur la palette (@Théo)
- Custom Galileo : communication HS imprimante → mise en défaut ET
- à documenter dans le TMS (@Théo)
- Étiqueteuse auto (LIM-111) : mécanisme de remontée d'une erreur
d'impression par les automates au WMS à définir - nécessaire pour que
le mode dégradé TRF sache si l'impression a réussi (@Vincent)
- Étiqueteuse auto (LIM-111) : palette à l'arrêt en cas de problème
d'impression - intervention opérateur (laquelle ?) et procédure de
redémarrage de la palette à définir (@Théo / @Vincent)
- ❓ Combien de commandes messagerie en parallèle sur un poste ? (@Justine)
- ❓ Emplacement au sol buffer litige - localisation exacte (@Théo)
- ❓ Emplacement au sol messagerie carton par transporteur (@Théo)
- ❓ Réunion technique avec Still pour valider le problème de dépose
AGV sur image de quai (@Théo)
## Historique des modifications
@@ -487,3 +598,17 @@ documentés pour chaque process.
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Réécriture complète depuis ateliers DEV expédition |
| 2026-05-13 | Arthur | Correction seuil picking négatif 50% → 55% + poids ≥ 7 kg, suppression règle traitement commercial |
| 2026-07-20 | Arthur | Renvoi vers la nouvelle page [Recertification workstation](../03-picking/recertification.md) (LIM-105) depuis la section Re-certification ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-107 (lecture directe, en revue de code) : sous-section « Contenu des étiquettes d'expédition par type » sous Étiqueteuse automatique (format A5 ; Client/Production sur étiqueteuses auto, Échantillonnage sur poste via COR/COF ; contenu étiquettes Client 4 champs + Production 3 champs ; params EXPEDITION_CLASSE_CLIENT/PRODUCTION ; reports/vues/ContainerVList/ressources ; impression manuelle via 2 boutons ContainerVList) ; front matter jira_refs +LIM-107/sources |
| 2026-07-20 | Arthur | LIM-111 (lecture directe, Ouvert) : formalisation de l'intégration Galileo de l'étiqueteuse (noms de stations LBLM_01/LBLM_02 type ET ; refonte « Comportement à la sortie TK » en logique 2 étiquettes distinctes - expédition LIM-107 toujours sauf palette basse, picking LIM-68 conditionnée par CstAtt14 ; mécanisme Galileo subscription MovementCreated → CustomData nombre d'étiquettes → printerCommand/printerService ; CstAtt14 nommé) ; front matter jira_refs +LIM-111/sources ; 2 questions ouvertes (remontée erreur impression, palette à l'arrêt) |
| 2026-07-20 | Arthur | Lint : ajout section Références ; correction ancres et liens |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | AF (docx) | 2026 |
| "Expédition - LIMAGRAIN - DEV" Confluence | Page | 2026 |
| [LIM-105](https://easywmsfrance.atlassian.net/browse/LIM-105) | Ticket Jira (lecture directe) | 2026-07-20 |
| [LIM-107](https://easywmsfrance.atlassian.net/browse/LIM-107) | Ticket Jira (lecture directe) | 2026-07-20 |
| [LIM-111](https://easywmsfrance.atlassian.net/browse/LIM-111) | Ticket Jira (lecture directe) | 2026-07-20 |
@@ -1,16 +1,16 @@
---
title: "Séquençage shipping par STOP Quai assigné"
title: "Séquençage shipping par STOP - Quai assigné"
tags: [outbound, expédition, shipping, tournée, STOP, stacker-crane, custom, AGV]
status: draft
status: review
standard_ref: concepts/shipping.md
jira_refs: [LIM-88]
jira_refs: [LIM-88, LIM-94]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: ["LIM-88 LOT2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assigné.md"]
last_updated: 2026-05-12
sources: ["LIM-88 LOT2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assigné.md", "Jira LIM-88 (lecture directe, revue de code)"]
last_updated: 2026-07-17
author: Arthur
---
# Séquençage shipping par STOP Quai assigné
# Séquençage shipping par STOP - Quai assigné
> **Résumé** : quand un quai est déjà assigné à une tournée (RUT),
> les palettes doivent sortir de l'ASRS vers l'image de quai dans
@@ -30,9 +30,12 @@ Ce custom est le **cas complémentaire** de la
(LIM-87) qui traite le cas « quai non assigné ».
Ici, le quai est **déjà assigné au RUT** quand la tournée est libérée
(ou assigné avant la fin du picking, ou après). Dans ce cas, LIM-87
(défrag custom) ne s'applique pas : c'est le **flux shipping standard**
qui prend le relais pour envoyer les palettes vers l'image de quai.
(ou assigné avant la fin du picking, ou après). L'assignation de l'image
de quai peut être manuelle ou **automatique** via le job LIM-94 (voir
[Assignation automatique de l'image de quai](assignation-image-quai.md)).
Dans ce cas, LIM-87 (défrag custom) ne s'applique pas : c'est le **flux
shipping standard** qui prend le relais pour envoyer les palettes vers
l'image de quai.
Il faut néanmoins respecter la règle métier d'ordonnancement par n° de
STOP (ordre inverse : STOP max → STOP 1) pour que les palettes soient
posées sur l'image de quai dans le bon ordre de chargement camion.
@@ -50,7 +53,7 @@ pas :
> Custom imaginé au départ : bloquer la génération des tâches de
> shipping tant que tout le picking n'est pas terminé.
Trop restrictif on ne profiterait pas du temps pendant lequel les
Trop restrictif - on ne profiterait pas du temps pendant lequel les
palettes complètes pourraient déjà être pré-positionnées sur l'image
de quai dans l'ordre. Par ailleurs, bloquer la génération de tâche est
complexe car de nombreux process la déclenchent (pas uniquement des
@@ -65,7 +68,7 @@ jobs).
Dès que le quai est assigné, toutes les palettes prêtes (complètes
dans l'ASRS + palettes filles revenues de picking) ont leur tâche de
shipping générée par le standard. Une palette non encore pickée n'a
pas de tâche sa tâche sera créée au moment où elle rentrera dans un
pas de tâche - sa tâche sera créée au moment où elle rentrera dans un
TK après picking.
#### 2. Ordonnancement d'exécution (custom stacker crane)
@@ -99,7 +102,7 @@ palette rentre bien dans l'ASRS.
- **Le tri du stacker crane doit considérer les palettes sur tous les
TK** (pas uniquement celles dans un TK unique comme en standard).
Pattern déjà réalisé sur le **projet Bardinet** à reprendre.
Pattern déjà réalisé sur le **projet Bardinet** - à reprendre.
### Ce qui reste standard
@@ -109,6 +112,40 @@ palette rentre bien dans l'ASRS.
si pas de stock trouvé → palettes suivantes du STOP envoyées ;
si nouveau stock trouvé → récupère le séquençage
## Implémentation définitive (revue de code validée 2026-06-02)
> **Statut** : En cours de test client (pré-production). Revue de code
> et tests validés. Deux revues successives : le tri multi-TK (Maxime
> Halgand) puis un garde-fou complémentaire sur la génération des
> tâches de chargement (Vincent Charvet).
Le custom se limite à une **query clonée** et deux **workflows**
overridés. Aucune génération de tâche custom : le standard crée les
tâches shipping au fil de l'eau, le custom n'intervient qu'au **tri**
et pose un garde-fou sur la génération des tâches de chargement AGV.
### Query
| Élément | Rôle |
|---|---|
| `CST_Tasks_PendingOutboundForStackerCrane` | Cœur du custom. Clone de `Tasks_PendingOutboundForStackerCrane`. Filtre pour récupérer toutes les tâches shipping, conteneurs picking, conteneurs shipping et conteneurs client d'un **numéro de STOP supérieur**, et vérifier s'ils sont **tous en station image de quai (DockStage)** ou non |
### Workflows
| Workflow | Modification |
|---|---|
| `StackerCrane_GetOutboundPendingTasks_PR` | Utilise la query custom au lieu de la standard. Ajoute un log pour conserver les informations de recherche |
| `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR` | Empêche la création d'une tâche de chargement s'il n'y a **pas de stage (image de quai) associé à l'OS**. Sans ce garde-fou, les palettes bloquent aux PS car les AGV n'ont pas de destination pour effectuer le mouvement (commit `0aec1c3b`). Le stage est posé par [LIM-94](assignation-image-quai.md) |
### Règle de filtrage
Le filtre ne bloque que les **sorties d'expédition** : une palette d'un
STOP donné ne sort vers l'image de quai que si tous les STOP supérieurs
sont déjà arrivés en station DockStage. En revanche, les **sorties de
palettes picking restent toujours autorisées** pour permettre le
prélèvement anticipé : le picking n'est jamais bloqué par le
séquençage.
## Flux fonctionnel
```mermaid
@@ -149,7 +186,7 @@ sequenceDiagram
|----|--------------|------------------|
| CT-01 | RUT mono-STOP, 3 PC dans ASRS, quai assigné | 3 tâches shipping, palettes partent vers image de quai |
| CT-02 | RUT multi-STOP (1, 2, 3), 2 PC chacun, quai assigné | 6 tâches. Stacker crane exécute STOP 3, puis 2, puis 1 |
| CT-03 | RUT multi-STOP, picking terminé avant libération, toutes PF revenues | Identique à CT-02 PF ou PC, même logique |
| CT-03 | RUT multi-STOP, picking terminé avant libération, toutes PF revenues | Identique à CT-02 - PF ou PC, même logique |
### Cas limites (cœur du custom)
@@ -173,7 +210,7 @@ sequenceDiagram
| CT-09 | 2 RUT en parallèle, quais distincts | Ordonnancement indépendant par RUT. Pas de fuite de tri |
| CT-11 | RUT A avec quai, RUT B sans quai | RUT A traité par ce custom. RUT B relève de LIM-87 (défrag). Vérifier absence d'interférence |
| CT-12 | SOR ajouté à un RUT en cours d'exécution | Nouvelles palettes s'insèrent dans l'ordre STOP. Si picking nécessaire → PF reviendront à l'ASRS |
| CT-13 | Bascule de quai en cours de tournée | **À définir en recette.** Tâches restantes regénérées vers nouveau quai. Palettes déjà à l'ancien quai → traitement manuel |
| CT-13 | Bascule de quai en cours de tournée | **Scénario exclu** : on ne peut pas changer le quai une fois la RUT libérée (contrainte WMS, note dev revue de code). Une rebascule relève d'une opération manuelle exceptionnelle, hors périmètre custom |
### Stock reassign au picking
@@ -184,25 +221,31 @@ sequenceDiagram
## Points d'attention
⚠️ Le custom de tri multi-TK reprend un **pattern Bardinet** ne pas
⚠️ Le custom de tri multi-TK reprend un **pattern Bardinet** - ne pas
réinventer le mécanisme.
⚠️ Le retour systématique des PF vers l'ASRS (pas de crossdock) est
le comportement standard attendu mais **doit être validé en recette**.
⚠️ La bascule de quai en cours de tournée (CT-13) n'est pas couverte
par le custom — les palettes déjà à l'image de quai de l'ancien quai
sont à traiter manuellement.
⚠️ La bascule de quai en cours de tournée (CT-13) est **impossible** :
le quai ne peut pas être changé une fois la RUT libérée. Une rebascule
serait une opération manuelle exceptionnelle, hors périmètre custom.
⚠️ Les tâches de chargement ne doivent jamais être générées sans image
de quai associée à l'OS, sinon les palettes bloquent aux PS (les AGV
n'ont pas de destination). Garde-fou porté par
`Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`.
## Questions ouvertes
- [ ] Retour PF vers ASRS (CT-08) : confirmer que le standard crée
- Retour PF vers ASRS (CT-08) : confirmer que le standard crée
bien une tâche de rangement quand pas de route vers l'image de quai.
Sinon custom de secours nécessaire. (@Nicolas)
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
- [ ] Bascule de quai en cours de tournée (CT-13) : définir le
comportement attendu pour les palettes déjà à l'ancien quai.
(@Justine)
- [x] ~~Bascule de quai en cours de tournée (CT-13) : définir le
comportement attendu pour les palettes déjà à l'ancien quai.~~
**Résolu** (note dev, revue de code) : on ne peut pas changer le
quai une fois la RUT libérée. Scénario exclu du custom.
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
@@ -210,11 +253,14 @@ sont à traiter manuellement.
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-88 |
| 2026-07-17 | Arthur | Ajout implémentation définitive (revue de code 02/06 : query `CST_Tasks_PendingOutboundForStackerCrane`, WF `StackerCrane_GetOutboundPendingTasks_PR` + `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`, règle picking toujours autorisé) ; statut préprod ; résolution CT-13 (quai non modifiable après libération RUT) |
| 2026-07-17 | Arthur | Cross-ref LIM-94 (assignation auto de l'image de quai / stage `X_EXP` dont dépend le garde-fou de chargement) ; jira_refs +LIM-94 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira | 2026 |
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira (statut préprod / test client) | 2026 |
| Revue de code LIM-88 (M. Halgand, V. Charvet, N. Chabanis) | Revue de code validée, commit `0aec1c3b` | 2026-06-02 |
| Expédition - LIMAGRAIN - DEV | Page Confluence | 2026 |
| Projet Bardinet | Pattern custom stacker crane multi-TK | |
| Projet Bardinet | Pattern custom stacker crane multi-TK | - |
+98 -17
View File
@@ -1,16 +1,16 @@
---
title: "Ordres de sortie Types et libération"
title: "Ordres de sortie - Types et libération"
tags: [outbound, OS, SOR, RUT, libération, assignation, FIFO, LOC]
status: draft
standard_ref: concepts/order-outbound.md
jira_refs: []
jira_refs: [LIM-109, LIM-110]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
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
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", "Jira LIM-109 (lecture directe 2026-07-20)", "Jira LIM-110 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Ordres de sortie Types et libération
# Ordres de sortie - Types et libération
> **Résumé** : 4 types d'ordres de sortie chez Limagrain, avec des
> comportements de libération, d'assignation et de préparation distincts.
@@ -51,6 +51,29 @@ re-certification. Le message d'entrée diffère selon le type.
- Chaque OS peut avoir plusieurs **lignes** (article + quantité)
- Chaque palette est étiquetée et ordonnancée par **n° STOP**
## [CUSTOM] Lot obligatoire sur les lignes d'OS (LIM-109)
> **Statut (LIM-109)** : dev terminé, en attente de déploiement pour test.
> Revue de code validée (Maxime, 29/06/2026).
La création d'un ordre de sortie ou d'une **ligne d'OS** est **interdite si
l'attribut logistique lot n'est pas renseigné**. Le lot est indispensable à
l'assignation de stock (critère « article/lot SAP », voir
[Assignation de stock](#assignation-de-stock)) : une ligne sans lot ne
pourrait jamais être servie.
Le contrôle est posé par une **subscription en Preview** sur l'event de
création de ligne d'OS, qui lève une **exception** si le lot est vide. Combiné
à `TransactionalLineList = true` (voir
[Paramètres ERP](#paramètres-erp-des-sorrut)), le refus est **total** : tout
l'import de l'OS est rejeté.
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_OutboundOrderLineCreated_CheckLotRequired_PRE` | Subscription | En **Preview** sur l'event de création de ligne d'OS ; appelle le WF de contrôle. |
| `CST_OutboundOrderLineCreated_CheckLotRequired_PRE_PR` | Workflow | Lève une exception si le lot n'est pas renseigné sur la ligne. |
| `CST_OutboundOrderLineCreation_MissingLot` | Ressource i18n | Message d'erreur « lot manquant ». |
## Paramètres ERP des SOR/RUT
| Paramètre | Valeur | Commentaire |
@@ -62,7 +85,7 @@ re-certification. Le message d'entrée diffère selon le type.
| CompleteSorList (RUT) | true | SOR absents de la RUT = supprimés |
| AllowAssignStockExcess | true | Palettes pleines, jamais de picking partiel |
| Limite d'annulation | Statut "Chargé" | Avant = OK, après = refusé |
| IgnoreNulls (RUT) | false | |
| IgnoreNulls (RUT) | false | - |
## Gestion des ruptures SOR Production
@@ -76,9 +99,63 @@ manuel.
## Quai recertification
Pour les SOR de type recertification :
`AssignedDockStationCode = "QUAI_RECERTIFICATION"` (quai fictif, renseigné
par Limagrain dans le SOR).
> **Statut (LIM-110)** : en cours de test client (pré-production). Revue de
> code validée (Maxime, 03/07/2026).
Le quai de recertification (`QUAI_RECERTIFICATION`, code porté par le
paramètre `RECERTIFICATION_CODE_QUAI`) est **assigné automatiquement** par le
WMS :
- à la **création** d'un OS de classe RECERTIFICATION
(`OutboundOrder_OutboundOrderCreatedEventHandler_PR`) ;
- à l'**édition** d'un OS auquel on ajoute la classe RECERTIFICATION (ajout
Vincent 09/07/2026).
Ce quai est **réservé à ce process**. Le **changement manuel** du quai
(assignation ou dé-assignation) est **empêché** : les boutons correspondants
sont masqués dans la vue `OutboundOrderVList` pour les OS de recertification.
> **Évolution vs V1** : le quai fictif `QUAI_RECERTIFICATION` était auparavant
> renseigné par Limagrain **dans le SOR**. Il est désormais posé
> **automatiquement** par le WMS (LIM-110).
Ce quai n'est **pas** géré par le job d'assignation des images de quai X_EXP
(LIM-94), qui **exclut** la classe Recertification (voir
[Assignation image de quai](assignation-image-quai.md)).
### Stratégie d'assignation de stock RECERTIFICATION (LIM-110)
Une stratégie d'assignation de stock spécifique, **« expédition uniquement des
supports complets »**, est forcée pour les OS de classe RECERTIFICATION :
- La stratégie (code `RECERTIFICATION`) est **toujours désactivée** en
configuration : elle n'est jamais choisie par le mécanisme standard.
- Lors de l'assignation de stock d'un OS de recertification, le choix est
**forcé** sur cette stratégie
(`StockAssignProcess_GetStockAssignStrategies_PR`).
- Le flag `AllowPick` est **forcé à `false`**
(`StockAssignProcess_GetStockToAssignForStrategy_PR`) : supports complets
uniquement, pas de picking.
- La stratégie est identifiée par une **balise `[XXX]`** dans son code, avec
`XXX = RECERTIFICATION_CODE_QUAI` ; la query
`CST_StockAssignStrategyV2_Recertification` récupère les stratégies portant
ce tag.
> ⚠️ La description du ticket indique que `RECERTIFICATION_CODE_QUAI` sert
> aussi à **identifier les OS de classe recertification** ; à relier au
> paramètre `RECERTIFICATION_CODE_CLASSE` (LIM-105) qui porte déjà ce rôle -
> voir [questions ouvertes](../08-transverse/questions-ouvertes.md).
| Élément AD | Type | Rôle |
|------------|------|------|
| `OutboundOrder_OutboundOrderCreatedEventHandler_PR` | Workflow | À la création d'un OS de recertification, assigne automatiquement le quai (paramètre `RECERTIFICATION_CODE_QUAI`). |
| `StockAssignProcess_GetStockAssignStrategies_PR` | Workflow | Filtre les stratégies d'assignation de stock à appliquer pour les OS de recertification. |
| `StockAssignProcess_GetLockAndUpdateDetail_PR` | Workflow | Récupère l'`OutboundClassCode`. |
| `StockAssignProcess_GetStockToAssignForStrategy_PR` | Workflow | Force `AllowPick = false` pour les ordres de recertification. |
| `OutboundOrderVList` | Vue | Masque les boutons d'assignation / dé-assignation de quai pour les OS de recertification. |
| `CST_StockAssignStrategyV2_Recertification` | Query | Récupère les stratégies dont le code contient le tag `[code classe recertification]`. |
| `OutboundOrder_CreatedEvent` | Subscription | Ajout du paramètre `OutboundClassCode`. |
| `RECERTIFICATION_CODE_QUAI` | Paramètre | Code du quai recertification / balise `[XXX]` de la stratégie. Voir [Paramètres projet](../07-admin/parametres-projet.md). |
## Libération
@@ -125,12 +202,12 @@ Filtres appliqués :
Dans l'ordre de priorité :
1. **Article/lot SAP + attributs logistiques** spécifiés dans le SOR/RUT
2. **Économie de mouvement** (minimum de mouvements) **prioritaire**
2. **Économie de mouvement** (minimum de mouvements) - **prioritaire**
3. **FIFO sur 24h** : standard confirmé. Les palettes reçues le même jour
ont le même FIFO (heures/minutes ignorées), ce qui permet de prendre
la palette la plus accessible dans un canal. Pas de FIFO strict
infra-journalier.
4. **Pas de FEFO** la proposition initiale de faire du FEFO sur du stock
4. **Pas de FEFO** - la proposition initiale de faire du FEFO sur du stock
sans DLC est **abandonnée**. Il n'y a pas de date d'expiration sur les
produits. Le FIFO journalier est retenu.
5. **Maximum palettes complètes** puis palettes incomplètes (avec picking)
@@ -169,7 +246,7 @@ Dans l'ordre de priorité :
- [CUSTOM] Stratégie d'assignation excluant les supports multi-lignes
(= mono-ref uniquement). Combiné avec AllowAssignStockExcess → shipping
sans picking.
- Stock assigné directement déposé sur l'image de quai aucun passage
- Stock assigné directement déposé sur l'image de quai - aucun passage
poste de travail
- Ruptures de stock ne bloquent pas l'expédition. Le client utilise
`isCritical` / `isRequired` au niveau SOR.Line si besoin.
@@ -179,7 +256,7 @@ Dans l'ordre de priorité :
- Stock assigné mais **aucune tâche** tant que poste de travail non assigné
- Le PK doit être passé en **mode recertif** (par le manager)
- Flux détaillé en 11 étapes voir
- Flux détaillé en 11 étapes - voir
[Re-certification](flux-expedition.md#re-certification)
### Messagerie carton
@@ -188,7 +265,7 @@ Dans l'ordre de priorité :
- Tous les OS de la RUT préparés **simultanément** sur un seul poste
- Tri par transporteur (l'opérateur ne dépose que sur une seule palette)
- Consolidation sur palette unique avec supports carton identifiés
- Pas d'image de quai emplacement au sol dédié par transporteur
- Pas d'image de quai - emplacement au sol dédié par transporteur
- [CUSTOM] À l'import du SOR, vérification combo shipping class code +
transporteur → si OK, poumon associé automatiquement
- Voir [Messagerie carton](flux-expedition.md#messagerie-carton)
@@ -211,11 +288,11 @@ Possible depuis EasyWMS avec choix de destination :
## Points d'attention
⚠️ La libération automatique est le mode principal la date est dans le
⚠️ La libération automatique est le mode principal - la date est dans le
message ERP.
⚠️ L'assignation spécifie **toujours** les 4 critères (article, lot SAP,
propriétaire, statut) pas d'assignation « ouverte ».
propriétaire, statut) - pas d'assignation « ouverte ».
⚠️ Le FIFO est à la **journée** (palettes du même jour = même rang FIFO),
avec l'**économie de mouvement** prioritaire sur le FIFO. Pas de FEFO.
@@ -224,7 +301,7 @@ avec l'**économie de mouvement** prioritaire sur le FIFO. Pas de FEFO.
possible **un canal dédié par route/STOP**.
⚠️ Le custom de défragmentation attend que toutes les palettes de picking
soient terminées et retournées dans l'ASRS avant de lancer les relocs
soient terminées et retournées dans l'ASRS avant de lancer les relocs -
c'est le développement clé du flux outbound.
## Historique des modifications
@@ -234,6 +311,8 @@ c'est le développement clé du flux outbound.
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Enrichissement : 5 types OS, FIFO 24h, pas de FEFO, custom défrag, conso OF détaillé, messagerie carton |
| 2026-05-06 | Arthur | Ajout classifications, paramètres ERP, ruptures production, quai recertif (CR consolidé) |
| 2026-07-20 | Arthur | LIM-109 (lecture directe, attente déploiement test, revue validée 29/06) : section [CUSTOM] Lot obligatoire sur les lignes d'OS (subscription Preview `CST_OutboundOrderLineCreated_CheckLotRequired_PRE` → WF exception si lot vide, ressource `CST_OutboundOrderLineCreation_MissingLot`, refus total via TransactionalLineList) ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-110 (lecture directe, pré-production, revue validée 03/07) : refonte section Quai recertification (assignation auto du quai à la création ET à l'édition d'un OS recertif, blocage du changement manuel via OutboundOrderVList, param `RECERTIFICATION_CODE_QUAI`, évolution vs V1 renseigné dans le SOR, exclusion LIM-94) + sous-section Stratégie d'assignation de stock RECERTIFICATION (supports complets uniquement, forcée, toujours désactivée, AllowPick=false, tag `[XXX]`, query `CST_StockAssignStrategyV2_Recertification`) ; table AD ; caveat param QUAI vs CLASSE |
## Références
@@ -242,3 +321,5 @@ c'est le développement clé du flux outbound.
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| [LIM-109](https://easywmsfrance.atlassian.net/browse/LIM-109) | Ticket Jira (interdire lignes d'OS sans lot - attente déploiement test) | 2026 |
| [LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) | Ticket Jira (quai recertification auto + stratégie assignation stock - pré-production) | 2026 |
+2 -2
View File
@@ -1,11 +1,11 @@
---
title: "AGV Vue d'ensemble"
title: "AGV - Vue d'ensemble"
tags: [agv, still, igo, index]
status: draft
last_updated: 2026-05-12
---
# AGV Vue d'ensemble
# AGV - Vue d'ensemble
> **Périmètre** : intégration Still iGo, stations et routes AGV,
> jobs AGV spécifiques, troubleshooting.
+12 -12
View File
@@ -1,5 +1,5 @@
---
title: "Stations et routes AGV Topologie iGO"
title: "Stations et routes AGV - Topologie iGO"
tags: [agv, still, igo, stations, routes, topologie, location, group]
status: draft
standard_ref: concepts/stations.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-12
author: Arthur
---
# Stations et routes AGV Topologie iGO
# Stations et routes AGV - Topologie iGO
> **Résumé** : correspondance entre les stations/routes EasyWMS et les
> concepts Location/Group/Vehicle d'iGO. Configuration dans MyMA vs
@@ -25,14 +25,14 @@ author: Arthur
Chez Limagrain, les AGV Still (EXV CB iGo) circulent entre les images
de quai, les PIE, les postes de picking (PK) et les zones de stockage.
La topologie physique (positions, trajets) est gérée **entièrement
dans iGO** (MyMA / iGO designer) EasyWMS ne connaît que les points
dans iGO** (MyMA / iGO designer) - EasyWMS ne connaît que les points
de départ et d'arrivée.
## Mapping topologique EasyWMS ↔ iGO
| Concept EasyWMS | Concept iGO | Notes |
|----------------|-------------|-------|
| Station (type 65 AGV) | **Vehicle** | Le véhicule physique lui-même |
| Station (type 65 - AGV) | **Vehicle** | Le véhicule physique lui-même |
| Location (`IRealLocation`) | **Location** | Point physique avec `possibleActions` |
| Route entre stations | _(pas d'équivalent)_ | iGO gère le routage en interne |
| WorkingZone | **Group** | Ensemble de Locations (décision tardive) |
@@ -61,14 +61,14 @@ Restent dans EasyS :
- Création du warehouse station lié à l'AGV equipment group
- Déclaration des AGV dans le groupe
- Routes EasyWMS **entre stations WMS** (type "External" pour les
segments AGV le manager d'exécution est "External")
segments AGV - le manager d'exécution est "External")
> ⚠️ Pas d'équivalent aux "Routes between stations" de type Galileo
> pour iGO. Les routes EasyS servent uniquement à valider l'existence
> d'un chemin logique côté WMS avant de créer la tâche AGV la
> d'un chemin logique côté WMS avant de créer la tâche AGV - la
> trajectoire physique est résolue par iGO.
## Décision tardive utilisation des Groups
## Décision tardive - utilisation des Groups
Cas d'utilisation chez Limagrain :
@@ -87,7 +87,7 @@ Cas d'utilisation chez Limagrain :
|---------|-----|
| `LocationLockType` avec flag "For AGV" | `Location.isEnabled = false` |
| Lock typé (par erreur extraction, putaway, etc.) | Un seul flag binaire côté iGO |
| Lock posé automatiquement par les workflows | À gérer côté WMS uniquement iGO ne pose pas de lock |
| Lock posé automatiquement par les workflows | À gérer côté WMS uniquement - iGO ne pose pas de lock |
> ⚠️ iGO n'a pas de granularité dans les types de verrous. La
> traduction entre les codes erreur EasyWMS (1001-2700) et le flag
@@ -104,12 +104,12 @@ ces champs EasyWMS (obligatoires en FIFO compact) sont portés par la
Location côté iGO, pas par le transport.
⚠️ **Modification des Locations via API** : l'API iGO n'expose que
`GET /api/locations` pas de `POST`/`PUT`. Toute modification de
`GET /api/locations` - pas de `POST`/`PUT`. Toute modification de
topologie passe par MyMA manuellement.
## Questions ouvertes
- [ ] Création/modification de Location via API iGO actuellement
- Création/modification de Location via API iGO - actuellement
en lecture seule, à clarifier avec STILL (@Arthur)
## Historique des modifications
@@ -123,5 +123,5 @@ topologie passe par MyMA manuellement.
| Source | Type | Date |
|--------|------|------|
| CR technique iGO STILL v1 | CR technique | 2026-04-28 |
| [Stations & Routes standard](../../concepts/stations.md) | Wiki standard | |
| [AGV module standard](../../modules/agv.md) | Wiki standard | |
| [Stations & Routes standard](../../concepts/stations.md) | Wiki standard | - |
| [AGV module standard](../../modules/agv.md) | Wiki standard | - |
+4 -4
View File
@@ -1,5 +1,5 @@
---
title: "Troubleshooting AGV Contraintes terrain"
title: "Troubleshooting AGV - Contraintes terrain"
tags: [agv, still, igo, terrain, convoyeurs, troubleshooting]
status: draft
standard_ref: operations/troubleshooting.md
@@ -119,11 +119,11 @@ nécessaire pour manoeuvrer.
## Questions ouvertes
- [ ] Confirmation par Still de l'espace max palette/convoyeur ~45 mm
- Confirmation par Still de l'espace max palette/convoyeur ~45 mm
(@Théo)
- [ ] Mesure réelle SAS7 à effectuer lors de l'implantation
- Mesure réelle SAS7 à effectuer lors de l'implantation
(@Abdennaim)
- [ ] Solution Still pour augmenter la distance mât/bord palette :
- Solution Still pour augmenter la distance mât/bord palette :
quel impact sur les specs AGV (capacité, hauteur de levée) ?
(@Cyprien Allard / Still)
+24 -11
View File
@@ -1,16 +1,16 @@
---
title: "Mini Job Images de quai vers poste de travail (PK)"
title: "Mini Job - Images de quai vers poste de travail (PK)"
tags: [agv, job, réception, pk, mini-job, big-bag]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: [LIM-74, LIM-70, LIM-60]
confluence_refs: []
sources: ["LIM-74 LOT1.3 [AGV][JOB] MINI JOB - images de quai poste de travail (PK).md"]
last_updated: 2026-05-12
sources: ["LIM-74 LOT1.3 [AGV][JOB] MINI JOB - images de quai poste de travail (PK).md", "Jira LIM-74 (revue de code validée 2026-04-07, relecture 2026-07-17)"]
last_updated: 2026-07-17
author: Arthur
---
# Mini Job Images de quai vers poste de travail (PK)
# Mini Job - Images de quai vers poste de travail (PK)
> **Résumé** : sous-workflow du [Mega Job](../03-picking/job-assignation-pk.md)
> qui orchestre l'envoi des palettes depuis les images de quai vers les
@@ -38,7 +38,7 @@ pas dans ce sous-workflow.
> Ce job ne concerne **pas** les réceptions de type Production. Celles-ci
> sont envoyées directement vers le PIE de l'ASRS via des supports
> virtuels voir
> virtuels - voir
> [Job réception production](job-reception-production.md) (LIM-71).
### Process complet de réception
@@ -47,12 +47,12 @@ pas dans ce sous-workflow.
|---|-------|--------|
| 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-74 (cette page)** |
| 3 | Traitement au poste de travail | [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) / [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) |
| 4 | Déplacement AGV → table d'entrée (+ filmage) | |
| 3 | Traitement au poste de travail | [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) / [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) (V1 annulé → [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93)) |
| 4 | Déplacement AGV → table d'entrée (+ filmage) | - |
| 5 | Passage PIE | [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) |
| 6 | Stockage ou rejet | |
| 6 | Stockage ou rejet | - |
| 7 | Clôture de la réception | [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) |
| 8 | Libération quai / image de quai | |
| 8 | Libération quai / image de quai | - |
## Logique principale
@@ -123,10 +123,22 @@ module AGV/GNA envoie les tâches à la flotte iGo.
|-----------|-------------|-------------------|
| PK_BIGBAG | Liste des PK compatibles big-bag (séparés par `;`) | _(vide)_ |
## [CUSTOM] Éléments techniques (revue de code validée 2026-04-07)
Implémentation définitive (commit `24067c85fc`, statut préprod) :
| Élément | Type | Rôle |
|---------|------|------|
| `CST_Reception_BestPendingAssignment_ForPK` | Query | Sélection de la réception à assigner (supports fictifs 8000*, CstAtt06 vide, filtre big-bag, tri big-bag puis FIFO) |
| `CST_PickingStationAssignment_Reception_PR` | WF | Génère les tâches pour la réception sélectionnée et assigne les conteneurs au PK. Appelé par le Mega Job [LIM-70](../03-picking/job-assignation-pk.md) |
| `CST_PickingStationAssignment_Job` | WF (Mega Job) | Modifié : gestion du paramètre `PK_BIGBAG` + appel de `CST_PickingStationAssignment_Reception_PR` |
| `ContainerVList` | Vue | Ajout de la colonne CustomAttribute6 (PK assigné) |
| `CST_Container_CustomAttribute6` | Ressource | FR « PK Assigné » / EN « Assigned PK » |
## Points d'attention
⚠️ Un PK compatible big-bag (`PK_BIGBAG`) peut aussi traiter des
réceptions sans big-bag le filtre ne s'applique que dans le sens
réceptions sans big-bag - le filtre ne s'applique que dans le sens
"big-bag vers PK non compatible".
⚠️ Toutes les palettes d'une même réception vont vers le **même PK** en
@@ -148,11 +160,12 @@ _(aucune question ouverte identifiée dans cette tâche)_
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-74 |
| 2026-07-17 | Arthur | Relecture revue de code LIM-74 (validée 07/04, préprod) : section « Éléments techniques » (query `CST_Reception_BestPendingAssignment_ForPK`, WF `CST_PickingStationAssignment_Reception_PR`, Mega Job modifié, vue ContainerVList, ressource `CST_Container_CustomAttribute6`) |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira | 2026 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) - revue de code validée, préprod | 2026-04-07 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
| [LIM-60](https://easywmsfrance.atlassian.net/browse/LIM-60) | Ticket Jira (sous-emplacement auto) | 2026 |
@@ -1,21 +1,21 @@
---
title: "Job AGV Réception production vers ASRS"
title: "Job AGV - Réception production vers ASRS"
tags: [agv, job, reception, production, asrs, pie]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: [LIM-71, LIM-64, LIM-66]
confluence_refs: []
sources: ["LIM-71 LOT1.2 RECEPTION PRODUCTION AGV Job de création des tâches images de quai ASRS.md"]
last_updated: 2026-05-12
last_updated: 2026-07-17
author: Arthur
---
# Job AGV Réception production vers ASRS
# Job AGV - Réception production vers ASRS
> **Résumé** : job périodique (30 s) qui crée les tâches de déplacement
> AGV depuis les images de quai vers le buffer d'entrée production
> (alimentant le PIE de l'ASRS). Concerne uniquement les réceptions
> production (CstAtt04 = "ASN").
> AGV depuis les images de quai vers le PIE de l'ASRS, via les stratégies
> de rangement. Concerne les réceptions production (CstAtt04 = "ASN") et
> les piles de palettes vides (code `PAL`).
> **Standard EasyWMS** : → voir
> [Galileo Integration](../../architecture/galileo-integration.md),
@@ -25,6 +25,12 @@ author: Arthur
## Contexte projet
> **Statut (LIM-71)** : en préprod (test client). Revues de code validées
> le 27/03/2026, le 28/04/2026 (ajout piles de palettes) et le 01/07/2026
> (ajout job de régénération). Deux tentatives ont été **annulées en cours
> de dev** : le marquage `CstAtt06` (abandonné, cf. plus bas) et la condition
> `CstAtt12` sur les conteneurs production (non requise : pas d'étiquette).
Dans le flux de réception production, les palettes arrivent de la
production (ou de l'ancien magasin) et vont **directement dans l'ASRS**
sans passer par un poste de travail. Elles sont déchargées par un
@@ -72,39 +78,82 @@ sequenceDiagram
## Logique d'éligibilité
Le job parcourt tous les supports positionnés sur des images de quai.
Un support est éligible si **toutes** les conditions suivantes sont
réunies :
Le job parcourt tous les conteneurs positionnés sur des **stages d'image de
quai** (`LocationType.DockStage`). Un conteneur est éligible si **toutes**
les conditions suivantes sont réunies :
| Condition | Détail |
|-----------|--------|
| Séquence 8000* | Support fictif créé lors de la déclaration image de quai ([LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64)) |
| Emplacement = DockStage | Conteneur posé sur un stage d'image de quai |
| Code `8000*` **ou** `PAL*` | Support fictif production (séq. 8000, [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64)) **ou** pile de palettes vides (`PAL`) |
| CstAtt04 = "ASN" | Support de type production |
| CstAtt06 vide | Pas encore traité par ce job |
| Aucune tâche active | Statuts actifs = Bloqué, Créé, En attente, En attente d'annulation, En cours. Statuts historiques (ignorés) = Annulé, Terminé |
| Aucune tâche active | `!c.Tasks.Any()` - aucun ordre de mouvement rattaché au conteneur |
La double vérification CstAtt06 + absence de tâche active est une
**sécurité anti-doublon**.
> **Reversal marquage CstAtt06** : la logique initiale prévoyait de marquer
> `CstAtt06` = destination pour éviter les doublons. Décidé en interne
> (19/03/2026) de **ne pas l'implémenter** : l'absence de tâche active suffit
> comme anti-doublon, et ne pas marquer `CstAtt06` permet de **regénérer** une
> tâche de rangement au prochain cycle si la précédente a été annulée. Ce job
> **n'utilise donc pas** `CstAtt06`.
>
> **Reversal condition CstAtt12** : une condition `CstAtt12 = true` (étiquette
> posée) a été ajoutée puis **retirée** pour la production et les piles de
> palettes - ces conteneurs n'ont pas d'étiquette. `CstAtt12` ne conditionne
> que les réceptions **fournisseur** vers les PK.
## Traitement d'un support éligible
## Traitement d'un conteneur éligible
### Marquage
Le job positionne `CstAtt06` = valeur du paramètre
`DESTINATION_PRODUCTION` (ex : "ENTREE_PRODUCTION").
### Création de la tâche
Pour chaque conteneur récupéré, le job effectue une **recherche
d'emplacement** basée sur les **stratégies de rangement** configurées, puis
génère la tâche de rangement si un emplacement est trouvé.
| Champ | Valeur |
|-------|--------|
| Origine | Sous-emplacement de l'image de quai |
| Destination | Déterminée par la **stratégie de rangement** configurée (MU d'entrée Est ou Ouest, Est par défaut) |
| Origine | Stage de l'image de quai |
| Destination | Déterminée par la **stratégie de rangement** (PIE_01 / PIE_02, entrée Est ou Ouest, **Est par défaut**) |
| Statut initial | "En attente" |
Les stratégies sont importées et configurées via la vue standard
`LocationPutawayStrategyVList`, modifiée pour autoriser les **stages** comme
station d'origine (type Stage, ou un stage précis). Les stratégies vont des
stages vers PIE_01 / PIE_02 en « fin de séquence ».
Le passage "en attente" → "créé" est géré par le WMS standard
(`Task_GenerateMovementJob_PR`). Le module AGV / GNA écoute ce
changement et envoie les tâches à la flotte iGo.
### Éléments AD (LIM-71)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_StoreProductionContainer_Job` | Workflow + Job (30 s) | Récupère les conteneurs via la query, cherche un emplacement pour chacun et génère la tâche de rangement si trouvé |
| `CST_AvailableProductionContainers` | Query | Récupère les conteneurs candidats : sur DockStage, `CstAtt04 = "ASN"`, code `8000*` ou `PAL*`, sans tâche active |
| `LocationPutawayStrategyVList` | Vue | Ajout des stages dans la liste des stations d'origine (sélection type Stage ou stage précis) |
| `Galileo_PIEEventHandler_PR` | Workflow | Ignore l'erreur de lecture d'étiquette au PIE quand il s'agit d'une pile de palettes |
## Piles de palettes vides
Le job gère aussi le rangement des **piles de palettes vides** (conteneurs
dont le code commence par `PAL`). Elles suivent le même mécanisme
(query + stratégie de rangement + tâche AGV). Au PIE, l'erreur de lecture
d'étiquette est ignorée pour ces piles (`Galileo_PIEEventHandler_PR`).
## Job de régénération des tâches réception → PK
En complément (ajouté sous LIM-71, revue de code OK 01/07/2026), un job
distinct **régénère** les tâches manquantes pour les conteneurs de réception
**fournisseur** qui ont un PK assigné mais aucune tâche.
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_Reception_RegenerateTask_Job` | Workflow + Job (15 s) | Crée une tâche pour les conteneurs de réception (`CstAtt08`) avec un PK assigné (`CstAtt06`) posés sur une image de quai sans tâche. Vérifie que la station de picking est trouvée |
| `CST_ReceptionContainers_WithoutTasksToPK` | Query | Récupère ces conteneurs de réception sans tâche vers leur PK |
> Ce job de régénération relève du flux **réception fournisseur → PK**
> (cf. [Réception fournisseur](../01-inbound/reception-fournisseur.md),
> LIM-67 / LIM-74) et non de la réception production. Il confirme l'usage de
> `CstAtt06` = code du PK assigné côté réception fournisseur.
## Redirection si PIE saturé
Gérée en **standard** par le système de routes et distances configuré
@@ -124,37 +173,39 @@ destination ; c'est le WMS qui reroute si nécessaire.
| Paramètre | Description | Valeur par défaut |
|-----------|-------------|-------------------|
| DESTINATION_PRODUCTION | Code du buffer d'entrée production (destination des tâches AGV) | ENTREE_PRODUCTION |
| ~~DESTINATION_PRODUCTION~~ | ~~Code du buffer d'entrée production~~ - **obsolète** : la destination est désormais déterminée par les stratégies de rangement, plus par ce paramètre | ~~ENTREE_PRODUCTION~~ |
## Points d'attention
- Un support non ASN (fournisseur, intersite, retour) sur une image
de quai est **ignoré** il est géré par le
de quai est **ignoré** - il est géré par le
[Mega Job](../03-picking/job-assignation-pk.md) (LIM-70)
- Le marquage CstAtt06 a été simplifié en cours de développement
(certains cas de tests marqués "Plus utilisé") — la vérification
par absence de tâche active reste la sécurité principale
- La stratégie de rangement détermine l'entrée Est/Ouest ; le
paramètre DESTINATION_PRODUCTION n'est plus directement utilisé
comme destination de tâche
- Ce job **n'utilise pas** `CstAtt06` (marquage abandonné) : l'anti-doublon
repose uniquement sur l'absence de tâche active, ce qui permet la
régénération après annulation
- La stratégie de rangement détermine l'entrée Est/Ouest (Est par défaut) ;
le paramètre `DESTINATION_PRODUCTION` est **obsolète**
- Les piles de palettes vides (`PAL*`) sont traitées par le même job ;
l'erreur de lecture d'étiquette au PIE est ignorée pour ces piles
## Questions ouvertes
- [ ] Redirection multi-poumons / multi-PIE : config EasyS prête ?
- Redirection multi-poumons / multi-PIE : config EasyS prête ?
(@Nicolas)
- [ ] CstAtt06 encore nécessaire comme marqueur si la vérification
par tâche active suffit ? (@Fabien)
- ~~CstAtt06 encore nécessaire comme marqueur ?~~**Résolu (LIM-71)** :
marquage CstAtt06 abandonné, l'absence de tâche active suffit.
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-71 |
| 2026-07-17 | Arthur | Relecture 18 commentaires : abandon marquage CstAtt06 (anti-doublon = tâche active), destination via stratégies de rangement (DESTINATION_PRODUCTION obsolète), gestion piles de palettes (PAL), reversal CstAtt12 (non requis production), éléments AD (CST_StoreProductionContainer_Job, CST_AvailableProductionContainers, LocationPutawayStrategyVList, Galileo_PIEEventHandler_PR), job régénération CST_Reception_RegenerateTask_Job, statut préprod + 3 revues de code |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-71](https://easywmsfrance.atlassian.net/browse/LIM-71) | Ticket Jira | 2026 |
| [LIM-71](https://easywmsfrance.atlassian.net/browse/LIM-71) | Ticket Jira (18 commentaires) | 2026-03 → 2026-07 |
| [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) | Ticket Jira (déclaration image quai) | 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (passage PIE) | 2026 |
+197 -59
View File
@@ -1,16 +1,16 @@
---
title: "Intégration Still iGo API PACS et architecture"
title: "Intégration Still iGo - API PACS et architecture"
tags: [agv, still, igo, pacs, api, integration, architecture]
status: draft
standard_ref: modules/agv.md
jira_refs: []
jira_refs: [LIM-103, LIM-104]
confluence_refs: []
sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le module AGV EasyWMS Opus 4.7 v1.md"]
last_updated: 2026-05-12
sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le module AGV EasyWMS Opus 4.7 v1.md", "Jira LIM-103 (lecture directe 2026-07-20)", "Jira LIM-104 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Intégration Still iGo API PACS et architecture
# Intégration Still iGo - API PACS et architecture
> **Résumé** : documentation complète de l'intégration du fleet manager
> **iGO easy** (STILL / KION Group) avec EasyWMS chez Limagrain.
@@ -18,20 +18,20 @@ author: Arthur
> avec le module AGV standard, l'architecture cible à 4 composants et
> les réponses FAQ STILL contractuelles.
> **Standard EasyWMS** : → voir [AGV Automated Guided Vehicles](../../modules/agv.md)
> **Standard EasyWMS** : → voir [AGV - Automated Guided Vehicles](../../modules/agv.md)
> Le standard communique par **tables d'échange DB** (EAG/AGE/AGS).
> Chez Limagrain, iGO easy remplace le protocole historique par une
> **API REST HTTPS** un middleware (pool IIS C#) assure la traduction.
> **API REST HTTPS** - un middleware (pool IIS C#) assure la traduction.
## Contexte projet
Limagrain utilise des AGV **Still EXV CB iGo** (gerbeurs électriques
automatisés) pour les transports internes entre images de quai, PIE,
postes de picking et zones de stockage. Le fleet manager est
**iGO easy** (variante simplifiée de PACS Productized Automated
**iGO easy** (variante simplifiée de PACS - Productized Automated
Concept Solutions), motorisé par le moteur interne **E'tricc**.
La communication est **100 % REST HTTPS** (port 7002, TLS 1.2) pas
La communication est **100 % REST HTTPS** (port 7002, TLS 1.2) - pas
de PLC ni de tables d'échange SQL directes entre WMS et iGO. Le modèle
est **pull + push** : le WMS pousse les ordres (`POST /transports`),
iGO pousse les changements d'état via webhook (callback POST vers une
@@ -63,14 +63,14 @@ flowchart LR
Concepts clés :
- Pas de notion de routes/segments côté WMS : iGO ne demande qu'une
`sourceLocation` et une `destinationLocation` la trajectoire
`sourceLocation` et une `destinationLocation` - la trajectoire
physique est gérée par iGO en interne.
- **Décision tardive** (Group / decision point) : si la destination
exacte est inconnue à la création, on donne un `destinationGroupId`.
iGO place le transport en `RequestDestination` et interroge le WMS
quand l'AGV arrive au point de décision.
- **Load** = container EasyWMS passé directement dans le payload de
création du transport (pas de `POST /api/loads` préalable FAQ #5).
- **Load** = container EasyWMS - passé directement dans le payload de
création du transport (pas de `POST /api/loads` préalable - FAQ #5).
## Stack technique iGO (MyMA)
@@ -92,9 +92,9 @@ Concepts clés :
| API Host (HTTPS REST) | **7002** |
| Postgres | 5432 |
## Véhicule Still EXV CB iGo
## Véhicule - Still EXV CB iGo
Gerbeur électrique automatisé (EXV = Elektro-Vertikal) se déplace
Gerbeur électrique automatisé (EXV = Elektro-Vertikal) - se déplace
sur ses propres roues et lève la charge avec le mât. Pas de couloir
mécanique ni de canal compact.
@@ -118,7 +118,7 @@ L'API PACS 2.3 expose **8 ressources** :
| **LoadType** | `ContainerType` | Catalogue de types de charge |
| **Location** | `Location` (`IRealLocation`) | Point physique du warehouse |
| **Group** | `WorkingZone` | Ensemble de locations (décision tardive) |
| **System** | | État global + abonnements |
| **System** | - | État global + abonnements |
### Champs clés du Transport
@@ -130,7 +130,7 @@ L'API PACS 2.3 expose **8 ressources** :
| `destinationLocationId` / `destinationGroupId` | string | `UnloadLocation` |
| `load` | Load | Container (`PalletId`, type, dimensions) |
| `priority` | int 0-10 | Priority 0-4 (conversion inversée) |
| `suspended` | bool | (pas d'équivalent `false` par défaut) |
| `suspended` | bool | (pas d'équivalent - `false` par défaut) |
| `customMetaData` | dict | `HasTopper`, `PalletType`, etc. |
| `status` | enum | `AgvStatus` (mapping § ci-dessous) |
@@ -183,7 +183,7 @@ Tous sur `https://[IP]:7002/api/...` avec header `X-API-Key`.
| GET | `/api/system` | Status global + subscriptions |
| GET | `/api/groups` / `/{id}` | Lecture des groupes |
| GET | `/api/loads` / `/{id}` | Lecture des loads |
| POST | `/api/loads` | Créer une load (non recommandé FAQ #5) |
| POST | `/api/loads` | Créer une load (non recommandé - FAQ #5) |
| GET | `/api/locations` / `/{id}` | Lecture des locations |
| GET | `/api/load-types` | Catalogue des types |
@@ -222,7 +222,7 @@ flowchart TD
États terminaux : **Finished**, **Cancelled**, **Aborted**.
> ⚠️ Le statut `New` est un état interne instantané d'iGO il
> ⚠️ Le statut `New` est un état interne instantané d'iGO - il
> n'apparaît jamais dans les callbacks. Le premier état observable est
> `Requested` (FAQ #4).
@@ -230,17 +230,17 @@ flowchart TD
| iGO Transport.status | Phase AGV EasyWMS | AgvStatus | Notes |
|---------------------|-------------------|-----------|-------|
| Requested | | (après POST) | Premier état observable |
| Requested | - | (après POST) | Premier état observable |
| Pending | 100 (Order accepted) | `Sent` | En file d'attente iGO |
| Assigned | 103 (Vehicle assigned) | (Sent) | ⚠️ Pas de Vehicle.id dans le payload (FAQ #1) |
| RequestSource | 104 (Load permission) | `PendingToBeLoad` | Uniquement en mode Group |
| Retrieving | | (Sent) | AGV en route / chargement |
| Retrieving | - | (Sent) | AGV en route / chargement |
| Retrieved | 106 (Load confirmed) | (Sent) | **Vehicle.id disponible ici** (FAQ #1) |
| RequestDestination | 108 (Unload permission) | `PendingToBeUnload` | Uniquement en mode Group |
| Storing | | | AGV en dépose |
| Storing | - | - | AGV en dépose |
| Stored / Finished | 110 (Unload confirmed) | (purge) | Transport terminé |
| Cancelled | 255 | (Cancelled) | Annulé |
| Aborted | 255 | (Cancelled) | Erreur irrécupérable aucun code d'erreur dans le payload (FAQ #2) |
| Aborted | 255 | (Cancelled) | Erreur irrécupérable - aucun code d'erreur dans le payload (FAQ #2) |
### Différence sémantique majeure : CanPick / CanDrop
@@ -258,13 +258,13 @@ l'usage de Groups** (même mono-location) là où EasyWMS aurait
| EasyWMS | iGO | Suggestion |
|---------|-----|------------|
| 0 Urgent | 10 Highest | mapping direct |
| 1 High | 8 | |
| 2 Normal | 5 | |
| 3 Low | 3 | |
| 4 VeryLow | 1 | |
| 0 - Urgent | 10 - Highest | mapping direct |
| 1 - High | 8 | |
| 2 - Normal | 5 | |
| 3 - Low | 3 | |
| 4 - VeryLow | 1 | |
## Flux nominal création et exécution
## Flux nominal - création et exécution
```mermaid
sequenceDiagram
@@ -322,14 +322,14 @@ intervenir manuellement.
### Authentification
**`X-API-Key`** (confirmé par STILL FAQ #8). Le header
**`X-API-Key`** (confirmé par STILL - FAQ #8). Le header
`Authorization: Bearer` mentionné dans certaines parties de la doc
PACS est obsolète. La clé est fixe, fournie par le PM STILL, stockée
chiffrée dans la config du middleware.
### TLS
HTTPS avec TLS 1.2. Certificats **auto-signés** côté iGO le WMS
HTTPS avec TLS 1.2. Certificats **auto-signés** côté iGO - le WMS
doit les truster explicitement (import dans le keystore).
### Modèle d'abonnement
@@ -372,7 +372,7 @@ déduplication = `transport.id + status` (FAQ #9).
| Auth load | EAG `Update` (CanPick=true) | `POST /final-source` |
| Auth unload | EAG `Update` (CanDrop=true) | `POST /final-destination` |
## Architecture cible Pattern à 4 composants
## Architecture cible - Pattern à 4 composants
### Principe directeur
@@ -401,7 +401,7 @@ flowchart LR
AGS[(AGV_AGS)]
end
subgraph Pool["Pool IIS C# .NET 8 À DÉVELOPPER"]
subgraph Pool["Pool IIS C# .NET 8 - À DÉVELOPPER"]
Pump[Pompe sortante<br/>poll OUTPUTQUEUE → API iGO]
Hook[Webhook receiver<br/>callbacks iGO → tables]
end
@@ -420,7 +420,7 @@ flowchart LR
Hook --> IQ & AGE & AGS
```
### Composants existants RIEN à modifier
### Composants existants - RIEN à modifier
| Composant | Rôle | Statut |
|-----------|------|--------|
@@ -429,7 +429,7 @@ flowchart LR
| Tables AGV_* (5) | Base intermédiaire | ✅ Existantes |
| Vues SmartUI AGV | Monitoring opérateur | ✅ Existantes |
### Middleware pool IIS seul livrable nouveau
### Middleware pool IIS - seul livrable nouveau
| Aspect | Description |
|--------|-------------|
@@ -452,18 +452,18 @@ Controller ASP.NET Core exposant deux endpoints HTTPS. À réception :
insert dans `AGV_INPUTQUEUE` → insert dans `AGV_AGE` ou `AGV_AGS`
avec le mapping Status → EventType/Flags (cf. tableau ci-dessous).
Horodatage `DateTime.UtcNow` à la réception (iGO ne fournit pas de
timestamp FAQ #3).
timestamp - FAQ #3).
### Mapping Status iGO → (EventType, Flags) AGE
| iGO Transport.status | EventType | Flags | Notes |
|---------------------|-----------|-------|-------|
| Pending | 100 | 0 | Order accepted |
| Assigned | 103 | 0 | Vehicle assigned `StationNumber=null` (FAQ #1) |
| Retrieved | 106 | 0 | Load confirmed `Vehicle.id` disponible ici |
| Assigned | 103 | 0 | Vehicle assigned - `StationNumber=null` (FAQ #1) |
| Retrieved | 106 | 0 | Load confirmed - `Vehicle.id` disponible ici |
| Stored / Finished | 110 | 0 | Unload confirmed |
| Cancelled | 255 | 0 | Annulé |
| Aborted | | 2003/2004 | À enrichir via `GET /api/vehicles/{id}` (FAQ #2) |
| Aborted | - | 2003/2004 | À enrichir via `GET /api/vehicles/{id}` (FAQ #2) |
### Pattern de boot du middleware
@@ -471,7 +471,7 @@ timestamp — FAQ #3).
1. Vérifier la base intermédiaire accessible
2. Vérifier l'API iGO : `GET /api/system`
3. Vérifier les subscriptions actives (re)créer si absentes
3. Vérifier les subscriptions actives - (re)créer si absentes
4. Réconcilier les transports : `GET /api/transports` vs
`AGV_OUTPUTQUEUE` non acquittées → générer les lignes AGE manquantes
5. Démarrer le polling sortant
@@ -487,6 +487,46 @@ le status iGO courant :
fallback (attendre Finished + tâche retour, ou RFT)
- **Cancelled / Aborted / Finished** → no-op (déjà terminal)
### Refus WMS de l'annulation quand le support est sur un AGV (LIM-104)
> **Statut** : préprod ; revue de code validée le 23/06/2026 (Vincent Charvet).
**Problème** (découvert aux tests STILL) : si on annule / supprime une Task
AGV alors que le support est **déjà pris par l'AGV** (transport iGO
`>= Retrieved`), iGO **refuse** l'annulation et termine physiquement la
mission - mais le WMS a déjà **supprimé la Task** au moment de la demande.
`ProcessEvents_PR` s'arrête alors sur sa garde `CST Get Task` (« CST Task
exists » = false) pour toutes les AGE suivantes :
- l'AGE `255/1009` ne déclenche jamais `ProcessError1009` → **notification
opérateur du refus perdue** ;
- l'AGE `110` (Unload confirmed) ne déclenche jamais `ContainerMove`
**support figé sur l'AGV**.
**Solution** : souscription **preview** sur la commande de suppression /
annulation de Task. Avant exécution :
1. récupérer le support (container) associé à la Task ;
2. vérifier s'il est sur un AGV - critère retenu `Container.StationType ==
Agv` (équivalent métier de « palette physiquement sur l'AGV » = iGO
`>= Retrieved` ; repli possible : `LocationCode` commençant par `AGV_`) ;
3. si **sur AGV****refuser** la commande (exception) avec message
opérateur explicite. La Task reste vivante, l'AGV termine sa mission, le
support est livré à destination ;
4. sinon (support encore à la source ou déjà déposé) → laisser la commande
s'exécuter normalement.
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_TaskCancel_CheckAgv` | Subscription | Appelle le WF à l'**annulation** d'une tâche |
| `CST_TaskDelete_CheckAgv` | Subscription | Appelle le WF à la **suppression** d'une tâche |
| `CST_CancelTask_CheckForAgv` | Workflow | Récupère la tâche annulée / supprimée ; si le conteneur est sur un emplacement AGV, lève une erreur (numéro de tâche + code conteneur) |
| `CST_CancelTask_NotPossible_2` | Ressource | FR « Impossible de supprimer la tâche {0} car le conteneur {1} est sur un AGV » / EN « Cannot delete task {0} because container {1} is on AGV » |
Cas de test : (1) annulation **après** pickup (`>= Retrieved`) → refusée,
support livré, Task `Finished` ; (2) annulation **avant** pickup
(`< Retrieved`) → acceptée, EAG `D`, middleware POST cancel iGO `204`.
### Comparaison avec les Gateways historiques
| Aspect | EasyWMSGateway2015 (Galileo) | GatewayRocla2015 | Pool IIS iGO |
@@ -501,24 +541,116 @@ le status iGO courant :
> (ancienne architecture monolithique). Développement **from scratch**
> sur ASP.NET Core .NET 8 recommandé.
## Workflows EasyWMS impact iGO
## Workflows EasyWMS - impact iGO
Avec le pattern Gateway iGO + tables AGV_*, **aucun workflow EasyWMS
ni la Gateway AGV Mecalux n'a besoin d'être modifié**. La spécificité
iGO est entièrement encapsulée dans le middleware.
> ⚠️ **Réserve (LIM-103, préprod)** : ce tableau reflète l'**hypothèse de
> conception**. À l'implémentation, plusieurs **bugs du module AGV standard
> Mecalux** ont dû être corrigés (dispatch d'events cassé par la
> transformation Gateway `phase + 100`, attributs `canPick`/`canDrop`
> jamais assignés, events 106/110 non gérés, refus de mission iGo). Détail :
> [Corrections des bugs du module AGV standard (LIM-103)](#corrections-des-bugs-du-module-agv-standard-lim-103).
| Workflow | Comportement avec Gateway iGO |
|----------|-------------------------------|
| `MovementCreatedEventHandler_PR` | ✅ Inchangé déclencheur |
| `MovementCreatedEventHandler_PR` | ✅ Inchangé - déclencheur |
| `AgvTask_CreateTaskFromMovement_PR` | ✅ Inchangé |
| `SerializeAgvTasks_PR` | ✅ Inchangé écrit EAG, le middleware lit et POST |
| `ProcessEvents_PR` + `ProcessEvent_*_PR` | ✅ Inchangé — poll AGE comme d'habitude |
| `ProcessErrors_PR` | ✅ Inchangé réagit aux Flags dans AGE |
| `Agvtask_CanPick/CanDrop_PendingToBeSent_PR` | ✅ Inchangé écrit EAG, le middleware appelle `/final-source` ou `/final-destination` |
| `TaskCanceledEventHandler_PR` | ✅ Inchangé écrit EAG Delete, le middleware gère |
| Workflows RFT | ✅ Inchangés fallback préservé |
| `SerializeAgvTasks_PR` | ✅ Inchangé - écrit EAG, le middleware lit et POST |
| `ProcessEvents_PR` + `ProcessEvent_*_PR` | ⚠️ **Modifié (LIM-103)** - patch dispatch `phase+100`, gestion events 106/110, refus mission, fix `canPick`/`canDrop` |
| `ProcessErrors_PR` | ✅ Inchangé - réagit aux Flags dans AGE |
| `Agvtask_CanPick/CanDrop_PendingToBeSent_PR` | ✅ Inchangé - écrit EAG, le middleware appelle `/final-source` ou `/final-destination` |
| `TaskCanceledEventHandler_PR` | ✅ Inchangé - écrit EAG Delete, le middleware gère |
| Workflows RFT | ✅ Inchangés - fallback préservé |
## FAQ STILL — réponses contractuelles
## Corrections des bugs du module AGV standard (LIM-103)
> **Statut** : préprod ; revue de code à faire (@Vincent, 30/06/2026),
> assignée Vincent Charvet. Ticket regroupant les corrections nécessaires
> pour faire fonctionner le module AGV standard sur ce projet.
### Queries standard corrigées
- `Equipment_AgvTask_GetTask_ByWorkingZone_UI` : correction d'une null
exception sur query standard.
- `Equipment_AgvTask_LoadEquipment_UI` : correction d'un paramètre erroné
sur query standard.
### Dispatch d'events cassé par la transformation Gateway `phase + 100`
Bug de cohérence Mecalux entre la Gateway et le module AGV. Le record
`agvEvent` reçu par `ProcessEvents_PR` est un `GalileoEventCreatedWF` dont
le champ `EventType` (Integer) porte la valeur **SIMO** de la Gateway,
alors que la DecisionActivity « Event type » de `ProcessEvents_PR` dispatche
sur les **valeurs natives** 100 / 103 / 104 / 108.
Chaîne du bug :
- le middleware écrit `phase = 104` dans `agv_age.phase` ;
- la Gateway lit la ligne et pose `EventType = phase + 100 = 204`
(avec `Extension[PHASE] = 104`) ;
- `ProcessEvents_PR` reçoit `EventType = 204` ≠ 100/103/104/108 → **default
silencieux** → workflow Completed sans side-effect (silent fail).
Fix : patch de l'activité « Check parameters » de `ProcessEvents_PR`
(soustraction de 100 pour retrouver la valeur native).
### `canPick` / `canDrop` jamais assignés (LoadPermission / UnloadPermission)
Bug majeur du standard : dans `ProcessEvent_LoadPermission_PR`, l'attribut
interne `canPick` (InitialValue vide) n'est **jamais assigné**. La
DecisionActivity « Can pick? » prend donc toujours la branche `Otherwise No`
→ End, et le sous-workflow `Agvtask_CanPick_PendingToBeSent_PR` (qui pose
`CanPick = true`) n'est **jamais appelé**. Même défaut dans
`ProcessEvent_UnloadPermission_PR` (attribut `canDrop`).
| Workflow | État | Logique |
|----------|------|---------|
| `ProcessEvents_PR` | OK (après patch -100) | Dispatch sur `EventType == 100/103/104/108` |
| `Agvtask_CanPick_PendingToBeSent_PR` | OK | `CanPick = true` hardcodé, fait le flip |
| `SetAgvStatus_PR` | OK | `if CanPick && CanDrop → Sent ; elif CanPick → PendingToBeUnload ; else → PendingToBeLoad` |
| `ProcessEvent_LoadPermission_PR` / `ProcessEvent_UnloadPermission_PR` | BUGGÉ | `canPick` / `canDrop` jamais assigné → branche No systématique |
Fix : remplacer l'expression de la condition `Yes` de la DecisionActivity
par `!agvTask.CanPick` (resp. `!agvTask.CanDrop`), qui teste directement la
propriété de l'`AgvTask` récupérée par « Get AGV task ». En l'état, le
standard Mecalux est **inutilisable** pour le flow LoadPermission /
UnloadPermission.
### Events 106 / 110 non gérés (fix temporaire)
Le standard ne gère pas les events **106** (déplacer le support sur l'AGV)
et **110** (déplacer le support de l'AGV vers son emplacement de
destination). Fix temporaire (Michael Chaudier, 29/05) : `ProcessEvents_PR`
gère désormais les events 106 (confirmation load) et 110 (confirmation
unload), avec ajout des commandes de déplacement du support - chargement
sur l'AGV à l'event 106, déchargement à la destination de la tâche à
l'event 110.
### Refus de mission iGo
Ajout (Arthur, 01/06) d'une condition dans `ProcessEvents_PR` pour gérer le
refus de mission par iGo → **annulation de la tâche AGV** ; la transition
« sequence 0 » est modifiée pour ne pas catcher cette erreur (non gérée par
le sous-workflow) tant qu'aucun flag d'erreur n'est levé.
### Génération du mouvement PS → position PK
`Container_MovedEventHandler_PS_PR` modifié (Vincent, 02/06, commit
[`9fa84a83e2`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/9fa84a83e2dfeaa8a4bde22b10a7e2318658bfbb))
pour générer le mouvement des PS vers la bonne position du PK (**première
position libre**). Logique conservée pour la recertification et
l'échantillonnage.
> Ce même handler est ensuite spécialisé : redirection selon le **type de
> tâche** au picking (voir [Placement PS → PK](../03-picking/placement-ps-pk.md),
> LIM-82) et placement à la **position X max** de l'image de quai à
> l'expédition (voir [Assignation automatique de l'image de quai](../04-outbound/assignation-image-quai.md),
> LIM-94). LIM-103 en pose la base (première position libre).
## FAQ STILL - réponses contractuelles
Réponses obtenues de STILL en avril 2026. Valeur contractuelle.
@@ -552,16 +684,18 @@ Réponses obtenues de STILL en avril 2026. Valeur contractuelle.
⚠️ **CanPick/CanDrop** : pour reproduire le standard EasyWMS, forcer
l'usage de Groups même mono-location.
⚠️ **Priorité inversée** : EasyWMS 0=Urgent, iGO 10=Max conversion
⚠️ **Priorité inversée** : EasyWMS 0=Urgent, iGO 10=Max - conversion
à coder dans le middleware.
⚠️ **Pas de routing exposé** : iGO gère ses routes en interne pas
⚠️ **Pas de routing exposé** : iGO gère ses routes en interne - pas
d'équivalent à "Routes between stations" en EasyS, pas d'erreur
"Disabled route" côté iGO.
⚠️ **Annulation après chargement impossible** : la logique
`AgvTask_SetCancelledTask_PR` qui déclenche la recherche de relocation
après chargement n'a plus de sens dans le mapping iGO.
après chargement n'a plus de sens dans le mapping iGO. Le WMS **refuse
désormais l'annulation en amont** via la souscription preview LIM-104 (voir
[Refus WMS de l'annulation…](#refus-wms-de-lannulation-quand-le-support-est-sur-un-agv-lim-104)).
⚠️ **Tests de charge webhook à mener** : simuler Gateway iGO down
pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
@@ -575,16 +709,16 @@ pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
## Questions ouvertes
- [ ] Fréquence des callbacks `vehicle/event` pour les mises à jour de
position risque de flood (@Nicolas)
- [ ] Taille max et caractères autorisés dans `customMetaData` (@STILL)
- [ ] Les `customMetaData` sont-elles ré-émises dans les callbacks
- Fréquence des callbacks `vehicle/event` pour les mises à jour de
position - risque de flood (@Nicolas)
- Taille max et caractères autorisés dans `customMetaData` (@STILL)
- Les `customMetaData` sont-elles ré-émises dans les callbacks
transport ? (@STILL)
- [ ] Création/modification de Location via API iGO limité à GET
- Création/modification de Location via API iGO - limité à GET
pour l'instant (@STILL)
- [ ] Gestion Pallet Shuttle via iGO (LoadType = 1) hors scope
- Gestion Pallet Shuttle via iGO (LoadType = 1) - hors scope
actuel ? (@Théo)
- [ ] Multi-warehouse : iGO suppose un seul site impact si extension
- Multi-warehouse : iGO suppose un seul site - impact si extension
future ? (@Michael)
## Historique des modifications
@@ -592,12 +726,16 @@ pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-05-12 | Arthur | Création initiale depuis CR technique iGO STILL |
| 2026-07-20 | Arthur | Intégration LIM-103 (corrections bugs module AGV standard, préprod, revue de code à faire) : nouvelle section (2 queries standard corrigées, dispatch d'events cassé par `phase+100`, `canPick`/`canDrop` jamais assignés dans LoadPermission/UnloadPermission, events 106/110 non gérés, refus de mission iGo, `Container_MovedEventHandler_PS_PR` première position libre) ; réserve ajoutée sur le tableau « workflows inchangés » (ligne `ProcessEvents_PR` = Modifié) ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | Intégration LIM-104 (refus WMS annulation/suppression Task si support sur AGV, préprod, revue validée 23/06) : sous-section sous « Logique d'annulation » (désync task supprimée avant refus iGo, souscription preview, critère `Container.StationType == Agv`, table AD `CST_TaskCancel_CheckAgv`/`CST_TaskDelete_CheckAgv`/`CST_CancelTask_CheckForAgv`/`CST_CancelTask_NotPossible_2`, cas de test) ; cross-ref depuis le point d'attention « Annulation après chargement impossible » ; jira_refs +LIM-104 |
## Références
| Source | Type | Date |
|--------|------|------|
| CR technique iGO STILL fonctionnement et flux API v1 | CR technique | 2026-04-28 |
| CR technique iGO STILL - fonctionnement et flux API v1 | CR technique | 2026-04-28 |
| [LIM-103](https://easywmsfrance.atlassian.net/browse/LIM-103) | Ticket Jira (corrections bugs module AGV standard - préprod, revue à faire, commit `9fa84a83e2`) | 2026 |
| [LIM-104](https://easywmsfrance.atlassian.net/browse/LIM-104) | Ticket Jira (refus annulation Task si support sur AGV - préprod, revue validée 23/06) | 2026 |
| 2510_PACS-2.3-Host-Interface-Technical-Specifications | Spec API STILL | 2025-10 |
| iGo easy 2.3 - Host Interface Specifications | Spec API STILL | 2025 |
| IT requirements R1 20250929 | Spec infra STILL | 2025-09-29 |
+4 -5
View File
@@ -1,11 +1,11 @@
---
title: "Interface ERP Vue d'ensemble"
title: "Interface ERP - Vue d'ensemble"
tags: [erp, interface, messages, index]
status: draft
last_updated: 2026-05-05
last_updated: 2026-07-20
---
# Interface ERP Vue d'ensemble
# 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.
@@ -16,10 +16,9 @@ last_updated: 2026-05-05
- [Référence messages](messages-reference.md)
- [Données principales et stock](donnees-principales.md)
- [LOC Message périodique](loc-message-periodique.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
@@ -1,16 +1,16 @@
---
title: "Données principales et stock Mapping ITM et attributs"
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: []
standard_ref: concepts/erp-interface.md
jira_refs: [LIM-92]
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
sources: ["Données principales + stock - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", "Jira LIM-92 (lecture directe, attente déploiement test)"]
last_updated: 2026-07-17
author: Arthur
---
# Données principales et stock Mapping ITM et attributs
# 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,
@@ -36,8 +36,8 @@ 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é |
| Code article WMS = Code lot SAP | - | ✅ Validé |
| Code produit SAP = Attribut logistique du stock | - | ✅ Validé |
### Côté SAP
@@ -68,24 +68,24 @@ Un même produit peut exister en BAG et en KG = codes articles WMS différents.
|---------------|-----------|----------|
| ItemCode | Code lot SAP | Clé principale |
| Alias | Lot officiel | Relation 1:1, scannable |
| OwnerCode | | Constante "MECALUX" (technique) |
| 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 |
| 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 |
| 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 |
| 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
@@ -110,12 +110,47 @@ Un même produit peut exister en BAG et en KG = codes articles WMS différents.
| 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.
> métier. Le renommage d'affichage est géré dans le WMS (voir
> [Renommage des ressources EasyWMS (LIM-92)](#renommage-des-ressources-easywms-lim-92)).
> **Point à tester** : en réception, la création du stock via les attributs
> logistiques doit être validée (approche standard ou custom à confirmer
> logistiques doit être validée (approche standard ou custom - à confirmer
> par les tests).
## Renommage des ressources EasyWMS (LIM-92)
> **Statut** : dev terminé, en **attente de déploiement pour test**.
Les champs standard EasyWMS (code article, famille, attributs logistiques)
sont **détournés** pour porter les concepts SAP de Limagrain. LIM-92
renomme les **ressources globales** d'affichage en conséquence (le nom
métier remplace le libellé standard partout dans l'UI).
| Champ standard | Ressource | FR (nouveau) | EN (nouveau) |
|---|---|---|---|
| Article (product code) | `Shared_Product` | Code lot SAP | SAP batch code |
| Menu article | `Articulos`, `Menu_Items` | Lots SAP | SAP batchs |
| Famille article | `Prop_Product_ProductFamilyCode` | Traitement commercial | Commercial processing |
| Menu famille | `Menu_ItemFamilies` | Traitements commerciaux | Commercial processings |
| Attr. Lot | `Shared_Lote` | Code produit SAP | SAP product code |
| Attr. Couleur | `Shared_Colour` | Propriétaire SAP | SAP owner |
| Attr. Origine / Source | `Shared_Source` | Description courte SAP | SAP short description |
| Attr. Taille | `Shared_Size` | Pays destination | Destination country |
**Ressources complémentaires** touchées au fil des retours de recette :
- `Shared_Calibre` : corrigée pour afficher « Pays destination » (manquait
à l'ajustement de stock, retour 04/06).
- `Shared_Códigodelote` : passée à « Code produit SAP » (retour 30/06).
- Messages d'erreur d'assignation de stock alignés sur les nouveaux
libellés : `StockAssign_TraceStockDoesNotMeetColour`,
`StockAssign_TraceStockDoesNotMeetLotCode`,
`StockAssign_TraceStockDoesNotMeetSize`,
`StockAssign_TraceStockDoesNotMeetSource`.
> ⚠️ Les 4 ressources `StockAssign_TraceStockDoesNotMeet*` ont été poussées
> par erreur sur la branche LOT2.2 (à surveiller au déploiement).
## Gestion des codes clients / fournisseurs
La base client/fournisseur SAP **n'est pas interfacée** avec le WMS.
@@ -126,14 +161,14 @@ Les codes sont gérés via des constantes + champ texte libre :
| 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" | |
| 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é |
| 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`.
@@ -185,28 +220,28 @@ fonctionnellement.
## Points d'attention
⚠️ Le CstAtt10 (Stage) est **à ajouter** il est requis pour l'étiquette
⚠️ 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.
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
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.
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
- 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)
- Impact suppression CstAtt stock sur les développements existants (@Nicolas)
## Historique des modifications
@@ -214,6 +249,7 @@ dans chaque message ROR/SOR/RUT, pas maintenu en master data.
|------|--------|--------------|
| 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é) |
| 2026-07-17 | Arthur | LIM-92 (attente déploiement test) : section « Renommage des ressources EasyWMS » (table ressources → libellés SAP : Shared_Product/Lote/Colour/Source/Size, Prop_Product_ProductFamilyCode, Menu_Items/ItemFamilies, Articulos ; ressources complémentaires Shared_Calibre/Códigodelote + 4 StockAssign_TraceStockDoesNotMeet*, caveat branche LOT2.2) |
## Références
@@ -223,3 +259,4 @@ dans chaque message ROR/SOR/RUT, pas maintenu en master data.
| 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 |
| [LIM-92](https://easywmsfrance.atlassian.net/browse/LIM-92) | Ticket Jira (renommage ressources) - attente déploiement test | 2026 |
+79 -48
View File
@@ -1,14 +1,16 @@
---
title: "Intégration GNA → SAP-CPI"
tags: [ERP, GNA, SAP-CPI, OAuth, middleware, API, BOO]
status: draft
standard_ref: architecture/erp-integration.md
status: review
standard_ref: concepts/erp-interface.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
- "Jira LIM-89 (lecture directe, revue de code validée 2026-05-21)"
last_updated: 2026-07-17
author: Arthur
---
@@ -24,7 +26,7 @@ author: Arthur
> (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),
> Voir aussi : [LOC - Message périodique](loc-message-periodique.md),
> [Référence messages](messages-reference.md),
> [Mapping ERP-WMS](mapping-erp-wms.md)
@@ -47,6 +49,16 @@ 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.
Structure (revue de code LIM-89) :
| Élément | Rôle |
|---|---|
| `CheckConnection()` | Authentification OAuth 2.0 client_credentials. Retry backoff exponentiel **4 tentatives (2s/4s/8s)**. Token persisté en JSON sur disque, gestion d'expiration (marge 60s). Arrêt immédiat sur 401 |
| `SendWebApiMessage` | Envoi POST vers l'endpoint unique. Détermination du `MessageSAP` puis construction du body. Retry backoff **5 tentatives (2s/4s/8s/16s)**. Token relu depuis le cache à chaque envoi |
| `CpiTokenResponse` | Désérialisation de la réponse OAuth (`access_token`, `token_type`, `expires_in`) |
| `CpiTokenCache` | Cache token JSON sur disque (`AccessToken`, `ExpiresAtUtc`) |
| `ReadWebApiFile`, `GenerateWebApiError`, `RegisterObservers` | Inchangés (template Mecalux standard) |
### Flux de communication
```mermaid
@@ -86,7 +98,7 @@ sequenceDiagram
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
## 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 :
@@ -109,29 +121,44 @@ 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 |
| ATH214 | Check flux retour (BAPI) | Vérification lot retour client |
| ATH215 | REF (type = Retour) | Finalisation réception retour |
| ATH217 | REF (type = Supplier) **ou ROF** | Finalisation réception fournisseur / clôture OE |
| ATH201 | LOC | Message périodique delta mouvements |
| ATH202 | LOF | Finalisation chargement |
> ⚠️ **Correction (revue de code LIM-89, 2026-05-21)** : le sens
> `REF Retour → ATH215` / `REF Supplier → ATH217` retenu ici est celui
> de la table de l'intégrateur ERP et de l'implémentation. Une version
> antérieure de cette page inversait les deux codes. `ROF` est mappé sur
> `ATH217` (et non `ATH215` comme le suggérait la description initiale).
> ⚠️ 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é :
Le message REF est routé vers **ATH215** (type Retour) ou **ATH217**
(type Supplier) selon le type de préavis de réception 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`
**Implémentation définitive (revue de code)** : la détermination se fait
**dans `CommonExportWebApi.boo`** (bloc `SendWebApiMessage`), via une
requête LINQ sur `Context.Receptions` en utilisant le `ReceiptCode`
extrait du payload JSON. Le préfixe 3 caractères du `MessageType`
(`REF01``REF`) sert au lookup dans le dictionnaire `messageSapMap` ;
pour REF, la logique conditionnelle sur le type de préavis choisit
ATH215 (Retour) ou ATH217 (Supplier).
- Type Retour → `ATH215`
- Type Supplier → `ATH217`
> **Note (reversal)** : la conception initiale prévoyait de porter le
> type via `RecCustomAttributes.CstAtt20` écrit par le `REF01Observer.boo`
> (requête sur `Context.RecLineInboundOrderLines``Context.InboundOrders`).
> Cette approche a été **abandonnée** : le type est désormais résolu
> directement dans `CommonExportWebApi.boo` via le `ReceiptCode`
> (`Context.Receptions`). `REF01Observer.boo` n'est donc pas modifié.
## Cartographie complète des interfaces Athenzat
@@ -155,8 +182,8 @@ Source : doc CPI Maxime Tourrette (24/04/2026) + mail S15 Justine.
| 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 |
| ATH215 | REF (Retour) | Z_IAT215 | Bon de réception retour |
| ATH217 | REF (Supplier) / ROF | Z_IAT217 | Bon de réception fournisseur / clôture OE |
| 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) |
@@ -167,13 +194,14 @@ Source : doc CPI Maxime Tourrette (24/04/2026) + mail S15 Justine.
> **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
## 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 |
| HTTP 200 | Succès - message envoyé |
| HTTP 401 | **Échec immédiat** - token invalide, pas de retry |
| Autre erreur HTTP (auth) | **Retry backoff** : 4 tentatives (2s → 4s → 8s) |
| Autre erreur HTTP (envoi message) | **Retry backoff** : 5 tentatives (2s → 4s → 8s → 16s) |
## Configuration requise
@@ -184,7 +212,7 @@ Six clés `CPI_*` à ajouter dans `CommonAppSettings.config`
|-----|-------------|
| 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_CLIENT_SECRET | Secret OAuth (**chiffré via `PasswordEncrypt.exe`**) |
| 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) |
@@ -201,9 +229,9 @@ Six clés `CPI_*` à ajouter dans `CommonAppSettings.config`
| 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_* |
| `Scripts2015/CommonExportWebApi.boo` | Script principal d'export WMS → SAP-CPI (auth, MessageSAP, envoi) |
| `Configuration/LIMAGRAI2512/CommonAppSettings.config` | Ajout des 6 clés CPI_* (secret chiffré) |
| ~~`Scripts2015/EasyWMS/XML/REF01/REF01Observer.boo`~~ | Prévu initialement (CstAtt20) - **non retenu** : type REF résolu via `ReceiptCode` dans `CommonExportWebApi.boo` |
## Logging
@@ -215,39 +243,39 @@ est logué en **format indenté** pour faciliter le debug.
## 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
- 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
- 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 Retour → MessageSAP = ATH215
- REF type Supplier → MessageSAP = ATH217
- ❓ REF type résolu via `ReceiptCode` (query `Context.Receptions`)
- 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.
Le **secret OAuth est chiffré** via `PasswordEncrypt.exe` dans le
fichier de configuration (résout la question initiale du secret en clair).
⚠️ 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
⚠️ 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)
- Faut-il implémenter une file d'attente persistante pour les
messages en échec après 5 retries ? (@Nicolas)
- [x] ~~Le secret OAuth doit-il être chiffré dans le config ?~~
**Résolu** (revue de code) : oui, chiffré via `PasswordEncrypt.exe`
## Historique des modifications
@@ -255,11 +283,14 @@ d'attente persistante).
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis LIM-89 |
| 2026-05-13 | Arthur | Ajout cartographie ATH complète, URLs TEST, note ATH214 hors GNA |
| 2026-07-17 | Arthur | Delta revue de code : structure du script (CheckConnection/SendWebApiMessage/CpiTokenCache), retry auth 4 vs envoi 5, secret chiffré PasswordEncrypt.exe (question résolue) ; **correction du sens REF Retour→ATH215 / Supplier→ATH217 + ROF→ATH217** ; type REF résolu via ReceiptCode (REF01Observer/CstAtt20 abandonné) ; statut préprod |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-89](https://easywmsfrance.atlassian.net/browse/LIM-89) | Ticket Jira | 2026 |
| [LIM-89](https://easywmsfrance.atlassian.net/browse/LIM-89) | Ticket Jira (statut préprod / test client) | 2026 |
| Revue de code LIM-89 (Arthur, N. Chabanis) | Revue de code validée | 2026-05-21 |
| Table de correspondance intégrateur ERP | Commentaire LIM-89 | 2026-05-11 |
| Athenzat SAP-CPI Webservices Documentation v1.0 | PDF (Maxime Tourrette) | 2026-04-24 |
| Mail Justine S15 | Cartographie interfaces | 2026-04 |
@@ -1,19 +1,21 @@
---
title: "LOC Message périodique (spécification complète)"
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
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"
last_updated: 2026-05-12
- "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)
# 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.
@@ -21,7 +23,7 @@ author: Arthur
> 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.
> 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),
@@ -52,9 +54,9 @@ JSON spécifique attendu par SAP.
### Décisions structurantes
- **STV désactivé** (post-processing coupé) le LOC devient le **seul canal**
- **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
- **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
@@ -72,7 +74,7 @@ Script BOO (requêtes WMS + agrégation + formatage JSON) → POST API SAP
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
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
@@ -96,7 +98,7 @@ Script BOO (requêtes WMS + agrégation + formatage JSON) → POST API SAP
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
## Couverture fonctionnelle - 7 codes ACTION
| Code | Signification | Déclencheur |
|------|---------------|-------------|
@@ -120,7 +122,7 @@ préalable doivent apparaître dans le LOC.
| Réf. | Champ | Type | Description |
|------|-------|------|-------------|
| 1 | IV_LGNUM | CHAR 4 | Numéro d'entrepôt (valeur fixe : `"WF02"`) config EasyS |
| 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
@@ -148,22 +150,22 @@ préalable doivent apparaître dans le LOC.
}
```
### Table IT_CREATE Champs (1:n)
### 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 |
| 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 |
| 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 |
| 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
@@ -200,7 +202,7 @@ Pour chaque HU identifiée dans les transactions du delta :
### 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.
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)
@@ -229,7 +231,7 @@ 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
crée que la structure palette - le stock est transféré depuis une palette
source connue.
### ACTION = C (Correction de quantité)
@@ -291,7 +293,7 @@ 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).
Format : `YYYYMMDD` - limité à 24 caractères (CHAR 24).
## Ordre des lignes
@@ -345,16 +347,16 @@ procéder à la désactivation.
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
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,
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
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
@@ -376,7 +378,7 @@ procéder à la désactivation.
| 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
### ACTION=B - Déplacement
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
@@ -384,7 +386,7 @@ procéder à la désactivation.
| 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
### ACTION=U/R - Blocage / Déblocage
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
@@ -392,14 +394,14 @@ procéder à la désactivation.
| 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
### 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
### ACTION=T - Transfert inter-HU
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
@@ -409,14 +411,14 @@ procéder à la désactivation.
| 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é
### 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
### ACTION=P - Assignation client
| CT | CA | Description | Résultat attendu |
|----|-----|-------------|------------------|
@@ -447,11 +449,67 @@ procéder à la désactivation.
| 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 |
| 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
⚠️ **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
@@ -465,17 +523,23 @@ pas fermée (pas de REF envoyé).
⚠️ 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).
⚠️ IV_LGNUM = `"WF02"` (pas "WL02" - corrigé depuis spec V2).
## Questions ouvertes
- [ ] Cas palette déposée sur image de quai → chargée → OS fermé →
- 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)
- HU multi-lignes de stock : comportement exact à confirmer (CT-112)
(@Fabien)
- [ ] Vérifier si d'autres transactions WMS sont utiles pour le LOC
- 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
@@ -483,12 +547,13 @@ supprimée) et ACTION=T (quantité transférée).
|------|--------|--------------|
| 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) | 2026 |
| [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 |
@@ -1,16 +1,16 @@
---
title: "Mapping ERP-WMS Changement article et propriétaire"
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom]
title: "Mapping ERP-WMS - Changement article et propriétaire"
tags: [ERP, mapping, CHG, STR, article, propriétaire, custom, cst-chg-wf, api]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
standard_ref: concepts/erp-interface.md
jira_refs: [LIM-90, LIM-113]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", "Jira LIM-90 (revue de code terminée 2026-06-03)", "Jira LIM-113 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Mapping ERP-WMS Changement article et propriétaire
# Mapping ERP-WMS - Changement article et propriétaire
> **Résumé** : processus [CUSTOM] de changement d'article et de propriétaire
> en cours de vie du stock, via message CHG.
@@ -30,7 +30,7 @@ sont notifiés par un message CHG descendant de SAP vers EasyWMS.
Le message standard STR (Stock Transfer Request) est aussi utilisé pour
les demandes de changement de statut de stock.
## Message STR Demande de Changement de Stock
## Message STR - Demande de Changement de Stock
### Cas d'usage
@@ -59,26 +59,113 @@ Limagrain mettra en place un **monitoring des erreurs** STR pour les cas
de refus. Les refus sont attendus en fonctionnement normal (palette en
cours de préparation au moment du STR).
## Message CHG Changement article / propriétaire
## Message CHG - Changement article / propriétaire (LIM-113)
### Contenu du message
> **Statut (LIM-113)** : En cours - revue fonctionnelle uniquement ; dévs non
> démarrés, en attente de validation technique client (Arthur 06/07).
| Champ | Description | Modifié si |
|-------|-------------|------------|
| Numéro de HU | Identifiant palette | Toujours présent |
| Lot Officiel | Lot de référence | Toujours présent |
| Code nouvel article | Nouveau code article | Changement article |
| Description nouvel article | Libellé | Changement article |
| Destination | Nouvelle destination | Changement article |
| Propriétaire Limagrain | Nouveau propriétaire | Changement propriétaire |
### Objectif et contexte
### Contrainte d'exécution
SAP demande au WMS de modifier une **ligne de stock existante** (code
article, propriétaire, destination et attributs logistiques induits) **sans
mouvement physique** de la palette. Cas principal : **bascule de propriétaire**
lors des clôtures fiscales (ex. `FR10``FR02`, deux sociétés juridiques
distinctes), où tout ou partie du stock d'une société est vendu à l'autre par
une opération purement comptable/légale.
Le changement ne peut avoir lieu **que si le stock n'est pas assigné à
un processus** (picking, expédition, regroupement, etc.).
Ce flux va **à l'encontre de la règle d'or** (le WMS est maître de l'état
physique du stock ; toute variation est normalement initiée par le WMS). Le
CHG demande au WMS de subir un ordre sur son propre stock. Il est donc
**encadré** : le WMS ne modifie le stock que si la HU **et** ses lignes de
stock ne sont engagées dans **aucun** processus, sinon il **refuse**.
Si le stock est assigné → le message CHG génère un message **ERR** pour
informer SAP que le changement est impossible.
### Mécanisme d'appel
SAP appelle la commande `StartWorkflowCommand`
(`Mecalux.ITSW.Application.CommonApplication.Commands.StartWorkflowCommand`)
sur `CustomApplication`, `ProcessName = CST_CHG_WF` (WF custom à développer de
zéro). SAP envoie **l'identité complète de la palette** : toutes les valeurs
cibles, pas seulement les champs modifiés, pas de couple ancienne/nouvelle
valeur.
### Champs modifiables (JSON reçu)
| Attribut (JSON) | Sémantique | Exemple |
|-----------------|-----------|---------|
| `containerCode` | Code HU (clé primaire) | `036607231001292781` |
| `ContainerTypeCode` | Type de support | `PALETTE_US` |
| `productCode` | Code article | `2025078581` |
| `Quantity` | Quantité | `1.000` |
| `UnitOfMeasureCode` | Unité de mesure | `BAG` |
| `LotCode` | Lot (code produit SAP) | `000000000000384823` |
| `Color` | Propriétaire SAP | `FR10` |
| `Source` | Description courte SAP | `SC04-FERT-B 400KG-BE-NEU` |
| `Size` | Pays de destination | `BE` |
> **Statut de stock explicitement EXCLU du CHG.** Le changement de statut
> passe par le flux **STR standard** (voir ci-dessus), inchangé. Le WF
> `CST_CHG_WF` **ignore** le champ statut même s'il est présent dans le JSON.
>
> ⚠️ Pour changer **à la fois** un attribut **et** le statut d'une même HU :
> **deux appels API distincts** (CHG puis STR). Risque assumé : l'un peut
> passer et l'autre échouer (travail à moitié fait) → le client gère le rejeu
> de l'appel en erreur.
### Logique du workflow `CST_CHG_WF`
1. **Récupération HU + identification de la ligne** : clé = `containerCode` ;
lister toutes les lignes de stock de la HU ; identifier la bonne ligne en
comparant les attributs reçus (une HU peut porter plusieurs lignes). HU
inexistante ou aucune ligne correspondante → refus (message explicite).
2. **Vérification « HU et lignes libres de tout flux »** : reprendre la
logique de **ADB-117** (batterie de `Count()` sur les tables métier), mais
appliquée au **code support et aux lignes de stock** (pas à l'article).
Différence majeure : ADB-117 supprimait du stock ; ici on ne supprime rien.
Si la HU ou une ligne est présente dans **autre chose** que les tables
Stocks / Support → **refus**. Tables à contrôler (liste **indicative**,
exhaustivité à établir par le dev) : ProductLocations / lignes réservées ou
assignées, Tasks, OutboundOrders(Lines), Receptions(Lines),
InboundOrders(Lines), chargements camion, tournées, vagues, workorders,
inventaires (lignes), livraisons, colis, ajustements de stock.
3. **Refus tout ou rien** : si **une seule** ligne (ou la HU) est engagée →
refus **intégral** du CHG. Le message précise **quelle ligne** et **dans
quelle(s) table(s)/flux** elle est engagée.
4. **Idempotence** : comparer champ par champ les valeurs cibles aux valeurs
actuelles. Si **toutes** déjà en place → **OK (200)** sans rien tenter ;
sinon appliquer les champs qui diffèrent.
5. **Application** : si HU + ligne libres → appliquer les nouvelles valeurs
(article, propriétaire, destination, attributs logistiques) et renvoyer
**200**.
### Acquittement API et notification
- **Succès** → WF terminé normalement → API **200**.
- **Échec (refus métier ou erreur)****throw d'une exception HTTP 500** avec
le message d'erreur complet.
> ⚠️ **Contrainte technique built-in** : le seul moyen de renvoyer un message
> d'erreur exploitable sur ce type d'appel `StartWorkflowCommand` est de
> **throw une exception (500)**. Il n'existe pas d'acquittement négatif propre
> (200 + payload de refus). Un CHG refusé pour raison métier normale (palette
> dans un flux) remonte donc techniquement comme un **500** : SAP doit
> l'interpréter comme un **refus métier** (pas un plantage), lire le message,
> débloquer, puis rejouer. À communiquer à Limagrain.
En complément, le WMS génère une **notification interne** en cas de refus,
pour traitement manuel par un gestionnaire formé (paramétrage standard + léger
custom potentiel ; mécanisme de notifications/alertes standard à vérifier en
doc Confluence).
### Volumétrie et cible fonctionnelle
- Pas de flux régulier de faible volume mais des **vagues** liées aux clôtures :
jusqu'à ~1000 lignes d'un coup, jusqu'à **un tiers du stock** sur 2 jours.
Limagrain envoie des **messages unitaires** (ex. 1000 appels plutôt qu'un
message groupé). **À valider (Mecalux)** : traitement **synchrone ou
asynchrone / arrière-plan** pour tenir la charge sans bloquer les flux 24/7.
- Cible : ~**90 %** des changements passent s'ils sont envoyés au bon moment ;
~**10 %** (palette dans un flux) → refus + correction manuelle par un
gestionnaire. Pas de sur-automatisation initiale.
## Statut de stock
@@ -88,11 +175,16 @@ informer SAP que le changement est impossible.
travail **uniquement** lors du processus de **retour commandes clients**,
pour appliquer :
- **F9** Sacs sales
- **B6** Non conforme
- **F9** - Sacs sales
- **B6** - Non conforme
Un commentaire est associé au statut et remonté dans le message d'interface
(STC) pour informer l'ERP.
Un commentaire est associé au statut.
> ⚠️ **Mise à jour (LIM-90)** : le **STC est désactivé** (décision 30/04).
> Pour les retours client, les statuts sont remontés dans le **REF** via
> les balises ZLOG/ZINCO (codes SAP). Hors retour, seul le B6 remonte,
> via le **LOC** (action R/U). Catalogue des 8 statuts + balises REF :
> voir [Réception retour](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90).
### Attributs du statut de stock
@@ -112,23 +204,25 @@ Limagrain peut créer ses propres statuts de stock :
- Menu « Données principales » → « Types de verrous » → « Statut de stock »
- Bouton « Nouveau » → remplir les champs requis
## Diagramme de séquence Changement article
## Diagramme de séquence - Changement article
```mermaid
sequenceDiagram
participant SAP
participant WMS as EasyWMS
participant WMS as EasyWMS (CST_CHG_WF)
SAP->>WMS: CHG (nouveau code article, description, destination)
alt Stock non assigné
WMS->>WMS: MAJ article sur les lignes de stock
Note over WMS: Pas de confirmation retour
else Stock assigné à un processus
WMS->>SAP: ERR (changement impossible)
SAP->>WMS: StartWorkflowCommand CST_CHG_WF (identité complète HU)
WMS->>WMS: Récupère HU + identifie la ligne de stock
alt HU et lignes libres de tout flux
WMS->>WMS: Applique article/propriétaire/destination (idempotent)
WMS-->>SAP: 200 (OK)
else HU/ligne engagée dans un flux, ou HU/ligne introuvable
WMS->>WMS: Notification interne (gestionnaire)
WMS-->>SAP: throw exception 500 (motif + table/flux)
end
```
## Diagramme de séquence Changement statut (retour client)
## Diagramme de séquence - Changement statut (retour client)
```mermaid
sequenceDiagram
@@ -138,13 +232,25 @@ sequenceDiagram
OP->>WMS: Changement statut (F9 ou B6) + commentaire
WMS->>WMS: MAJ statut ligne de stock
WMS->>SAP: STC (notification changement statut)
WMS->>SAP: REF avec ZLOG/ZINCO à la clôture (LIM-90)
```
> ⚠️ Diagramme mis à jour (LIM-90) : la remontée se fait via le **REF**
> (balises ZLOG/ZINCO) à la clôture de la réception retour, **pas via
> STC** (désactivé).
## Points d'attention
⚠️ Le CHG ne renvoie pas de confirmation positive — seule l'erreur (ERR)
est remontée si le changement échoue.
⚠️ Le CHG renvoie **200** en cas de succès et **500** (throw exception) en
cas de refus métier ou d'erreur. Le 500 n'est **pas** un plantage mais peut
être un refus attendu (palette engagée dans un flux) - SAP doit lire le
message pour savoir quoi débloquer avant de rejouer (LIM-113).
⚠️ Le **statut de stock est exclu du CHG** : il passe par le STR. Changer un
attribut **et** le statut = **deux appels** distincts (CHG puis STR).
⚠️ Refus **tout ou rien** : une seule ligne engagée bloque l'intégralité du
CHG sur la HU.
⚠️ Le changement de statut sur poste est limité au processus retour client
(pas en picking ni en regroupement).
@@ -154,9 +260,21 @@ changement de statut initiées par SAP.
## Questions ouvertes
- [ ] Liste exhaustive des statuts de stock Limagrain prévus au démarrage (@Justine)
- [ ] Liste des commentaires par statut — validée ? (@Justine)
- [ ] CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)
- [x] ~~Liste exhaustive des statuts de stock Limagrain prévus au démarrage~~
**Résolu** (LIM-90) : 8 statuts retour (F9 + 7 motifs B6), F2 = absence.
→ voir [Réception retour](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90)
- [x] ~~Liste des commentaires par statut - validée ?~~**Résolu** (LIM-90) :
libellés/motifs définis (ZINCO 0002-0008). Blocages à confirmer client.
- [x] ~~CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)~~**Résolu** (LIM-113) : **200** en succès, **500** (throw exception) en refus/erreur ; pas d'acquittement négatif propre, le 500 véhicule le motif
- Identification de la ligne de stock concernée dans la HU (une HU peut
porter plusieurs lignes) : critère de comparaison des attributs reçus à
préciser (@Vincent, commentaire 07/07)
- Traitement **synchrone ou asynchrone / arrière-plan** des appels CHG pour
tenir la volumétrie des clôtures (~1000 lignes) sans bloquer les flux 24/7
(@Nicolas / Mecalux)
- Liste **exhaustive** des tables/entités où une HU ou une ligne de stock
peut être référencée/verrouillée (au-delà de la liste indicative ADB-117) -
action développeur
## Historique des modifications
@@ -164,6 +282,8 @@ changement de statut initiées par SAP.
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-06 | Arthur | Ajout section STR détaillée (CR consolidé ERP) |
| 2026-07-17 | Arthur | LIM-90 : STC désactivé → remontée statuts retour via REF (ZLOG/ZINCO), diagramme corrigé, 2 questions statuts résolues (renvoi catalogue réception-retour) |
| 2026-07-20 | Arthur | LIM-113 (lecture directe, En cours) : refonte complète de la section CHG - objectif/contexte (bascule propriétaire clôture fiscale FR10→FR02, règle d'or), mécanisme `StartWorkflowCommand`/`CST_CHG_WF` (identité complète), table des 9 champs JSON, statut exclu (STR séparé, 2 appels), logique WF en 5 étapes (récup HU + ID ligne, contrôle libre de flux façon ADB-117 sur HU/lignes, refus tout ou rien avec motif, idempotence, application), acquittement 200/500 (throw), notification interne, volumétrie clôtures ~1000 lignes + sync/async, cible 90/10 ; diagramme séquence CHG refondu ; points d'attention (200/500, statut exclu, tout ou rien) ; 1 question résolue (acquittement) + 3 nouvelles (ID ligne @Vincent, sync/async, liste exhaustive tables) ; front matter jira_refs +LIM-113/sources/tags/last_updated |
## Références
@@ -171,3 +291,7 @@ changement de statut initiées par SAP.
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| [LIM-90](https://easywmsfrance.atlassian.net/browse/LIM-90) | Ticket Jira (statuts ZLOG/ZINCO) - revue de code terminée, préprod | 2026-06-03 |
| [LIM-113](https://easywmsfrance.atlassian.net/browse/LIM-113) | Ticket Jira (flux API CHG, `CST_CHG_WF`) - En cours, revue fonctionnelle | 2026 |
| ADB-117 | DevOps Athenza (logique `Count()` sur tables métier, réf. de reprise) | - |
| DevOps 88942 | Work item Athenza (bsd-limagrain) | - |
@@ -1,16 +1,16 @@
---
title: "Catalogue des messages ERP Référence complète"
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: []
standard_ref: concepts/erp-interface.md
jira_refs: [LIM-113, LIM-117]
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
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", "Jira LIM-113 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Catalogue des messages ERP Référence complète
# 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.
@@ -76,21 +76,21 @@ message.
## Messages custom détaillés
### PCK Passage Conteneur Client
### 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É
### ~~MOV - Movement~~ ANNULÉ
> **ANNULÉ** décision réunion client, jugé inutile.
> **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é)
### LOC - Message périodique (détaillé)
- **Déclencheur** : Job toutes les 5 min → WF → transaction `LOC.SEND` → GNA
(script BOO) → POST SAP-CPI
@@ -100,13 +100,13 @@ message.
- **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)
- **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É)
### 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.
@@ -133,10 +133,10 @@ message.
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
plutôt que des écarts +/- (STV) - si un message se perd, l'écart est
définitivement perdu
### STR Demande de Changement de Stock
### STR - Demande de Changement de Stock
- **Direction** : ERP → WMS
- **Cas d'usage** : changement de code article (produit SAP + description),
@@ -151,7 +151,7 @@ message.
les cas de refus
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md)
### COR Demande d'Échantillonnage
### COR - Demande d'Échantillonnage
- **Direction** : ERP → WMS
- **Usage** : **uniquement** pour les demandes d'échantillonnage (pas pour les
@@ -173,7 +173,7 @@ message.
pour les ordres de sortie
- **Voir** : [Échantillonnage](../03-picking/echantillonnage.md)
### COF Confirmation d'Échantillonnage
### COF - Confirmation d'Échantillonnage
- **Direction** : WMS → ERP
- **Mapping** :
@@ -187,7 +187,7 @@ message.
- **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
### WSC - Image de Stock Journalière
- **Direction** : WMS → ERP
- **Rôle** : image de stock complète pour vérification de cohérence. Contient
@@ -199,21 +199,28 @@ message.
fichier (volumétrie potentiellement élevée pour CPI)
- **Déclenchement** : transaction `SCR.REQ` ou `STOCKSYNC.ASKED`
### STC Notification Changement de Statut (⚠️ DÉSACTIVÉ)
### 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
### CHG - Changement article / propriétaire (LIM-113)
- **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)
- **Déclencheur** : modification article / propriétaire / destination dans SAP
(cas principal : bascule de propriétaire en clôture fiscale, ex. FR10→FR02),
sans mouvement physique de la palette
- **Mécanisme** : `StartWorkflowCommand` → WF custom `CST_CHG_WF` sur
`CustomApplication` ; SAP envoie l'identité complète de la HU (9 champs :
containerCode, ContainerTypeCode, productCode, Quantity, UnitOfMeasureCode,
LotCode, Color=propriétaire, Source=description, Size=destination)
- **Contrainte** : modification seulement si la HU et ses lignes ne sont
engagées dans **aucun** flux (refus tout ou rien). **Statut de stock exclu**
(passe par STR, appel séparé)
- **Acquittement** : **200** en succès, **500** (throw exception) en refus/erreur
- **Voir** : [Mapping ERP-WMS](mapping-erp-wms.md#message-chg---changement-article--propriétaire-lim-113)
### API Lot SAP Retours clients
### API Lot SAP - Retours clients
- **Déclencheur** : lot officiel inconnu lors d'un retour client
- **Contenu (demande)** : lot officiel à vérifier
@@ -247,6 +254,11 @@ SAP → RUT → EasyWMS → (picking + chargement) → LOC (delta 5 min) → SAP
→ SOF → SAP (phase 2)
```
> **Adresse de livraison (LIM-117)** : la liste de SOR d'un RUT n'expose pas
> les champs d'adresse standard ; SAP la transmet dans le `CustomAttribute`
> (Attribute1-7) de chaque SOR, mappé sur l'OS par un post-subscription WMS.
> Détail : [Flux ERP outbound - Adresse de livraison](../04-outbound/flux-erp-outbound.md#custom-adresse-de-livraison-des-sor-de-tournée-lim-117).
### Consommation OF (SOR)
```
@@ -275,34 +287,35 @@ SAP → STR → EasyWMS → (MAJ stock) → LOC (delta 5 min) → SAP
## Points d'attention
⚠️ **STV et STC désactivés** (décision 30/04/2026) le LOC est le seul canal
⚠️ **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.
⚠️ Le message CHG (WF `CST_CHG_WF`) est **refusé** si la HU ou une de ses
lignes est engagée dans un flux : refus **tout ou rien**, remonté en **500**
(throw exception) avec le motif - pas un plantage mais un refus métier (LIM-113).
⚠️ MOV, PCK sont **supprimés/remplacés** le LOC couvre tous ces besoins.
⚠️ 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
⚠️ 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
⚠️ 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
- Détail champ par champ de chaque message - document séparé à intégrer (@Arthur)
- [x] ~~Format exact du message CHG (@Nicolas)~~**Résolu** (LIM-113) : `StartWorkflowCommand` / `CST_CHG_WF`, 9 champs JSON (voir [Mapping ERP-WMS](mapping-erp-wms.md#message-chg---changement-article--propriétaire-lim-113))
- 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)
- Effets de bord désactivation STC - idem pour CST.STK (@Mecalux)
## Historique des modifications
@@ -311,6 +324,8 @@ d'échantillonnage en double.
| 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) |
| 2026-07-20 | Arthur | LIM-113 : refonte entrée CHG (mécanisme `StartWorkflowCommand`/`CST_CHG_WF`, 9 champs, refus tout ou rien, statut exclu, acquittement 200/500) ; point d'attention CHG mis à jour ; question « format CHG » résolue ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-117 (LOT 2.1, Ouvert) : note « Adresse de livraison » sur le flux RUT (adresse dans `CustomAttribute` des SOR, mapping post-subscription vers l'OS) + renvoi vers flux-erp-outbound.md ; jira_refs +LIM-117 |
## Références
+2 -2
View File
@@ -1,11 +1,11 @@
---
title: "Administration Vue d'ensemble"
title: "Administration - Vue d'ensemble"
tags: [admin, rbac, ad, index]
status: draft
last_updated: 2026-05-05
---
# Administration Vue d'ensemble
# Administration - Vue d'ensemble
> **Périmètre** : gestion utilisateurs et groupes, paramètres projet,
> éléments AD customs.
+191 -68
View File
@@ -1,116 +1,239 @@
---
title: "AD Customs — Éléments personnalisés"
tags: [admin, AD, customs, CstAtt, Container]
title: "AD Customs - Custom Attributes"
tags: [admin, AD, customs, CstAtt, référentiel]
status: draft
standard_ref: concepts/application-dictionary.md
jira_refs: [LIM-14]
standard_ref: architecture/application-dictionary.md
jira_refs: [LIM-14, LIM-64, LIM-66, LIM-67, LIM-70, LIM-71, LIM-73, LIM-76, LIM-82, LIM-84, LIM-91, LIM-96, LIM-106, LIM-111, LIM-112, LIM-114, LIM-115]
confluence_refs: []
sources: ["recap_session_LIM-72_13-05-2026.md"]
last_updated: 2026-05-13
sources: ["Jira LIM-14 (lecture directe 2026-07-17)", "recap_session_LIM-72_13-05-2026.md"]
last_updated: 2026-07-17
author: Arthur
---
# AD Customs — Éléments personnalisés
# AD Customs - Custom Attributes
> **Résumé** : inventaire des Custom Attributes (CstAtt) et éléments AD
> personnalisés pour le projet Limagrain. Référence centralisée pour le
> développement et la maintenance.
> **Résumé** : inventaire centralisé des Custom Attributes (CstAtt) par
> entité pour le projet Limagrain. Référentiel maître =
> [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14).
> **Standard EasyWMS** : → voir
> [Application Dictionary](../../concepts/application-dictionary.md)
> [Application Dictionary](../../architecture/application-dictionary.md)
> Ce qui suit documente les **personnalisations Limagrain**.
> **Séquences, toggles, jobs et paramètres** : voir
> [Paramètres projet](parametres-projet.md).
## Contexte projet
Le projet Limagrain utilise de nombreux CstAtt sur les entités
Container, Réception, Stock et OE pour piloter les flux customs
(réception, picking, clôture, etc.). Cette page centralise le mapping
complet pour éviter les conflits et faciliter la maintenance.
Le projet Limagrain utilise de nombreux CstAtt sur les entités Article,
Support (Container), Stock, Ordre d'entrée, Réception, Tâche, etc. pour
piloter les flux customs (réception, picking, clôture, anoxie,
recertification). Cette page reflète le catalogue [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14)
et sert de référence unique pour éviter les conflits d'allocation.
## CstAtt Container (support / palette)
## CstAtt Article
Source : [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14)
Attributs descendus de SAP sur la fiche article. Affichage dans la vue
des articles **corrigé le 2026-05-18** (colonnes / types).
| CstAtt | Donnée | Type | Tâche | Statut |
|--------|--------|------|-------|--------|
| 01 | Big-bag potentiel (réception contient big-bag) | bool | LIM-64 | Utilisé |
| 02 | Contient big-bag | bool | LIM-67 | Utilisé |
| 03 | À anoxier | bool | LIM-67 | Utilisé |
| 04 | Support ASN | bool | LIM-64 | Utilisé |
| 05 | Programme de filmage | int | LIM-67 | Utilisé |
| 06 | Code PK assigné | string | LIM-70 | Utilisé |
| 07 | Date fin d'anoxie | datetime | — | Utilisé |
| 08 | Code réception (conteneur virtuel) | string | — | Utilisé |
| 09 | CERTIFICATION (fausse palette) | string | — | Utilisé |
| 10 | Réception en cours au PK | bool | — | Utilisé |
| 11 | Rangé ASRS après réception | bool | LIM-73 | Utilisé |
| 12 | **Proposé** : code OE associé | string | LIM-64 (évol.) | Libre |
| 13 | Étiquetée au PK | bool | LIM-XX | À réserver |
| 14-20 | — | — | — | **Libres** |
| CstAtt | Donnée | Type |
|--------|--------|------|
| 01 | Espèce | string |
| 02 | Génération | string |
| 03 | Variété | string |
| 04 | Big-Bag | bool |
| 05 | GTIN | string |
| 06 | Semence essais | string |
| 07 | Calibre | string |
| 08 | Zone de production au champ | string |
| 09 | Marque | string |
| 10 | Stage | string |
> **Proposition CstAtt12** : stocker le code OE (association palette
> ordre d'entrée) dès l'image de quai. Permettrait de pré-remplir la
> sélection de réception au PK (LIM-72) et d'optimiser le routage AGV
> (LIM-70). Impact planning à évaluer — reporté après réponses aux
> questions ouvertes.
## CstAtt Support (Container / palette)
> **CstAtt13 — Étiquetée au PK** : flag utilisé par l'étiqueteuse
> automatique au poste de sortie TK pour éviter une ré-impression.
> Valeurs : `true` = déjà étiquetée au PK (l'étiqueteuse auto
> n'imprime pas), `false` = pas encore étiquetée, `error` = impression
> échouée. Vérifier avec LIM-14 qu'il n'y a pas de conflit avec le
> CstAtt12 proposé.
| CstAtt | Donnée | Type | Tâche | Affiché (vue support) |
|--------|--------|------|-------|-----------------------|
| 01 | Palette dans une réception contenant ≥ 1 big-bag | bool | LIM-64 | « Big-bag potentiel » |
| 02 | Palette contenant un big-bag | bool | LIM-67 | « Big-bag » |
| 03 | À anoxier | bool | LIM-67 | « A anoxier » |
| 04 | Support ASN | bool | LIM-64 | « ASN » |
| 05 | Programme de filmage | int | LIM-67 / 115 | « Filmage » |
| 06 | Code du PK assigné | string | LIM-70 | « PK assigné » |
| 07 | Date de fin d'anoxie | datetime | - | « Dernière anoxie » |
| 08 | Code de la réception (conteneur virtuel) | string | - | Vue support |
| 09 | CERTIFICATION (fausse palette pour certification) | string | - | - |
| 10 | En cours de réception au PK | bool | - | « Réception en cours » |
| 11 | Rangé ASRS après réception | bool | LIM-73 | « Rangé ASRS » |
| 12 | Conteneur étiqueté | bool | LIM-71 | - |
| 13 | Ordre d'entrée (code OE du conteneur) | string | LIM-96 | « Ordre d'entrée » |
| 14 | Palette étiquetée au PK | string | LIM-91 / 111 | - |
## CstAtt Réception
> **CstAtt05** - Programme de filmage. Posé au poste par LIM-67 (choix
> opérateur : `0`/`A``H` selon le paramètre `FILMAGES`). **Lu et transmis à
> Galileo par LIM-115** (recopié dans le CustomData de la tâche à la création
> d'un mouvement de source PIE_02 → pilotage de la filmeuse ; forcé à `0` si
> vide, « pas de filmage », ou destination de rejet). Voir
> [Configuration Galileo - Transmission du filmage](../02-stockage/galileo-config.md#transmission-du-programme-de-filmage-à-la-filmeuse-lim-115).
> ⚠️ LIM-14/LIM-67 typent `int` alors que les codes sont alphanumériques
> (`0`, `A`…) - à confirmer (probable `string`).
| CstAtt | Donnée | Type | Tâche |
|--------|--------|------|-------|
| 01 | Flag clôture en cours (retours) | bool | LIM-73 |
> **CstAtt06** - Code du PK assigné (LIM-70). Conflit d'usage historique
> avec LIM-71 **résolu** : LIM-71 a abandonné son marquage CstAtt06
> (destination désormais via stratégies de rangement). CstAtt06 = code du
> PK lié uniquement.
> **Usage rejet PIE (LIM-114)** : lu comme **poste d'origine** pour renvoyer
> une palette rejetée au PIE. Doit être **reporté sur le support réel** (posé
> au PK par LIM-67 en réception, par LIM-91 sur la palette source picking) ;
> s'il est vide, le support est traité comme production → `PK_REJET_PROD`.
> Voir [Flux de rejet PIE](../02-stockage/rejet-pie.md).
Voir [Réception retour — Clôture](../01-inbound/reception-retour.md)
pour le détail du mécanisme.
> **CstAtt12** - Conteneur étiqueté. En **LIM-96 V2**, il est posé à
> `true` à l'écran « validation du collage des étiquettes » (déclaration
> image de quai) pour **toutes** les palettes de la réception, y compris
> celles sans étiquette (production / piles). Il conditionne la prise en
> charge par le job AGV **LIM-71** (déplacement uniquement si
> `CstAtt12 = true`).
> ⚠️ À réconcilier avec la
> [page LIM-71](../05-agv/job-reception-production.md) qui indiquait que
> la condition `CstAtt12` avait été retirée du job (voir
> [Questions ouvertes](../08-transverse/questions-ouvertes.md)).
## CstAtt OE (InboundOrder)
> **CstAtt13** - Code de l'ordre d'entrée du conteneur. Posé **dès
> l'image de quai** par l'écran « déclaration des OE » de
> [LIM-96 V2](../01-inbound/gestion-camions.md) (rattachement de chaque
> emplacement occupé à son OE), en plus du renseignement au PK par le flux
> LIM-67. LIM-14 le rattache à LIM-96. Voir
> [Gestion des camions](../01-inbound/gestion-camions.md) et
> [Réception fournisseur](../01-inbound/reception-fournisseur.md).
| CstAtt | Donnée | Type | Tâche |
|--------|--------|------|-------|
| 01 | Hors tolérance (au moins 1 ligne OE hors tolérance) | bool | LIM-73 |
Voir [Réception fournisseur — Clôture](../01-inbound/reception-fournisseur.md).
> **CstAtt14** - Palette étiquetée au PK. String à **3 valeurs**
> (`true` / `false`|vide / `error`). Posé au PK (LIM-91), **lu et mis à
> jour à l'étiqueteuse automatique de sortie TK** (LIM-111 : `true` si
> impression OK, `error` si échec). Il ne conditionne que la
> **ré-impression de l'étiquette de picking** (HU RFID, LIM-68) :
> `true` ⇒ pas de ré-impression. L'**étiquette d'expédition** (LIM-107)
> s'imprime dans tous les cas (sauf palette trop basse), indépendamment de
> ce flag. Réservé dans LIM-14.
> Voir [Process picking au PK](../03-picking/process-picking-pk.md) et
> [Flux expédition - Étiqueteuse automatique](../04-outbound/flux-expedition.md#étiqueteuse-automatique).
## CstAtt Stock (StockLine)
Les CstAtt stock portent principalement les attributs logistiques
descendus de SAP. Voir
[Données principales](../06-erp-interface/donnees-principales.md)
pour le mapping détaillé.
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Poids unitaire produit recalculé | décimal | LIM-66 | Vue stock |
| 02 | SSCC virtuelle palette MII | string | LIM-91 | Vue stock |
Les autres attributs logistiques descendus de SAP sont détaillés dans
[Données principales](../06-erp-interface/donnees-principales.md).
## CstAtt Ordre d'entrée (InboundOrder)
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Hors tolérance (≥ 1 ligne OE hors tolérance) | bool | LIM-73 | Vue OE - « Hors tolérance » |
Voir [Réception fournisseur - Clôture](../01-inbound/reception-fournisseur.md).
## CstAtt Réception
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Réception retour entièrement rangée ASRS (flag « clôture en cours ») | bool | LIM-73 | Vue réceptions - « Rangé ASRS » |
Voir [Réception retour - Clôture](../01-inbound/reception-retour.md).
## CstAtt Ligne d'ordre d'inventaire
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Nombre de palettes à échantillonner | int | LIM-112 | Vue ordres d'inventaire, modifiable |
| 02 | Consignes (texte libre rattaché à l'ordre) | string | LIM-112 | Vue ordres d'inventaire |
> LIM-14 indique le type « Booléen » pour le CstAtt01 alors que la donnée
> est un nombre modifiable - à confirmer (probable `int`). LIM-112 confirme
> l'usage : `CstAtt01` = nombre de palettes à échantillonner (valeur du COR,
> toujours 4 d'après SAP ; éditable en création manuelle tant que
> l'inventaire n'est pas lancé), `CstAtt02` = consignes.
> ⚠️ Le commentaire du ticket LIM-112 évoque les consignes sur `CstAtt01` :
> à confirmer avec le client (voir
> [Échantillonnage](../03-picking/echantillonnage.md#questions-ouvertes)).
## CstAtt Stratégies de rangement
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Anoxie | bool | - | Vue stratégies de rangement - « Anoxie » |
## CstAtt Status de stock
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Applicable en réception type retour | bool | - | « Applicable en réception » |
| 02 | ZLOG (code SAP) | texte | - | « ZLOG » |
| 03 | ZINCO (code SAP) | texte | - | « ZINCO » |
Utilisés par l'entité `CST_StockStatus`. Catalogue des 8 statuts retour
(F9 + 7 motifs B6, F2 = absence de statut) et remontée REF ZLOG/ZINCO
définis en LIM-90 : voir
[Réception retour](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90).
## CstAtt Tâche (Task)
| CstAtt | Donnée | Type | Tâche | Affiché |
|--------|--------|------|-------|---------|
| 01 | Numéro de séquence picking | int | LIM-84 | - |
| 02 | Tâche créée pour le process de recertification | bool | LIM-106 | Vue des tâches - « Recertification » |
| 03 | Conteneur de picking a passé la navette | bool | LIM-84 / LIM-82 | - |
| 04 | Code support fille picking négatif | string | LIM-76 | - |
## CstAtt OS (OutboundOrder / ShippingOrder)
| CstAtt | Donnée | Type | Tâche |
|--------|--------|------|-------|
| CstAtt | Verrou séquençage TK (blocage stacker crane) | bool | LIM-84 |
| - | Verrou séquençage TK (blocage stacker crane) | bool | LIM-84 |
Voir [Séquençage TK → PS](../03-picking/sequencage-tk-ps.md).
> Non listé explicitement dans LIM-14 ; le séquençage picking figure sous
> CstAtt Tâche (01/03, LIM-84). Voir
> [Séquençage TK → PS](../03-picking/sequencage-tk-ps.md).
## Points d'attention
⚠️ Les CstAtt Container 14-20 sont libres. Tout nouvel usage doit être
documenté ici et dans LIM-14.
⚠️ Le référentiel maître est [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14).
Tout nouvel usage de CstAtt doit y être déclaré **avant** d'être
documenté ici.
⚠️ Le CstAtt11 Container est posé une seule fois (rangement ASRS) et
n'est jamais remis à false, même si le support ressort ensuite.
⚠️ Le CstAtt11 Support est posé une seule fois (rangement ASRS) et n'est
jamais remis à false, même si le support ressort ensuite.
⚠️ Renumérotation Support 12/13/14 : l'ancienne allocation (13 =
« Étiquetée au PK ») est obsolète. Depuis LIM-14 : 12 = Conteneur
étiqueté, 13 = Ordre d'entrée, 14 = Palette étiquetée au PK.
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-05-13 | Arthur | Création avec table CstAtt Container complète depuis LIM-14 |
| 2026-05-13 | Arthur | Création avec table CstAtt Container depuis LIM-14 |
| 2026-05-13 | Arthur | Réservation CstAtt13 Container pour flag étiquetage PK |
| 2026-07-17 | Arthur | Réalignement complet sur LIM-14 (lecture directe) : ajout entités Article, Stock, Ligne inventaire, Stratégies rangement, Status stock, Tâche ; Support étendu à 14 (12 = Conteneur étiqueté, 13 = Ordre d'entrée, 14 = Palette étiquetée au PK) ; renvoi séquences/jobs/paramètres → parametres-projet.md |
| 2026-07-17 | Arthur | LIM-96 V2 : note CstAtt12 (posé `true` à l'écran collage étiquettes, gate job LIM-71 + caveat réconciliation) et CstAtt13 (posé dès l'image de quai via l'écran déclaration OE, en plus du PK) |
| 2026-07-17 | Arthur | CstAtt Tâche 03 (passage navette) : ajout attribution LIM-82 (flag posé par les handlers `Container_MovedEventHandler_ET/MS_PR`) |
| 2026-07-20 | Arthur | CstAtt Tâche 02 (recertification) : attribution LIM-106 (flag posé sur les tâches de mouvement recertification). Note : déplacé du CstAtt01 vers 02 (Maxime 26/06), le 01 étant la séquence picking LIM-84 |
| 2026-07-20 | Arthur | CstAtt14 Support : précisions LIM-111 (lu/mis à jour à l'étiqueteuse de sortie TK, 3 valeurs, conditionne uniquement la ré-impression de l'étiquette de picking LIM-68, pas l'étiquette d'expédition LIM-107 ; réservé LIM-14) + attribution LIM-91 / 111 dans la table |
| 2026-07-20 | Arthur | CstAtt Ligne d'ordre d'inventaire : ajout CstAtt02 (consignes, LIM-112) + attribution LIM-112 au CstAtt01 (nb palettes à échantillonner) + note usage LIM-112 (caveat commentaire consignes CstAtt01 vs 02) |
| 2026-07-20 | Arthur | CstAtt06 Support : note usage rejet PIE (LIM-114 - poste d'origine lu pour la destination de rejet, reporté sur le support réel par LIM-67/LIM-91) ; jira_refs +LIM-114 |
| 2026-07-20 | Arthur | CstAtt05 Support : note usage LIM-115 (transmis à Galileo/filmeuse via CustomData de tâche sur mouvement source PIE_02, forcé 0 si vide/pas de filmage/rejet) + caveat type int vs code alphanumérique ; table 05 → LIM-67 / 115 ; jira_refs +LIM-115 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14) | Ticket Jira | 2025 |
| [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14) | Ticket Jira (référentiel CstAtt/séquences/jobs/paramètres) | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, pose CstAtt Tâche 03) | 2026 |
| [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Ticket Jira (assignation recertification, pose CstAtt Tâche 02) | 2026 |
| [LIM-111](https://easywmsfrance.atlassian.net/browse/LIM-111) | Ticket Jira (étiqueteuse auto, lecture/MAJ CstAtt14 à la sortie TK) | 2026 |
| [LIM-112](https://easywmsfrance.atlassian.net/browse/LIM-112) | Ticket Jira (échantillonnage, CstAtt01/02 ligne d'ordre d'inventaire) | 2026 |
| [LIM-114](https://easywmsfrance.atlassian.net/browse/LIM-114) | Ticket Jira (rejet PIE, CstAtt06 = poste d'origine) | 2026 |
| [LIM-115](https://easywmsfrance.atlassian.net/browse/LIM-115) | Ticket Jira (transmission filmage, CstAtt05 → Galileo) | 2026 |
| recap_session_LIM-72_13-05-2026.md | Récap session | 2026-05-13 |
+6 -5
View File
@@ -2,10 +2,11 @@
title: "Contacts projet Limagrain"
tags: [admin, contacts, équipe, annuaire]
status: draft
standard_ref: null
jira_refs: []
confluence_refs: []
sources: ["Liste de contacts.md"]
last_updated: 2026-05-06
last_updated: 2026-07-20
author: Arthur
---
@@ -24,7 +25,7 @@ author: Arthur
| Jean-Baptiste ROUVET | jean-baptiste.rouvet@limagrain.com | CDP OT |
| Thierry CHANNEBOUX | thierry.channeboux@limagrain.com | CPG |
| Nicolas SANCHEZ | nicolas.sanchez@limagrain.com | Expert IT |
| Alexandre COUTURIER | alexandre.couturier@limagrain.com | |
| Alexandre COUTURIER | alexandre.couturier@limagrain.com | - |
| Leila CHAJJAOUI | leila.chajjaoui@limagrain.com | Experte IT (équipe Nicolas SANCHEZ) |
| Maxime TOURRETTE | maxime.tourrette@limagrain.com | Développeur IT Expert |
| Anne-Marie LARIVAILLE | anne-marie.larivaille@limagrain.com | Experte processus métier logistique |
@@ -35,7 +36,7 @@ author: Arthur
| Nom | Mail | Poste |
|-----|------|-------|
| Brice FOLIO | ext-brice.folio@limagrain.com | |
| Brice FOLIO | ext-brice.folio@limagrain.com | - |
| Cyril MALLET | ext-cyril.mallet@limagrain.com | Responsable Infra (gestion VM) |
## Delaware (Middleware SAP)
@@ -49,7 +50,7 @@ author: Arthur
| Nom | Mail | Poste |
|-----|------|-------|
| Yann RODRIGUES | Yann.RODRIGUES@still.fr | Ingénieur commercial |
| | broumegoux@ceres-solutions.com | Responsable chantier (Bâtiment) |
| - | broumegoux@ceres-solutions.com | Responsable chantier (Bâtiment) |
| Vincent DOITEAU | vincent.doiteau@kiongroup.com | Expert technique AGV |
## Mecalux
@@ -59,7 +60,7 @@ author: Arthur
| Justine BEUTIN | DP WMS |
| Mallaury MELGAR | CPG |
| Théo LE PAIH | CPG |
| Abdallah BOUALLAG | |
| Abdallah BOUALLAG | - |
| Hedi ABDELKRIM | Resp. Automatisme |
| Robert Bryan BRAVO BALSECA | Technique ROB Espagne |
| Gilles MAILLET | Dir. ROB |
@@ -0,0 +1,135 @@
---
title: "Paramètres projet - Séquences, toggles, jobs et paramètres WMS"
tags: [admin, paramètres, séquences, jobs, toggles, transactions]
status: draft
standard_ref: architecture/application-dictionary.md
jira_refs: [LIM-14, LIM-64, LIM-67, LIM-69, LIM-70, LIM-71, LIM-73, LIM-74, LIM-76, LIM-93, LIM-102, LIM-105, LIM-107, LIM-108, LIM-110, LIM-114, LIM-115]
confluence_refs: []
sources: ["Jira LIM-14 (lecture directe 2026-07-17)", "Jira LIM-102 (lecture directe 2026-07-20)", "Jira LIM-114 (lecture directe 2026-07-20)", "Jira LIM-115 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Paramètres projet - Séquences, toggles, jobs et paramètres WMS
> **Résumé** : référentiel des séquences, toggles, transactions customs,
> paramètres (standards et customs) et jobs périodiques du projet
> Limagrain. Source maître =
> [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14).
> **Standard EasyWMS** : → voir
> [Application Dictionary](../../architecture/application-dictionary.md) et
> [Parameters](../../concepts/parameters.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> **Custom Attributes** : voir [AD Customs](ad-customs.md).
## Séquences
| Code | Préfixe | Cache | Min | Max | Tâche | Info |
|------|---------|-------|-----|-----|-------|------|
| 800000 | 800 | 200 | 1 | 999 999 999 999 999 | LIM-64 | Supports virtuels images de quai |
| Pile | PAL | 200 | 1 | 999 999 999 999 999 | LIM-64 | Supports pile de palettes |
## Toggles
| Nom du toggle | État |
|---------------|------|
| `AllowExceedMaxNumContainersInBufferLocation` | Désactivé |
| `CST_LogWebServiceCommunication` | Non précisé |
| `CST_SimulatePIEScale` | [SIMULATION] Actif en pré-production (LIM-108) - repli sur le poids théorique quand l'event PIE ne porte pas de poids. Voir [Contrôle qualité réception](../01-inbound/controle-qualite-reception.md#simulation-poids-théorique-en-labsence-de-poids-galileo-lim-108) |
## Paramètres standards
| Paramètre | Description | Valeur |
|-----------|-------------|--------|
| `IsSingleReceipt` | Une seule réception par OE (pas de reliquat WMS) | `true` |
| `AutoCloseReception` | Clôture automatique de la réception | `true` |
> **Note** : valeur `true` confirmée par Arthur (2026-07-17). Le tableau
> LIM-14 affiche encore `false` - **à corriger côté ticket**. La clôture
> effective reste conditionnée par le custom `Reception_Close_PR_V2`. Voir
> [Réception fournisseur - Clôture](../01-inbound/reception-fournisseur.md).
## Transactions customs
| Code | Description | Post-traitement |
|------|-------------|-----------------|
| `CON.CREATE.RECEP` | Conteneur créé par le process de réception (LIM-96). `Document1` = type de réception (KPI par type, LIM-102 - voir [Gestion des camions](../01-inbound/gestion-camions.md#kpi---conteneurs-par-type-de-réception-lim-102)) | Non |
| `LOC.SEND` | Message LOC envoyé toutes les 5 minutes | Oui |
## Paramètres customs
| Code | Info | Valeur par défaut | Tâche |
|------|------|-------------------|-------|
| `FILMAGES` | Programmes de filmage | - | LIM-67 |
| `MODES_PK01``MODES_PK06` | Modes de travail actifs du PK avec séquence (ex. `RECEPTION;1\|PICKING;2\|CONSOLIDATION;3`) | - | LIM-69 |
| `PK_ADJACENT` | Paires de postes adjacents | - | LIM-69 |
| `PK_BIGBAG` | Liste des PK compatibles big-bag (séparés par `;`) | - | LIM-70 / LIM-74 |
| ~~`DESTINATION_PRODUCTION`~~ | ~~Code du buffer d'entrée production (destination des tâches AGV)~~ **obsolète** | ~~`ENTREE_PRODUCTION`~~ | LIM-71 |
| `RECEPTION_POSITION_CONTAINER_PK` | Position (X) destination préférée des conteneurs de réception au PK | `2` | - |
| `RECERTIFICATION_POSITION_CONTAINER_PK` | Position (X) destination préférée des conteneurs de recertification au PK | `2` | - |
| `PIE_ENTRY_PK` | N° du PIE pour réinsérer les palettes après passage PK | `2` | LIM-67 |
| `PK_REJET_PROD` | Poste de rejet des palettes **sans poste d'origine** (production) au rejet PIE. À câbler côté EST (ex. `PS01`) - voir [Flux de rejet PIE](../02-stockage/rejet-pie.md) | (à définir) | LIM-114 |
| `PIE_FILMAGE` (nom à confirmer) | Stations sources déclenchant la transmission du programme de filmage à Galileo (rejet du code en dur) - voir [Configuration Galileo](../02-stockage/galileo-config.md#transmission-du-programme-de-filmage-à-la-filmeuse-lim-115) | `PIE_02` | LIM-115 |
| `LOC_ZONE_MAPPING` | Zones de correspondance Easy ↔ SAP pour les TK | `[TK03-04:ASRS34][TK01:ASRS1][TK02:ASRS2][TK03:ASRS3][TK04:ASRS4]` | LIM-76 |
| `EXPEDITION_CLASSE_CLIENT` | Code de la classe d'OS pour le type client | `CLIENT` | LIM-107 |
| `EXPEDITION_CLASSE_PRODUCTION` | Code de la classe d'OS pour le type production | `PRODUCTION` | LIM-107 |
| `SAP_CPI_ENDPOINT_URL` | URL de l'endpoint inbound SAP CPI | (à définir) | LIM-93 |
| `SAP_CPI_TOKEN_URL` | URL du token endpoint OAuth 2.0 SAP CPI | - | LIM-93 |
| `SAP_ATH214_TIMEOUT` | Timeout d'attente de l'ITM après appel ATH214 (s) | `60` | LIM-93 |
| `SAP_ATH214_MAX_RETRIES` | Nombre maximum de tentatives ATH214 | `5` | LIM-93 |
| `SAP_ATH214_REFRESH_INTERVAL` | Intervalle de polling de l'alias en base (ms) | `5000` | LIM-93 |
| `RECEPTION_CONFORM_STOCK_STATUS` | Nom du statut de stock fictif « Stock conforme » (position 0 du dialogue statut, n'applique aucun statut) | - | LIM-93 |
| `SAP_ATH111_TIMEOUT` | Timeout d'attente de l'ASN (process recertification, s) | `60` | LIM-105 |
| `SAP_ATH111_MAX_RETRIES` | Nombre maximum de tentatives d'attente de l'ASN (recertification) | `5` | LIM-105 |
| `SAP_ATH111_REFRESH_INTERVAL` | Intervalle de polling de l'existence de l'ASN (recertification, ms) | `500` | LIM-105 |
| `RECERTIFICATION_CODE_CLASSE` | Code de la classe d'OS recertification (remplace les valeurs hard codées d'identification) | - | LIM-105 |
| `RECERTIFICATION_CODE_QUAI` | Code du quai recertification (`QUAI_RECERTIFICATION`) assigné automatiquement aux OS recertification ; sert aussi de balise `[XXX]` dans le code de la stratégie d'assignation de stock RECERTIFICATION | - | LIM-110 |
## Jobs
| Code | Workflow | Description | Fréquence | Tâche |
|------|----------|-------------|-----------|-------|
| `CST_PickingStationAssignmentJob` | `CST_PickingStationAssignment_Job` | Assignation des ordres par priorité de process aux PK | 5 s | LIM-70 |
| `CST_StoreProductionContainer` | `CST_StoreProductionContainer_Job` | Génère les tâches de rangement des conteneurs sur images de quai | 30 s | LIM-71 |
| `CST_SendLOCTransaction` | `CST_SendLOC` | Envoie la transaction `SEND.LOC` | 5 min | LIM-76 |
| `CST_AssignDockStage` | `CST_Job_AssignStage` | Assigne les images de quai (stages `X_EXP`) aux OS et tournées éligibles | 30 s | LIM-94 |
| `CST_Reception_RegenerateTask_Job` | `CST_Reception_RegenerateTask_Job` | Régénère les tâches vers les PK pour les palettes de réception sur stages sans tâches | 15 s | LIM-71 |
## Points d'attention
⚠️ Le référentiel maître est [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14).
Tout nouveau paramètre / job / séquence doit y être déclaré.
⚠️ `PK_BIGBAG` apparaît deux fois dans LIM-14 (rattaché à LIM-70 puis
LIM-74) - même paramètre, à dédoublonner côté ticket.
⚠️ `DESTINATION_PRODUCTION` est **obsolète** (LIM-71 : destination via
stratégies de rangement).
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-07-17 | Arthur | Création depuis LIM-14 (lecture directe) : séquences, toggles, paramètres standards + customs, transactions customs, jobs |
| 2026-07-20 | Arthur | Enrichissement transaction `CON.CREATE.RECEP` : `Document1` = type de réception (KPI par type, LIM-102) + cross-ref gestion-camions ; jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | Ajout paramètre `RECERTIFICATION_CODE_CLASSE` (LIM-105, remplace les valeurs hard codées d'identification des OS recertification) |
| 2026-07-20 | Arthur | Usage confirmé des params `EXPEDITION_CLASSE_CLIENT`/`EXPEDITION_CLASSE_PRODUCTION` (LIM-107, routage du type d'étiquette d'expédition) ; ajout Références LIM-107 |
| 2026-07-20 | Arthur | Ajout toggle `CST_SimulatePIEScale` (LIM-108, mode simulation poids PIE) + cross-ref contrôle qualité réception ; Références LIM-108 |
| 2026-07-20 | Arthur | Ajout paramètre `RECERTIFICATION_CODE_QUAI` (LIM-110, code quai recertif auto + balise stratégie assignation stock) ; jira_refs +LIM-110, Références |
| 2026-07-20 | Arthur | Ajout paramètre `PK_REJET_PROD` (LIM-114, poste de rejet des palettes production sans poste d'origine au rejet PIE) + cross-ref rejet-pie ; jira_refs +LIM-114, Références |
| 2026-07-20 | Arthur | Ajout paramètre `PIE_FILMAGE` (nom à confirmer, LIM-115, stations sources déclenchant la transmission du programme de filmage à Galileo) + cross-ref galileo-config ; jira_refs +LIM-115, Références |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-14](https://easywmsfrance.atlassian.net/browse/LIM-14) | Ticket Jira (référentiel séquences/jobs/paramètres) | 2026 |
| [LIM-102](https://easywmsfrance.atlassian.net/browse/LIM-102) | Ticket Jira (KPI conteneurs par type de réception - CON.CREATE.RECEP) | 2026 |
| [LIM-105](https://easywmsfrance.atlassian.net/browse/LIM-105) | Ticket Jira (workstation recertification - SAP_ATH111_*, RECERTIFICATION_CODE_CLASSE) | 2026 |
| [LIM-107](https://easywmsfrance.atlassian.net/browse/LIM-107) | Ticket Jira (étiquettes expédition - EXPEDITION_CLASSE_CLIENT/PRODUCTION) | 2026 |
| [LIM-108](https://easywmsfrance.atlassian.net/browse/LIM-108) | Ticket Jira (simulation poids PIE - toggle CST_SimulatePIEScale) | 2026 |
| [LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) | Ticket Jira (quai recertification auto - RECERTIFICATION_CODE_QUAI) | 2026 |
| [LIM-114](https://easywmsfrance.atlassian.net/browse/LIM-114) | Ticket Jira (rejet PIE - PK_REJET_PROD) | 2026 |
| [LIM-115](https://easywmsfrance.atlassian.net/browse/LIM-115) | Ticket Jira (transmission filmage - stations PIE déclenchantes) | 2026 |
Binary file not shown.
+3 -6
View File
@@ -1,21 +1,18 @@
---
title: "Transverse Vue d'ensemble"
title: "Transverse - Vue d'ensemble"
tags: [transverse, jira, architecture, index]
status: draft
last_updated: 2026-05-05
last_updated: 2026-07-20
---
# Transverse Vue d'ensemble
# Transverse - Vue d'ensemble
> **Périmètre** : tickets Jira clés, décisions d'architecture, questions ouvertes,
> historique du projet.
## Pages de cette section
- [Tickets Jira clés](jira-tickets-cles.md)
- [Décisions architecture](decisions-architecture.md)
- [Questions ouvertes](questions-ouvertes.md)
- [Historique projet](historique-projet.md)
## Vue synthétique
+291 -134
View File
@@ -1,44 +1,66 @@
---
title: "Questions ouvertes Suivi projet"
title: "Questions ouvertes - Suivi projet"
tags: [transverse, questions, suivi, à-confirmer]
status: draft
standard_ref: null
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", LIM-62_gestion-camions.md, LIM-63_64_65.md, "LIM-69 - LOT1.3 Modes de travail des PK.md", "LIM-70 LOT1.3 [AGV][JOB] MEGA JOB.md", "LIM-71 LOT1.2 RECEPTION PRODUCTION AGV.md", "LIM-72 LOT1.3 [RETOUR] Flux complet PK.md", "LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md", "LIM-76 LOT1.2 [GNA] Message LOC.md", "LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md", "LIM-85 LOT2.1 Configuration stratégies defragmentation.md", "LIM-87 LOT2.1 Défragmentation client quai non assigné.md", "LIM-88 LOT2.1 Séquençage shipping par STOP.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md", "CR technique - iGO STILL - fonctionnement et flux API v1.md", "recap_session_LIM-72_13-05-2026.md", "reu_still_sur_site.pdf"]
last_updated: 2026-05-13
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", LIM-62_gestion-camions.md, LIM-63_64_65.md, "LIM-69 - LOT1.3 Modes de travail des PK.md", "LIM-70 LOT1.3 [AGV][JOB] MEGA JOB.md", "LIM-71 LOT1.2 RECEPTION PRODUCTION AGV.md", "LIM-72 LOT1.3 [RETOUR] Flux complet PK.md", "LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md", "LIM-76 LOT1.2 [GNA] Message LOC.md", "LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md", "LIM-85 LOT2.1 Configuration stratégies defragmentation.md", "LIM-87 LOT2.1 Défragmentation client quai non assigné.md", "LIM-88 LOT2.1 Séquençage shipping par STOP.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md", "CR technique - iGO STILL - fonctionnement et flux API v1.md", "recap_session_LIM-72_13-05-2026.md", "reu_still_sur_site.pdf", "Jira LIM-97 (lecture directe)", "Jira LIM-111 (lecture directe)", "Jira LIM-112 (lecture directe)", "Jira LIM-113 (lecture directe)", "Jira LIM-114 (lecture directe)"]
last_updated: 2026-07-20
author: Arthur
---
# Questions ouvertes Suivi projet
# Questions ouvertes - Suivi projet
> **Résumé** : centralisation de toutes les questions ouvertes identifiées
> lors de l'intégration de l'AF V1.5 dans le wiki projet.
## Réception / Inbound
- [ ] Processus de blocage long terme entrée quai quand est-il utilisé
- Processus de blocage long terme entrée quai - quand est-il utilisé
concrètement ? (@Théo)
- [ ] Notifications agent de quai à l'arrivée du camion supprimées dans
- Notifications agent de quai à l'arrivée du camion - supprimées dans
AF V1.5, à confirmer exclusion définitive (@Justine)
- [ ] Assignation borne / quai supprimée dans AF V1.5, à confirmer (@Justine)
- [ ] Gestion TRF si AGV pas prêts au démarrage (@Théo)
- [ ] Position étiquette image de quai (devant/côté palette) à
- Assignation borne / quai - supprimée dans AF V1.5, à confirmer (@Justine)
- Gestion TRF si AGV pas prêts au démarrage (@Théo)
- Position étiquette image de quai (devant/côté palette) - à
valider avec le client (@Justine)
- [ ] Utilisation du ROC (confirmation de réception) point interne
- Utilisation du ROC (confirmation de réception) - point interne
Limagrain (@Justine)
- [ ] Création fournisseurs/clients à la volée dans EasyWMS
- Création fournisseurs/clients à la volée dans EasyWMS -
faisabilité technique (@Nicolas)
- [ ] Vérifier fonctionnement ExceedPercentageAllowed vs profil de
- Vérifier fonctionnement ExceedPercentageAllowed vs profil de
réception (@Nicolas)
- [ ] Choix fournisseur imprimantes RFID exiger compatibilité
- Choix fournisseur imprimantes RFID - exiger compatibilité
ZPL (@Théo)
- [ ] Surplus non réceptionné hors tolérance — quelle solution pour
- Évolution encodage RFID (LIM-68) - validation client du passage à un
encodage **7 bits en banque EPC** (attente réponse au mail d'Arthur) ;
bloque le dev.
→ voir [Étiquette support RFID](../01-inbound/etiquette-rfid.md)
- Évolution encodage RFID (LIM-68) - réception de la **spec de packing
Bartender** (Eliatys), prérequis avant tout codage.
- Évolution encodage RFID (LIM-68) - seuil exact de longueur hexa pour
discriminer les puces legacy des nouvelles (échantillons legacy - action
JBR/SVA).
- Évolution encodage RFID (LIM-68) - tests physiques écriture/lecture sur
ZT421 + impact du perma-lock.
- ❓ Surplus non réceptionné hors tolérance - quelle solution pour
palettes impossibles à réceptionner ? (@Justine)
- [ ] Faut-il rendre la saisie du camion (plaque) obligatoire pour garantir
- Faut-il rendre la saisie du camion (plaque) obligatoire pour garantir
la cohérence de l'affichage chauffeur ? Actuellement non obligatoire
(LIM-62, 09/03/2026). (@Justine)
(LIM-62 / LIM-97 §8.5, 09/03/2026, à reconfirmer avec le CDP). (@Justine)
→ voir [Gestion des camions](../01-inbound/gestion-camions.md)
- [ ] Poids variable — vérifier si le standard gère la capture de
- Routage faux stage → emplacement du vrai stage → quai d'expédition
(LIM-97 §8.1, gestion camions V2) : custom sur la fin d'ordre au PS pour
rediriger la destination, différenciation par `locationType` ; risque de
rollback en boucle, cadencement AGV à reconfirmer (@Vincent / @Still)
→ voir [Gestion des camions](../01-inbound/gestion-camions.md)
- Débordement au-delà de 26 palettes sur l'image de quai (27e palette,
LIM-97 §8.2) : ne tient pas dans un camion, solution à arbitrer - ne pas
générer la tâche tant qu'aucune place ne se libère, ou maintien en tampon
ASRS (@Justine)
→ voir [Gestion des camions](../01-inbound/gestion-camions.md)
- ❓ Poids variable - vérifier si le standard gère la capture de
poids avec poids moyen activé (@Nicolas)
- [x] ~~Détail des cas d'erreur API SAP flux retour client~~ → Documenté
via LIM-72 : payload requête/réponse, séquence d'échange, timeout/retry
@@ -49,110 +71,192 @@ author: Arthur
- [x] ~~Gestion du token SAP~~ → OAuth 2.0 client_credentials, cache
token sur disque, gestion expiration côté WMS
→ voir [Intégration GNA → SAP-CPI](../06-erp-interface/gna-sap-cpi.md)
- [ ] **[A1 BLOQUANT]** Champs manquants dans ET_BATCH (réponse ATH214) :
description article, pays de destination, propriétaire Limagrain — sans
ces champs, le dialogue de choix multi-lot ne fonctionne pas
(@Vincent Goyet / @Pierre Gaudy — mail 13/05/2026)
- [x] ~~**[A1 BLOQUANT]** Champs manquants dans ET_BATCH (réponse ATH214) :
description article, pays de destination, propriétaire Limagrain~~ →
Résolu (LIM-93 V2) : `DESCRIPTION`, `DESTINATION`, `OWNER` ajoutés, plus
`VAR_DESC` (variété) et `COM_TRT_DESC` (traitement commercial, ajout
Justine 08/07)
→ voir [Réception retour](../01-inbound/reception-retour.md)
- [ ] **[A2]** Nom final du champ de déploiement : `EV_DEPLOY` ou
`ZDEPLOY` ? Ambigu dans les échanges (@Vincent Goyet — mail 13/05/2026)
- [x] ~~**[A2]** Nom final du champ de déploiement : `EV_DEPLOY` ou
`ZDEPLOY` ?~~ → Résolu (LIM-93 V2) : `ZDEPLOY`
→ voir [Réception retour](../01-inbound/reception-retour.md)
- [ ] **[A3]** Délai typique entre réponse ATH214 et push ITM via ATH002 :
dimensionnement du polling 5s / timeout 1 min
(@Vincent Goyet — mail 13/05/2026)
- [ ] **[A4 IMPORTANT]** Vérification "déployé" pour les lots déjà connus
en base WMS (pas d'appel ATH214) : info disponible dans l'ITM ou appel
systématique nécessaire ? Trou fonctionnel dans le design actuel
(@Vincent Goyet — mail 13/05/2026)
- [x] ~~**[A3]** Délai typique entre réponse ATH214 et push ITM via ATH002 :
dimensionnement du polling 5s / timeout 1 min~~ → Résolu (LIM-93 V2) :
polling `SAP_ATH214_REFRESH_INTERVAL` 5000 ms, `SAP_ATH214_TIMEOUT` 60 s,
`SAP_ATH214_MAX_RETRIES` 5
- [x] ~~**[A4 IMPORTANT]** Vérification "déployé" pour les lots déjà connus
en base WMS (pas d'appel ATH214) : trou fonctionnel~~ → Résolu (LIM-93
V2) : appel ATH214 **systématique** à chaque scan de lot officiel
→ voir [Réception retour](../01-inbound/reception-retour.md)
- [ ] **[B1]** Étiquette stock retour client : en complément de la RFID ?
Quels champs ? Format A6 ? Imprimante dédiée ?
(@Leila / @Antoine — mail 13/05/2026)
- [ ] **[B2 IMPORTANT]** Flux de rejet PIE retour client : destination
exacte, notifications, actions opérateur, notification SAP,
suppression palette (@Leila / @Antoine — mail 13/05/2026)
→ voir [Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)
- [ ] **[PS — reporté]** Association palette ↔ OE dès l'image de quai
via CstAtt12 Container — faisable techniquement (modification LIM-64),
impact planning à évaluer, reporté après réponses A1-B2
→ voir [AD Customs](../07-admin/ad-customs.md)
- [ ] Retour client — palette refusée au PIE non supprimée : comment
- [x] ~~**[B1]** Étiquette stock retour client : en complément de la RFID ?
Quels champs ? Format A6 ? Imprimante dédiée ?~~ → Résolu (LIM-93 V2) :
pas de rapport séparé, **RFID LIM-68 enrichie** (code produit + lots SAP
+ lot officiel), format **A5 Zebra**, imprimante dédiée PK (impact
LIM-68)
- ❓ **[B2 IMPORTANT]** Flux de rejet PIE retour client : le client veut
un **renvoi au PK pour recomptage immédiat** (approche poumon abandonnée,
LIM-93 V2). Points ouverts : routage AGV PIE → PK, relance du workflow de
déclaration sur la même palette, levée du verrou ECART RETOUR (auto ou
manuelle), impact sur la clôture (@Leila / @Antoine)
→ voir [Réception retour](../01-inbound/reception-retour.md)
- **MAJ (LIM-114)** : le **flux général** de rejet PIE → poste d'origine
est désormais défini (le WMS répond la destination) dans
[Flux de rejet PIE](../02-stockage/rejet-pie.md). Restent ouverts les points
**spécifiques retour client** : relance du workflow de déclaration sur la
même palette, levée du verrou ECART RETOUR (auto/manuelle), impact clôture
- Rejet PIE (LIM-114) - transmission de la **cause de rejet** (type d'erreur
PIE) d'EasyS/Galileo vers le WMS : conditionne l'affichage de la cause au
poste (à défaut, « REJET PIE » générique) (@Mecalux)
→ voir [Flux de rejet PIE](../02-stockage/rejet-pie.md)
- Rejet PIE (LIM-114) - poste physique `PK_REJET_PROD` côté EST (ex. `PS01`)
et sa joignabilité si `PE01` fermé (bascule OUEST) : à valider layout
- Rejet PIE (LIM-114) - comportement si **aucun poste disponible** (attente
sur le PS vs autre) : à confirmer
- Rejet PIE (LIM-114) - disponibilité de l'imprimante d'étiquette au poste
d'origine (cause étiquette) : à valider
- [x] ~~**[PS]** Association palette ↔ OE **dès l'image de quai** -
faisable techniquement (modification LIM-64), le code OE (`CstAtt13`)
était posé au PK ; à poser plus tôt (image de quai)~~ → Résolu
(LIM-96 V2) : écran « déclaration des ordres d'entrée » à la déclaration
image de quai, qui rattache chaque emplacement occupé à son OE et pose
`CstAtt13` sur le support
→ voir [Gestion des camions](../01-inbound/gestion-camions.md)
- Réception (LIM-96 / LIM-71) - `CstAtt12` : LIM-96 V2 pose `CstAtt12 =
true` pour toutes les palettes à l'écran de collage des étiquettes et
conditionne la prise AGV du job LIM-71 à ce flag, alors que la page
LIM-71 indiquait que la condition `CstAtt12` avait été **retirée** du
job. Confirmer la logique effective côté job (@Vincent / @Maxime)
→ voir [Job réception production](../05-agv/job-reception-production.md)
- ❓ Retour client - palette refusée au PIE non supprimée : comment
gérer si le client oublie de la retirer du WMS ? Clôture REF bloquée
indéfiniment (LIM-73 §1.3.1) (@Justine)
- [ ] WF de clôture OE à modifier pour bloquer l'auto-close quand
CstAtt01 OE = true ticket dédié à créer ? (LIM-73 §1.3.2)
(@Nicolas)
- [x] ~~WF de clôture OE à modifier pour bloquer l'auto-close quand
CstAtt01 OE = true - ticket dédié à créer ? (LIM-73 §1.3.2)
(@Nicolas)~~ → **Résolu** (revue de code LIM-73 validée 2026-06-02) :
WF existant `InboundOrder_AutoCloseInboundOrder_PR_V2` adapté, pas de
ticket dédié
→ voir [Réception fournisseur](../01-inbound/reception-fournisseur.md#custom-éléments-techniques-revue-de-code-validée-2026-06-02)
- [x] ~~LOC custom (LIM-76) : développement hors scope LIM-73~~
Spécifié dans LIM-76 : filtre d'exclusion REF non envoyé documenté
→ voir [LOC message périodique](../06-erp-interface/loc-message-periodique.md)
- [x] ~~Discordance `AutoCloseReception` : `true` dans l'analyse LIM-73,
`false` dans le référentiel LIM-14~~ → **Résolu** (Arthur, 2026-07-17) :
`AutoCloseReception = true`. Le tableau LIM-14 affiche `false`, à
corriger côté ticket
→ voir [Paramètres projet](../07-admin/parametres-projet.md)
## Stockage / ASRS
- [ ] Défragmentation custom (LIM-87) **rupture de stock** sur un OS
- Défragmentation custom (LIM-87) - **rupture de stock** sur un OS
de la tournée (CT-13) : option A (RUT non éligible, attente nouveau
SOR) ou option B (défrag sur palettes disponibles) ?
(@Justine vérifier avec le client)
(@Justine - vérifier avec le client). Implémentation actuelle :
commande incomplète → pas de défrag (proche option A)
→ voir [Défragmentation](../02-stockage/defragmentation.md)
- [ ] Défragmentation custom (LIM-87) **MAX_DEFRAG_ATTEMPT** :
- [x] ~~Défragmentation custom (LIM-87) - **MAX_DEFRAG_ATTEMPT** :
impacte-t-il uniquement la défrag par rotation ou aussi la défrag
client ? (@Nicolas)
client ?~~ → Résolu (LIM-87) : uniquement la défrag par rotation, pas
la défrag d'expédition/client
→ voir [Défragmentation](../02-stockage/defragmentation.md)
- [ ] Automatisation des étapes 1 et 2 du processus d'anoxie développement
- Automatisation des étapes 1 et 2 du processus d'anoxie - développement
custom validé ? (@Nicolas)
- [ ] Interface du bouton « Fin d'anoxie » écran dédié ou menu existant ? (@Fabien)
- [ ] Nombre exact de piles de palettes vides en tampon au sol (@Théo)
- Interface du bouton « Fin d'anoxie » - écran dédié ou menu existant ? (@Fabien)
- Nombre exact de piles de palettes vides en tampon au sol (@Théo)
## Picking / Préparation
- [ ] Fréquence d'exécution du Mega Job d'assignation PK à définir
- Fréquence d'exécution du Mega Job d'assignation PK - à définir
(@Michael) → voir [Job assignation PK](../03-picking/job-assignation-pk.md)
- [ ] Sous-WF pour regroupement et échantillonnage : tickets à créer ?
- Sous-WF pour regroupement et échantillonnage : tickets à créer ?
(@Michael) → voir [Job assignation PK](../03-picking/job-assignation-pk.md)
- [ ] Interaction PK_BIGBAG et modes : si P5 est en regroupement,
- Interaction PK_BIGBAG et modes : si P5 est en regroupement,
accepte-t-il les big-bags en réception ? (@Michael)
- Confirmer côté client que SAP gère la priorité des commandes Messagerie
dans le SOR (pas de custom WMS) - le paramètre `PK_TRANSPORTEUR_MESSAGERIE`
envisagé pour LIM-80 a été abandonné (@Arthur → Nicolas/Olivier)
→ voir [Job assignation PK](../03-picking/job-assignation-pk.md)
- Placement PS → PK (LIM-82) : comportement attendu si une palette big-bag
arrive et qu'aucun PK `PK_BIGBAG` autorisé n'est disponible (attente
dédiée, refus, autre file) ? (@Justine)
→ voir [Placement PS → PK](../03-picking/placement-ps-pk.md)
- Placement PS → PK (LIM-82) : confirmer si les mécanismes V1.0
`SEUIL_RECENTRAGE_PF` et `CONTROLE_TRAITEMENT_COMMERCIAL` sont réellement
implémentés (absents des critères validés) et où est écrit le `TaskType`
picking négatif (LIM-75 annulé) (@Arthur)
→ voir [Placement PS → PK](../03-picking/placement-ps-pk.md)
- [x] ~~Lien entre picking AF V1.5 et CR V3.0 picking combinatoire~~
Architecture clarifiée : specs V1.0/V1.1 + arbitrage réu. 11/05/2026
→ voir [Séquençage TK → PS](../03-picking/sequencage-tk-ps.md) et
[Placement PS → PK](../03-picking/placement-ps-pk.md)
- [x] ~~Programme de filmage exact~~ → 8 programmes documentés (A→H : Tournesol/Maïs&Blé × Sacs/BigBag × Complet/Réduit)
- [ ] Gestion du picking négatif dans l'interface opérateur (@Nicolas)
- [ ] Interface opérateur vue regroupement maquette validée ? (@Fabien)
- [ ] Format de l'étiquette d'échantillonnage validé ? (@Justine)
- [ ] Le prélèvement de 200g en échantillonnage est-il déduit du stock
- Gestion du picking négatif dans l'interface opérateur (@Nicolas)
- Interface opérateur vue regroupement - maquette validée ? (@Fabien)
- Format de l'étiquette d'échantillonnage - validé ? (@Justine)
- Le prélèvement de 200g en échantillonnage est-il déduit du stock
ou négligé ? (@Nicolas)
- [ ] Séquençage TK→PS (LIM-84) : comportement si erreur du process
- Séquençage TK→PS (LIM-84) : comportement si erreur du process -
OS reste bloqué avec CstAtt = false ? (@Nicolas)
→ voir [Séquençage TK → PS](../03-picking/sequencage-tk-ps.md)
- [ ] Séquençage TK→PS (LIM-84) : impact perf si beaucoup d'OS Released
simultanément contention sur les événements ? (@Fabien)
- Séquençage TK→PS (LIM-84) : impact perf si beaucoup d'OS Released
simultanément - contention sur les événements ? (@Fabien)
→ voir [Séquençage TK → PS](../03-picking/sequencage-tk-ps.md)
- Process picking PK (LIM-91) : choix du poumon messagerie (poumons
compatibles transporteur vs tous, ou retour ASRS flux classique) (@Justine)
→ voir [Process picking au PK](../03-picking/process-picking-pk.md)
- Process picking PK (LIM-91) : ergonomie finale de l'écran de recomptage
HORS TOLERANCE (dialog custom `CST_Count_Picking_GetQuantity`) (@Justine)
→ voir [Process picking au PK](../03-picking/process-picking-pk.md)
- Process picking PK (LIM-91) : format des étiquettes intercalaires (HU
fille sans RFID, MII/multi-lots), rapport Zebra à créer (@Arthur)
→ voir [Process picking au PK](../03-picking/process-picking-pk.md)
## Expédition / Outbound
- [ ] Ordonnancement des palettes dans le canal du poumon d'expédition
ASRS géré par le WMS ou naturellement via l'ordre de stockage ? (@Nicolas)
- [ ] Fermeture auto OS si chargement complet standard ou custom ? (@Nicolas)
- [ ] Comportement du reliquat chargement camion avec fichier RUT
- Ordonnancement des palettes dans le canal du poumon d'expédition
ASRS - géré par le WMS ou naturellement via l'ordre de stockage ? (@Nicolas)
- Fermeture auto OS si chargement complet - standard ou custom ? (@Nicolas)
- Comportement du reliquat chargement camion avec fichier RUT -
à paramétrer et tester (@Fabien)
- [ ] Positions des 2 étiquettes articulées sur la palette (@Théo)
- [ ] Custom Galileo : communication HS imprimante → mise en défaut ET
à documenter dans le TMS (@Théo)
- [ ] Combien de commandes messagerie carton en parallèle sur un poste ? (@Justine)
- [ ] Emplacement au sol buffer litige localisation exacte (@Théo)
- [ ] Emplacement au sol messagerie carton par transporteur (@Théo)
- [ ] Réunion technique Still pour le problème dépose AGV sur image de
- Positions des 2 étiquettes articulées sur la palette (@Théo)
- Custom Galileo : communication HS imprimante → mise en défaut ET
- à documenter dans le TMS (@Théo)
- Combien de commandes messagerie carton en parallèle sur un poste ? (@Justine)
- Emplacement au sol buffer litige - localisation exacte (@Théo)
- Emplacement au sol messagerie carton par transporteur (@Théo)
- Réunion technique Still pour le problème dépose AGV sur image de
quai (@Théo)
- [ ] Custom fermeture messagerie pour support non client avec supports
- Custom fermeture messagerie pour support non client avec supports
clients (@Nicolas)
- [ ] Clôture manuelle en cas d'expédition partielle workflow opérateur
- Clôture manuelle en cas d'expédition partielle - workflow opérateur
détaillé (@Justine)
- [ ] Séquençage shipping STOP (LIM-88) retour PF vers ASRS (CT-08) :
- Séquençage shipping STOP (LIM-88) - retour PF vers ASRS (CT-08) :
confirmer que le standard crée bien une tâche de rangement quand pas
de route vers l'image de quai. Sinon custom de secours. (@Nicolas)
→ voir [Séquençage shipping par STOP](../04-outbound/sequencage-shipping-stop.md)
- [ ] Séquençage shipping STOP (LIM-88) — bascule de quai en cours de
- Assignation auto image de quai (LIM-94) - condition « l'image de quai
n'a aucune réception assignée » marquée **TBD** dans la description ;
confirmer le périmètre exact du contrôle réception dans
`CST_DockStage_GetAvailableStageToAssign` (@Justine)
→ voir [Assignation automatique de l'image de quai](../04-outbound/assignation-image-quai.md)
- Recertification (LIM-110) - relation entre `RECERTIFICATION_CODE_QUAI`
(décrit comme identifiant aussi les OS recertif + balise `[XXX]` de la
stratégie) et `RECERTIFICATION_CODE_CLASSE` (LIM-105, déjà l'identifiant
de la classe recertif) : même valeur, ou deux paramètres distincts à
clarifier ? (@Vincent)
→ voir [Quai recertification](../04-outbound/shipping-orders.md#quai-recertification)
- Étiqueteuse automatique (LIM-111) - mécanisme de remontée d'une erreur
d'impression par les automates au WMS à définir : nécessaire pour que le
mode dégradé TRF (ré-impression au quai) sache si l'impression a réussi.
On ne reçoit pas l'info « étiquette bien imprimée ». (@Vincent)
→ voir [Flux expédition - Étiqueteuse automatique](../04-outbound/flux-expedition.md#étiqueteuse-automatique)
- Étiqueteuse automatique (LIM-111) - palette à l'arrêt en cas de problème
d'impression : intervention opérateur (laquelle ?) et procédure de
redémarrage de la palette à définir. (@Théo / @Vincent)
- [x] ~~Séquençage shipping STOP (LIM-88) - bascule de quai en cours de
tournée (CT-13) : définir le comportement attendu pour les palettes
déjà à l'ancien quai. (@Justine)
déjà à l'ancien quai.~~ → **Résolu** (note dev, revue de code LIM-88) :
on ne peut pas changer le quai une fois la RUT libérée ; scénario exclu
du custom, rebascule = opération manuelle exceptionnelle
→ voir [Séquençage shipping par STOP](../04-outbound/sequencage-shipping-stop.md)
- [x] ~~Processus exact de remplacement sac endommagé~~ → Flux litige
documenté : bouton Problème + verrou support + buffer litige
@@ -161,118 +265,149 @@ author: Arthur
## ERP / Interfaces
- [ ] Détail champ par champ de chaque message document « Liste Interfaces
- Détail champ par champ de chaque message - document « Liste Interfaces
LIMAGRAIN » à intégrer (@Arthur)
- [ ] Format exact du message CHG (@Nicolas)
- [ ] CHG envoie-t-il un acquittement positif ou juste ERR en cas
d'échec ? (@Nicolas)
- [ ] Liste exhaustive des statuts de stock prévus au démarrage (@Justine)
- [ ] Liste des commentaires par statut de stock — validée ? (@Justine)
- [ ] CstAtt10 (Stage) — quand sera-t-il ajouté au mapping ITM ? (@Nicolas)
- [ ] Création stock via attributs logistiques en réception — standard ou
- [x] ~~Format exact du message CHG (@Nicolas)~~**Résolu** (LIM-113) :
`StartWorkflowCommand` / WF custom `CST_CHG_WF`, 9 champs JSON (identité
complète HU), statut de stock exclu → voir
[Mapping ERP-WMS](../06-erp-interface/mapping-erp-wms.md#message-chg---changement-article--propriétaire-lim-113)
- [x] ~~CHG envoie-t-il un acquittement positif ou juste ERR en cas
d'échec ? (@Nicolas)~~ → **Résolu** (LIM-113) : **200** en succès, **500**
(throw exception) en refus/erreur ; pas d'acquittement négatif propre, le
500 porte le motif
- Flux CHG (LIM-113) - identification de la ligne de stock concernée dans la
HU (plusieurs lignes possibles) : critère de comparaison des attributs reçus
à préciser (@Vincent)
- Flux CHG (LIM-113) - traitement **synchrone ou asynchrone / arrière-plan**
des appels pour tenir la volumétrie des clôtures (~1000 lignes) sans bloquer
les flux 24/7 (@Nicolas / Mecalux)
- Flux CHG (LIM-113) - liste **exhaustive** des tables/entités où une HU ou
une ligne de stock peut être référencée/verrouillée (au-delà de la liste
indicative ADB-117) : action développeur
- [x] ~~Liste exhaustive des statuts de stock prévus au démarrage~~
**Résolu** (LIM-90) : 8 statuts retour créés en master data (F9 + 7
motifs B6), F2 = absence de statut. Hors retour, seul le B6 (via LOC).
→ voir [Réception retour](../01-inbound/reception-retour.md#statuts-de-stock-retour-et-remontée-ref-lim-90)
- [x] ~~Liste des commentaires par statut de stock - validée ?~~
**Résolu** (LIM-90) : chaque statut porte son libellé/motif (ZINCO
0002-0008 pour les 7 B6). Blocages picking/shipping à confirmer client.
- ❓ CstAtt10 (Stage) - quand sera-t-il ajouté au mapping ITM ? (@Nicolas)
- dépendance **LIM-112** : requis pour l'étiquette d'échantillonnage
(LIM-107), à vérifier en préprod
→ voir [Échantillonnage](../03-picking/echantillonnage.md)
- Échantillonnage (LIM-112) - consignes de l'ordre d'inventaire : le mapping
COR les porte sur `CstAtt02`, mais le commentaire du ticket évoque
`CstAtt01`. À confirmer avec le client (mail à faire, @Arthur)
→ voir [Échantillonnage](../03-picking/echantillonnage.md)
- ❓ 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)
- Impact suppression CstAtt stock sur les développements existants (@Nicolas)
- [x] ~~Gestion STV type "création de stock"~~ → STV désactivé, remplacé
par le LOC (ACTION=C pour corrections, ACTION=T pour transferts)
→ voir [LOC message périodique](../06-erp-interface/loc-message-periodique.md)
- [ ] StopNumber (RUT) : vérifier que SAP envoie un numéro d'arrêt de
- StopNumber (RUT) : vérifier que SAP envoie un numéro d'arrêt de
livraison et pas de chargement (@Limagrain)
- [ ] Numéro de ligne SOF/LOF : confirmer le nombre de caractères du numéro
- Numéro de ligne SOF/LOF : confirmer le nombre de caractères du numéro
de ligne SAP (padLeft "0") (@Limagrain)
- [ ] Confirmer si le COF sera traité côté ERP risque demandes en
- Confirmer si le COF sera traité côté ERP - risque demandes en
double (@Limagrain)
- [ ] Confirmer la règle de mélange des marques sur palette (@Limagrain)
- [ ] Fournir la plage GS1 SSCC (@Limagrain)
- [ ] Planifier un atelier étiquettes avec Antoine (@Limagrain / @Mecalux)
- [ ] Confirmer le stockage des Z-Bags dans l'ASRS (format palettes
- Confirmer la règle de mélange des marques sur palette (@Limagrain)
- Fournir la plage GS1 SSCC (@Limagrain)
- Planifier un atelier étiquettes avec Antoine (@Limagrain / @Mecalux)
- Confirmer le stockage des Z-Bags dans l'ASRS (format palettes
respecté ?) (@Limagrain / @Mecalux)
- [ ] Vérifier capacité de traitement du WSC quotidien
- Vérifier capacité de traitement du WSC quotidien -
volumétrie (@Limagrain)
- [ ] LOC Cas palette sur image de quai puis chargée avant le prochain
- LOC - Cas palette sur image de quai puis chargée avant le prochain
cycle LOC : la HU ne sera pas mentionnée dans le LOC (LIM-76 point #3)
(@Limagrain) → voir [LOC message périodique](../06-erp-interface/loc-message-periodique.md)
- [ ] LOC HU multi-lignes de stock (2 articles/lots) : comportement
- LOC - HU multi-lignes de stock (2 articles/lots) : comportement
exact à confirmer (LIM-76 CT-112) (@Fabien)
→ voir [LOC message périodique](../06-erp-interface/loc-message-periodique.md)
- [ ] LOC Vérifier si d'autres transactions WMS sont utiles
- LOC - Vérifier si d'autres transactions WMS sont utiles
(ex. STK.SCR) (@Fabien)
→ voir [LOC message périodique](../06-erp-interface/loc-message-periodique.md)
- [ ] GNA SAP-CPI File d'attente persistante pour messages en échec
après 4 retries ? (@Nicolas)
- GNA SAP-CPI - File d'attente persistante pour messages en échec
après 5 retries ? (@Nicolas)
→ voir [Intégration GNA → SAP-CPI](../06-erp-interface/gna-sap-cpi.md)
- [ ] GNA SAP-CPI Secret OAuth doit-il être chiffré dans le config ?
(@Fabien)
- [x] ~~GNA SAP-CPI - Secret OAuth doit-il être chiffré dans le config ?~~
**Résolu** (LIM-89, revue de code) : chiffré via `PasswordEncrypt.exe`
→ voir [Intégration GNA → SAP-CPI](../06-erp-interface/gna-sap-cpi.md)
- [ ] Retour fournisseur : ce flux est-il utilisé ? Si oui, SOR simple ou
- Retour fournisseur : ce flux est-il utilisé ? Si oui, SOR simple ou
RUT ? (@Limagrain)
- [ ] Clarifier comportement lot officiel lors changement de
- Clarifier comportement lot officiel lors changement de
destination (@Limagrain)
- [ ] Vérifier le traitement interne du LOF (absence de ligne = non
- Vérifier le traitement interne du LOF (absence de ligne = non
expédié) (@Limagrain)
- [ ] EstimatedNumCont : vérifier disponibilité dans SAP pour chaque
- EstimatedNumCont : vérifier disponibilité dans SAP pour chaque
commande client (ROR) (@Limagrain)
## AGV / Still
- [x] ~~Interface AGV document séparé à intégrer quand disponible~~
- [x] ~~Interface AGV - document séparé à intégrer quand disponible~~
Intégré via CR technique iGO STILL v1 (2026-04-28)
→ voir [Intégration Still iGo](../05-agv/still-igo-integration.md)
- [ ] Impact fonctionnel des interfaces AGV sur les flux (@Théo)
- [ ] Redirection multi-poumons / multi-PIE pour réception production :
- Impact fonctionnel des interfaces AGV sur les flux (@Théo)
- Redirection multi-poumons / multi-PIE pour réception production :
config EasyS prête ? (@Nicolas) → voir
[Job réception production](../05-agv/job-reception-production.md)
- [ ] CstAtt06 encore nécessaire comme marqueur si la vérification par
tâche active suffit ? (@Fabien) → voir
[Job réception production](../05-agv/job-reception-production.md)
- [ ] Fréquence des callbacks `vehicle/event` iGO pour les mises à
jour de position — risque de flood du webhook receiver (@Nicolas)
- [x] ~~CstAtt06 encore nécessaire comme marqueur ?~~**Résolu (LIM-71)** :
marquage abandonné, l'absence de tâche active suffit.
- [x] ~~Conflit d'usage CstAtt06 (support) : LIM-71 marqueur de destination
vs LIM-67 code du poste de picking~~ → **Résolu** : LIM-71 a abandonné son
marquage CstAtt06 (destination via stratégies de rangement) ;
`CstAtt06` = uniquement code du PK lié (LIM-67), confirmé par LIM-70 et le
job de régénération réception→PK (LIM-71).
→ voir [Réception fournisseur](../01-inbound/reception-fournisseur.md)
- ❓ Fréquence des callbacks `vehicle/event` iGO pour les mises à
jour de position - risque de flood du webhook receiver (@Nicolas)
→ voir [Intégration Still iGo](../05-agv/still-igo-integration.md)
- [ ] Taille max et caractères autorisés dans `customMetaData` iGO
- Taille max et caractères autorisés dans `customMetaData` iGO
(@STILL)
→ voir [Intégration Still iGo](../05-agv/still-igo-integration.md)
- [ ] Les `customMetaData` sont-elles ré-émises dans les callbacks
- Les `customMetaData` sont-elles ré-émises dans les callbacks
transport iGO ? (@STILL)
→ voir [Intégration Still iGo](../05-agv/still-igo-integration.md)
- [ ] Création/modification de Location via API iGO actuellement
- Création/modification de Location via API iGO - actuellement
GET only (@STILL)
→ voir [Stations et routes AGV](../05-agv/agv-stations-routes.md)
- [ ] Gestion Pallet Shuttle via iGO (LoadType = 1) hors scope
- Gestion Pallet Shuttle via iGO (LoadType = 1) - hors scope
actuel ? (@Théo)
- [ ] Multi-warehouse iGO : un seul site supposé impact extension
- Multi-warehouse iGO : un seul site supposé - impact extension
future ? (@Michael)
- [ ] Visite terrain 29/05 confirmation par Still de l'espace max
- Visite terrain 29/05 - confirmation par Still de l'espace max
palette/convoyeur ~45 mm (@Théo)
-> voir [Troubleshooting AGV](../05-agv/agv-troubleshooting.md)
- [ ] Visite terrain 29/05 mesure réelle SAS7 lors de l'implantation
- Visite terrain 29/05 - mesure réelle SAS7 lors de l'implantation
(@Abdennaim)
-> voir [Troubleshooting AGV](../05-agv/agv-troubleshooting.md)
- [ ] Visite terrain 29/05 solution Still pour augmenter distance
- Visite terrain 29/05 - solution Still pour augmenter distance
mât/bord palette : quel impact sur les specs AGV ? (@Théo / @Still)
-> voir [Troubleshooting AGV](../05-agv/agv-troubleshooting.md)
## Admin / Transverse
- [ ] Rapports standards exclus de l'AF V1.5, périmètre à définir (@Justine)
- [ ] Vues EasyWMS sauf impact processus fonctionnel, exclus AF V1.5 (@Justine)
- [ ] Layout complet (postes de picking inclus) exclus AF V1.5 (@Théo)
- Rapports standards - exclus de l'AF V1.5, périmètre à définir (@Justine)
- Vues EasyWMS - sauf impact processus fonctionnel, exclus AF V1.5 (@Justine)
- Layout complet (postes de picking inclus) - exclus AF V1.5 (@Théo)
## Points fermés (ateliers expédition DEV)
Les points suivants ont été tranchés lors des ateliers DEV expédition :
- [x] **SOR au numéro de support** → Fermé : jamais au numéro de support
- [x] **FEFO sans DLC** → Fermé : abandonné, FIFO journalier retenu
- [x] **Message MOV** → Fermé : annulé (inutile)
- [x] **Gestion FIFO canal** → Fermé : FIFO 24h standard, économie de
- [x] ~~**SOR au numéro de support**~~ → Fermé : jamais au numéro de support
- [x] ~~**FEFO sans DLC**~~ → Fermé : abandonné, FIFO journalier retenu
- [x] ~~**Message MOV**~~ → Fermé : annulé (inutile)
- [x] ~~**Gestion FIFO canal**~~ → Fermé : FIFO 24h standard, économie de
mouvement prioritaire
- [x] **Custom attributes vs attributs logistiques** → Tranché : attributs
- [x] ~~**Custom attributes vs attributs logistiques**~~ → Tranché : attributs
logistiques avec masquage écrans inutiles
- [x] **Process litige sac endommagé** → Fermé : flux décrit (bouton
- [x] ~~**Process litige sac endommagé**~~ → Fermé : flux décrit (bouton
Problème + verrou support + buffer litige), à confirmer avec client
- [x] **Statut de stock F2 si aucun statut** → Fermé : REDFLAG, pousser
- [x] ~~**Statut de stock F2 si aucun statut**~~ → Fermé : REDFLAG, pousser
pour ne pas faire
- [x] **Anoxie : flux automatique** → Fermé : à prévoir si temps disponible
- [x] **Fréquence image de stock (WSC)** → Fermé : à définir (toutes les
- [x] ~~**Anoxie : flux automatique**~~ → Fermé : à prévoir si temps disponible
- [x] ~~**Fréquence image de stock (WSC)**~~ → Fermé : à définir (toutes les
X heures)
## Éléments exclus de l'AF V1.5
@@ -294,3 +429,25 @@ Pour mémoire, les éléments suivants sont explicitement exclus du périmètre
| 2026-05-12 | Arthur | Ajout questions LIM-66→76, LIM-80→89, picking séquençage, AGV iGO |
| 2026-05-13 | Arthur | Fermeture URL API + token SAP, ajout A1-A4 + B1-B2 + PS (récap LIM-72) |
| 2026-05-13 | Arthur | Ajout 3 questions terrain AGV (visite Still/Mecalux 29/05) |
| 2026-07-16 | Arthur | Ajout conflit d'usage CstAtt06 support (LIM-67 vs LIM-71) |
| 2026-07-17 | Arthur | Ajout 4 questions évolution encodage RFID (LIM-68) ; résolution conflit CstAtt06 + question marqueur (LIM-71 abandon marquage) |
| 2026-07-17 | Arthur | Ajout question priorité Messagerie SAP/SOR (LIM-80, abandon PK_TRANSPORTEUR_MESSAGERIE) |
| 2026-07-17 | Arthur | Ajout questions LIM-82 (big-bag sans PK dispo, mécanismes V1.0 SEUIL_RECENTRAGE_PF/CONTROLE_TRAITEMENT_COMMERCIAL, TaskType picking négatif LIM-75) |
| 2026-07-17 | Arthur | Résolution MAX_DEFRAG_ATTEMPT (LIM-87, uniquement défrag rotation) ; annotation CT-13 (implémentation = pas de défrag si commande incomplète) |
| 2026-07-17 | Arthur | Résolution CT-13 bascule de quai (LIM-88, revue de code) : quai non modifiable après libération RUT |
| 2026-07-17 | Arthur | Résolution secret OAuth chiffré (LIM-89, PasswordEncrypt.exe) ; file d'attente 4→5 retries |
| 2026-07-17 | Arthur | Résolution 2 questions statuts de stock (LIM-90) ; ajout 3 questions ouvertes process picking PK (LIM-91) |
| 2026-07-20 | Arthur | Ajout 2 questions LIM-97 (routage faux stage §8.1, débordement 27e palette §8.2) ; annotation plaque obligatoire (repris LIM-97 §8.5) |
| 2026-07-20 | Arthur | Ajout question LIM-110 (relation `RECERTIFICATION_CODE_QUAI` vs `RECERTIFICATION_CODE_CLASSE`) |
| 2026-07-20 | Arthur | Ajout 2 questions LIM-111 (remontée erreur d'impression étiqueteuse par les automates ; palette à l'arrêt en cas de problème d'impression) |
| 2026-07-20 | Arthur | LIM-112 : annotation dépendance CstAtt10 (Stage) requis pour l'étiquette d'échantillonnage ; ajout question consignes CstAtt01/02 (mail client) |
| 2026-07-20 | Arthur | LIM-113 : résolution 2 questions CHG (format = StartWorkflowCommand/CST_CHG_WF ; acquittement 200/500) ; ajout 3 questions (ID ligne de stock dans la HU, sync/async volumétrie, liste exhaustive tables) |
| 2026-07-20 | Arthur | LIM-114 : annotation B2 (flux général rejet PIE → poste d'origine défini, restent points retour client) ; ajout 4 points ouverts rejet PIE (cause EasyS→WMS, PK_REJET_PROD layout, aucun poste dispo, imprimante poste) |
| 2026-07-20 | Arthur | Lint : conversion des checklists en « - ❓ », questions résolues barrées, ajout section Références |
## Références
> Page de suivi transverse : les sources sont listées de manière exhaustive
> dans le champ `sources` du front matter (26 entrées : AF V1.5, pages
> Confluence, CR de réunions, tickets Jira en lecture directe). Chaque
> question porte en outre sa référence Jira ou son interlocuteur (@personne).
+17 -19
View File
@@ -1,11 +1,11 @@
---
title: "Wiki Limagrain Table des matières"
title: "Wiki Limagrain - Table des matières"
tags: [index, limagrain]
status: draft
last_updated: 2026-05-12
last_updated: 2026-07-20
---
# Wiki Limagrain Table des matières
# Wiki Limagrain - Table des matières
> **Périmètre** : ce wiki documente les spécificités projet Limagrain par rapport
> au standard EasyWMS. Pour les concepts génériques, se référer au
@@ -13,7 +13,7 @@ last_updated: 2026-05-12
## Sections
### 01 Inbound
### 01 - Inbound
- [Vue d'ensemble](01-inbound/_index.md)
- [Gestion des camions](01-inbound/gestion-camions.md)
@@ -23,7 +23,7 @@ last_updated: 2026-05-12
- [Étiquette RFID](01-inbound/etiquette-rfid.md)
- [Flux ERP inbound](01-inbound/flux-erp-inbound.md)
### 02 Stockage
### 02 - Stockage
- [Vue d'ensemble](02-stockage/_index.md)
- [ASRS / Miniload](02-stockage/asrs-miniload.md)
@@ -33,31 +33,33 @@ last_updated: 2026-05-12
- [Défragmentation](02-stockage/defragmentation.md)
- [Processus d'anoxie](02-stockage/processus-anoxie.md)
- [Gestion des palettes vides](02-stockage/palettes-vides.md)
- [Flux de rejet PIE](02-stockage/rejet-pie.md)
### 03 Picking
### 03 - Picking
- [Vue d'ensemble](03-picking/_index.md)
- [Picking combinatoire](03-picking/picking-combinatoire.md)
- [Stations de picking](03-picking/stations-picking.md)
- [Job d'assignation PK (Mega Job)](03-picking/job-assignation-pk.md)
- [Séquençage TK → PS](03-picking/sequencage-tk-ps.md)
- [Séquençage TK → PS Historique](03-picking/sequencage-tk-ps-historique.md)
- [Séquençage TK → PS - Historique](03-picking/sequencage-tk-ps-historique.md)
- [Placement PS → PK (choix de table)](03-picking/placement-ps-pk.md)
- [Waves et groupes](03-picking/waves-groupes.md)
- [Replenishment](03-picking/replenishment.md)
- [Process de picking au poste (PK)](03-picking/process-picking-pk.md)
- [Recertification - Workstation au PK](03-picking/recertification.md)
- [Consolidation / Regroupement](03-picking/consolidation-regroupement.md)
- [Échantillonnage](03-picking/echantillonnage.md)
### 04 Outbound
### 04 - Outbound
- [Vue d'ensemble](04-outbound/_index.md)
- [Flux expédition](04-outbound/flux-expedition.md)
- [Shipping Orders](04-outbound/shipping-orders.md)
- [Séquençage shipping par STOP](04-outbound/sequencage-shipping-stop.md)
- [Assignation automatique de l'image de quai](04-outbound/assignation-image-quai.md)
- [Consolidation et chargement](04-outbound/consolidation-chargement.md)
- [Flux ERP outbound](04-outbound/flux-erp-outbound.md)
### 05 AGV
### 05 - AGV
- [Vue d'ensemble](05-agv/_index.md)
- [Intégration Still iGo](05-agv/still-igo-integration.md)
@@ -66,17 +68,16 @@ last_updated: 2026-05-12
- [Job réception fournisseur/retour → PK](05-agv/job-reception-pk.md)
- [Troubleshooting AGV](05-agv/agv-troubleshooting.md)
### 06 Interface ERP
### 06 - Interface ERP
- [Vue d'ensemble](06-erp-interface/_index.md)
- [Référence messages](06-erp-interface/messages-reference.md)
- [Données principales et stock](06-erp-interface/donnees-principales.md)
- [LOC Message périodique](06-erp-interface/loc-message-periodique.md)
- [LOC - Message périodique](06-erp-interface/loc-message-periodique.md)
- [Intégration GNA → SAP-CPI](06-erp-interface/gna-sap-cpi.md)
- [Mapping ERP-WMS](06-erp-interface/mapping-erp-wms.md)
- [Monitoring interface](06-erp-interface/interface-monitoring.md)
### 07 Administration
### 07 - Administration
- [Vue d'ensemble](07-admin/_index.md)
- [Utilisateurs et groupes](07-admin/utilisateurs-groupes.md)
@@ -84,13 +85,10 @@ last_updated: 2026-05-12
- [AD Customs](07-admin/ad-customs.md)
- [Contacts projet](07-admin/contacts-projet.md)
### 08 Transverse
### 08 - Transverse
- [Vue d'ensemble](08-transverse/_index.md)
- [Tickets Jira clés](08-transverse/jira-tickets-cles.md)
- [Décisions architecture](08-transverse/decisions-architecture.md)
- [Questions ouvertes](08-transverse/questions-ouvertes.md)
- [Historique projet](08-transverse/historique-projet.md)
## Ressources
+432
View File
@@ -0,0 +1,432 @@
---
title: "Rapport de lint - Wiki Limagrain"
tags: [meta, lint]
status: draft
last_updated: 2026-07-20
author: Claude (lint automatique)
---
# Rapport de lint - Wiki Limagrain
> **Fichier méta** : ne pas référencer dans `_index.md` ni dans `README.md`.
> Scan du 2026-07-20 (Phase 1, analyse seule). Périmètre : `limagrain/` (55 fichiers .md,
> dont 45 pages de contenu), registre `_index.md` racine, `limagrain/README.md`,
> `limagrain/glossaire-limagrain.md`, `consume.log`. Wiki standard consulté en lecture seule.
## Récapitulatif
| Catégorie | Bloquant | Mineur | Cosmétique | Total |
|---|---|---|---|---|
| 1. Front matter | 0 | 4 | 0 | 4 |
| 2. Markdown / structure | 1 | 1 | 69 | 71 |
| 3. Conventions projet | 0 | 154 | 51 | 205 |
| 4. Liens et ancres | 14 | 11 | 0 | 25 |
| 5. Registre / index / README / consume.log | 0 | 21 | 0 | 21 |
| 6. Delta / sourcing | 0 | 16 | 1 | 17 |
| 7. Glossaire | 0 | 15 | 0 | 15 |
| **Total** | **15** | **222** | **121** | **358** |
Notes de lecture :
- Les anomalies répétitives (em dash, trailing spaces, lignes vides, checklists) sont agrégées
par fichier avec les numéros de ligne ; le nombre compté reste celui des occurrences agrégées.
- Faux positifs écartés du scan : tableaux utilisant des pipes échappés `\|` (stations-picking,
parametres-projet, glossaire l.109-110) ; sources virtuelles du consume.log (Jira/Confluence
consommées via MCP, sans fichier physique à archiver).
## Anomalies bloquantes (vue d'ensemble)
| Fichier | Ligne | Règle | Extrait | Correction proposée |
|---|---|---|---|---|
| limagrain/03-picking/_index.md | 44 | Bloc de code non fermé en fin de fichier | ````` | Fermer le bloc ``` |
| limagrain/02-stockage/zones-stockage.md | 50 | Lien relatif cassé (cible inexistante) | `[Processus d'anoxie](../08-transverse/decisions-architecture.md)` | Corriger le chemin ou créer la page |
| limagrain/03-picking/_index.md | 20 | Lien relatif cassé (cible inexistante) | `[Waves et groupes](waves-groupes.md)` | Corriger le chemin ou créer la page |
| limagrain/03-picking/_index.md | 21 | Lien relatif cassé (cible inexistante) | `[Replenishment](replenishment.md)` | Corriger le chemin ou créer la page |
| limagrain/06-erp-interface/_index.md | 22 | Lien relatif cassé (cible inexistante) | `[Monitoring interface](interface-monitoring.md)` | Corriger le chemin ou créer la page |
| limagrain/07-admin/ad-customs.md | 20 | Lien relatif cassé (cible inexistante) | `[Application Dictionary](../../concepts/application-dictionary.md)` | Corriger le chemin ou créer la page |
| limagrain/08-transverse/_index.md | 15 | Lien relatif cassé (cible inexistante) | `[Tickets Jira clés](jira-tickets-cles.md)` | Corriger le chemin ou créer la page |
| limagrain/08-transverse/_index.md | 16 | Lien relatif cassé (cible inexistante) | `[Décisions architecture](decisions-architecture.md)` | Corriger le chemin ou créer la page |
| limagrain/08-transverse/_index.md | 18 | Lien relatif cassé (cible inexistante) | `[Historique projet](historique-projet.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 49 | Lien relatif cassé (cible inexistante) | `[Waves et groupes](03-picking/waves-groupes.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 50 | Lien relatif cassé (cible inexistante) | `[Replenishment](03-picking/replenishment.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 81 | Lien relatif cassé (cible inexistante) | `[Monitoring interface](06-erp-interface/interface-monitoring.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 94 | Lien relatif cassé (cible inexistante) | `[Tickets Jira clés](08-transverse/jira-tickets-cles.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 95 | Lien relatif cassé (cible inexistante) | `[Décisions architecture](08-transverse/decisions-architecture.md)` | Corriger le chemin ou créer la page |
| limagrain/README.md | 97 | Lien relatif cassé (cible inexistante) | `[Historique projet](08-transverse/historique-projet.md)` | Corriger le chemin ou créer la page |
## 1. Front matter
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | limagrain/02-stockage/rejet-pie.md | 1 | Champ template Limagrain requis absent | `champ manquant: confluence_refs` | Ajouter `confluence_refs:` |
| mineur | limagrain/05-agv/agv-troubleshooting.md | 13 | title du front matter différent du H1 | `title: "Troubleshooting AGV — Contraintes terrain" vs H1: "Troubleshooting AGV - Contraint` | Aligner title et H1 |
| mineur | limagrain/07-admin/contacts-projet.md | 1 | Champ template Limagrain requis absent | `champ manquant: standard_ref` | Ajouter `standard_ref:` |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 1 | Champ template Limagrain requis absent | `champ manquant: standard_ref` | Ajouter `standard_ref:` |
## 2. Markdown / structure
### 2a. Bloquants
`limagrain/03-picking/_index.md` : le bloc mermaid ouvert l.44 n'est jamais fermé et le
fichier se termine au milieu du diagramme (`FILM --> PIE[Passage PIE]`). Troncature
probable lors d'une écriture précédente : le contenu aval (fin du diagramme, sections
suivantes éventuelles) est à reconstituer, pas seulement à refermer.
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| bloquant | limagrain/03-picking/_index.md | 44 | Bloc de code non fermé en fin de fichier | ````` | Fermer le bloc ``` |
### 2b. Mineurs
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | limagrain/glossaire-limagrain.md | 104 | Pipe non échappé dans une cellule de tableau (casse le rendu) | `\| FILMAGES \| Paramètre WMS contenant la liste des programmes de filmage (`code;libellé\|` | Échapper le pipe : `code;libellé\\|…` |
### 2c. Cosmétiques (agrégés par fichier)
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| cosmétique | limagrain/01-inbound/_index.md | 53 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.53)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/controle-qualite-reception.md | 54 | Max 1 ligne vide consécutive | `3 occurrence(s) de lignes vides multiples (l.54, l.70, l.89)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/controle-qualite-reception.md | 8 | Ligne de 213 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DE` | Reformater / couper la ligne |
| cosmétique | limagrain/01-inbound/etiquette-rfid.md | 132 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.132, l.153)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/flux-erp-inbound.md | 149 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.149, l.171)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/gestion-camions.md | 76 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.76)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/gestion-camions.md | 8 | Ligne de 178 caractères (> 120) | `sources: [LIM-62_gestion-camions.md, LIM-63_64_65.md, "Jira LIM-96 (V2, préprod, revue de ` | Reformater / couper la ligne |
| cosmétique | limagrain/01-inbound/reception-fournisseur.md | 132 | Max 1 ligne vide consécutive | `3 occurrence(s) de lignes vides multiples (l.132, l.258, l.433)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/reception-fournisseur.md | 8 | Ligne de 337 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DE` | Reformater / couper la ligne |
| cosmétique | limagrain/01-inbound/reception-retour.md | 127 | Max 1 ligne vide consécutive | `5 occurrence(s) de lignes vides multiples (l.127, l.166, l.193, l.226, l.286)` | Réduire à une ligne vide |
| cosmétique | limagrain/01-inbound/reception-retour.md | 8 | Ligne de 448 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DE` | Reformater / couper la ligne |
| cosmétique | limagrain/02-stockage/_index.md | 50 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.50)` | Réduire à une ligne vide |
| cosmétique | limagrain/02-stockage/defragmentation.md | 161 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.161)` | Réduire à une ligne vide |
| cosmétique | limagrain/02-stockage/defragmentation.md | 8 | Ligne de 245 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "LIM-85 LOT2.1 Configuratio` | Reformater / couper la ligne |
| cosmétique | limagrain/02-stockage/galileo-config.md | 47 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.47)` | Réduire à une ligne vide |
| cosmétique | limagrain/02-stockage/processus-anoxie.md | 85 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.85)` | Réduire à une ligne vide |
| cosmétique | limagrain/02-stockage/rejet-pie.md | 107 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.107)` | Réduire à une ligne vide |
| cosmétique | limagrain/02-stockage/rejet-pie.md | 8 | Liste non précédée d'une ligne vide | `- limagrain/01-inbound/controle-qualite-reception.md` | Ajouter une ligne vide avant la liste |
| cosmétique | limagrain/02-stockage/rejet-pie.md | 85 | Liste non précédée d'une ligne vide | `1. Lire CstAtt06 (Code du PK assigné = poste d'origine) du support.` | Ajouter une ligne vide avant la liste |
| cosmétique | limagrain/03-picking/consolidation-regroupement.md | 71 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.71, l.118)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/echantillonnage.md | 124 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.124)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/echantillonnage.md | 8 | Ligne de 152 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Jira LIM-107 (lecture dire` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/echantillonnage.md | 216 | Ligne de 133 caractères (> 120) | `- [x] ~~Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)~~ → **Résolu` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/echantillonnage.md | 218 | Ligne de 214 caractères (> 120) | `- [x] ~~Format de l'étiquette d'échantillonnage - validé ? (@Justine)~~ → Résolu (LIM-107)` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/job-assignation-pk.md | 102 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.102)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/job-assignation-pk.md | 8 | Ligne de 218 caractères (> 120) | `sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/picking-combinatoire.md | 96 | Max 1 ligne vide consécutive | `3 occurrence(s) de lignes vides multiples (l.96, l.107, l.236)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/picking-combinatoire.md | 8 | Ligne de 265 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - D` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/placement-ps-pk.md | 58 | Max 1 ligne vide consécutive | `8 occurrence(s) de lignes vides multiples (l.58, l.110, l.155, l.198, l.218, l.233, l.255,` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/placement-ps-pk.md | 8 | Ligne de 194 caractères (> 120) | `sources: ["Logique combinatoire picking - PS vers PK - V1.0.md", "Jira LIM-82 (commentaire` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/recertification.md | 76 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.76)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/recertification.md | 8 | Ligne de 144 caractères (> 120) | `sources: ["Jira LIM-105 (lecture directe 2026-07-20)", "Jira LIM-106 (lecture directe 2026` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/sequencage-tk-ps-historique.md | 8 | Ligne de 160 caractères (> 120) | `sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "REU PICKIN` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/sequencage-tk-ps.md | 86 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.86, l.130)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/sequencage-tk-ps.md | 8 | Ligne de 259 caractères (> 120) | `sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique co` | Reformater / couper la ligne |
| cosmétique | limagrain/03-picking/stations-picking.md | 104 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.104, l.179)` | Réduire à une ligne vide |
| cosmétique | limagrain/03-picking/stations-picking.md | 8 | Ligne de 203 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DE` | Reformater / couper la ligne |
| cosmétique | limagrain/04-outbound/_index.md | 40 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.40)` | Réduire à une ligne vide |
| cosmétique | limagrain/04-outbound/consolidation-chargement.md | 105 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.105)` | Réduire à une ligne vide |
| cosmétique | limagrain/04-outbound/flux-erp-outbound.md | 192 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.192, l.210)` | Réduire à une ligne vide |
| cosmétique | limagrain/04-outbound/flux-erp-outbound.md | 8 | Ligne de 190 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - D` | Reformater / couper la ligne |
| cosmétique | limagrain/04-outbound/flux-expedition.md | 48 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.48)` | Réduire à une ligne vide |
| cosmétique | limagrain/04-outbound/flux-expedition.md | 8 | Ligne de 245 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - D` | Reformater / couper la ligne |
| cosmétique | limagrain/04-outbound/sequencage-shipping-stop.md | 174 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.174)` | Réduire à une ligne vide |
| cosmétique | limagrain/04-outbound/sequencage-shipping-stop.md | 8 | Ligne de 146 caractères (> 120) | `sources: ["LIM-88 LOT2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assi` | Reformater / couper la ligne |
| cosmétique | limagrain/04-outbound/shipping-orders.md | 8 | Ligne de 246 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - D` | Reformater / couper la ligne |
| cosmétique | limagrain/05-agv/_index.md | 55 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.55)` | Réduire à une ligne vide |
| cosmétique | limagrain/05-agv/agv-stations-routes.md | 8 | Ligne de 125 caractères (> 120) | `sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le ` | Reformater / couper la ligne |
| cosmétique | limagrain/05-agv/job-reception-pk.md | 79 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.79)` | Réduire à une ligne vide |
| cosmétique | limagrain/05-agv/job-reception-pk.md | 8 | Ligne de 160 caractères (> 120) | `sources: ["LIM-74 LOT1.3 [AGV][JOB] MINI JOB - images de quai poste de travail (PK).md", "` | Reformater / couper la ligne |
| cosmétique | limagrain/05-agv/job-reception-production.md | 73 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.73)` | Réduire à une ligne vide |
| cosmétique | limagrain/05-agv/still-igo-integration.md | 62 | Max 1 ligne vide consécutive | `5 occurrence(s) de lignes vides multiples (l.62, l.222, l.290, l.309, l.422)` | Réduire à une ligne vide |
| cosmétique | limagrain/05-agv/still-igo-integration.md | 8 | Ligne de 215 caractères (> 120) | `sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le ` | Reformater / couper la ligne |
| cosmétique | limagrain/06-erp-interface/_index.md | 55 | Max 1 ligne vide consécutive | `1 occurrence(s) de lignes vides multiples (l.55)` | Réduire à une ligne vide |
| cosmétique | limagrain/06-erp-interface/donnees-principales.md | 8 | Ligne de 179 caractères (> 120) | `sources: ["Données principales + stock - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES ` | Reformater / couper la ligne |
| cosmétique | limagrain/06-erp-interface/gna-sap-cpi.md | 87 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.87, l.112)` | Réduire à une ligne vide |
| cosmétique | limagrain/06-erp-interface/gna-sap-cpi.md | 9 | Liste non précédée d'une ligne vide | `- "LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md"` | Ajouter une ligne vide avant la liste |
| cosmétique | limagrain/06-erp-interface/loc-message-periodique.md | 70 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.70, l.151)` | Réduire à une ligne vide |
| cosmétique | limagrain/06-erp-interface/loc-message-periodique.md | 9 | Liste non précédée d'une ligne vide | `- "LOC - Etat des lieux V2.md"` | Ajouter une ligne vide avant la liste |
| cosmétique | limagrain/06-erp-interface/mapping-erp-wms.md | 224 | Max 1 ligne vide consécutive | `2 occurrence(s) de lignes vides multiples (l.224, l.237)` | Réduire à une ligne vide |
| cosmétique | limagrain/06-erp-interface/mapping-erp-wms.md | 8 | Ligne de 204 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "CR CONSOLIDES REU ERP LIMA` | Reformater / couper la ligne |
| cosmétique | limagrain/06-erp-interface/mapping-erp-wms.md | 268 | Ligne de 238 caractères (> 120) | `- [x] ~~CHG envoie-t-il un acquittement positif ou juste ERR en cas d'échec ? (@Nicolas)~~` | Reformater / couper la ligne |
| cosmétique | limagrain/06-erp-interface/messages-reference.md | 240 | Max 1 ligne vide consécutive | `7 occurrence(s) de lignes vides multiples (l.240, l.248, l.256, l.268, l.274, l.280, l.287` | Réduire à une ligne vide |
| cosmétique | limagrain/06-erp-interface/messages-reference.md | 3 | Ligne de 153 caractères (> 120) | `tags: [ERP, messages, interface, SAP, catalogue, ITM, ASN, ROR, ROF, REF, SOR, RUT, SOF, L` | Reformater / couper la ligne |
| cosmétique | limagrain/06-erp-interface/messages-reference.md | 8 | Ligne de 201 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - D` | Reformater / couper la ligne |
| cosmétique | limagrain/07-admin/ad-customs.md | 6 | Ligne de 152 caractères (> 120) | `jira_refs: [LIM-14, LIM-64, LIM-66, LIM-67, LIM-70, LIM-71, LIM-73, LIM-76, LIM-82, LIM-84` | Reformater / couper la ligne |
| cosmétique | limagrain/07-admin/parametres-projet.md | 6 | Ligne de 154 caractères (> 120) | `jira_refs: [LIM-14, LIM-64, LIM-67, LIM-69, LIM-70, LIM-71, LIM-73, LIM-74, LIM-76, LIM-93` | Reformater / couper la ligne |
| cosmétique | limagrain/07-admin/parametres-projet.md | 8 | Ligne de 188 caractères (> 120) | `sources: ["Jira LIM-14 (lecture directe 2026-07-17)", "Jira LIM-102 (lecture directe 2026-` | Reformater / couper la ligne |
| cosmétique | limagrain/08-transverse/questions-ouvertes.md | 7 | Ligne de 1149 caractères (> 120) | `sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DE` | Reformater / couper la ligne |
## 3. Conventions projet
### 3a. Tirets cadratins (em dash) - cosmétique
Caractère « — » à remplacer par « - ». Remplacement en masse à valider avant Phase 2.
| Fichier | Occurrences (lignes) |
|---|---|
| limagrain/01-inbound/_index.md | 4 ligne(s) avec em dash — (l.2, l.8, l.18, l.22) |
| limagrain/01-inbound/controle-qualite-reception.md | 19 ligne(s) avec em dash — (l.2, l.13, l.42, l.49, l.55, l.81, l.107, l.109, l.118, l.149…) |
| limagrain/01-inbound/etiquette-rfid.md | 21 ligne(s) avec em dash — (l.2, l.13, l.16, l.35, l.37, l.43, l.47, l.51, l.58, l.62…) |
| limagrain/01-inbound/flux-erp-inbound.md | 14 ligne(s) avec em dash — (l.2, l.13, l.30, l.42, l.48, l.68, l.83, l.101, l.112, l.122…) |
| limagrain/01-inbound/gestion-camions.md | 35 ligne(s) avec em dash — (l.2, l.13, l.77, l.84, l.176, l.203, l.210, l.214, l.260, l.270…) |
| limagrain/01-inbound/reception-fournisseur.md | 41 ligne(s) avec em dash — (l.2, l.13, l.15, l.32, l.45, l.53, l.81, l.108, l.167, l.181…) |
| limagrain/01-inbound/reception-retour.md | 38 ligne(s) avec em dash — (l.41, l.45, l.56, l.58, l.59, l.60, l.74, l.81, l.128, l.202…) |
| limagrain/02-stockage/_index.md | 2 ligne(s) avec em dash — (l.2, l.8) |
| limagrain/02-stockage/asrs-miniload.md | 6 ligne(s) avec em dash — (l.2, l.13, l.34, l.51, l.52, l.66) |
| limagrain/02-stockage/defragmentation.md | 8 ligne(s) avec em dash — (l.2, l.13, l.40, l.65, l.108, l.173, l.212, l.233) |
| limagrain/02-stockage/galileo-config.md | 5 ligne(s) avec em dash — (l.2, l.13, l.64, l.88, l.178) |
| limagrain/02-stockage/palettes-vides.md | 5 ligne(s) avec em dash — (l.15, l.24, l.39, l.55, l.103) |
| limagrain/02-stockage/processus-anoxie.md | 11 ligne(s) avec em dash — (l.2, l.13, l.66, l.80, l.86, l.93, l.101, l.106, l.125, l.141…) |
| limagrain/02-stockage/putaway-strategies.md | 13 ligne(s) avec em dash — (l.24, l.27, l.33, l.34, l.35, l.39, l.46, l.53, l.62, l.68…) |
| limagrain/03-picking/_index.md | 8 ligne(s) avec em dash — (l.2, l.8, l.23, l.28, l.30, l.34, l.36, l.38) |
| limagrain/03-picking/consolidation-regroupement.md | 4 ligne(s) avec em dash — (l.2, l.13, l.124, l.136) |
| limagrain/03-picking/echantillonnage.md | 4 ligne(s) avec em dash — (l.2, l.13, l.48, l.202) |
| limagrain/03-picking/job-assignation-pk.md | 12 ligne(s) avec em dash — (l.2, l.13, l.52, l.55, l.62, l.65, l.76, l.145, l.251, l.333…) |
| limagrain/03-picking/picking-combinatoire.md | 13 ligne(s) avec em dash — (l.2, l.13, l.64, l.112, l.118, l.171, l.173, l.180, l.243, l.258…) |
| limagrain/03-picking/placement-ps-pk.md | 6 ligne(s) avec em dash — (l.55, l.65, l.114, l.262, l.325, l.326) |
| limagrain/03-picking/recertification.md | 10 ligne(s) avec em dash — (l.2, l.13, l.24, l.46, l.79, l.84, l.90, l.101, l.107, l.119) |
| limagrain/03-picking/sequencage-tk-ps-historique.md | 10 ligne(s) avec em dash — (l.2, l.13, l.24, l.31, l.38, l.44, l.64, l.65, l.89, l.97) |
| limagrain/03-picking/sequencage-tk-ps.md | 12 ligne(s) avec em dash — (l.37, l.39, l.60, l.64, l.87, l.93, l.97, l.101, l.105, l.217…) |
| limagrain/03-picking/stations-picking.md | 8 ligne(s) avec em dash — (l.70, l.116, l.120, l.144, l.212, l.237, l.298, l.319) |
| limagrain/04-outbound/_index.md | 2 ligne(s) avec em dash — (l.2, l.8) |
| limagrain/04-outbound/consolidation-chargement.md | 6 ligne(s) avec em dash — (l.42, l.121, l.125, l.132, l.151, l.170) |
| limagrain/04-outbound/flux-erp-outbound.md | 15 ligne(s) avec em dash — (l.2, l.13, l.29, l.38, l.75, l.90, l.110, l.115, l.119, l.121…) |
| limagrain/04-outbound/flux-expedition.md | 23 ligne(s) avec em dash — (l.2, l.13, l.66, l.79, l.129, l.138, l.157, l.271, l.272, l.289…) |
| limagrain/04-outbound/sequencage-shipping-stop.md | 8 ligne(s) avec em dash — (l.2, l.13, l.56, l.71, l.105, l.189, l.224, l.266) |
| limagrain/04-outbound/shipping-orders.md | 11 ligne(s) avec em dash — (l.2, l.13, l.88, l.205, l.210, l.249, l.259, l.268, l.291, l.295…) |
| limagrain/05-agv/_index.md | 2 ligne(s) avec em dash — (l.2, l.8) |
| limagrain/05-agv/agv-stations-routes.md | 12 ligne(s) avec em dash — (l.2, l.13, l.28, l.35, l.64, l.68, l.71, l.90, l.107, l.112…) |
| limagrain/05-agv/agv-troubleshooting.md | 1 ligne(s) avec em dash — (l.2) |
| limagrain/05-agv/job-reception-pk.md | 7 ligne(s) avec em dash — (l.2, l.13, l.41, l.51, l.53, l.55, l.141) |
| limagrain/05-agv/job-reception-production.md | 6 ligne(s) avec em dash — (l.2, l.13, l.90, l.101, l.176, l.181) |
| limagrain/05-agv/still-igo-integration.md | 52 ligne(s) avec em dash — (l.2, l.13, l.21, l.24, l.31, l.34, l.66, l.72, l.73, l.95…) |
| limagrain/06-erp-interface/_index.md | 3 ligne(s) avec em dash — (l.2, l.8, l.19) |
| limagrain/06-erp-interface/donnees-principales.md | 20 ligne(s) avec em dash — (l.2, l.13, l.39, l.40, l.71, l.75, l.80, l.86, l.87, l.88…) |
| limagrain/06-erp-interface/gna-sap-cpi.md | 7 ligne(s) avec em dash — (l.28, l.100, l.196, l.200, l.201, l.233, l.268) |
| limagrain/06-erp-interface/loc-message-periodique.md | 41 ligne(s) avec em dash — (l.2, l.17, l.25, l.56, l.58, l.76, l.100, l.124, l.152, l.156…) |
| limagrain/06-erp-interface/mapping-erp-wms.md | 12 ligne(s) avec em dash — (l.2, l.13, l.33, l.62, l.178, l.179, l.207, l.225, l.246, l.276…) |
| limagrain/06-erp-interface/messages-reference.md | 25 ligne(s) avec em dash — (l.2, l.13, l.79, l.86, l.88, l.93, l.103, l.109, l.136, l.139…) |
| limagrain/07-admin/_index.md | 2 ligne(s) avec em dash — (l.2, l.8) |
| limagrain/07-admin/ad-customs.md | 25 ligne(s) avec em dash — (l.2, l.13, l.62, l.63, l.64, l.65, l.67, l.69, l.71, l.80…) |
| limagrain/07-admin/contacts-projet.md | 4 ligne(s) avec em dash — (l.27, l.38, l.52, l.62) |
| limagrain/07-admin/parametres-projet.md | 15 ligne(s) avec em dash — (l.2, l.13, l.45, l.47, l.60, l.61, l.62, l.63, l.65, l.66…) |
| limagrain/07-admin/utilisateurs-groupes.md | 27 ligne(s) avec em dash — (l.2, l.13, l.33, l.34, l.35, l.36, l.37, l.41, l.45, l.59…) |
| limagrain/08-transverse/_index.md | 2 ligne(s) avec em dash — (l.2, l.8) |
| limagrain/08-transverse/questions-ouvertes.md | 74 ligne(s) avec em dash — (l.2, l.12, l.19, l.21, l.23, l.25, l.27, l.29, l.33, l.35…) |
| limagrain/README.md | 13 ligne(s) avec em dash — (l.2, l.8, l.16, l.26, l.38, l.45, l.48, l.54, l.64, l.73…) |
| limagrain/glossaire-limagrain.md | 131 ligne(s) avec em dash — (l.16, l.17, l.18, l.19, l.20, l.21, l.22, l.24, l.25, l.28…) |
### 3b. Checklists `- [ ]` (todos Obsidian) - mineur
Chaque occurrence pollue les queries Obsidian. Cas particulier : le template Limagrain
lui-même prescrit ce format pour les questions ouvertes ; `questions-ouvertes.md` en
concentre 73. Décision à prendre sur le format cible avant correction.
| Fichier | Nb | Lignes |
|---|---|---|
| limagrain/01-inbound/gestion-camions.md | 3 | 632, 634, 636 |
| limagrain/01-inbound/reception-fournisseur.md | 9 | 676, 677, 679, 681, 683, 685, 687, 689, 691 |
| limagrain/02-stockage/defragmentation.md | 1 | 246 |
| limagrain/02-stockage/galileo-config.md | 2 | 182, 183 |
| limagrain/02-stockage/processus-anoxie.md | 2 | 141, 142 |
| limagrain/03-picking/consolidation-regroupement.md | 2 | 135, 136 |
| limagrain/03-picking/echantillonnage.md | 1 | 217 |
| limagrain/03-picking/job-assignation-pk.md | 2 | 335, 337 |
| limagrain/03-picking/picking-combinatoire.md | 1 | 268 |
| limagrain/03-picking/stations-picking.md | 1 | 318 |
| limagrain/04-outbound/consolidation-chargement.md | 2 | 178, 179 |
| limagrain/04-outbound/flux-expedition.md | 9 | 572, 575, 577, 579, 580, 588, 589, 590, 591 |
| limagrain/04-outbound/sequencage-shipping-stop.md | 1 | 241 |
| limagrain/05-agv/agv-stations-routes.md | 1 | 112 |
| limagrain/05-agv/agv-troubleshooting.md | 3 | 122, 124, 126 |
| limagrain/05-agv/job-reception-production.md | 1 | 193 |
| limagrain/05-agv/still-igo-integration.md | 6 | 712, 714, 715, 717, 719, 721 |
| limagrain/06-erp-interface/donnees-principales.md | 3 | 241, 242, 244 |
| limagrain/06-erp-interface/gna-sap-cpi.md | 13 | 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 256, 257, 274 |
| limagrain/06-erp-interface/loc-message-periodique.md | 3 | 529, 532, 534 |
| limagrain/06-erp-interface/messages-reference.md | 6 | 311, 313, 314, 315, 316, 318 |
| limagrain/08-transverse/questions-ouvertes.md | 73 | 19, 21, 23, 24, 25, 27, 29, 31, 33, 46, 48, 62, 95, 129, 149, 160, 162, 163, 167, 169… |
### 3c. Questions résolues mal formatées - mineur
Format attendu : `- [x] ~~texte~~ -> Résolu`. Cochées mais sans barré :
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | limagrain/08-transverse/questions-ouvertes.md | 397 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **SOR au numéro de support** → Fermé : jamais au numéro de support` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 398 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **FEFO sans DLC** → Fermé : abandonné, FIFO journalier retenu` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 399 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Message MOV** → Fermé : annulé (inutile)` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 400 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Gestion FIFO canal** → Fermé : FIFO 24h standard, économie de` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 402 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Custom attributes vs attributs logistiques** → Tranché : attributs` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 404 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Process litige sac endommagé** → Fermé : flux décrit (bouton` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 406 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Statut de stock F2 si aucun statut** → Fermé : REDFLAG, pousser` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 408 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Anoxie : flux automatique** → Fermé : à prévoir si temps disponible` | Reformater |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 409 | Question résolue sans format '- [x] ~~texte~~ -> Résolu' | `- [x] **Fréquence image de stock (WSC)** → Fermé : à définir (toutes les` | Reformater |
## 4. Liens et ancres
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| bloquant | limagrain/02-stockage/zones-stockage.md | 50 | Lien relatif cassé (cible inexistante) | `[Processus d'anoxie](../08-transverse/decisions-architecture.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/03-picking/_index.md | 20 | Lien relatif cassé (cible inexistante) | `[Waves et groupes](waves-groupes.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/03-picking/_index.md | 21 | Lien relatif cassé (cible inexistante) | `[Replenishment](replenishment.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/06-erp-interface/_index.md | 22 | Lien relatif cassé (cible inexistante) | `[Monitoring interface](interface-monitoring.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/07-admin/ad-customs.md | 20 | Lien relatif cassé (cible inexistante) | `[Application Dictionary](../../concepts/application-dictionary.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/08-transverse/_index.md | 15 | Lien relatif cassé (cible inexistante) | `[Tickets Jira clés](jira-tickets-cles.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/08-transverse/_index.md | 16 | Lien relatif cassé (cible inexistante) | `[Décisions architecture](decisions-architecture.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/08-transverse/_index.md | 18 | Lien relatif cassé (cible inexistante) | `[Historique projet](historique-projet.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 49 | Lien relatif cassé (cible inexistante) | `[Waves et groupes](03-picking/waves-groupes.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 50 | Lien relatif cassé (cible inexistante) | `[Replenishment](03-picking/replenishment.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 81 | Lien relatif cassé (cible inexistante) | `[Monitoring interface](06-erp-interface/interface-monitoring.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 94 | Lien relatif cassé (cible inexistante) | `[Tickets Jira clés](08-transverse/jira-tickets-cles.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 95 | Lien relatif cassé (cible inexistante) | `[Décisions architecture](08-transverse/decisions-architecture.md)` | Corriger le chemin ou créer la page |
| bloquant | limagrain/README.md | 97 | Lien relatif cassé (cible inexistante) | `[Historique projet](08-transverse/historique-projet.md)` | Corriger le chemin ou créer la page |
| mineur | limagrain/01-inbound/gestion-camions.md | 578 | Ancre interne sans heading correspondant | `[Mécanisme faux stage / vrai stage](#mécanisme-faux-stage--vrai-stage-v2)` | Corriger l'ancre |
| mineur | limagrain/02-stockage/rejet-pie.md | 184 | Ancre #cstatt-container absente de la cible | `[AD Customs](../07-admin/ad-customs.md#cstatt-container)` | Corriger l'ancre |
| mineur | limagrain/03-picking/picking-combinatoire.md | 64 | Ancre #arbitrage-des-contradictions-reu-11052026 absente de la cible | `[Séquençage TK → PS — Arbitrage](sequencage-tk-ps.md#arbitrage-des-contradictions-reu-1105` | Corriger l'ancre |
| mineur | limagrain/03-picking/picking-combinatoire.md | 86 | Ancre #critère-1--picking-négatif-en-premier absente de la cible | `[Séquençage TK → PS](sequencage-tk-ps.md#critère-1--picking-négatif-en-premier)` | Corriger l'ancre |
| mineur | limagrain/03-picking/placement-ps-pk.md | 294 | Ancre #mouvements-manuels-du-poste-appeler--renvoyer---lim-116 absente de la cible | `[Process picking au PK](process-picking-pk.md#mouvements-manuels-du-poste-appeler--renvoye` | Corriger l'ancre |
| mineur | limagrain/03-picking/process-picking-pk.md | 290 | Ancre interne sans heading correspondant | `[Mouvements manuels du poste](#mouvements-manuels-du-poste-appeler--renvoyer---lim-116)` | Corriger l'ancre |
| mineur | limagrain/04-outbound/flux-expedition.md | 74 | Ancre #custom-défrag-client-par-tournée--quai-non-assigné-lim-87 absente de la cible | `[Défragmentation custom](../02-stockage/defragmentation.md#custom-défrag-client-par-tourné` | Corriger l'ancre |
| mineur | limagrain/04-outbound/flux-expedition.md | 307 | Ancre #cstatt-container absente de la cible | `[AD Customs](../07-admin/ad-customs.md#cstatt-container)` | Corriger l'ancre |
| mineur | limagrain/06-erp-interface/messages-reference.md | 221 | Ancre #message-chg--changement-article--propriétaire-lim-113 absente de la cible | `[Mapping ERP-WMS](mapping-erp-wms.md#message-chg--changement-article--propriétaire-lim-113` | Corriger l'ancre |
| mineur | limagrain/06-erp-interface/messages-reference.md | 312 | Ancre #message-chg--changement-article--propriétaire-lim-113 absente de la cible | `[Mapping ERP-WMS](mapping-erp-wms.md#message-chg--changement-article--propriétaire-lim-113` | Corriger l'ancre |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 272 | Ancre #message-chg--changement-article--propriétaire-lim-113 absente de la cible | `[Mapping ERP-WMS](../06-erp-interface/mapping-erp-wms.md#message-chg--changement-article--` | Corriger l'ancre |
## 5. Registre / index / README / consume.log
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | _index.md | 147 | Compteur XX pages incorrect | `(46 pages) vs 45 pages réelles` | Mettre (45 pages) |
| mineur | _index.md | 375 | Entrée _index.md pour un fichier non-page (index/meta) | `limagrain/glossaire-limagrain.md` | Vérifier |
| mineur | consume.log | 0 | 2 fichier(s) consommé(s) introuvable(s) dans sources/archives/ (hors sources virtuelles Jira/Confluence) | `LIM-89 GNA Mise en place de la communication API EasyWMS SAP CPI.md; LIM-85 LOT2.1 Configu` | Vérifier l'archivage ou corriger le nom dans le log |
| mineur | consume.log | 3 | Session sans mode indiqué | `## [2026-05-05] session-001` | Ajouter (mode: …) |
| mineur | consume.log | 37 | Session sans mode indiqué | `## [2026-05-05] session-002` | Ajouter (mode: …) |
| mineur | consume.log | 45 | Session sans mode indiqué | `## [2026-05-05] session-003` | Ajouter (mode: …) |
| mineur | consume.log | 60 | Session sans mode indiqué | `## [2026-05-05] session-004` | Ajouter (mode: …) |
| mineur | consume.log | 77 | Session sans mode indiqué | `## [2026-05-06] session-005` | Ajouter (mode: …) |
| mineur | consume.log | 111 | Session sans mode indiqué | `## [2026-05-06] session-006` | Ajouter (mode: …) |
| mineur | consume.log | 125 | Session sans mode indiqué | `## [2026-05-12] session-007` | Ajouter (mode: …) |
| mineur | consume.log | 145 | Session sans mode indiqué | `## [2026-05-12] session-008` | Ajouter (mode: …) |
| mineur | consume.log | 171 | Session sans mode indiqué | `## [2026-05-12] session-009` | Ajouter (mode: …) |
| mineur | consume.log | 199 | Session sans mode indiqué | `## [2026-05-12] session-010` | Ajouter (mode: …) |
| mineur | consume.log | 213 | Session sans mode indiqué | `## [2026-05-12] session-011` | Ajouter (mode: …) |
| mineur | consume.log | 233 | Session sans mode indiqué | `## [2026-05-12] session-012` | Ajouter (mode: …) |
| mineur | consume.log | 253 | Session sans mode indiqué | `## [2026-05-12] session-013` | Ajouter (mode: …) |
| mineur | consume.log | 275 | Session sans mode indiqué | `## [2026-05-12] session-014` | Ajouter (mode: …) |
| mineur | consume.log | 289 | Session sans mode indiqué | `## [2026-05-13] session-015` | Ajouter (mode: …) |
| mineur | consume.log | 297 | Session sans mode indiqué | `## [2026-05-13] session-017` | Ajouter (mode: …) |
| mineur | consume.log | 305 | Session sans mode indiqué | `## [2026-05-13] session-016` | Ajouter (mode: …) |
| mineur | consume.log | 319 | Session sans mode indiqué | `## [2026-05-13] session-018` | Ajouter (mode: …) |
## 6. Delta / sourcing
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | limagrain/01-inbound/flux-erp-inbound.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/02-stockage/palettes-vides.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: concepts/container-management.md` | Corriger le chemin |
| mineur | limagrain/02-stockage/processus-anoxie.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: concepts/warehouse-processes.md` | Corriger le chemin |
| mineur | limagrain/03-picking/echantillonnage.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: concepts/inventory.md` | Corriger le chemin |
| mineur | limagrain/03-picking/sequencage-tk-ps-historique.md | 0 | standard_ref renseigné mais bloc '> **Standard EasyWMS**' absent | `standard_ref: concepts/picking.md` | Ajouter le bloc de renvoi |
| mineur | limagrain/04-outbound/flux-erp-outbound.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/04-outbound/flux-expedition.md | 0 | Section Références absente | `` | Ajouter la section Références en fin de page |
| mineur | limagrain/06-erp-interface/donnees-principales.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/06-erp-interface/gna-sap-cpi.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/06-erp-interface/loc-message-periodique.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/06-erp-interface/mapping-erp-wms.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/06-erp-interface/messages-reference.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: architecture/erp-integration.md` | Corriger le chemin |
| mineur | limagrain/07-admin/ad-customs.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: concepts/application-dictionary.md` | Corriger le chemin |
| mineur | limagrain/07-admin/parametres-projet.md | 0 | standard_ref renseigné mais bloc '> **Standard EasyWMS**' absent | `standard_ref: concepts/application-dictionary.md` | Ajouter le bloc de renvoi |
| mineur | limagrain/07-admin/parametres-projet.md | 0 | standard_ref pointe vers un fichier inexistant | `standard_ref: concepts/application-dictionary.md` | Corriger le chemin |
| mineur | limagrain/08-transverse/questions-ouvertes.md | 0 | Section Références absente | `` | Ajouter la section Références en fin de page |
| cosmétique | limagrain/01-inbound/etiquette-rfid.md | 0 | sources du front matter vides alors que Références renseignées | `sources: [] mais tableau Références avec 2 ligne(s)` | Synchroniser sources et Références |
## 7. Glossaire
| Sévérité | Fichier | Ligne | Règle | Extrait | Correction |
|---|---|---|---|---|---|
| mineur | limagrain/glossaire-limagrain.md | 18 | Terme déjà défini dans glossary.md standard | `SOR` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 19 | Terme déjà défini dans glossary.md standard | `RUT` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 20 | Terme déjà défini dans glossary.md standard | `SOF` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 21 | Terme déjà défini dans glossary.md standard | `LOF` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 22 | Terme déjà défini dans glossary.md standard | `ASN` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 30 | Terme déjà défini dans glossary.md standard | `ROR` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 31 | Terme déjà défini dans glossary.md standard | `ROF` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 32 | Terme déjà défini dans glossary.md standard | `REF` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 34 | Terme déjà défini dans glossary.md standard | `STV` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 35 | Terme déjà défini dans glossary.md standard | `STR` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 36 | Terme déjà défini dans glossary.md standard | `STC` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 55 | Terme déjà défini dans glossary.md standard | `SCR` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 56 | Terme déjà défini dans glossary.md standard | `WSC` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 57 | Terme déjà défini dans glossary.md standard | `COR` | Retirer ou renvoyer vers le standard (delta uniquement) |
| mineur | limagrain/glossaire-limagrain.md | 83 | Terme déjà défini dans glossary.md standard | `COF` | Retirer ou renvoyer vers le standard (delta uniquement) |
## Constats transverses et décisions à prendre en Phase 2
1. **Pages squelette jamais créées** : `waves-groupes.md`, `replenishment.md`,
`interface-monitoring.md`, `jira-tickets-cles.md`, `decisions-architecture.md`,
`historique-projet.md`. Elles causent 13 des 14 liens cassés (README + _index de section +
1 renvoi de page). Deux options : créer des pages stub, ou retirer les liens des sommaires.
2. **`zones-stockage.md` l.50** : le lien « Processus d'anoxie » pointe vers
`../08-transverse/decisions-architecture.md` (inexistant) alors que
`../02-stockage/processus-anoxie.md` existe : cible probablement erronée.
3. **Compteur du registre** : `## Limagrain — Projet (46 pages)` compte 45 pages de contenu +
l'entrée `glossaire-limagrain.md`. Décider si le glossaire compte comme page du registre
(garder 46 et l'inclure explicitement) ou non (passer à 45 et retirer son entrée).
4. **`standard_ref` vers des pages standard inexistantes** (11 cas) : les chemins visés
(`architecture/erp-integration.md`, `concepts/application-dictionary.md`, etc.) n'existent
pas dans le wiki standard. À remapper vers les pages standard réelles (lecture seule :
aucune création côté standard en mode limagrain).
5. **Glossaire** : 15 termes déjà définis dans `glossary.md` standard (SOR, RUT, SOF, LOF, ASN,
ROR, ROF, REF, STV, STR, STC, SCR, WSC, COR, COF). Le tableau initial du CLAUDE.md en
incluait certains ; règle delta : ne garder que la spécificité Limagrain ou renvoyer au
standard.
6. **consume.log** : 18 sessions sur 24 sans mention `(mode: …)` (sessions antérieures à la
convention) ; 2 fichiers consommés introuvables dans `sources/archives/`.
7. **Checklists** : 145 occurrences `- [ ]` + 9 `- [x]` sans barré. Valider le format cible
(notamment pour `questions-ouvertes.md`) avant toute conversion en masse.
## Phase 2 - Corrections appliquées (2026-07-20)
Arbitrages validés par Arthur : scan lecture seule du standard (fait, rapport séparé hors dépôt) ;
retrait des liens vers les 6 pages squelette ; checklists converties en `- ❓` ; em dashes
remplacés partout (titres inclus, sauf l'en-tête `## Limagrain — Projet` de `_index.md` racine,
format prescrit par CLAUDE.md).
### Corrections par catégorie
| Catégorie | Corrigé |
|---|---|
| Bloquants (15) | 15/15. `03-picking/_index.md` : diagramme mermaid complété (l'archive du 11-05 a servi de référence : ajout `PIE --> DEFRAG`, fermeture du bloc) ; 13 liens vers pages squelette retirés (README, _index 03/06/08) ; `zones-stockage.md` reciblé vers `processus-anoxie.md` ; `ad-customs.md` reciblé vers `architecture/application-dictionary.md` |
| Conventions | 910 em dashes remplacés (52 fichiers + section Limagrain de `_index.md`) ; 145 `- [ ]` convertis en `- ❓` ; 13 questions résolues reformatées `- [x] ~~texte~~` |
| Liens / ancres | 8 ancres réparées automatiquement (slugs recalculés après conversion em dash) + 1 corrigée à la main (`picking-combinatoire.md` : renvoi arbitrage pointé vers `sequencage-tk-ps-historique.md`) |
| Front matter | `rejet-pie.md` +confluence_refs ; `contacts-projet.md` et `questions-ouvertes.md` +standard_ref: null ; title/H1 `agv-troubleshooting.md` aligné par la conversion em dash |
| Delta / sourcing | 12 `standard_ref` remappés vers des pages standard existantes (erp-integration → `concepts/erp-interface.md` x7 ; application-dictionary → `architecture/` x2 ; container-management → `concepts/container.md` ; warehouse-processes → `concepts/quality-control.md` ; inventory → `concepts/count.md`) ; blocs Standard EasyWMS ajoutés (`sequencage-tk-ps-historique.md`, `parametres-projet.md`) ; sections Références ajoutées (`flux-expedition.md`, `questions-ouvertes.md`) ; sources `etiquette-rfid.md` renseignées |
| Structure | Pipe non échappé du glossaire (l.104) corrigé |
| Glossaire | Les 15 termes standard déplacés dans une section « Termes standard EasyWMS (rappel) » avec renvoi vers `../glossary.md` |
### Décisions actées (résiduels volontaires)
- **Registre** : `glossaire-limagrain.md` reste une entrée du registre ; le compteur `(46 pages)`
= 45 pages de contenu + glossaire. Aucune modification.
- **Glossaire** : les 15 termes standard sont conservés en rappel (avec renvoi) plutôt que
supprimés ; le scanner les signalera toujours, c'est assumé.
- **consume.log** : fichier append-only, les 18 sessions historiques sans `(mode: …)` et les
2 fichiers non retrouvés en archives ne sont pas retouchés.
- **Lignes > 120** : 31 restantes, presque toutes des lignes `sources:` du front matter
(tableaux YAML en ligne) ; insécables sans changer de style YAML, résiduel accepté.
### Faux positifs du scanner identifiés en Phase 2
Les « lignes vides multiples » (36) et « liste non précédée d'une ligne vide » signalés en
Phase 1 étaient des faux positifs : le tracking du scanner n'était pas réinitialisé autour des
blocs de code (blancs adjacents aux fences, listes en pseudo-code). Après correction du
scanner : zéro occurrence réelle. Idem pour une partie des ancres (l'algorithme de slug de
Phase 1 différait du slug GitHub réellement utilisé).
### Re-scan final (2026-07-20)
Zéro bloquant, zéro lien cassé, zéro ancre morte, zéro checklist `- [ ]`, zéro em dash hors
en-tête prescrit, front matter complet sur les 45 pages. Résiduels : les décisions actées
ci-dessus (15 rappels glossaire + 2 registre + 31 lignes longues cosmétiques).
+160 -125
View File
@@ -2,7 +2,7 @@
title: "Glossaire Limagrain"
tags: [glossaire, limagrain, référence]
status: draft
last_updated: 2026-05-13
last_updated: 2026-07-20
author: Arthur
---
@@ -13,74 +13,63 @@ author: Arthur
| Terme | Signification |
|-------|---------------|
| CstAtt | Custom Attribute handshake dans le picking combinatoire |
| CR V3.0 | Change Request version 3.0 architecture 4 jobs picking combinatoire |
| SOR | Shipping Order Request — message ERP entrant, crée un ordre d'expédition |
| RUT | Route — message ERP entrant, définit une tournée transporteur |
| SOF | Shipping Order Fulfilled — message ERP sortant, ordre expédié |
| LOF | Load Order Fulfilled — message ERP sortant, chargement camion terminé |
| ASN | Advanced Shipping Notice — pré-avis de réception avec contenu connu |
| CstAtt | Custom Attribute - handshake dans le picking combinatoire |
| CR V3.0 | Change Request version 3.0 - architecture 4 jobs picking combinatoire |
| PIE | Station de pesée automatique |
| PDL | Picking Dedicated Location emplacement dédié picking |
| ASRS | Automatic Storage and Retrieval System stockage automatique |
| PDL | Picking Dedicated Location - emplacement dédié picking |
| ASRS | Automatic Storage and Retrieval System - stockage automatique |
| TK | Transstockeur (miniload) |
| TMS | Transport Management System (Galileo chez Mecalux) |
| AD | Application Dictionary framework métadonnées EasyWMS |
| HU | Handling Unit palette identifiée par un numéro unique (étiquette RFID) |
| ROR | Reception Order Request — message ERP entrant, crée un ordre de réception |
| ROF | Reception Order Fulfilled — message ERP sortant, ordre de réception clôturé |
| REF | Reception Fulfilled — message ERP sortant, réception individuelle finalisée |
| ITM | Item Master — message ERP entrant, synchronisation des articles/lots |
| STV | Stock Variation — message WMS sortant, notification de variation de stock |
| STR | Stock Request — message ERP entrant, demande changement statut/propriétaire/article |
| STC | Stock Confirmation — message WMS sortant, confirmation changement statut |
| PCK | Passage Conteneur Client — message WMS sortant [CUSTOM], info passage en conteneur client |
| LOC | Location — message WMS sortant [CUSTOM], info emplacement de stockage |
| MOV | Movement — message WMS sortant [CUSTOM], info déplacement stock entre palettes |
| CHG | Change — message ERP entrant [CUSTOM], changement article ou propriétaire |
| ERR | Error — message WMS sortant, erreur d'importation de message |
| MAG01 | Magasin automatique Limagrain — 4 allées TK |
| NIMP15 | Type palette vide — US 100×120 conforme ISPM15 |
| AD | Application Dictionary - framework métadonnées EasyWMS |
| HU | Handling Unit - palette identifiée par un numéro unique (étiquette RFID) |
| ITM | Item Master - message ERP entrant, synchronisation des articles/lots |
| PCK | Passage Conteneur Client - message WMS sortant [CUSTOM], info passage en conteneur client |
| LOC | Location - message WMS sortant [CUSTOM], info emplacement de stockage |
| MOV | Movement - message WMS sortant [CUSTOM], info déplacement stock entre palettes |
| CHG | Change - message ERP entrant [CUSTOM], changement article ou propriétaire |
| ERR | Error - message WMS sortant, erreur d'importation de message |
| MAG01 | Magasin automatique Limagrain - 4 allées TK |
| NIMP15 | Type palette vide - US 100×120 conforme ISPM15 |
| FERT | Produit fini (type article SAP) |
| ZSIZ | Semi-fini calibré (type article SAP) déclenche ajustement poids au PIE |
| NAV | Navette convoyeur de transfert entre zones |
| TE | Table d'Entrée station d'entrée vers l'ASRS |
| TS | Table de Sortie station de sortie depuis l'ASRS |
| ZSIZ | Semi-fini calibré (type article SAP) - déclenche ajustement poids au PIE |
| NAV | Navette - convoyeur de transfert entre zones |
| TE | Table d'Entrée - station d'entrée vers l'ASRS |
| TS | Table de Sortie - station de sortie depuis l'ASRS |
| ET | Table intermédiaire (Estación de Transferencia) |
| REAC | Poste de reconditionnement |
| TP | Table de Préparation emplacement sur un îlot de travail |
| TP | Table de Préparation - emplacement sur un îlot de travail |
| PK | Poste de travail (Picking station) |
| L&F | Lost & Found emplacement virtuel pour conteneurs perdus |
| GNA | Generic Network Adapter service communication ERP ↔ EasyWMS |
| SCR | Stock Count Request — message ERP entrant, demande image de stock |
| WSC | Warehouse Stock Confirmation — message WMS sortant, confirmation image de stock |
| COR | Count Order Request — message ERP entrant, demande d'inventaire |
| F9 | Statut de stock « Sacs sales » — applicable au retour client |
| B6 | Statut de stock « Non conforme » — applicable au retour client |
| L&F | Lost & Found - emplacement virtuel pour conteneurs perdus |
| GNA | Generic Network Adapter - service communication ERP ↔ EasyWMS |
| F2 | Statut de stock « Conforme sac propre » - **absence de statut** dans le WMS ; SAP l'interprète comme ZLOG 0002 / ZINCO 0001 (LIM-90) |
| F9 | Statut de stock « Conforme sac sale » - applicable au retour client, ZLOG 0002 / ZINCO 0091 (LIM-90) |
| B6 | Statut de stock « Non conforme » - applicable au retour client, ZLOG 0001 / ZINCO 0002-0008 selon le motif (LIM-90) |
| ZLOG | Code SAP de statut logistique remonté dans le REF (CstAtt2 du statut de stock) |
| ZINCO | Code SAP de motif de non-conformité remonté dans le REF (CstAtt3 du statut de stock) |
| WF02 | Code site Limagrain dans l'interface ERP |
| PROFIL_STANDARD | Profil logistique articles classiques (code produit + propriétaire + description + destination) |
| PROFIL_PALETTE | Profil logistique palettes bois vides |
| ItemCode | Champ EasyWMS contenant le code lot SAP (= clé article WMS) |
| Traitement commercial (TC) | Concept Limagrain porté par le champ standard « Famille » d'article (ressource `Prop_Product_ProductFamilyCode`, LIM-92). Sert de règle de non-mélange sur palette |
| Bag/Pal | Nombre de sacs par palette (= ContainerQty dans ITM) |
| DESADV | Type message SAP pour livraison fournisseur/intersite (utilisé dans ROR) |
| ORDRSP | Type message SAP pour retour client (utilisé dans ROR) |
| vassist | Virtual assistant outil SmartUI pour configurer les modes de postes de travail |
| WfAction | Workflow Action bouton custom dans la workstation (ex. réappro palettes vides) |
| ZPL | Zebra Programming Language format requis pour imprimantes étiquettes RFID |
| vassist | Virtual assistant - outil SmartUI pour configurer les modes de postes de travail |
| WfAction | Workflow Action - bouton custom dans la workstation (ex. réappro palettes vides) |
| ZPL | Zebra Programming Language - format requis pour imprimantes étiquettes RFID |
| QUAI_TEMPORAIRE | Quai fictif par défaut assigné aux OS, accessible par toutes les images de quai |
| QUAI_RECERTIF | Quai virtuel destination des palettes en recertification (route via PK) |
| CstData | Custom Data données transmises à Galileo (ex: programme filmage, commande impression) |
| STOP | Numéro d'arrêt dans une tournée RUT ordonnance le chargement (inverse de l'ordre de livraison) |
| isCritical | Flag SOR.Line rend une ligne obligatoire pour l'expédition |
| isRequired | Flag SOR.Line rend une ligne obligatoire pour l'expédition |
| AllowAssignStockExcess | Flag SOR.Line autorise l'assignation même si le stock dépasse la demande |
| CstData | Custom Data - données transmises à Galileo (ex: programme filmage, commande impression) |
| STOP | Numéro d'arrêt dans une tournée RUT - ordonnance le chargement (inverse de l'ordre de livraison) |
| isCritical | Flag SOR.Line - rend une ligne obligatoire pour l'expédition |
| isRequired | Flag SOR.Line - rend une ligne obligatoire pour l'expédition |
| AllowAssignStockExcess | Flag SOR.Line - autorise l'assignation même si le stock dépasse la demande |
| OnStockAdjust | Workflow WMS qui recalcule l'assignation après ajustement de stock au picking |
| StackerCrane_SortTasks_PR | Workflow de tri des tâches de picking par gerbabilité (stack) |
| COF | Count Order Fulfilled — message WMS sortant, confirmation échantillonnage |
| SSCC | Serial Shipping Container Code — identifiant unique palette (étiquette GS1) |
| GS1 | Organisation de normalisation — fournit les plages SSCC |
| CPI | Canal Point d'Intégration SAP — middleware traitement messages (volumétrie WSC) |
| Z-Bag | Sacs vides (emballage) — stockés en ASRS pour livraison client uniquement |
| SSCC | Serial Shipping Container Code - identifiant unique palette (étiquette GS1) |
| GS1 | Organisation de normalisation - fournit les plages SSCC |
| CPI | Canal Point d'Intégration SAP - middleware traitement messages (volumétrie WSC) |
| Z-Bag | Sacs vides (emballage) - stockés en ASRS pour livraison client uniquement |
| SingleReceipt | Paramètre ROR : true = pas de reliquat WMS (une seule réception par ordre) |
| AutoReleaseDate | Date de libération automatique d'un SOR/RUT (PlannedShippingDate - 48h) |
| TransactionalLineList | Flag SOR : true = tout ou rien (refus total si une ligne est en erreur) |
@@ -88,95 +77,141 @@ author: Arthur
| ERPReasonCode | Code motif ERP (ex: ZSC1) transmis dans les messages de variation stock |
| OutboundClassCode | Classification du type de sortie : PRODUCTION, RECERTIFICATION, CLIENT |
| IsSlave | Flag conteneur LOF : true = palette support (pas le stock directement) |
| QUAI_RECERTIFICATION | Quai fictif assigné aux SOR de recertification dans le message ERP |
| PARKING | Emplacement fictif d'attente camion — quai par défaut avant assignation réelle |
| QUAI_RECERTIFICATION | Quai des OS de recertification, assigné automatiquement par le WMS à la création/édition d'un OS recertif (LIM-110, code porté par `RECERTIFICATION_CODE_QUAI`) ; changement manuel bloqué. Auparavant renseigné dans le SOR |
| RECERTIFICATION_CODE_CLASSE | Paramètre LIM-105 : code de la classe d'OS recertification (remplace les valeurs hard codées d'identification dans les queries/WF de recertification) |
| RECERTIFICATION_CODE_QUAI | Paramètre LIM-110 : code du quai recertification (`QUAI_RECERTIFICATION`) et balise `[XXX]` du code de la stratégie d'assignation de stock RECERTIFICATION |
| PARKING | Emplacement fictif d'attente camion - quai par défaut avant assignation réelle |
| CST_DockStationsWorkloadForView | Entité custom affichant l'occupation des quais (réceptions + tournées + plaques) |
| InboundClassCode | Code de classe de préavis de réception contrôle de cohérence à la création réception |
| InboundClassCode | Code de classe de préavis de réception - contrôle de cohérence à la création réception |
| PALETTE_US | Type de support virtuel créé lors de la déclaration image de quai |
| HORS TOLERANCE | Verrou support posé au PIE si écart de poids détecté (hors retour) palette admise en ASRS |
| ECART RETOUR | Verrou support posé au PIE si écart de poids sur un retour client palette rejetée |
| FILMAGES | Paramètre WMS contenant la liste des programmes de filmage (`code;libellé|…`) |
| CstAtt02 (support) | Flag Big Bag sur le support (`true`/`false`) set au poste de travail réception |
| CstAtt03 (support) | Flag anoxie sur le support (`true`) set au poste de travail réception |
| CstAtt05 (support) | Programme de filmage (`0`, `A`, `B`…) set au poste de travail réception |
| AI (GS1) | Application Identifier préfixe numérique dans un QR Code GS1 identifiant le type de donnée |
| HORS TOLERANCE | Verrou support posé au PIE si écart de poids détecté (hors retour) - palette admise en ASRS |
| ECART RETOUR | Verrou support posé au PIE si écart de poids sur un retour client - palette rejetée |
| FILMAGES | Paramètre WMS contenant la liste des programmes de filmage (`code;libellé\|…`) |
| CstAtt02 (support) | Flag Big Bag sur le support (`true`/`false`) - set au poste de travail réception |
| CstAtt03 (support) | Flag anoxie sur le support (`true`) - set au poste de travail réception |
| CstAtt05 (support) | Programme de filmage (`0`, `A`, `B`…) - set au poste de travail réception |
| AI (GS1) | Application Identifier - préfixe numérique dans un QR Code GS1 identifiant le type de donnée |
| MODES_PKxx | Paramètre SmartUI définissant les modes autorisés + priorité pour un PK (`MODE;PRIO\|…`) |
| PK_ADJACENT | Paramètre SmartUI listant les paires de postes adjacents (`PK01;PK02\|…`) |
| PK_BIGBAG | Paramètre définissant quels PK autorisent les big-bags (P5, P6 avec palan) |
| Mega Job | Job unique « chef d'orchestre » des assignations de tâches vers les PK ([LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70)) |
| DESTINATION_PRODUCTION | Paramètre du job LIM-71 code du buffer d'entrée production pour les tâches AGV |
| DESTINATION_PRODUCTION | ~~Paramètre du job LIM-71 - code du buffer d'entrée production~~ **Obsolète** : la destination passe désormais par les stratégies de rangement (LIM-71) |
| CstAtt04 (support) | Type de réception du support : "ASN" = production, sinon = fournisseur/intersite/retour |
| CstAtt06 (support) | Marqueur de traitement du job LIM-71 — contient la destination après traitement |
| SAP_LOT_VERIFY_URL | URL de l'endpoint API SAP pour la vérification des lots retour client |
| EV_RETURN | Champ réponse API SAP : "X" = lot valide |
| ET_BATCH | Tableau réponse API SAP : lots autorisés avec MATNR, CHARG, BATCH_OFF, EV_DEPLOY |
| EV_DEPLOY | Champ ET_BATCH : "X" = lot autorisé pour la réception retour |
| CstAtt11 (support) | Marqueur de rangement ASRS pour retour client — `true` une fois le support rangé, jamais remis à false |
| CstAtt01 (réception) | Flag clôture retour en cours — `true` = en attente de rangement ASRS complet |
| CstAtt01 (OE) | Flag hors tolérance — `true` = bloque auto-close OE et ROF, affichage rouge |
| CstAtt06 (support) | Code du poste de picking lié à un conteneur de réception fournisseur (LIM-67). Confirmé par LIM-70 (contrôle d'éligibilité PK, 26/06/2026) et LIM-71 (job régénération réception→PK, 22/06/2026). ✅ Conflit levé : LIM-71 a **abandonné** son marquage CstAtt06 (destination via stratégies de rangement) |
| CstAtt08 (support) | Code de la réception associé au support fictif image de quai (LIM-64) - sert au comptage des palettes déjà déclarées et affiché en vue support |
| CstAtt10 (support) | Flag support traité au poste de travail réception (`true`) - sert au comptage de fermeture de réception (LIM-67) |
| CstAtt13 (support) | Code de l'ordre d'entrée du conteneur - posé **dès l'image de quai** par l'écran « déclaration des OE » de LIM-96 V2, en plus du renseignement au PK (LIM-67) ; rattaché à LIM-96 dans le référentiel LIM-14 |
| SAP_LOT_VERIFY_URL | (obsolète LIM-93 V2) remplacé par SAP_CPI_TOKEN_URL / SAP_CPI_ENDPOINT_URL / SAP_ATH214_* |
| EV_RETURN | Champ réponse API SAP : "X" = aucune erreur, "" = erreur (afficher ET_RETURN) |
| ET_BATCH | Tableau réponse API SAP ATH214 : lots trouvés avec MATNR, CHARG, BATCH_OFF, DESCRIPTION, DESTINATION, OWNER, ZDEPLOY, VAR_DESC, COM_TRT_DESC |
| ZDEPLOY | Champ ET_BATCH : "X" = lot déployé/vendu par Limagrain (seul autorisé en réception retour), "" = non - confirmé LIM-93 V2 (ex-EV_DEPLOY) |
| VAR_DESC | Champ ET_BATCH : variété - affiché au choix du lot SAP (LIM-93) |
| COM_TRT_DESC | Champ ET_BATCH : traitement commercial - affiché au choix du lot SAP (LIM-93) |
| RECEPTION_CONFORM_STOCK_STATUS | Paramètre LIM-93 : nom du statut de stock fictif « Stock conforme » (n'applique aucun statut) |
| CstAtt11 (support) | Marqueur de rangement ASRS pour retour client - `true` une fois le support rangé, jamais remis à false |
| CstAtt01 (réception) | Flag clôture retour en cours - `true` = en attente de rangement ASRS complet |
| CstAtt01 (OE) | Flag hors tolérance - `true` = bloque auto-close OE et ROF, affichage rouge |
| CstAtt01 (ligne de stock) | Poids unitaire mesuré au PIE - sert à la répartition au prorata (pas au seuil de tolérance, qui utilise l'ITM depuis 19/06/2026) |
| AutoCloseReception | Paramètre WMS : `true` = clôture auto de la réception quand conditions custom remplies |
| AutoCloseInboundOrder | Paramètre WMS : `true` = auto-clôture OE à 100 % ou dans tolérance (ROF envoyé) |
| Reception_Close_PR_V2 | Workflow custom de clôture de réception gère condition retour (A) et tolérance par ligne (B) |
| Reception_Close_PR_V2 | Workflow custom de clôture de réception - gère condition retour (A) et tolérance par ligne (B) |
| NON RANGEE | Valeur zone de stockage dans le REF pour supports non encore rangés en ASRS (fournisseur/intersite uniquement) |
| Mini Job | Sous-workflow du Mega Job exécute l'assignation effective pour un type de tâche |
| LOC.SEND | Transaction custom WMS déclenchée par le job LOC signal au GNA pour générer le message LOC |
| BOO (script) | Script Boo exécuté par le GNA contient la logique métier d'agrégation et formatage des messages |
| SAP-CPI | SAP Cloud Platform Integration middleware cloud SAP réceptionnant les messages WMS via API REST |
| Mini Job | Sous-workflow du Mega Job - exécute l'assignation effective pour un type de tâche |
| LOC.SEND | Transaction custom WMS déclenchée par le job LOC - signal au GNA pour générer le message LOC |
| BOO (script) | Script Boo exécuté par le GNA - contient la logique métier d'agrégation et formatage des messages |
| SAP-CPI | SAP Cloud Platform Integration - middleware cloud SAP réceptionnant les messages WMS via API REST |
| ATHInboundMessage | Endpoint unique SAP-CPI recevant tous les messages WMS (`/http/ATHInboundMessage`) |
| MessageSAP | Code de routage CPI (ATH201=LOC, ATH202=LOF, ATH214=batch, ATH215=REF Supplier, ATH217=REF Return) |
| CstAtt20 (REF) | Type de préavis de réception (Supplier/Return) set par REF01Observer pour routage CPI |
| CPI_AUTH_URL | Clé config GNA URL du serveur d'authentification OAuth SAP |
| CPI_ENDPOINT_URL | Clé config GNA endpoint unique SAP-CPI |
| VBELN | Code livraison sortante SAP champ LOC pour ACTION=P (= SorCode côté WMS) |
| POSNR | Ligne de livraison sortante SAP champ LOC pour ACTION=P |
| MessageSAP | Code de routage CPI (ATH201=LOC, ATH202=LOF, ATH214=batch, ATH215=REF Retour, ATH217=REF Supplier / ROF) - sens corrigé LIM-89 revue de code |
| CstAtt20 (REF) | Type de préavis de réception (Supplier/Return) - set par REF01Observer pour routage CPI |
| CPI_AUTH_URL | Clé config GNA - URL du serveur d'authentification OAuth SAP |
| CPI_ENDPOINT_URL | Clé config GNA - endpoint unique SAP-CPI |
| VBELN | Code livraison sortante SAP - champ LOC pour ACTION=P (= SorCode côté WMS) |
| POSNR | Ligne de livraison sortante SAP - champ LOC pour ACTION=P |
| ASRS1..4 / ASRS34 | Codes zones SAP correspondant aux TK1-4 pour le message LOC |
| PK_TRANSPORTEUR_MESSAGERIE | Paramètre par transporteur contient le code PK assigné aux commandes Messagerie de ce transporteur |
| PK_TRANSPORTEUR_MESSAGERIE | Paramètre par transporteur - contient le code PK assigné aux commandes Messagerie de ce transporteur |
| MAX_NB_BUFFER_PK | Paramètre de capacité buffer par PK (valeur par défaut : 3) |
| ES_X | Zone d'attente (buffer) devant les postes de sortie stockage temporaire des palettes en attente de séquençage |
| TaskCreatedEvent | Événement WMS déclenché à la création d'une tâche utilisé pour le séquençage TK→PS |
| OutboundOrderReleasedEvent | Événement WMS déclenché au (re)lancement d'un OS utilisé pour le séquençage TK→PS |
| PC | Palette Complète palette d'expédition sans besoin de picking |
| PP | Palette de Picking palette mère qui part au PK pour prélèvement |
| PF | Palette Fille palette sortie du picking, retour ASRS |
| Défrag client custom | Custom LIM-87 : défrag shipping par tournée quand quai non assigné éligibilité tout-ou-rien au niveau RUT |
| ES_X | Zone d'attente (buffer) devant les postes de sortie - stockage temporaire des palettes en attente de séquençage |
| TaskCreatedEvent | Événement WMS déclenché à la création d'une tâche - utilisé pour le séquençage TK→PS |
| OutboundOrderReleasedEvent | Événement WMS déclenché au (re)lancement d'un OS - utilisé pour le séquençage TK→PS |
| PC | Palette Complète - palette d'expédition sans besoin de picking |
| PP | Palette de Picking - palette mère qui part au PK pour prélèvement |
| PF | Palette Fille - palette sortie du picking, retour ASRS |
| Défrag client custom | Custom LIM-87 : défrag shipping par tournée quand quai non assigné - éligibilité tout-ou-rien au niveau RUT |
| Stacker crane tri multi-TK | Custom LIM-88 : override WF tri stacker crane pour analyser les STOP sur tous les TK (pattern Bardinet) |
| Line.CstAtt | Numéro de séquence (entier) sur chaque tâche de picking — définit l'ordre de sortie ASRS. Ex-aequo possibles |
| Stage virtuel X_EXP | Custom LIM-94 : « faux » stage (A_EXP, B_EXP...) par image de quai (capacité 26, 1 emplacement) - seul type de stage assignable à un OS/Route pour l'expédition ; l'image de quai associée est la seule ayant une route vers ce stage |
| Faux stage (A à K) | Custom LIM-97 (réception) : station fictive, une par image de quai, sélectionnable comme **unité** à l'assignation SmartUI - évite l'affichage des 26 sous-emplacements du poumon. Distinct des stages virtuels `X_EXP` (expédition, LIM-94) |
| Vrai stage | LIM-97 : poumon physique de 26 emplacements où les palettes sont réellement déposées ; conserve une route vers le quai d'expédition (chargement camion) |
| CST_AssignDockStage | Job LIM-94 (WF `CST_Job_AssignStage`, 30 s) : assigne automatiquement une image de quai aux OS/Routes éligibles (libéré, picking revenu TK, H-3 date d'expédition, hors Recertification) |
| Line.CstAtt | Numéro de séquence (entier) sur chaque tâche de picking - définit l'ordre de sortie ASRS. Ex-aequo possibles |
| OS.CstAtt | Flag booléen sur l'OS : `false` = séquences non calculées (stacker_crane bloqué), `true` = prêt |
| CONTROLE_TRAITEMENT_COMMERCIAL | Paramètre booléen contrôlant le traitement commercial dans le séquençage picking |
| iGO easy | Fleet manager AGV STILL (KION Group) variante simplifiée de PACS |
| PACS | Productized Automated Concept Solutions offre fleet manager KION large couvrant iGO |
| iGO easy | Fleet manager AGV STILL (KION Group) - variante simplifiée de PACS |
| PACS | Productized Automated Concept Solutions - offre fleet manager KION large couvrant iGO |
| E'tricc | Moteur interne du fleet manager iGO/PACS |
| MyMA | Suite logicielle admin KION : Vue3 + .NET8 + Postgres héberge iGO côté admin |
| EXV CB iGo | Modèle physique AGV gerbeur électrique automatisé STILL (longueur 3 383 mm) |
| Transport (iGO) | Ordre de transport iGO équivalent de l'`AgvTask` EasyWMS |
| Load (iGO) | Charge physique iGO équivalent du `Container` EasyWMS |
| LoadType (iGO) | Catalogue de types de charge iGO équivalent du `ContainerType` |
| Location (iGO) | Point physique iGO avec `possibleActions` équivalent de `IRealLocation` |
| Group (iGO) | Ensemble de Locations iGO pour décision tardive équivalent de `WorkingZone` |
| transportHostId | Identifiant hôte (WMS) du transport iGO correspond à `OrderExtId` (= TaskNumber) |
| MyMA | Suite logicielle admin KION : Vue3 + .NET8 + Postgres - héberge iGO côté admin |
| EXV CB iGo | Modèle physique AGV - gerbeur électrique automatisé STILL (longueur 3 383 mm) |
| Transport (iGO) | Ordre de transport iGO - équivalent de l'`AgvTask` EasyWMS |
| Load (iGO) | Charge physique iGO - équivalent du `Container` EasyWMS |
| LoadType (iGO) | Catalogue de types de charge iGO - équivalent du `ContainerType` |
| Location (iGO) | Point physique iGO avec `possibleActions` - équivalent de `IRealLocation` |
| Group (iGO) | Ensemble de Locations iGO pour décision tardive - équivalent de `WorkingZone` |
| transportHostId | Identifiant hôte (WMS) du transport iGO - correspond à `OrderExtId` (= TaskNumber) |
| X-API-Key | Méthode d'authentification officielle API iGO (confirmée par STILL, FAQ #8) |
| Gateway iGO | Pool IIS C# .NET 8 middleware côté flotte à développer par Mecalux pour traduire tables AGV_* ↔ API REST PACS |
| AGV_OUTPUTQUEUE | Table FIFO sortante ordres WMS vers fleet manager (via middleware) |
| AGV_INPUTQUEUE | Table FIFO entrante phases/statuts fleet manager vers WMS (via middleware) |
| AGV_EAG | Table data des ordres AGV payload détaillé de chaque ordre (lu par le middleware via batchId) |
| AGV_AGE | Table data des phases AGV payload détaillé de chaque événement reçu du fleet manager |
| AGV_AGS | Table data des statuts AGV payload détaillé du statut de chaque véhicule |
| ATH002 | Code interface SAP → EasyWMS fiche article (BATMAS → ITM01) |
| ATH103A | Code interface SAP → EasyWMS ordre de réception fournisseur (DELIVRY07 → ROR01) |
| ATH108 | Code interface SAP → EasyWMS ordre de réception retour (ORDRSP → ROR01) |
| ATH103B | Code interface SAP → EasyWMS ordre de sortie (SHPUNT7 → RUT) |
| ATH102BOM | Code interface SAP → EasyWMS ordre d'expédition production (LOIPRO → SOR) |
| ATH111 | Code interface SAP → EasyWMS HU à recevoir ou changement HU (ZSTKATH11 → ASN/STR) |
| ATH302 | Code interface SAP → EasyWMS tâche inventaire/échantillon (ZQMINSPLOT → COR) |
| ATH214 | Code interface EasyWMS → SAP vérification lot retour client (Z_IATH214) |
| ATH215 | Code interface EasyWMS → SAP bon de réception fournisseur (Z_IAT215 → REF) |
| ATH217 | Code interface EasyWMS → SAP — bon de réception retour (Z_IAT217 → REF) |
| ATH201 | Code interface EasyWMS → SAP mouvement stock (Z_IAT201 → LOC/STV) |
| ATH202 | Code interface EasyWMS → SAP chargement / goods issue (Z_IAT202 → LOF) |
| IV_LGNUM | Champ ATH214 requête code site (CHAR 4, toujours "WF02") |
| IV_BATCH_OFF | Champ ATH214 requête lot officiel scanné (CHAR 30) |
| IV_RETURN | Champ ATH214 requête code OE retour (CHAR 10) |
| MATNR | Champ ATH214 réponse product code SAP = code lot WMS (CHAR 40, mapping inversé) |
| CHARG | Champ ATH214 réponse lot SAP = code article WMS (CHAR 10, mapping inversé) |
| ItemAlias | Entité EasyWMS alias d'un article (utilisé pour le lot officiel Limagrain) |
| CstAtt12 (support) | **Proposé** : code OE associé à la palette dès l'image de quai (LIM-64 évol., reporté) |
| Gateway iGO | Pool IIS C# .NET 8 - middleware côté flotte à développer par Mecalux pour traduire tables AGV_* ↔ API REST PACS |
| AGV_OUTPUTQUEUE | Table FIFO sortante - ordres WMS vers fleet manager (via middleware) |
| AGV_INPUTQUEUE | Table FIFO entrante - phases/statuts fleet manager vers WMS (via middleware) |
| AGV_EAG | Table data des ordres AGV - payload détaillé de chaque ordre (lu par le middleware via batchId) |
| AGV_AGE | Table data des phases AGV - payload détaillé de chaque événement reçu du fleet manager |
| AGV_AGS | Table data des statuts AGV - payload détaillé du statut de chaque véhicule |
| ATH002 | Code interface SAP → EasyWMS - fiche article (BATMAS → ITM01) |
| ATH103A | Code interface SAP → EasyWMS - ordre de réception fournisseur (DELIVRY07 → ROR01) |
| ATH108 | Code interface SAP → EasyWMS - ordre de réception retour (ORDRSP → ROR01) |
| ATH103B | Code interface SAP → EasyWMS - ordre de sortie (SHPUNT7 → RUT) |
| ATH102BOM | Code interface SAP → EasyWMS - ordre d'expédition production (LOIPRO → SOR) |
| ATH111 | Code interface SAP → EasyWMS - HU à recevoir ou changement HU (ZSTKATH11 → ASN/STR) |
| ATH302 | Code interface SAP → EasyWMS - tâche inventaire/échantillon (ZQMINSPLOT → COR) |
| ATH214 | Code interface EasyWMS → SAP - vérification lot retour client (Z_IATH214) |
| ATH215 | Code interface EasyWMS → SAP - REF type Retour / bon de réception retour (Z_IAT215) |
| ATH217 | Code interface EasyWMS → SAP - REF type Supplier / bon de réception fournisseur + ROF (Z_IAT217) |
| ATH201 | Code interface EasyWMS → SAP - mouvement stock (Z_IAT201 → LOC/STV) |
| ATH202 | Code interface EasyWMS → SAP - chargement / goods issue (Z_IAT202 → LOF) |
| IV_LGNUM | Champ ATH214 requête - code site (CHAR 4, toujours "WF02") |
| IV_BATCH_OFF | Champ ATH214 requête - lot officiel scanné (CHAR 30) |
| IV_RETURN | Champ ATH214 requête - code OE retour (CHAR 10) |
| MATNR | Champ ATH214 réponse - product code SAP = code lot WMS (CHAR 40, mapping inversé) |
| CHARG | Champ ATH214 réponse - lot SAP = code article WMS (CHAR 10, mapping inversé) |
| ItemAlias | Entité EasyWMS - alias d'un article (utilisé pour le lot officiel Limagrain) |
| CstAtt12 (support) | Conteneur étiqueté. LIM-96 V2 le pose à `true` à l'écran de collage des étiquettes (déclaration image de quai) pour toutes les palettes, y compris sans étiquette (production/piles), et conditionne la prise AGV du job LIM-71 à ce flag. ⚠️ À réconcilier avec la page LIM-71 (condition CstAtt12 indiquée comme retirée). La proposition « code OE associé » a finalement été portée par CstAtt13 |
| CstAtt14 (support) | Palette étiquetée au PK (string, LIM-91) - flag de l'étiqueteuse automatique au poste de sortie TK : `true` = déjà étiquetée, `false` = pas encore, `error` = échec impression |
| EPC | Electronic Product Code - banque mémoire RFID (128 bits sur puce Impinj M830) retenue pour l'encodage 7 bits des HU_ID, en remplacement de la banque User (LIM-68, en attente) |
| CIPAM | Intégrateur / portique RFID (lecture) - renvoie l'hexa brut à EasyWMS, qui décode (LIM-68) |
| Bartender | Logiciel d'étiquetage côté SAP (éditeur Eliatys) - sa convention de packing 7 bits doit être identique bit pour bit à celle d'EasyWMS pour un décodage mutuel (LIM-68) |
| CST_PrintRFIDLabel | Workflow custom générant le code ZPL de l'étiquette support (mono/multiref) et lançant l'impression via PrinterJobPrintDocCommand (LIM-68) |
| Mot PC (RFID) | Protocol Control - préfixe EPC dont les 5 premiers bits portent la longueur EPC en mots de 16 bits (8 = 128 bits) ; sert à discriminer legacy vs nouvel encodage à la lecture (LIM-68) |
| CST_PkStationWorkMode | Entité custom contenant le mode de travail et sa priorité pour un PK - affichée dans PkMpVList (LIM-69) |
| CST_PickingStationAssignment_Job | Workflow + job du Mega Job - intervalle 5 s, oriente les tâches vers les PK selon modes et priorités (LIM-70) |
| Releasing (OS) | Statut d'un ordre de sortie en cours de libération - si au moins un OS y est, le Mega Job sort sans assigner (query CST_AnyOutboundOrderReleasingStatus, LIM-70) |
## Termes standard EasyWMS (rappel)
> Ces termes sont définis dans le [glossaire standard](../glossary.md) ;
> ils sont rappelés ici pour lecture rapide. Se référer au standard pour
> la définition complète et les liens vers les pages concernées.
| Terme | Signification |
|-------|---------------|
| SOR | Shipping Order Request - message ERP entrant, crée un ordre d'expédition |
| RUT | Route - message ERP entrant, définit une tournée transporteur |
| SOF | Shipping Order Fulfilled - message ERP sortant, ordre expédié |
| LOF | Load Order Fulfilled - message ERP sortant, chargement camion terminé |
| ASN | Advanced Shipping Notice - pré-avis de réception avec contenu connu |
| ROR | Reception Order Request - message ERP entrant, crée un ordre de réception |
| ROF | Reception Order Fulfilled - message ERP sortant, ordre de réception clôturé |
| REF | Reception Fulfilled - message ERP sortant, réception individuelle finalisée |
| STV | Stock Variation - message WMS sortant, notification de variation de stock |
| STR | Stock Request - message ERP entrant, demande changement statut/propriétaire/article |
| STC | Stock Confirmation - message WMS sortant, confirmation changement statut |
| SCR | Stock Count Request - message ERP entrant, demande image de stock |
| WSC | Warehouse Stock Confirmation - message WMS sortant, confirmation image de stock |
| COR | Count Order Request - message ERP entrant, demande d'inventaire |
| COF | Count Order Fulfilled - message WMS sortant, confirmation échantillonnage |