lint(limagrain): corrections completes Phase 1+2
- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary) - Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees - Liens: 9 ancres reparees (slugs GitHub) - Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete - Glossaire: 15 termes standard deplaces en section rappel avec renvoi - Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final) - Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user