diff --git a/wiki/CLAUDE.md b/wiki/CLAUDE.md index afec767..8d8de10 100644 --- a/wiki/CLAUDE.md +++ b/wiki/CLAUDE.md @@ -1,592 +1,592 @@ -# CLAUDE.md — Wiki EasyWMS (Cowork) - -## Mission - -Tu maintiens un **wiki EasyWMS en Markdown** composé de deux parties indépendantes : - -- Le **wiki standard EasyWMS** (dossiers `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md`) - documentation générique du produit EasyWMS. Également accessible via le MCP server `wms-wiki`. -- Le **wiki projet Limagrain** (dossier `limagrain/`) - documentation du delta projet : customs, configurations, décisions, flux spécifiques. Chaque page renvoie vers la page standard correspondante quand un concept générique existe. - ---- - -## Modes de travail - -Ce dépôt fonctionne selon **deux modes exclusifs**. Le mode détermine le périmètre d'écriture ; l'autre wiki est en lecture seule. - -### Sélection du mode - -**Comportement par défaut : toujours demander.** Si Arthur ne précise pas le mode dans son prompt, demande-lui avant de commencer toute modification : - -> « On travaille sur le wiki standard ou sur le wiki Limagrain ? » - -Déclencheurs explicites : - -- `mode: standard` ou mention explicite du wiki standard → mode standard -- `mode: limagrain` ou mention explicite du wiki Limagrain / projet → mode limagrain - -### `mode: standard` - Wiki standard EasyWMS - -| Aspect | Règle | -|--------|-------| -| **Écriture** | `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md`, `_index.md` | -| **Lecture seule** | `limagrain/` (ne jamais modifier) | -| **Template** | Template standard (voir section dédiée) | -| **Workflow** | Workflow de consommation structuré (sources → intégration → log → archivage) | -| **Index** | Mettre à jour `_index.md` si des pages sont créées/modifiées | -| **Glossaire** | Mettre à jour `glossary.md` si de nouveaux termes apparaissent | - -### `mode: limagrain` - Wiki projet Limagrain - -| Aspect | Règle | -|--------|-------| -| **Écriture** | `limagrain/` uniquement. **Exception** : `_index.md` racine (section `## Limagrain — Projet` seulement) | -| **Lecture seule** | `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md` (ne jamais modifier) | -| **Template** | Template Limagrain (voir section dédiée) | -| **Workflow** | Workflow de consommation structuré (sources → intégration → log → archivage) | -| **Delta uniquement** | Ne jamais dupliquer le standard ; renvoyer vers lui et ne documenter que le delta | -| **Glossaire** | Mettre à jour `limagrain/glossaire-limagrain.md` si de nouveaux termes apparaissent | -| **README** | Mettre à jour `limagrain/README.md` si des pages sont créées | - -### Règle de cloisonnement - -**Ne jamais modifier un fichier hors du périmètre d'écriture du mode actif.** Cette règle est absolue. Si une modification semble nécessaire dans l'autre périmètre, le signaler à Arthur et lui proposer de changer de mode. - ---- - -## Arborescence - -``` -wiki-ameliorator-v2_x-Limagrain/ ← racine du dépôt -│ -├── CLAUDE.md ← CE FICHIER -│ -├── ── WIKI STANDARD (écriture en mode standard) ── -├── architecture/ ← 6 pages standard -├── concepts/ ← 35 pages standard -├── modules/ ← 24 pages standard -├── operations/ ← 19 pages standard -├── glossary.md ← glossaire standard -├── _index.md ← index global (standard + Limagrain) -├── _lint_report.md -├── _log.md -│ -├── ── SOURCES (inbox) ── -├── sources/ ← déposer ici les ressources à intégrer -│ └── archives/ ← ressources déjà traitées -│ -├── ── JOURNAL ── -├── consume.log ← journal de consommation (append-only) -│ -└── ── WIKI LIMAGRAIN (écriture en mode limagrain) ── - limagrain/ - ├── README.md ← index + table des matières du wiki Limagrain - ├── glossaire-limagrain.md ← termes et acronymes spécifiques projet - │ - ├── 01-inbound/ - │ ├── _index.md - │ ├── reception-fournisseur.md - │ ├── reception-retour.md - │ ├── controle-qualite-reception.md - │ └── flux-erp-inbound.md - │ - ├── 02-stockage/ - │ ├── _index.md - │ ├── asrs-miniload.md - │ ├── galileo-config.md - │ ├── putaway-strategies.md - │ ├── zones-stockage.md - │ └── defragmentation.md - │ - ├── 03-picking/ - │ ├── _index.md - │ ├── picking-combinatoire.md - │ ├── stations-picking.md - │ ├── waves-groupes.md - │ └── replenishment.md - │ - ├── 04-outbound/ - │ ├── _index.md - │ ├── flux-expedition.md - │ ├── shipping-orders.md - │ ├── consolidation-chargement.md - │ └── flux-erp-outbound.md - │ - ├── 05-agv/ - │ ├── _index.md - │ ├── still-igo-integration.md - │ ├── agv-stations-routes.md - │ └── agv-troubleshooting.md - │ - ├── 06-erp-interface/ - │ ├── _index.md - │ ├── messages-reference.md - │ ├── mapping-erp-wms.md - │ └── interface-monitoring.md - │ - ├── 07-admin/ - │ ├── _index.md - │ ├── utilisateurs-groupes.md - │ ├── parametres-projet.md - │ └── ad-customs.md - │ - ├── 08-transverse/ - │ ├── _index.md - │ ├── jira-tickets-cles.md - │ ├── decisions-architecture.md - │ ├── questions-ouvertes.md - │ └── historique-projet.md - │ - └── assets/ -``` - -L'arborescence `limagrain/` ci-dessus est le **squelette initial**. Tu peux créer de nouvelles pages ou sous-dossiers si le contenu le justifie — respecte les conventions ci-dessous et mets à jour `limagrain/README.md` en conséquence. - ---- - -## Workflow de consommation - -Ce workflow s'applique aux **deux modes**. Quand Arthur demande d'intégrer des ressources ou quand des fichiers sont détectés dans `sources/` : - -### Étape 1 — Inventaire - -Lis le contenu de `sources/` (ignore `archives/`) et liste les fichiers présents. Pour chaque fichier, identifie : - -- Le type (Confluence export, note Obsidian, mail, Excel, PDF, Word, capture d'écran) -- Le domaine fonctionnel probable -- Les infos clés à extraire -- **Le mode cible** : standard ou limagrain (si mixte, le signaler) - -Présente ce résumé à Arthur avant de commencer l'intégration. **Confirme le mode actif** si pas encore établi. - -### Étape 2 — Rédaction / Mise à jour - -Pour chaque ressource : - -1. **Vérifie le contexte existant** : consulte les pages concernées via le wiki local ET/OU appelle `wms-wiki:search_wiki` ou `wms-wiki:get_wiki_page` via MCP -2. **Identifie la page cible** dans le périmètre d'écriture du mode actif (existante ou à créer) -3. **Rédige ou mets à jour** la page en respectant le template du mode actif -4. **Cross-référence** : ajoute des liens vers les autres pages du même wiki si pertinent -5. **Mets à jour le glossaire** du mode actif si de nouveaux termes apparaissent -6. **Mets à jour l'index** : `_index.md` (mode standard) ou `limagrain/README.md` (mode limagrain) - -**Spécifique mode limagrain** : ne documenter que le delta par rapport au standard. Renvoyer vers la page standard pour les concepts génériques. - -### Étape 3 — Log et archivage - -Après intégration de chaque fichier : - -1. **Ajoute une entrée** dans `consume.log` à la racine (format ci-dessous), en précisant le mode -2. **Déplace le fichier** de `sources/` vers `sources/archives/` - -### Étape 4 — Compte rendu - -Après chaque session d'intégration, résume à Arthur : - -- Mode utilisé -- Fichiers consommés -- Pages créées ou modifiées -- Nouvelles cross-références -- Questions ouvertes identifiées -- Termes ajoutés au glossaire - ---- - -## Format du `consume.log` - -Fichier append-only à la racine du dépôt. Chaque session est datée avec le mode utilisé, chaque fichier a une entrée. - -``` -## [2026-05-05] session-001 (mode: limagrain) - -- **Fichier** : `CR_reunion_picking_2026-04-15.pdf` - **Type** : CR réunion - **Action** : Mis à jour `limagrain/03-picking/picking-combinatoire.md` (ajout section CstAtt handshake) - **Cross-refs** : Lien ajouté depuis `limagrain/04-outbound/flux-expedition.md` - **Questions** : "Valeur par défaut CstAtt quand lot inconnu ?" → ajouté dans `limagrain/08-transverse/questions-ouvertes.md` - -## [2026-05-10] session-002 (mode: standard) - -- **Fichier** : `Notes_reception_multi-reference.md` - **Type** : Notes techniques - **Action** : Mis à jour `concepts/reception.md` (ajout section réception multi-référence) - **Cross-refs** : Lien ajouté depuis `modules/inbound.md` - **Questions** : aucune -``` - ---- - -## Templates de page wiki - -### Template standard (mode: standard) - -Chaque fichier `.md` dans `architecture/`, `concepts/`, `modules/`, `operations/` suit la structure ci-dessous. Les sections sont **adaptables au sujet** - seuls le front matter, l'Overview et la section Related sont obligatoires. Les autres sections sont des suggestions courantes à utiliser quand elles sont pertinentes. - -**Langue** : anglais (cohérent avec les pages existantes). Termes techniques WMS en anglais. - -```markdown ---- -title: "Page Title" -type: concept | module | architecture | operation -sources: - - areas/path/to/source.md - - sources/archives/source-file.md -related: - - concepts/other-page.md - - modules/related-module.md -last_compiled: "2026-05-15" ---- - -# Page Title - -## Overview - -1-2 paragraphes décrivant le concept, module ou opération. Contexte fonctionnel, rôle dans EasyWMS, et relations principales avec les autres composants. - -## (Sections libres adaptées au sujet) - -Le corps de la page est structuré librement selon le sujet. Les sections suivantes sont des patterns courants dans le wiki existant - les utiliser quand elles sont pertinentes, les omettre ou les adapter sinon : - -- **Architecture / Communication protocol** — pour les pages techniques (galileo, AGV, etc.) -- **Parameters** — tableau des paramètres de configuration liés au sujet : - -| Parameter | Effect | -|---|---| -| `PARAM_NAME` | Description de l'effet | - -- **ERP Integration** — tableau des messages ERP liés : - -| Message | Direction | Trigger | -|---|---|---| -| `MSG` | ERP → WMS | Description | - -- **Common Errors** — erreurs fréquentes avec cause et solution -- **Interface Paths** — chemins UI (PC/SmartUI et RFT) pour accéder aux fonctionnalités : - -| Path | Equipment | Description | -|---|---|---| -| `Menu > Sub-menu` | PC / RFT | Description | - -## Related - -- [concepts/other-page.md](../concepts/other-page.md) — brève description du lien -- [modules/related-module.md](../modules/related-module.md) — brève description du lien -``` - -**Règles front matter :** - -- `type` : obligatoire, une des 4 valeurs (concept, module, architecture, operation) -- `sources` : liste des fichiers sources utilisés pour compiler la page (chemins relatifs) -- `related` : liste des pages liées (chemins relatifs depuis la racine du dépôt) -- `last_compiled` : date ISO de dernière mise à jour significative - -### Template Limagrain (mode: limagrain) - -Chaque fichier `.md` dans `limagrain/` doit suivre cette structure : - -```markdown ---- -title: "Titre de la page" -tags: [domaine, sous-domaine, concept] -status: draft | review | validated -standard_ref: concepts/reception.md -jira_refs: [LIM-70, LIM-75] -confluence_refs: [] -sources: [] -last_updated: 2026-05-05 -author: Arthur ---- - -# Titre de la page - -> **Résumé** : 1-2 phrases décrivant le sujet et pourquoi c'est spécifique Limagrain. - -> **Standard EasyWMS** : → voir [Nom page standard](../../concepts/page.md) -> Ce qui suit documente les **spécificités Limagrain** par rapport au standard. - -## Contexte projet - -Pourquoi ce sujet est spécifique chez Limagrain. Quel besoin métier. - -## Configuration / Implémentation - -Détails techniques : paramètres, valeurs, éléments AD customs. - -## Flux fonctionnel - -Description du flux. Utiliser un diagramme Mermaid si pertinent : - -​```mermaid -sequenceDiagram - participant ERP - participant WMS - ERP->>WMS: SOR01 - WMS->>WMS: Stock assignment - WMS-->>ERP: SOF01 -​``` - -## Points d'attention - -⚠️ Particularités, pièges connus, bugs rencontrés, workarounds. - -## Questions ouvertes - -- [ ] Question 1 (@Théo) -- [ ] Question 2 (@Michael) - -## Historique des modifications - -| Date | Auteur | Modification | -|------|--------|-------------| -| 2026-05-05 | Arthur | Création initiale | - -## Références - -| Source | Type | Date | -|--------|------|------| -| Jira LIM-70 | Ticket | 2025-xx-xx | -| "Titre page" Confluence | Page | 2025-xx-xx | -| CR réunion picking | PDF | 2026-04-15 | -``` - ---- - -## Template `_index.md` (sommaire de section) - -```markdown ---- -title: "Inbound — Vue d'ensemble" -tags: [inbound, index] -status: draft -last_updated: 2026-05-05 ---- - -# Inbound — Vue d'ensemble - -> **Périmètre** : réception fournisseur, retours, contrôle qualité à réception, messages ERP inbound. - -> **Standard EasyWMS** : voir [Reception](../../concepts/reception.md), [Order Inbound](../../concepts/order-inbound.md) - -## Pages de cette section - -- [Réception fournisseur](reception-fournisseur.md) -- [Réception retour](reception-retour.md) -- [Contrôle qualité réception](controle-qualite-reception.md) -- [Flux ERP inbound](flux-erp-inbound.md) - -## Vue synthétique du flux inbound Limagrain - -(Diagramme Mermaid du flux global de la section — à compléter) -``` - ---- - -## Liens entre wikis - -### Mode standard - liens entre pages standard - -Chemins relatifs entre dossiers standard : - -```markdown -→ voir [Reception](../concepts/reception.md) -→ voir [Galileo Integration](../architecture/galileo-integration.md) -→ voir [Glossaire](../glossary.md) -``` - -### Mode limagrain - depuis une page Limagrain → page standard - -Chemins relatifs remontant au-dessus de `limagrain/` : - -```markdown -→ voir [Reception standard](../../concepts/reception.md) -→ voir [Picking standard](../../concepts/picking.md) -→ voir [Galileo Integration](../../architecture/galileo-integration.md) -``` - -### Mode limagrain - entre pages Limagrain - -Chemins relatifs au sein de `limagrain/` : - -```markdown -Voir aussi [Flux expédition](../04-outbound/flux-expedition.md) -Voir aussi [Glossaire Limagrain](../glossaire-limagrain.md) -``` - -### Vers Jira - -```markdown -[LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) -``` - ---- - -## Conventions strictes - -### Nommage - -- Fichiers : **kebab-case**, pas d'accents, `.md` → `picking-combinatoire.md` -- Dossiers dans `limagrain/` : numérotés `01-` à `08-` + kebab-case -- Assets : `{section}-{description}.{ext}` → `03-picking-schema-stations.png` - -### Markdown lint - -Règles à respecter (compatible markdownlint) : - -- Headings ATX (`#`) uniquement, pas de saut de niveau (h1 → h3 interdit) -- Pas de trailing spaces -- Pas de lignes vides multiples (max 1) -- Line length ≤ 120 caractères (souple pour tableaux et liens) -- Listes entourées de lignes vides -- Premier élément du fichier = front matter `---` puis heading H1 -- Pas de headings dupliqués dans un même fichier -- Liens relatifs entre pages (pas de chemins absolus) - -### Langue - -- **Français** pour la rédaction -- Termes techniques WMS en anglais acceptés (putaway, picking, stock assignment, etc.) -- Noms de messages ERP en majuscules : SOR, SOF, ASN, RUT, LOF -- Noms d'entités AD en anglais PascalCase : OutboundOrder, ContainerStock, etc. - -### Intégrité des fichiers après écriture - -Les outils Write et Edit peuvent tronquer silencieusement le contenu -d'un fichier long sans signaler d'erreur. Pour éviter toute perte : - -1. **Vérifier après écriture** : après tout Write ou Edit touchant plus - de ~50 lignes, exécuter en bash `wc -l` + `tail -3` sur le fichier - pour confirmer que le nombre de lignes est cohérent et que le fichier - se termine correctement (dernière section attendue, pas de coupure - en milieu de phrase) -2. **Écriture incrémentale** : pour les fichiers longs (> 150 lignes), - ne jamais réécrire tout le contenu d'un coup via Write. Préférer des - Edit ciblés section par section. Si un Write complet est inévitable, - découper en deux passes (première moitié via Write, seconde moitié - via Edit append) -3. **Si troncature détectée** : ne pas continuer la session sans - restaurer le contenu manquant. Signaler le problème à Arthur. - ---- - -## Contexte projet Limagrain - -### Équipe - -| Personne | Rôle | -|----------|------| -| Arthur | Chef de projet technique - Intégrateur WMS / liaison client-dev, auteur du wiki | -| Nicolas Chabanis | Responsable développement | -| Théo | Chef de projet général - pilote tout le projet | -| Michael | Directeur des opérations - Pilote Arthur | -| Fabien Mogade | Développeur | -| Fares Zaroui | Développeur | -| Justine Beutin | Chef de projet fonctionnelle - Pilote le planning et principale interlocutrice avec Limagrain | - -### Périmètre fonctionnel (par priorité) - -1. **Réception / Inbound** — modes de réception, ASN, SSCC/LPN, mono-référence -2. **Stockage / ASRS / Galileo** — miniload, transstockeurs, stations, routes -3. **Picking / Préparation** — picking combinatoire (CR V3.0, 4-job, CstAtt), stations -4. **Expédition / Outbound** — flux SOR → RUT → SOF → LOF, chargement -5. **Intégration AGV / Still** — iGo API, DB protocol, transport lifecycle -6. **Intégration ERP** — catalogue messages, mapping champs -7. **Administration** — RBAC, groupes, paramètres, éléments AD customs - -### Glossaire initial (termes spécifiques Limagrain) - -| 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 | -| PIE | Station de pesée 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 | - -### Jira - -- **Projet** : Limagrain (préfixe `LIM-`) -- **Cloud ID** : `d79e5957-a82c-4b8f-bd19-d553ef331c42` -- **URL base** : `https://easywmsfrance.atlassian.net` - -### MCP tools disponibles - -| Serveur | Usage | -|---------|-------| -| `wms-wiki:*` | Wiki standard EasyWMS — search, get_page, get_glossary_term, list_sections, get_related_pages | -| `wms:*` | Données WMS live — queries LINQ, entities, workflows, AD, metadata | -| `Atlassian:*` | Jira + Confluence — recherche JQL/CQL, lecture tickets/pages | - -**Utilise `wms-wiki` systématiquement** pour vérifier les concepts standard avant de rédiger. -**Utilise `Atlassian` avec le cloudId ci-dessus** pour rechercher tickets ou pages Confluence référencés. -**Consulte aussi les pages standard locales** (`concepts/`, `modules/`, etc.) quand elles sont plus complètes que le MCP. - ---- - -## Règles impératives - -### Règles communes (les deux modes) - -1. **Cloisonnement strict** — ne jamais modifier un fichier hors du périmètre d'écriture du mode actif (voir section Modes de travail) -2. **Toujours sourcer** — chaque information vient d'une source identifiable. Cite-la dans le front matter `sources` et le tableau Références -3. **Marquer les incertitudes** — `> ⚠️ À confirmer` ou `- [ ] Question (@personne)` -4. **Log obligatoire** — chaque fichier consommé → entrée dans `consume.log` AVANT archivage, avec le mode indiqué -5. **Archivage obligatoire** — après intégration, déplacer le fichier de `sources/` vers `sources/archives/` -6. **Cross-référencer** — quand une page mentionne un concept couvert ailleurs dans le même wiki, ajouter un lien -7. **Granularité** — un fichier = un sujet. Découper si > 300 lignes -8. **`_index.md` racine à jour** — le fichier `_index.md` à la racine est le registre utilisé par le MCP server `wms-wiki` pour découvrir les pages. Il doit refléter toute création/suppression de page, quel que soit le mode - -### Règles spécifiques mode standard - -9. **Pas de contenu projet** — les pages standard ne doivent pas contenir d'information spécifique à un projet client. Les exemples génériques sont acceptés -10. **Cohérence inter-pages** — vérifier que les liens entre pages standard restent valides après modification -11. **Glossaire standard** — mettre à jour `glossary.md` si de nouveaux termes génériques apparaissent -12. **Sections `_index.md`** — en mode standard, modifier les sections existantes (Concepts, Modules, Architecture, Operations) de `_index.md`. Ne pas toucher la section `## Limagrain — Projet` - -### Règles spécifiques mode limagrain - -13. **Delta uniquement** — si le standard couvre un concept, renvoyer vers lui et ne documenter que le delta Limagrain -14. **Marquer les questions** — reporter les incertitudes dans `limagrain/08-transverse/questions-ouvertes.md` -15. **README.md à jour** — toute création/suppression de page dans `limagrain/` doit y être reflétée -16. **Section `_index.md` Limagrain** — quand une page est créée ou supprimée dans `limagrain/`, ajouter/retirer son entrée dans `_index.md` sous la section dédiée `## Limagrain — Projet`. Le format doit suivre exactement le même pattern que les sections existantes : - -```markdown -## Limagrain — Projet (XX pages) - -### Réception fournisseur -- **Path:** limagrain/01-inbound/reception-fournisseur.md -- **Type:** limagrain -- Résumé court de la page (1-2 lignes tirées du front matter ou du bloc Résumé). - -### Picking combinatoire -- **Path:** limagrain/03-picking/picking-combinatoire.md -- **Type:** limagrain -- Architecture 4 jobs, CstAtt handshake, CR V3.0. -``` - -Ne pas toucher les sections standard (Concepts, Modules, Architecture, Operations) de `_index.md` en mode limagrain. - ---- - -## Démarrage - -### Mode limagrain - première initialisation - -Si le dossier `limagrain/` n'existe pas encore : - -1. Crée `limagrain/` et toutes ses sous-sections (`01-inbound/` à `08-transverse/`, `assets/`) -2. Crée `consume.log` à la racine (vide, avec juste un header `# Journal de consommation`) -3. Crée les `_index.md` pour chaque section (contenu minimal, statut `draft`) -4. Crée `limagrain/README.md` avec la table des matières -5. Crée `limagrain/glossaire-limagrain.md` avec le tableau du glossaire initial ci-dessus -6. Attends qu'Arthur dépose des ressources dans `sources/` ou donne des instructions - -### Mode standard - première utilisation - +# CLAUDE.md — Wiki EasyWMS (Cowork) + +## Mission + +Tu maintiens un **wiki EasyWMS en Markdown** composé de deux parties indépendantes : + +- Le **wiki standard EasyWMS** (dossiers `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md`) - documentation générique du produit EasyWMS. Également accessible via le MCP server `wms-wiki`. +- Le **wiki projet Limagrain** (dossier `limagrain/`) - documentation du delta projet : customs, configurations, décisions, flux spécifiques. Chaque page renvoie vers la page standard correspondante quand un concept générique existe. + +--- + +## Modes de travail + +Ce dépôt fonctionne selon **deux modes exclusifs**. Le mode détermine le périmètre d'écriture ; l'autre wiki est en lecture seule. + +### Sélection du mode + +**Comportement par défaut : toujours demander.** Si Arthur ne précise pas le mode dans son prompt, demande-lui avant de commencer toute modification : + +> « On travaille sur le wiki standard ou sur le wiki Limagrain ? » + +Déclencheurs explicites : + +- `mode: standard` ou mention explicite du wiki standard → mode standard +- `mode: limagrain` ou mention explicite du wiki Limagrain / projet → mode limagrain + +### `mode: standard` - Wiki standard EasyWMS + +| Aspect | Règle | +|--------|-------| +| **Écriture** | `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md`, `_index.md` | +| **Lecture seule** | `limagrain/` (ne jamais modifier) | +| **Template** | Template standard (voir section dédiée) | +| **Workflow** | Workflow de consommation structuré (sources → intégration → log → archivage) | +| **Index** | Mettre à jour `_index.md` si des pages sont créées/modifiées | +| **Glossaire** | Mettre à jour `glossary.md` si de nouveaux termes apparaissent | + +### `mode: limagrain` - Wiki projet Limagrain + +| Aspect | Règle | +|--------|-------| +| **Écriture** | `limagrain/` uniquement. **Exception** : `_index.md` racine (section `## Limagrain — Projet` seulement) | +| **Lecture seule** | `architecture/`, `concepts/`, `modules/`, `operations/`, `glossary.md` (ne jamais modifier) | +| **Template** | Template Limagrain (voir section dédiée) | +| **Workflow** | Workflow de consommation structuré (sources → intégration → log → archivage) | +| **Delta uniquement** | Ne jamais dupliquer le standard ; renvoyer vers lui et ne documenter que le delta | +| **Glossaire** | Mettre à jour `limagrain/glossaire-limagrain.md` si de nouveaux termes apparaissent | +| **README** | Mettre à jour `limagrain/README.md` si des pages sont créées | + +### Règle de cloisonnement + +**Ne jamais modifier un fichier hors du périmètre d'écriture du mode actif.** Cette règle est absolue. Si une modification semble nécessaire dans l'autre périmètre, le signaler à Arthur et lui proposer de changer de mode. + +--- + +## Arborescence + +``` +wiki-ameliorator-v2_x-Limagrain/ ← racine du dépôt +│ +├── CLAUDE.md ← CE FICHIER +│ +├── ── WIKI STANDARD (écriture en mode standard) ── +├── architecture/ ← 6 pages standard +├── concepts/ ← 35 pages standard +├── modules/ ← 24 pages standard +├── operations/ ← 19 pages standard +├── glossary.md ← glossaire standard +├── _index.md ← index global (standard + Limagrain) +├── _lint_report.md +├── _log.md +│ +├── ── SOURCES (inbox) ── +├── sources/ ← déposer ici les ressources à intégrer +│ └── archives/ ← ressources déjà traitées +│ +├── ── JOURNAL ── +├── consume.log ← journal de consommation (append-only) +│ +└── ── WIKI LIMAGRAIN (écriture en mode limagrain) ── + limagrain/ + ├── README.md ← index + table des matières du wiki Limagrain + ├── glossaire-limagrain.md ← termes et acronymes spécifiques projet + │ + ├── 01-inbound/ + │ ├── _index.md + │ ├── reception-fournisseur.md + │ ├── reception-retour.md + │ ├── controle-qualite-reception.md + │ └── flux-erp-inbound.md + │ + ├── 02-stockage/ + │ ├── _index.md + │ ├── asrs-miniload.md + │ ├── galileo-config.md + │ ├── putaway-strategies.md + │ ├── zones-stockage.md + │ └── defragmentation.md + │ + ├── 03-picking/ + │ ├── _index.md + │ ├── picking-combinatoire.md + │ ├── stations-picking.md + │ ├── waves-groupes.md + │ └── replenishment.md + │ + ├── 04-outbound/ + │ ├── _index.md + │ ├── flux-expedition.md + │ ├── shipping-orders.md + │ ├── consolidation-chargement.md + │ └── flux-erp-outbound.md + │ + ├── 05-agv/ + │ ├── _index.md + │ ├── still-igo-integration.md + │ ├── agv-stations-routes.md + │ └── agv-troubleshooting.md + │ + ├── 06-erp-interface/ + │ ├── _index.md + │ ├── messages-reference.md + │ ├── mapping-erp-wms.md + │ └── interface-monitoring.md + │ + ├── 07-admin/ + │ ├── _index.md + │ ├── utilisateurs-groupes.md + │ ├── parametres-projet.md + │ └── ad-customs.md + │ + ├── 08-transverse/ + │ ├── _index.md + │ ├── jira-tickets-cles.md + │ ├── decisions-architecture.md + │ ├── questions-ouvertes.md + │ └── historique-projet.md + │ + └── assets/ +``` + +L'arborescence `limagrain/` ci-dessus est le **squelette initial**. Tu peux créer de nouvelles pages ou sous-dossiers si le contenu le justifie — respecte les conventions ci-dessous et mets à jour `limagrain/README.md` en conséquence. + +--- + +## Workflow de consommation + +Ce workflow s'applique aux **deux modes**. Quand Arthur demande d'intégrer des ressources ou quand des fichiers sont détectés dans `sources/` : + +### Étape 1 — Inventaire + +Lis le contenu de `sources/` (ignore `archives/`) et liste les fichiers présents. Pour chaque fichier, identifie : + +- Le type (Confluence export, note Obsidian, mail, Excel, PDF, Word, capture d'écran) +- Le domaine fonctionnel probable +- Les infos clés à extraire +- **Le mode cible** : standard ou limagrain (si mixte, le signaler) + +Présente ce résumé à Arthur avant de commencer l'intégration. **Confirme le mode actif** si pas encore établi. + +### Étape 2 — Rédaction / Mise à jour + +Pour chaque ressource : + +1. **Vérifie le contexte existant** : consulte les pages concernées via le wiki local ET/OU appelle `wms-wiki:search_wiki` ou `wms-wiki:get_wiki_page` via MCP +2. **Identifie la page cible** dans le périmètre d'écriture du mode actif (existante ou à créer) +3. **Rédige ou mets à jour** la page en respectant le template du mode actif +4. **Cross-référence** : ajoute des liens vers les autres pages du même wiki si pertinent +5. **Mets à jour le glossaire** du mode actif si de nouveaux termes apparaissent +6. **Mets à jour l'index** : `_index.md` (mode standard) ou `limagrain/README.md` (mode limagrain) + +**Spécifique mode limagrain** : ne documenter que le delta par rapport au standard. Renvoyer vers la page standard pour les concepts génériques. + +### Étape 3 — Log et archivage + +Après intégration de chaque fichier : + +1. **Ajoute une entrée** dans `consume.log` à la racine (format ci-dessous), en précisant le mode +2. **Déplace le fichier** de `sources/` vers `sources/archives/` + +### Étape 4 — Compte rendu + +Après chaque session d'intégration, résume à Arthur : + +- Mode utilisé +- Fichiers consommés +- Pages créées ou modifiées +- Nouvelles cross-références +- Questions ouvertes identifiées +- Termes ajoutés au glossaire + +--- + +## Format du `consume.log` + +Fichier append-only à la racine du dépôt. Chaque session est datée avec le mode utilisé, chaque fichier a une entrée. + +``` +## [2026-05-05] session-001 (mode: limagrain) + +- **Fichier** : `CR_reunion_picking_2026-04-15.pdf` + **Type** : CR réunion + **Action** : Mis à jour `limagrain/03-picking/picking-combinatoire.md` (ajout section CstAtt handshake) + **Cross-refs** : Lien ajouté depuis `limagrain/04-outbound/flux-expedition.md` + **Questions** : "Valeur par défaut CstAtt quand lot inconnu ?" → ajouté dans `limagrain/08-transverse/questions-ouvertes.md` + +## [2026-05-10] session-002 (mode: standard) + +- **Fichier** : `Notes_reception_multi-reference.md` + **Type** : Notes techniques + **Action** : Mis à jour `concepts/reception.md` (ajout section réception multi-référence) + **Cross-refs** : Lien ajouté depuis `modules/inbound.md` + **Questions** : aucune +``` + +--- + +## Templates de page wiki + +### Template standard (mode: standard) + +Chaque fichier `.md` dans `architecture/`, `concepts/`, `modules/`, `operations/` suit la structure ci-dessous. Les sections sont **adaptables au sujet** - seuls le front matter, l'Overview et la section Related sont obligatoires. Les autres sections sont des suggestions courantes à utiliser quand elles sont pertinentes. + +**Langue** : anglais (cohérent avec les pages existantes). Termes techniques WMS en anglais. + +```markdown +--- +title: "Page Title" +type: concept | module | architecture | operation +sources: + - areas/path/to/source.md + - sources/archives/source-file.md +related: + - concepts/other-page.md + - modules/related-module.md +last_compiled: "2026-05-15" +--- + +# Page Title + +## Overview + +1-2 paragraphes décrivant le concept, module ou opération. Contexte fonctionnel, rôle dans EasyWMS, et relations principales avec les autres composants. + +## (Sections libres adaptées au sujet) + +Le corps de la page est structuré librement selon le sujet. Les sections suivantes sont des patterns courants dans le wiki existant - les utiliser quand elles sont pertinentes, les omettre ou les adapter sinon : + +- **Architecture / Communication protocol** — pour les pages techniques (galileo, AGV, etc.) +- **Parameters** — tableau des paramètres de configuration liés au sujet : + +| Parameter | Effect | +|---|---| +| `PARAM_NAME` | Description de l'effet | + +- **ERP Integration** — tableau des messages ERP liés : + +| Message | Direction | Trigger | +|---|---|---| +| `MSG` | ERP → WMS | Description | + +- **Common Errors** — erreurs fréquentes avec cause et solution +- **Interface Paths** — chemins UI (PC/SmartUI et RFT) pour accéder aux fonctionnalités : + +| Path | Equipment | Description | +|---|---|---| +| `Menu > Sub-menu` | PC / RFT | Description | + +## Related + +- [concepts/other-page.md](../concepts/other-page.md) — brève description du lien +- [modules/related-module.md](../modules/related-module.md) — brève description du lien +``` + +**Règles front matter :** + +- `type` : obligatoire, une des 4 valeurs (concept, module, architecture, operation) +- `sources` : liste des fichiers sources utilisés pour compiler la page (chemins relatifs) +- `related` : liste des pages liées (chemins relatifs depuis la racine du dépôt) +- `last_compiled` : date ISO de dernière mise à jour significative + +### Template Limagrain (mode: limagrain) + +Chaque fichier `.md` dans `limagrain/` doit suivre cette structure : + +```markdown +--- +title: "Titre de la page" +tags: [domaine, sous-domaine, concept] +status: draft | review | validated +standard_ref: concepts/reception.md +jira_refs: [LIM-70, LIM-75] +confluence_refs: [] +sources: [] +last_updated: 2026-05-05 +author: Arthur +--- + +# Titre de la page + +> **Résumé** : 1-2 phrases décrivant le sujet et pourquoi c'est spécifique Limagrain. + +> **Standard EasyWMS** : → voir [Nom page standard](../../concepts/page.md) +> Ce qui suit documente les **spécificités Limagrain** par rapport au standard. + +## Contexte projet + +Pourquoi ce sujet est spécifique chez Limagrain. Quel besoin métier. + +## Configuration / Implémentation + +Détails techniques : paramètres, valeurs, éléments AD customs. + +## Flux fonctionnel + +Description du flux. Utiliser un diagramme Mermaid si pertinent : + +​```mermaid +sequenceDiagram + participant ERP + participant WMS + ERP->>WMS: SOR01 + WMS->>WMS: Stock assignment + WMS-->>ERP: SOF01 +​``` + +## Points d'attention + +⚠️ Particularités, pièges connus, bugs rencontrés, workarounds. + +## Questions ouvertes + +- [ ] Question 1 (@Théo) +- [ ] Question 2 (@Michael) + +## Historique des modifications + +| Date | Auteur | Modification | +|------|--------|-------------| +| 2026-05-05 | Arthur | Création initiale | + +## Références + +| Source | Type | Date | +|--------|------|------| +| Jira LIM-70 | Ticket | 2025-xx-xx | +| "Titre page" Confluence | Page | 2025-xx-xx | +| CR réunion picking | PDF | 2026-04-15 | +``` + +--- + +## Template `_index.md` (sommaire de section) + +```markdown +--- +title: "Inbound — Vue d'ensemble" +tags: [inbound, index] +status: draft +last_updated: 2026-05-05 +--- + +# Inbound — Vue d'ensemble + +> **Périmètre** : réception fournisseur, retours, contrôle qualité à réception, messages ERP inbound. + +> **Standard EasyWMS** : voir [Reception](../../concepts/reception.md), [Order Inbound](../../concepts/order-inbound.md) + +## Pages de cette section + +- [Réception fournisseur](reception-fournisseur.md) +- [Réception retour](reception-retour.md) +- [Contrôle qualité réception](controle-qualite-reception.md) +- [Flux ERP inbound](flux-erp-inbound.md) + +## Vue synthétique du flux inbound Limagrain + +(Diagramme Mermaid du flux global de la section — à compléter) +``` + +--- + +## Liens entre wikis + +### Mode standard - liens entre pages standard + +Chemins relatifs entre dossiers standard : + +```markdown +→ voir [Reception](../concepts/reception.md) +→ voir [Galileo Integration](../architecture/galileo-integration.md) +→ voir [Glossaire](../glossary.md) +``` + +### Mode limagrain - depuis une page Limagrain → page standard + +Chemins relatifs remontant au-dessus de `limagrain/` : + +```markdown +→ voir [Reception standard](../../concepts/reception.md) +→ voir [Picking standard](../../concepts/picking.md) +→ voir [Galileo Integration](../../architecture/galileo-integration.md) +``` + +### Mode limagrain - entre pages Limagrain + +Chemins relatifs au sein de `limagrain/` : + +```markdown +Voir aussi [Flux expédition](../04-outbound/flux-expedition.md) +Voir aussi [Glossaire Limagrain](../glossaire-limagrain.md) +``` + +### Vers Jira + +```markdown +[LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) +``` + +--- + +## Conventions strictes + +### Nommage + +- Fichiers : **kebab-case**, pas d'accents, `.md` → `picking-combinatoire.md` +- Dossiers dans `limagrain/` : numérotés `01-` à `08-` + kebab-case +- Assets : `{section}-{description}.{ext}` → `03-picking-schema-stations.png` + +### Markdown lint + +Règles à respecter (compatible markdownlint) : + +- Headings ATX (`#`) uniquement, pas de saut de niveau (h1 → h3 interdit) +- Pas de trailing spaces +- Pas de lignes vides multiples (max 1) +- Line length ≤ 120 caractères (souple pour tableaux et liens) +- Listes entourées de lignes vides +- Premier élément du fichier = front matter `---` puis heading H1 +- Pas de headings dupliqués dans un même fichier +- Liens relatifs entre pages (pas de chemins absolus) + +### Langue + +- **Français** pour la rédaction +- Termes techniques WMS en anglais acceptés (putaway, picking, stock assignment, etc.) +- Noms de messages ERP en majuscules : SOR, SOF, ASN, RUT, LOF +- Noms d'entités AD en anglais PascalCase : OutboundOrder, ContainerStock, etc. + +### Intégrité des fichiers après écriture + +Les outils Write et Edit peuvent tronquer silencieusement le contenu +d'un fichier long sans signaler d'erreur. Pour éviter toute perte : + +1. **Vérifier après écriture** : après tout Write ou Edit touchant plus + de ~50 lignes, exécuter en bash `wc -l` + `tail -3` sur le fichier + pour confirmer que le nombre de lignes est cohérent et que le fichier + se termine correctement (dernière section attendue, pas de coupure + en milieu de phrase) +2. **Écriture incrémentale** : pour les fichiers longs (> 150 lignes), + ne jamais réécrire tout le contenu d'un coup via Write. Préférer des + Edit ciblés section par section. Si un Write complet est inévitable, + découper en deux passes (première moitié via Write, seconde moitié + via Edit append) +3. **Si troncature détectée** : ne pas continuer la session sans + restaurer le contenu manquant. Signaler le problème à Arthur. + +--- + +## Contexte projet Limagrain + +### Équipe + +| Personne | Rôle | +|----------|------| +| Arthur | Chef de projet technique - Intégrateur WMS / liaison client-dev, auteur du wiki | +| Nicolas Chabanis | Responsable développement | +| Théo | Chef de projet général - pilote tout le projet | +| Michael | Directeur des opérations - Pilote Arthur | +| Fabien Mogade | Développeur | +| Fares Zaroui | Développeur | +| Justine Beutin | Chef de projet fonctionnelle - Pilote le planning et principale interlocutrice avec Limagrain | + +### Périmètre fonctionnel (par priorité) + +1. **Réception / Inbound** — modes de réception, ASN, SSCC/LPN, mono-référence +2. **Stockage / ASRS / Galileo** — miniload, transstockeurs, stations, routes +3. **Picking / Préparation** — picking combinatoire (CR V3.0, 4-job, CstAtt), stations +4. **Expédition / Outbound** — flux SOR → RUT → SOF → LOF, chargement +5. **Intégration AGV / Still** — iGo API, DB protocol, transport lifecycle +6. **Intégration ERP** — catalogue messages, mapping champs +7. **Administration** — RBAC, groupes, paramètres, éléments AD customs + +### Glossaire initial (termes spécifiques Limagrain) + +| 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 | +| PIE | Station de pesée 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 | + +### Jira + +- **Projet** : Limagrain (préfixe `LIM-`) +- **Cloud ID** : `d79e5957-a82c-4b8f-bd19-d553ef331c42` +- **URL base** : `https://easywmsfrance.atlassian.net` + +### MCP tools disponibles + +| Serveur | Usage | +|---------|-------| +| `wms-wiki:*` | Wiki standard EasyWMS — search, get_page, get_glossary_term, list_sections, get_related_pages | +| `wms:*` | Données WMS live — queries LINQ, entities, workflows, AD, metadata | +| `Atlassian:*` | Jira + Confluence — recherche JQL/CQL, lecture tickets/pages | + +**Utilise `wms-wiki` systématiquement** pour vérifier les concepts standard avant de rédiger. +**Utilise `Atlassian` avec le cloudId ci-dessus** pour rechercher tickets ou pages Confluence référencés. +**Consulte aussi les pages standard locales** (`concepts/`, `modules/`, etc.) quand elles sont plus complètes que le MCP. + +--- + +## Règles impératives + +### Règles communes (les deux modes) + +1. **Cloisonnement strict** — ne jamais modifier un fichier hors du périmètre d'écriture du mode actif (voir section Modes de travail) +2. **Toujours sourcer** — chaque information vient d'une source identifiable. Cite-la dans le front matter `sources` et le tableau Références +3. **Marquer les incertitudes** — `> ⚠️ À confirmer` ou `- [ ] Question (@personne)` +4. **Log obligatoire** — chaque fichier consommé → entrée dans `consume.log` AVANT archivage, avec le mode indiqué +5. **Archivage obligatoire** — après intégration, déplacer le fichier de `sources/` vers `sources/archives/` +6. **Cross-référencer** — quand une page mentionne un concept couvert ailleurs dans le même wiki, ajouter un lien +7. **Granularité** — un fichier = un sujet. Découper si > 300 lignes +8. **`_index.md` racine à jour** — le fichier `_index.md` à la racine est le registre utilisé par le MCP server `wms-wiki` pour découvrir les pages. Il doit refléter toute création/suppression de page, quel que soit le mode + +### Règles spécifiques mode standard + +9. **Pas de contenu projet** — les pages standard ne doivent pas contenir d'information spécifique à un projet client. Les exemples génériques sont acceptés +10. **Cohérence inter-pages** — vérifier que les liens entre pages standard restent valides après modification +11. **Glossaire standard** — mettre à jour `glossary.md` si de nouveaux termes génériques apparaissent +12. **Sections `_index.md`** — en mode standard, modifier les sections existantes (Concepts, Modules, Architecture, Operations) de `_index.md`. Ne pas toucher la section `## Limagrain — Projet` + +### Règles spécifiques mode limagrain + +13. **Delta uniquement** — si le standard couvre un concept, renvoyer vers lui et ne documenter que le delta Limagrain +14. **Marquer les questions** — reporter les incertitudes dans `limagrain/08-transverse/questions-ouvertes.md` +15. **README.md à jour** — toute création/suppression de page dans `limagrain/` doit y être reflétée +16. **Section `_index.md` Limagrain** — quand une page est créée ou supprimée dans `limagrain/`, ajouter/retirer son entrée dans `_index.md` sous la section dédiée `## Limagrain — Projet`. Le format doit suivre exactement le même pattern que les sections existantes : + +```markdown +## Limagrain — Projet (XX pages) + +### Réception fournisseur +- **Path:** limagrain/01-inbound/reception-fournisseur.md +- **Type:** limagrain +- Résumé court de la page (1-2 lignes tirées du front matter ou du bloc Résumé). + +### Picking combinatoire +- **Path:** limagrain/03-picking/picking-combinatoire.md +- **Type:** limagrain +- Architecture 4 jobs, CstAtt handshake, CR V3.0. +``` + +Ne pas toucher les sections standard (Concepts, Modules, Architecture, Operations) de `_index.md` en mode limagrain. + +--- + +## Démarrage + +### Mode limagrain - première initialisation + +Si le dossier `limagrain/` n'existe pas encore : + +1. Crée `limagrain/` et toutes ses sous-sections (`01-inbound/` à `08-transverse/`, `assets/`) +2. Crée `consume.log` à la racine (vide, avec juste un header `# Journal de consommation`) +3. Crée les `_index.md` pour chaque section (contenu minimal, statut `draft`) +4. Crée `limagrain/README.md` avec la table des matières +5. Crée `limagrain/glossaire-limagrain.md` avec le tableau du glossaire initial ci-dessus +6. Attends qu'Arthur dépose des ressources dans `sources/` ou donne des instructions + +### Mode standard - première utilisation + Le wiki standard existe déjà. Pas d'initialisation nécessaire. Vérifie simplement que `consume.log` existe à la racine (le créer si absent). Puis attends les instructions d'Arthur ou les fichiers dans `sources/`. \ No newline at end of file diff --git a/wiki/_index.md b/wiki/_index.md index 82b44a8..cdcd237 100644 --- a/wiki/_index.md +++ b/wiki/_index.md @@ -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. diff --git a/wiki/consume.log b/wiki/consume.log index 52a8a63..e77996b 100644 --- a/wiki/consume.log +++ b/wiki/consume.log @@ -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 diff --git a/wiki/limagrain/01-inbound/_index.md b/wiki/limagrain/01-inbound/_index.md index 8d9adf0..7682124 100644 --- a/wiki/limagrain/01-inbound/_index.md +++ b/wiki/limagrain/01-inbound/_index.md @@ -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 diff --git a/wiki/limagrain/01-inbound/controle-qualite-reception.md b/wiki/limagrain/01-inbound/controle-qualite-reception.md index a01ffb2..e29f2de 100644 --- a/wiki/limagrain/01-inbound/controle-qualite-reception.md +++ b/wiki/limagrain/01-inbound/controle-qualite-reception.md @@ -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 | diff --git a/wiki/limagrain/01-inbound/etiquette-rfid.md b/wiki/limagrain/01-inbound/etiquette-rfid.md index 9a79dc4..2ef7510 100644 --- a/wiki/limagrain/01-inbound/etiquette-rfid.md +++ b/wiki/limagrain/01-inbound/etiquette-rfid.md @@ -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 | diff --git a/wiki/limagrain/01-inbound/flux-erp-inbound.md b/wiki/limagrain/01-inbound/flux-erp-inbound.md index 8690567..f9f1ecf 100644 --- a/wiki/limagrain/01-inbound/flux-erp-inbound.md +++ b/wiki/limagrain/01-inbound/flux-erp-inbound.md @@ -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 diff --git a/wiki/limagrain/01-inbound/gestion-camions.md b/wiki/limagrain/01-inbound/gestion-camions.md index 73f1bb3..efd8aa5 100644 --- a/wiki/limagrain/01-inbound/gestion-camions.md +++ b/wiki/limagrain/01-inbound/gestion-camions.md @@ -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 | diff --git a/wiki/limagrain/01-inbound/reception-fournisseur.md b/wiki/limagrain/01-inbound/reception-fournisseur.md index d697353..7d08326 100644 --- a/wiki/limagrain/01-inbound/reception-fournisseur.md +++ b/wiki/limagrain/01-inbound/reception-fournisseur.md @@ -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 = ` @@ -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 | \ No newline at end of file +| [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 | diff --git a/wiki/limagrain/01-inbound/reception-retour.md b/wiki/limagrain/01-inbound/reception-retour.md index 66767ae..9af7d7b 100644 --- a/wiki/limagrain/01-inbound/reception-retour.md +++ b/wiki/limagrain/01-inbound/reception-retour.md @@ -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 ?
= alias article existant ?} - B -- Oui --> C{Vendu par Limagrain ?} - B -- Non --> D[Appel API SAP] - D --> E[Écran attente
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
SYSTÉMATIQUE
IV_BATCH_OFF + IV_RETURN] + D --> R{EV_RETURN = X ?} + R -- Non --> Z[Erreur SAP
afficher ET_RETURN] + R -- Oui --> C{Au moins un
ZDEPLOY = X ?} + C -- Non --> K[Erreur : lot non vendu
par Limagrain] + C -- Oui --> B{Article déjà en base ?
= alias existant ?} + B -- Non --> E[SAP pousse l'ITM
via ATH002/ITM01
É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 :
contacter responsable] - C -- Oui --> J{Plusieurs articles ?} - C -- Non --> K[Erreur : lot non vendu
par Limagrain] + F -- Oui --> J + B -- Oui --> J{Plusieurs lots
ZDEPLOY = X ?} J -- Non --> L[Sélection automatique
→ déclaration contenu] - J -- Oui --> M[Dialogue choix article
par pays d'origine] + J -- Oui --> M[Dialogue choix lot SAP
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,15 +686,22 @@ 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 | | Mail Justine ↔ Leila ↔ Vincent Goyet ↔ Maxime Tourrette | Échange | 2026-04-24/29 | -| recap_session_LIM-72_13-05-2026.md | Récap session | 2026-05-13 | \ No newline at end of file +| recap_session_LIM-72_13-05-2026.md | Récap session | 2026-05-13 | diff --git a/wiki/limagrain/02-stockage/_index.md b/wiki/limagrain/02-stockage/_index.md index bd9a62a..2fe6ec8 100644 --- a/wiki/limagrain/02-stockage/_index.md +++ b/wiki/limagrain/02-stockage/_index.md @@ -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 diff --git a/wiki/limagrain/02-stockage/asrs-miniload.md b/wiki/limagrain/02-stockage/asrs-miniload.md index 51a6ff7..a1de236 100644 --- a/wiki/limagrain/02-stockage/asrs-miniload.md +++ b/wiki/limagrain/02-stockage/asrs-miniload.md @@ -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 (001–004) | -| 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 diff --git a/wiki/limagrain/02-stockage/defragmentation.md b/wiki/limagrain/02-stockage/defragmentation.md index 02d75d3..8817e71 100644 --- a/wiki/limagrain/02-stockage/defragmentation.md +++ b/wiki/limagrain/02-stockage/defragmentation.md @@ -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 | \ No newline at end of file +| [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 | diff --git a/wiki/limagrain/02-stockage/galileo-config.md b/wiki/limagrain/02-stockage/galileo-config.md index 6cb9d95..d4f3c8f 100644 --- a/wiki/limagrain/02-stockage/galileo-config.md +++ b/wiki/limagrain/02-stockage/galileo-config.md @@ -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 | diff --git a/wiki/limagrain/02-stockage/palettes-vides.md b/wiki/limagrain/02-stockage/palettes-vides.md index 3221b22..6e322db 100644 --- a/wiki/limagrain/02-stockage/palettes-vides.md +++ b/wiki/limagrain/02-stockage/palettes-vides.md @@ -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 diff --git a/wiki/limagrain/02-stockage/processus-anoxie.md b/wiki/limagrain/02-stockage/processus-anoxie.md index 9cd5dd5..2e001ef 100644 --- a/wiki/limagrain/02-stockage/processus-anoxie.md +++ b/wiki/limagrain/02-stockage/processus-anoxie.md @@ -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 diff --git a/wiki/limagrain/02-stockage/putaway-strategies.md b/wiki/limagrain/02-stockage/putaway-strategies.md index 1bb41b7..3406783 100644 --- a/wiki/limagrain/02-stockage/putaway-strategies.md +++ b/wiki/limagrain/02-stockage/putaway-strategies.md @@ -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 diff --git a/wiki/limagrain/02-stockage/rejet-pie.md b/wiki/limagrain/02-stockage/rejet-pie.md new file mode 100644 index 0000000..4312ce7 --- /dev/null +++ b/wiki/limagrain/02-stockage/rejet-pie.md @@ -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 | diff --git a/wiki/limagrain/02-stockage/zones-stockage.md b/wiki/limagrain/02-stockage/zones-stockage.md index 8683341..3a3da0e 100644 --- a/wiki/limagrain/02-stockage/zones-stockage.md +++ b/wiki/limagrain/02-stockage/zones-stockage.md @@ -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) diff --git a/wiki/limagrain/03-picking/_index.md b/wiki/limagrain/03-picking/_index.md index 4def051..7c610b3 100644 --- a/wiki/limagrain/03-picking/_index.md +++ b/wiki/limagrain/03-picking/_index.md @@ -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] - \ No newline at end of file + PIE --> DEFRAG[Zone défrag client] +``` diff --git a/wiki/limagrain/03-picking/consolidation-regroupement.md b/wiki/limagrain/03-picking/consolidation-regroupement.md index b279342..a165520 100644 --- a/wiki/limagrain/03-picking/consolidation-regroupement.md +++ b/wiki/limagrain/03-picking/consolidation-regroupement.md @@ -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 diff --git a/wiki/limagrain/03-picking/echantillonnage.md b/wiki/limagrain/03-picking/echantillonnage.md index 06cdcd1..5d6e520 100644 --- a/wiki/limagrain/03-picking/echantillonnage.md +++ b/wiki/limagrain/03-picking/echantillonnage.md @@ -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 | diff --git a/wiki/limagrain/03-picking/job-assignation-pk.md b/wiki/limagrain/03-picking/job-assignation-pk.md index 2b417ed..e247a98 100644 --- a/wiki/limagrain/03-picking/job-assignation-pk.md +++ b/wiki/limagrain/03-picking/job-assignation-pk.md @@ -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-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) | 2026 | \ No newline at end of file +| [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 | diff --git a/wiki/limagrain/03-picking/picking-combinatoire.md b/wiki/limagrain/03-picking/picking-combinatoire.md index fb6632f..8b82d1f 100644 --- a/wiki/limagrain/03-picking/picking-combinatoire.md +++ b/wiki/limagrain/03-picking/picking-combinatoire.md @@ -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 @@ -284,4 +284,4 @@ picking — gestion combinatoire de tous les cas. | FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 | | Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 | | LIM-82 LOT2.2 | Ticket Jira (ordonnancement PS → PK) | 2026 | -| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 | \ No newline at end of file +| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 | diff --git a/wiki/limagrain/03-picking/placement-ps-pk.md b/wiki/limagrain/03-picking/placement-ps-pk.md index 9d936c1..8cc36aa 100644 --- a/wiki/limagrain/03-picking/placement-ps-pk.md +++ b/wiki/limagrain/03-picking/placement-ps-pk.md @@ -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 | diff --git a/wiki/limagrain/03-picking/process-picking-pk.md b/wiki/limagrain/03-picking/process-picking-pk.md new file mode 100644 index 0000000..3781b0d --- /dev/null +++ b/wiki/limagrain/03-picking/process-picking-pk.md @@ -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 | diff --git a/wiki/limagrain/03-picking/recertification.md b/wiki/limagrain/03-picking/recertification.md new file mode 100644 index 0000000..1256a50 --- /dev/null +++ b/wiki/limagrain/03-picking/recertification.md @@ -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 | diff --git a/wiki/limagrain/03-picking/sequencage-tk-ps-historique.md b/wiki/limagrain/03-picking/sequencage-tk-ps-historique.md index 308cf3b..976be68 100644 --- a/wiki/limagrain/03-picking/sequencage-tk-ps-historique.md +++ b/wiki/limagrain/03-picking/sequencage-tk-ps-historique.md @@ -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 | diff --git a/wiki/limagrain/03-picking/sequencage-tk-ps.md b/wiki/limagrain/03-picking/sequencage-tk-ps.md index 11fcc13..f564a4d 100644 --- a/wiki/limagrain/03-picking/sequencage-tk-ps.md +++ b/wiki/limagrain/03-picking/sequencage-tk-ps.md @@ -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 | diff --git a/wiki/limagrain/03-picking/stations-picking.md b/wiki/limagrain/03-picking/stations-picking.md index 02ad6f9..2d51b27 100644 --- a/wiki/limagrain/03-picking/stations-picking.md +++ b/wiki/limagrain/03-picking/stations-picking.md @@ -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 | diff --git a/wiki/limagrain/04-outbound/_index.md b/wiki/limagrain/04-outbound/_index.md index bc3c72e..6a30cb8 100644 --- a/wiki/limagrain/04-outbound/_index.md +++ b/wiki/limagrain/04-outbound/_index.md @@ -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) @@ -44,4 +45,4 @@ flowchart LR | Commande client | RUT « Client » | Oui (partiel) | Poumon → camion | | Conso OF hors recert | SOR « Production » | Non | Poumon → production | | Conso OF avec recert | SOR « Recert » | Passage poste | Restockage | -| Messagerie carton | RUT « Messagerie » | Oui | Emplacement sol | \ No newline at end of file +| Messagerie carton | RUT « Messagerie » | Oui | Emplacement sol | diff --git a/wiki/limagrain/04-outbound/assignation-image-quai.md b/wiki/limagrain/04-outbound/assignation-image-quai.md new file mode 100644 index 0000000..f8ea3dd --- /dev/null +++ b/wiki/limagrain/04-outbound/assignation-image-quai.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 | diff --git a/wiki/limagrain/04-outbound/consolidation-chargement.md b/wiki/limagrain/04-outbound/consolidation-chargement.md index 3a720ed..7fa04d3 100644 --- a/wiki/limagrain/04-outbound/consolidation-chargement.md +++ b/wiki/limagrain/04-outbound/consolidation-chargement.md @@ -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 diff --git a/wiki/limagrain/04-outbound/flux-erp-outbound.md b/wiki/limagrain/04-outbound/flux-erp-outbound.md index 302cd65..b672029 100644 --- a/wiki/limagrain/04-outbound/flux-erp-outbound.md +++ b/wiki/limagrain/04-outbound/flux-erp-outbound.md @@ -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 | diff --git a/wiki/limagrain/04-outbound/flux-expedition.md b/wiki/limagrain/04-outbound/flux-expedition.md index 609a72a..d59f845 100644 --- a/wiki/limagrain/04-outbound/flux-expedition.md +++ b/wiki/limagrain/04-outbound/flux-expedition.md @@ -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 @@ -486,4 +597,18 @@ 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 | \ No newline at end of file +| 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 | diff --git a/wiki/limagrain/04-outbound/sequencage-shipping-stop.md b/wiki/limagrain/04-outbound/sequencage-shipping-stop.md index 0cccd7b..8c6cc6d 100644 --- a/wiki/limagrain/04-outbound/sequencage-shipping-stop.md +++ b/wiki/limagrain/04-outbound/sequencage-shipping-stop.md @@ -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 | - | diff --git a/wiki/limagrain/04-outbound/shipping-orders.md b/wiki/limagrain/04-outbound/shipping-orders.md index c2eeecf..e9ac1b6 100644 --- a/wiki/limagrain/04-outbound/shipping-orders.md +++ b/wiki/limagrain/04-outbound/shipping-orders.md @@ -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 | diff --git a/wiki/limagrain/05-agv/_index.md b/wiki/limagrain/05-agv/_index.md index 8f0a900..5cbb9fb 100644 --- a/wiki/limagrain/05-agv/_index.md +++ b/wiki/limagrain/05-agv/_index.md @@ -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. diff --git a/wiki/limagrain/05-agv/agv-stations-routes.md b/wiki/limagrain/05-agv/agv-stations-routes.md index 1b316ee..3920f70 100644 --- a/wiki/limagrain/05-agv/agv-stations-routes.md +++ b/wiki/limagrain/05-agv/agv-stations-routes.md @@ -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 | - | diff --git a/wiki/limagrain/05-agv/agv-troubleshooting.md b/wiki/limagrain/05-agv/agv-troubleshooting.md index 75f2adc..6119c3c 100644 --- a/wiki/limagrain/05-agv/agv-troubleshooting.md +++ b/wiki/limagrain/05-agv/agv-troubleshooting.md @@ -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) diff --git a/wiki/limagrain/05-agv/job-reception-pk.md b/wiki/limagrain/05-agv/job-reception-pk.md index e52b5e0..a8e3125 100644 --- a/wiki/limagrain/05-agv/job-reception-pk.md +++ b/wiki/limagrain/05-agv/job-reception-pk.md @@ -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 | diff --git a/wiki/limagrain/05-agv/job-reception-production.md b/wiki/limagrain/05-agv/job-reception-production.md index f2aa0f6..78434d9 100644 --- a/wiki/limagrain/05-agv/job-reception-production.md +++ b/wiki/limagrain/05-agv/job-reception-production.md @@ -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 | \ No newline at end of file +| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (passage PIE) | 2026 | diff --git a/wiki/limagrain/05-agv/still-igo-integration.md b/wiki/limagrain/05-agv/still-igo-integration.md index ab51c8a..8487c18 100644 --- a/wiki/limagrain/05-agv/still-igo-integration.md +++ b/wiki/limagrain/05-agv/still-igo-integration.md @@ -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
poll OUTPUTQUEUE → API iGO] Hook[Webhook receiver
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 | diff --git a/wiki/limagrain/06-erp-interface/_index.md b/wiki/limagrain/06-erp-interface/_index.md index 33c807c..8d23923 100644 --- a/wiki/limagrain/06-erp-interface/_index.md +++ b/wiki/limagrain/06-erp-interface/_index.md @@ -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 diff --git a/wiki/limagrain/06-erp-interface/donnees-principales.md b/wiki/limagrain/06-erp-interface/donnees-principales.md index d135f1a..bbdf0f5 100644 --- a/wiki/limagrain/06-erp-interface/donnees-principales.md +++ b/wiki/limagrain/06-erp-interface/donnees-principales.md @@ -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 | diff --git a/wiki/limagrain/06-erp-interface/gna-sap-cpi.md b/wiki/limagrain/06-erp-interface/gna-sap-cpi.md index 771e49f..aca6a01 100644 --- a/wiki/limagrain/06-erp-interface/gna-sap-cpi.md +++ b/wiki/limagrain/06-erp-interface/gna-sap-cpi.md @@ -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 | diff --git a/wiki/limagrain/06-erp-interface/loc-message-periodique.md b/wiki/limagrain/06-erp-interface/loc-message-periodique.md index a308566..30f2268 100644 --- a/wiki/limagrain/06-erp-interface/loc-message-periodique.md +++ b/wiki/limagrain/06-erp-interface/loc-message-periodique.md @@ -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 | diff --git a/wiki/limagrain/06-erp-interface/mapping-erp-wms.md b/wiki/limagrain/06-erp-interface/mapping-erp-wms.md index 12ab96b..d191686 100644 --- a/wiki/limagrain/06-erp-interface/mapping-erp-wms.md +++ b/wiki/limagrain/06-erp-interface/mapping-erp-wms.md @@ -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) | - | diff --git a/wiki/limagrain/06-erp-interface/messages-reference.md b/wiki/limagrain/06-erp-interface/messages-reference.md index 4064ef2..5ece443 100644 --- a/wiki/limagrain/06-erp-interface/messages-reference.md +++ b/wiki/limagrain/06-erp-interface/messages-reference.md @@ -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 diff --git a/wiki/limagrain/07-admin/_index.md b/wiki/limagrain/07-admin/_index.md index 446bee3..c570122 100644 --- a/wiki/limagrain/07-admin/_index.md +++ b/wiki/limagrain/07-admin/_index.md @@ -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. diff --git a/wiki/limagrain/07-admin/ad-customs.md b/wiki/limagrain/07-admin/ad-customs.md index 699daf4..740b6ac 100644 --- a/wiki/limagrain/07-admin/ad-customs.md +++ b/wiki/limagrain/07-admin/ad-customs.md @@ -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 | diff --git a/wiki/limagrain/07-admin/contacts-projet.md b/wiki/limagrain/07-admin/contacts-projet.md index 7f7b5a4..d051b94 100644 --- a/wiki/limagrain/07-admin/contacts-projet.md +++ b/wiki/limagrain/07-admin/contacts-projet.md @@ -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 | diff --git a/wiki/limagrain/07-admin/parametres-projet.md b/wiki/limagrain/07-admin/parametres-projet.md new file mode 100644 index 0000000..021505c --- /dev/null +++ b/wiki/limagrain/07-admin/parametres-projet.md @@ -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 | diff --git a/wiki/limagrain/07-admin/utilisateurs-groupes.md b/wiki/limagrain/07-admin/utilisateurs-groupes.md index 74e2df3..b46a274 100644 Binary files a/wiki/limagrain/07-admin/utilisateurs-groupes.md and b/wiki/limagrain/07-admin/utilisateurs-groupes.md differ diff --git a/wiki/limagrain/08-transverse/_index.md b/wiki/limagrain/08-transverse/_index.md index d59d45c..031f302 100644 --- a/wiki/limagrain/08-transverse/_index.md +++ b/wiki/limagrain/08-transverse/_index.md @@ -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 diff --git a/wiki/limagrain/08-transverse/questions-ouvertes.md b/wiki/limagrain/08-transverse/questions-ouvertes.md index dd7798f..ae00e18 100644 --- a/wiki/limagrain/08-transverse/questions-ouvertes.md +++ b/wiki/limagrain/08-transverse/questions-ouvertes.md @@ -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 @@ -293,4 +428,26 @@ Pour mémoire, les éléments suivants sont explicitement exclus du périmètre | 2026-05-06 | Arthur | Ajout 13 questions ERP consolidées + LIM-62/63/64/65 | | 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) | \ No newline at end of file +| 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). diff --git a/wiki/limagrain/README.md b/wiki/limagrain/README.md index fd27424..edd68b3 100644 --- a/wiki/limagrain/README.md +++ b/wiki/limagrain/README.md @@ -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 diff --git a/wiki/limagrain/_lint_report.md b/wiki/limagrain/_lint_report.md new file mode 100644 index 0000000..058a288 --- /dev/null +++ b/wiki/limagrain/_lint_report.md @@ -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). + diff --git a/wiki/limagrain/glossaire-limagrain.md b/wiki/limagrain/glossaire-limagrain.md index 477a30f..3e7355c 100644 --- a/wiki/limagrain/glossaire-limagrain.md +++ b/wiki/limagrain/glossaire-limagrain.md @@ -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é) | \ No newline at end of file +| 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 |