lint(limagrain): corrections completes Phase 1+2

- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary)
- Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees
- Liens: 9 ancres reparees (slugs GitHub)
- Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete
- Glossaire: 15 termes standard deplaces en section rappel avec renvoi
- Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final)
- Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
2026-07-20 12:56:42 +02:00
parent 23eb3f3c84
commit 7496aafe64
59 changed files with 6457 additions and 2023 deletions
+12 -11
View File
@@ -1,11 +1,11 @@
---
title: "Picking Vue d'ensemble"
title: "Picking - Vue d'ensemble"
tags: [picking, combinatoire, stations, index]
status: draft
last_updated: 2026-05-13
last_updated: 2026-07-20
---
# Picking Vue d'ensemble
# Picking - Vue d'ensemble
> **Périmètre** : picking combinatoire (CR V3.0, 4-job, CstAtt), stations de
> picking, job d'assignation PK, waves et groupes, replenishment.
@@ -17,23 +17,23 @@ last_updated: 2026-05-13
- [Picking combinatoire](picking-combinatoire.md)
- [Stations de picking](stations-picking.md)
- [Job d'assignation PK (Mega Job)](job-assignation-pk.md)
- [Waves et groupes](waves-groupes.md)
- [Replenishment](replenishment.md)
- [Séquençage TK → PS](sequencage-tk-ps.md)
- [Séquençage TK → PS Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Séquençage TK → PS - Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Placement PS → PK (choix de table)](placement-ps-pk.md)
- [Consolidation / Regroupement](consolidation-regroupement.md)
- [Échantillonnage](echantillonnage.md)
- [Process de picking au poste de travail (PK)](process-picking-pk.md)
- [Recertification - Workstation au poste de picking](recertification.md)
## Chaîne picking Ordre des traitements
## Chaîne picking - Ordre des traitements
L'ordre réel de la chaîne picking est le suivant :
1. **LIM-80** [Assignation PK](job-assignation-pk.md) : quelle commande
1. **LIM-80** - [Assignation PK](job-assignation-pk.md) : quelle commande
sur quel poste → déclenche la génération des tâches de picking
2. **LIM-84** [Séquençage TK → PS](sequencage-tk-ps.md) : ordonne les
2. **LIM-84** - [Séquençage TK → PS](sequencage-tk-ps.md) : ordonne les
sorties des TK vers les PS
3. **LIM-82** [Placement PS → PK](placement-ps-pk.md) : la palette
3. **LIM-82** - [Placement PS → PK](placement-ps-pk.md) : la palette
arrivant au PS va sur quelle table du PK
4. Workflow opérateur au PK (picking effectif)
@@ -55,4 +55,5 @@ flowchart TD
PNEG --> FILM[Choix filmage]
PPOS --> FILM
FILM --> PIE[Passage PIE]
PIE --> DEFRAG[Zone défrag client]
```
@@ -1,5 +1,5 @@
---
title: "Consolidation (regroupement) Processus sur poste"
title: "Consolidation (regroupement) - Processus sur poste"
tags: [picking, regroupement, consolidation, MOV, poste, custom]
status: draft
standard_ref: concepts/picking.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-05
author: Arthur
---
# Consolidation (regroupement) Processus sur poste
# Consolidation (regroupement) - Processus sur poste
> **Résumé** : processus [CUSTOM] de consolidation de palettes incomplètes
> partageant les mêmes critères de stock, sur poste de travail.
@@ -121,7 +121,7 @@ Vérification avec tolérance par type d'article (voir
## Points d'attention
⚠️ Le message MOV est envoyé à chaque mouvement unitaire volumétrie
⚠️ Le message MOV est envoyé à chaque mouvement unitaire - volumétrie
potentiellement élevée pour un regroupement complexe.
⚠️ Les 3 tables de préparation d'un même poste peuvent être occupées
@@ -132,8 +132,8 @@ physique + système).
## Questions ouvertes
- [ ] Programme de filmage exact pour le regroupement (@Théo)
- [ ] Interface opérateur vue regroupement maquette validée ? (@Fabien)
- Programme de filmage exact pour le regroupement (@Théo)
- Interface opérateur vue regroupement - maquette validée ? (@Fabien)
## Historique des modifications
+120 -25
View File
@@ -1,16 +1,16 @@
---
title: "Échantillonnage Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom]
title: "Échantillonnage - Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom, cor, cof]
status: draft
standard_ref: concepts/inventory.md
jira_refs: []
standard_ref: concepts/count.md
jira_refs: [LIM-107, LIM-112]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Jira LIM-107 (lecture directe 2026-07-20)", "Jira LIM-112 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Échantillonnage Processus de contrôle qualité
# Échantillonnage - Processus de contrôle qualité
> **Résumé** : processus [CUSTOM] d'échantillonnage pour contrôle qualité,
> assimilé à un inventaire dans EasyWMS, avec prélèvement sur poste de travail.
@@ -18,6 +18,11 @@ author: Arthur
> **Standard EasyWMS** : → voir [Inventory](../../concepts/count.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> **Statut (LIM-112)** : Ouvert. Cette page décrit le **flux complet**
> (message COR → ordre d'inventaire → assignation stock/poste → process
> opérateur → COF). Le **contenu de l'étiquette** relève de LIM-107 (cette
> tâche ne fait que déclencher l'impression au poste).
## Contexte projet
L'échantillonnage sert au contrôle qualité sur une partie des lots
@@ -34,11 +39,30 @@ Deux modes de création :
| Mode | Origine | Détail |
|------|---------|--------|
| Interface ERP | Message de l'ERP (COR) | Spécifie un lot à inventorier |
| Interface ERP | Message **COR** | Spécifie un lot à échantillonner |
| Manuel | Interface EasyWMS | Choix d'un lot par l'opérateur |
[CUSTOM] Un champ texte est disponible pour donner des **consignes**
rattachées à l'ordre d'inventaire.
L'ordre d'inventaire est créé avec une **priorité 3 (basse)**.
[CUSTOM] Un champ texte libre est disponible pour des **consignes**
rattachées à l'ordre (porté par `CstAtt02` de la ligne d'inventaire - voir
[AD Customs](../07-admin/ad-customs.md#cstatt-ligne-dordre-dinventaire)).
### Mapping du message COR (SAP → WMS)
| Balise | Valeur |
|--------|--------|
| `Code` | Numéro du lot d'inspection SAP |
| `Description` | `ECHANTILLONNAGE` (déclencheur de création de l'ordre) |
| `Priority` | 3 (basse) |
| `CstAtt01` | Nombre de palettes à inventorier (toujours 4 d'après SAP) |
| `CstAtt02` | Texte libre de consignes rattaché à l'ordre |
| `ProductCode` | Code **lot** SAP |
| `LotCode` | Code **produit** SAP |
| `Color` / `Source` / `Size` | Propriétaire réel SAP / Description produit / Destination (pays) |
> ⚠️ Mapping **inversé** `ProductCode` / `LotCode` : côté SAP,
> `ProductCode` porte le code **lot** et `LotCode` le code **produit**.
## [CUSTOM] Assignation du stock
@@ -46,22 +70,36 @@ L'assignation diffère selon le mode de création :
### Création par interface ERP
- Maximum **4 palettes** échantillonnées :
- Si stock global < 4 → toutes les palettes
- Si stock global ≥ 4 → 4 palettes sélectionnées
- Maximum **`CstAtt01` palettes** échantillonnées (valeur du COR, toujours
4 d'après SAP) ; moins si le stock total n'atteint pas `CstAtt01`.
- [CUSTOM] Les palettes avec un verrou d'écart de poids (« Production »)
sont **prioritaires** pour permettre une vérification simultanée
sont **prioritaires** (vérification simultanée au recomptage).
- **Prérequis** de chaque palette assignée : allée non bloquée, palette
rangée, non client, aucune tâche associée au support.
- **Ordre de sélection** (`OrderByDesc`) : palette bloquée d'abord, puis
par profondeur (la **moins profonde** en premier).
### Création manuelle
- Nombre de palettes choisi par l'opérateur
- Nombre de palettes choisi par l'opérateur (input custom). `CstAtt01` est
saisissable/éditable après la création de l'inventaire manuel, mais
**plus une fois l'inventaire lancé**.
> **Règle transverse** : un article en cours d'échantillonnage **n'est plus
> disponible** pour les ordres de sortie (comportement standard d'un
> inventaire).
## Assignation poste de travail
- Automatique, à condition que le poste soit ouvert et autorise le
mode « échantillonnage »
- Si aucun poste paramétré en mode échantillonnage → tâches en attente
- Une fois le poste assigné → création des tâches de mouvement
mode « échantillonnage » (= mode **Inventaire** EasyWMS).
- L'orchestration passe par le **Mega Job d'assignation PK** (LIM-70), qui
appelle un sous-workflow dédié (développé dans LIM-112) pour trouver et
assigner le bon PK. Si le support est un **Big-bag**, sélection d'un PK
qui l'autorise. Voir
[Mini jobs d'assignation au PK](job-assignation-pk.md).
- Si aucun poste paramétré en mode échantillonnage → tâches en attente.
- Une fois le poste assigné → création des tâches de mouvement.
## Processus sur poste de travail
@@ -90,14 +128,45 @@ Le processus est démarré et effectué sur **une seule palette à la fois**.
### Séquence opérateur
1. [CUSTOM] Si verrou « Réception » → recomptage avant échantillonnage
(à développer en **standalone**, car réutilisé dans plusieurs process)
2. Prendre une pochette d'échantillonnage vide (hors EasyWMS)
3. Effectuer un prélèvement dans un des sacs (~200g, hors EasyWMS)
4. Déposer le prélèvement dans la pochette (hors EasyWMS)
5. Éditer et imprimer une **étiquette d'échantillonnage**
5. Éditer et imprimer une **étiquette d'échantillonnage** (LIM-107)
6. Coller l'étiquette sur la pochette (hors EasyWMS)
7. Scotcher le sac ouvert sur la palette (hors EasyWMS)
8. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
9. Évacuer la palette vers le stockage
8. [CUSTOM] Choix du programme de filmage depuis une vue spécifique
9. **Valider la ligne d'inventaire**
10. Évacuer la palette vers le stockage : l'AGV déplace le conteneur du
poste vers la table d'entrée ; la palette est filmée ou non avant de
passer le PIE
## Étiquette d'échantillonnage (LIM-107)
> **Statut (LIM-107)** : en revue de code.
L'étiquette d'échantillonnage (étape 5 ci-dessus) est imprimée au **format
A5** sur l'**étiqueteuse du poste de travail** (et non sur les étiqueteuses
automatiques d'expédition), via le **flux inventaire COR/COF** (report
`CST_RPT_ECHANTILLONAGE`). Voir aussi
[Flux expédition - Étiquettes par type](../04-outbound/flux-expedition.md#contenu-des-étiquettes-dexpédition-par-type-lim-107).
Contenu de l'étiquette :
| # | Champ |
|---|-------|
| 1 | `ITM.CstAtt01` |
| 2 | `ITM.CstAtt03` |
| 3 | `ITM.CstAtt07` |
| 4 | `ITM.CstAtt08` |
| 5 | `ITM` - Famille de l'article |
| 6 | `ProductCode` de la ligne d'inventaire |
| 7 | `ITM.CstAtt10` |
| 8 | `Stock` - Attribut taille |
| 9 | « `_ / _` » laissé vide (complété au stylo par l'opérateur) |
| 10 | `ITM` - Premier alias différent du code article |
| 11 | `COR.Code` encodé en 128 |
| 12 | `COR.Code` |
## Passage PIE post-échantillonnage
@@ -114,10 +183,23 @@ Contrôle identique aux autres processus :
Si PIE NOK → rejet vers poste d'origine. Possibilité de forcer le
passage en cas d'excédent de poids non corrigeable.
## Clôture et émission du COF (LIM-112)
À la clôture de l'ordre d'inventaire (ou en cas d'**annulation**), le WMS
émet le message **COF** (WMS → SAP) :
| Balise | Description |
|--------|-------------|
| `CountCode` | Numéro du lot d'inspection |
| `Status` | `Closed` (effectué) ou `Cancelled` (annulé) |
| `UpdateDate` | Date/heure du changement d'état |
Le traitement du COF côté SAP est **hors périmètre** (équipes IT Limagrain).
## Points d'attention
⚠️ L'échantillonnage est un processus d'**inventaire** dans EasyWMS,
pas un processus de picking important pour le paramétrage des modes
pas un processus de picking - important pour le paramétrage des modes
de poste.
⚠️ Les palettes avec verrou « Production » (écart poids) sont traitées
@@ -126,20 +208,33 @@ en priorité pour optimiser le recomptage.
⚠️ La quantité prélevée (~200g) n'est pas déduite du stock dans EasyWMS
(négligeable par rapport au poids total).
⚠️ Des **big-bags** peuvent être présents dans ce process (LIM-112) → le
poste assigné doit autoriser les big-bags.
## Questions ouvertes
- [ ] Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)
- [ ] Programme de filmage exact (@Théo)
- [ ] Format de l'étiquette d'échantillonnage validé ? (@Justine)
- [x] ~~Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)~~**Résolu** (LIM-112) : négligé, non déduit du stock
- Programme de filmage exact (@Théo)
- [x] ~~Format de l'étiquette d'échantillonnage - validé ? (@Justine)~~ → Résolu (LIM-107) : format **A5**, contenu défini (12 champs), report `CST_RPT_ECHANTILLONAGE`, imprimé sur l'étiqueteuse du poste de travail
- Consignes d'échantillonnage : le mapping COR porte les consignes sur
`CstAtt02`, mais le commentaire du ticket évoque `CstAtt01` → point à
confirmer avec le client (mail à faire, @Arthur)
- Dépendance `CstAtt10` (Stage) côté ITM : requis pour l'étiquette
d'échantillonnage (LIM-107) ; à vérifier en préprod (@Nicolas) → voir
[Questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-07-20 | Arthur | LIM-107 (lecture directe) : section « Étiquette d'échantillonnage » (format A5, 12 champs, report `CST_RPT_ECHANTILLONAGE`, impression étiqueteuse poste via flux COR/COF) ; question format d'étiquette résolue ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-112 (lecture directe, Ouvert) : flux complet - mapping COR (Code/Description/Priority 3/CstAtt01 nb pal/CstAtt02 consignes/ProductCode-LotCode inversés/Color-Source-Size) ; assignation stock refondue (CstAtt01, prérequis palette, OrderByDesc bloquée puis profondeur, éditabilité CstAtt01 manuel) ; règle transverse indisponibilité stock ; orchestration Mega Job PK LIM-70 + sous-workflow + big-bag ; séquence opérateur (recomptage standalone, validation ligne inventaire, AGV→table entrée→PIE) ; nouvelle section « Clôture et émission du COF » ; big-bag confirmé ; 200g non déduit résolu ; 2 questions ouvertes (consignes CstAtt01/02, dépendance CstAtt10 Stage) ; front matter jira_refs +LIM-112/sources/tags |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| [LIM-107](https://easywmsfrance.atlassian.net/browse/LIM-107) | Ticket Jira (étiquettes expédition/échantillonnage, en revue de code) | 2026 |
| [LIM-112](https://easywmsfrance.atlassian.net/browse/LIM-112) | Ticket Jira (process échantillonnage complet COR→COF, Ouvert) | 2026 |
+227 -65
View File
@@ -1,16 +1,16 @@
---
title: "Mega Job Assignation des tâches aux PK"
title: "Mega Job - Assignation des tâches aux PK"
tags: [picking, job, assignation, agv, workflow]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80]
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80, LIM-82, LIM-106]
confluence_refs: []
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md"]
last_updated: 2026-05-12
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md", "Jira LIM-106 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Mega Job Assignation des tâches aux PK
# Mega Job - Assignation des tâches aux PK
> **Résumé** : job unique « chef d'orchestre » qui analyse les postes de
> travail éligibles et leur assigne des tâches de mouvement selon les
@@ -24,6 +24,11 @@ author: Arthur
## Contexte projet
> **Statut (LIM-70)** : dev terminé, **en préprod / attente déploiement pour
> test**. Deux revues de code validées : la première le 03/04/2026, la
> seconde le 29/06/2026 après ajout de la condition « OS en Releasing » et du
> contrôle `CstAtt06` sur l'éligibilité.
Chez Limagrain, les postes de travail (PK) sont polyvalents : réception,
picking, regroupement, échantillonnage, re certification. Plusieurs
flux différents génèrent des tâches de mouvement vers les PK. Sans
@@ -41,14 +46,36 @@ conditions suivantes doivent être remplies :
- **Aucun ordre de sortie** assigné au PK (écran Menu > Contrôle >
Affectation des postes de prélèvements)
- **Aucune tâche de mouvement** ayant pour destination ce PK
- **Aucune palette** présente sur un des sous-emplacements du PK
- **Aucune palette** présente sur un des sous-emplacements du PK (table de
préparation associée comprise)
- **Aucun conteneur de réception assigné au PK via son `CstAtt06`** (le
`CstAtt06` porte le code du picking lié à un conteneur de réception) -
contrôle ajouté le 26/06/2026
- **Le poste est ouvert** (mode actif)
- **Le paramètre MODES_PKxx existe et n'est pas vide** sinon le PK
- **Le paramètre MODES_PKxx existe et n'est pas vide** - sinon le PK
est ignoré
Si un PK ne remplit pas ces conditions, le job le saute et passe au
suivant.
> Le contrôle `CstAtt06` confirme l'usage de cet attribut côté réception
> (conteneur ↔ poste de picking lié, cf. LIM-67) - voir le point de conflit
> d'usage dans [questions ouvertes](../08-transverse/questions-ouvertes.md).
### Condition de sortie globale - OS en Releasing
Avant toute assignation, le job vérifie qu'**aucun ordre de sortie (OS)
n'est au statut `Releasing`** (query `CST_AnyOutboundOrderReleasingStatus`).
Si au moins un OS est en Releasing → le job **sort immédiatement** sans
essayer aucun mode (réception, picking, recertif…).
**Motif** : lors de la libération d'un lot de commandes, le WMS les libère
dans un ordre quelconque (pas forcément par priorité). Assigner pendant le
release risquerait de placer une commande peu prioritaire au détriment d'une
commande plus prioritaire libérée quelques secondes plus tard - ou de lancer
une réception sur un PK en priorité picking.
## Logique principale
```mermaid
@@ -82,6 +109,14 @@ Pour chaque PK éligible :
5. Sinon → exécution du sous-WF du mode suivant dans l'ordre de priorité
6. Si aucun sous-WF n'a rien assigné → le PK reste en attente
## Éléments AD (LIM-70)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Job` | Workflow + Job | Job orchestrateur : vérifie les modes autorisés des PK et tente d'assigner un ordre selon les priorités définies pour la station (LIM-69). **Intervalle : 5 secondes**. |
| `CST_PickingStations_AvailableForAssignation` | Query | Récupère les PK disponibles pour une nouvelle assignation : poste ouvert, sans conteneur ni tâche vers sa position (ni sa table de préparation), sans ordre assigné, et sans conteneur de réception assigné via `CstAtt06`. |
| `CST_AnyOutboundOrderReleasingStatus` | Query | Indique s'il existe au moins un OS au statut `Releasing` → condition de sortie globale du job. |
## Gestion des Big-Bags
Le paramètre `PK_BIGBAG` définit quels PK autorisent la présence de
@@ -100,91 +135,211 @@ spécialisés :
| Sous-WF | Ticket | Process | Page wiki |
|---------|--------|---------|-----------|
| Mini Job images de quai → PK | [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Réception fournisseur / intersite / retour client (depuis images de quai) | [Job réception PK](../05-agv/job-reception-pk.md) |
| Mini Job PS → PK | [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | _(tâche à écrire)_ | — |
| Mini Job PS → PK | ~~[LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75)~~ **Annulé** → [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | PS (picking station) → PK. Détail reporté à LIM-82 | _(à écrire sur LIM-82)_ |
| Mini Job assignation commandes → PK | [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Assignation des ordres de sortie (commandes) aux PK pour picking | Voir section ci-dessous |
| Mini Job assignation recertification → PK | [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Assignation des OS de classe RECERTIFICATION aux PK + création des tâches d'acheminement (conteneurs d'expédition → PK) et de chargement au quai recertification | Voir section ci-dessous |
Chaque sous-workflow retourne une information au WF principal indiquant
s'il a assigné quelque chose ou non.
## Mini Job Assignation commandes aux PK (LIM-80)
## Mini Job - Assignation commandes aux PK (LIM-80)
Ce sous-workflow est appelé par le Mega Job quand le mode **Picking** est
actif sur un PK. Il assigne un ordre de sortie (commande) au poste.
> **Statut (LIM-80)** : dev terminé, **en cours de test client
> (pré-production)**. Revue de code validée le **26/06/2026**.
### Éligibilité du PK pour une commande
Ce sous-workflow est le **mode Picking** du Mega Job. Il est appelé quand le
mode Picking est actif sur un PK éligible et assigne un **ordre de sortie
(OS)** au poste.
Le PK peut recevoir une commande si **toutes** les conditions sont
remplies :
En standard EasyWMS, l'assignation des commandes aux PK est gérée par le
workflow `OutboundOrder_AssignPKMP_ByWarehouse_WF`, déclenché par des
subscriptions événementielles (ouverture de station, changement de mode de
travail, etc.). Chez Limagrain ce déclenchement événementiel est
**désactivé** (8 subscriptions passées en `Disabled`, cf. tableau plus
bas) : c'est le Mega Job qui orchestre l'assignation lorsqu'un PK est
éligible en mode Picking.
- Le PK **autorise la préparation de commande** (mode Picking actif)
- Le PK **n'a pas de commande déjà assignée**
- Le PK **est vide** (aucune palette présente)
- Le PK **n'a aucune tâche en direction de celui-ci**
### Éligibilité du PK
### Choix de la commande
L'éligibilité du PK est **entièrement vérifiée par le Mega Job** (cf.
section [Éligibilité d'un PK](#éligibilité-dun-pk) ci-dessus) avant l'appel
de ce mini job. Le mini job ne refait pas ces contrôles : il reçoit un PK
déjà qualifié en mode Picking.
```mermaid
flowchart TD
A[PK éligible en mode Picking] --> B{Commande Messagerie\ndisponible ?}
B -- Oui --> C{PK_TRANSPORTEUR_MESSAGERIE\ncontient une valeur ?}
C -- Non --> D[Assigner 1ère Messagerie\net enregistrer PK dans param]
C -- Oui --> E{Valeur = ce PK ?}
E -- Oui --> F[Assigner prochaine Messagerie\ndu même transporteur]
F --> G{Commande trouvée ?}
G -- Non --> H[Vider le paramètre]
E -- Non --> I[Ignorer les Messagerie\nde ce transporteur]
I --> J[Chercher autre commande]
B -- Non --> J
H --> J
J --> K[Assignation standard\npar tournée / numéro d'arrêt]
```
### OS concernés
#### Commandes Messagerie (prioritaires)
Tous les OS au statut `Release` ayant du stock assigné avec du picking à
réaliser sont concernés, quel que soit leur type (commande client,
messagerie palette, messagerie carton), **sauf la recertification**
(`OutboundClassCode == RECERTIFICATION`).
Les commandes de **classe Messagerie** sont expédiées le jour même et
sont donc **prioritaires** sur les commandes standard.
Le PK ayant déjà été choisi par le Mega Job, le mini job assigne l'OS sur
**ce PK** (contrairement au standard, pas de recalcul de routage ni de
choix de PK).
Une fois un PK choisi pour une commande Messagerie, **toutes les
commandes Messagerie du même transporteur** doivent être assignées au
même PK. Pour cela, un paramètre par transporteur est créé :
`PK_TRANSPORTEUR_MESSAGERIE`.
### Choix de la commande - critères de tri
Règles :
L'OS le mieux assignable est sélectionné par la query
`CST_OutboundOrder_BestPendingAssignment_ForPK` (OS `Released`, hors classe
`RECERTIFICATION`, sans assignation existante, disposant de supports de
picking). Les OS candidats sont triés dans cet ordre (**arbitrage Justine
du 19/06/2026**) :
- À l'assignation d'une commande Messagerie au PK, le nom du PK est
enregistré dans le paramètre
- Si le paramètre contient le nom de ce PK → assigner **uniquement**
des commandes Messagerie du même transporteur. Si aucune n'est
trouvée → vider le paramètre
- Si le paramètre contient un autre PK → ignorer toutes les commandes
Messagerie de ce transporteur pour ce PK
1. **Priorité de l'OS** - définie par l'ERP dans le SOR/RUT
2. **Tâches de shipping** - un OS déjà en cours de shipping passe en
priorité, pour finir la commande en cours
3. **Date de libération** - la plus ancienne en premier
#### Commandes standard
> Le premier jet (revue de code du 05/06/2026) triait par priorité →
> nombre de conteneurs de picking (décroissant) → date de libération. Le
> tri a été revu le 19/06/2026 : le critère « OS déjà en cours de shipping »
> remonte au-dessus du nombre de conteneurs, pour ne pas laisser une
> commande à moitié préparée.
Le processus standard est utilisé pour assigner une commande à une
table de préparation et un PK. Les commandes d'une même tournée sont
préparées en respectant le **numéro d'arrêt** (plus petit numéro
d'arrêt en premier).
> **Priorité Messagerie** : il n'y a **pas** de priorisation custom côté WMS
> pour les commandes Messagerie. C'est SAP qui gère leur priorité en amont
> via la priorité du SOR (une Messagerie à expédier le jour même reçoit une
> priorité plus haute). Le paramètre `PK_TRANSPORTEUR_MESSAGERIE` envisagé
> initialement n'a **pas** été implémenté.
> ⚠️ À confirmer côté client (cf.
> [questions ouvertes](../08-transverse/questions-ouvertes.md)).
### Création des tâches de picking
Après l'assignation, les tâches de picking sont créées (sortie des palettes
source du TK vers le PS/PK). Elles alimentent le séquençage TK → PS
([LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84)).
### Éléments AD (LIM-80)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Picking_PR` | Workflow | Mode Picking du Mega Job : récupère le meilleur OS assignable et crée l'assignation PK. |
| `CST_OutboundOrder_BestPendingAssignment_ForPK` | Query | Meilleur OS assignable (Released, hors RECERTIFICATION, sans assignation, avec supports de picking), trié priorité → tâches de shipping → date de libération. |
> Le workflow orchestrateur `CST_PickingStationAssignment_Job` (déjà décrit
> dans [Éléments AD (LIM-70)](#éléments-ad-lim-70)) a été enrichi de l'appel
> de ce mini job d'assignation picking.
### Subscriptions désactivées
Le déclenchement événementiel standard de
`OutboundOrder_AssignPKMP_ByWarehouse_WF` est neutralisé (le Mega Job prend
le relai). Les 8 subscriptions suivantes sont passées en `Disabled` :
| Subscription | Event |
|---|---|
| `PickingStationOpenedStationEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Ouverture d'un PK |
| `PickingStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail PK |
| `PickingStationChangedMaxOutboundOrdersEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement max OS sur PK |
| `MpStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail MP |
| `MpStationAssignedModeEvent_OutboundOrder_AssignPKMP_ByWarehouse_WF` | Mode assigné à MP |
| `DockStationChangeWorkModeEvent_OutboundOrder_AssignPKMP_ByWarehouse` | Changement mode de travail Dock |
| `OrderAssignDeletedEvent` | Suppression d'une assignation de PK |
| `OutboundOrderAssignedRouteEvent_OutboundOrder_AssingPKMP_ByWarehouse` | Assignation d'un OS à une route |
## Mini Job - Assignation recertification aux PK (LIM-106)
> **Statut (LIM-106)** : dev terminé, **en attente de déploiement pour test**
> (livré en préprod le 03/06/2026). Revue de code Maxime le 29/06/2026
> (ajustements ci-dessous).
Ce sous-workflow est le **mode Recertification** du Mega Job. Il est le
pendant du mini job picking ([LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80)),
mais pour les OS de classe **RECERTIFICATION** - que LIM-80 exclut
justement de l'assignation picking standard. Le process de poste associé
est décrit dans [Recertification - Workstation au PK](recertification.md).
### Assignation du PK
Le meilleur OS recertification en attente est sélectionné par la query
`CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` et assigné
au PK éligible. Les candidats sont triés dans cet ordre :
1. **Priorité de l'OS**
2. **Date de libération** - la plus ancienne en premier
### Création des tâches
Les palettes à acheminer au poste sont des **conteneurs d'expédition**. Le
process de création des tâches d'expédition standard est donc intercepté :
`Outbound_CreateShippingContainersTasks_PR` filtre les OS de classe
RECERTIFICATION et redirige vers le sous-WF custom
`CST_Outbound_Recertification_CreateShippingContainersTasks_PR`, qui
récupère le PK assigné à l'OS et crée les **tâches de mouvement** des
conteneurs vers ce PK.
À l'arrivée du conteneur au PK (`Container_MovedEventHandler_PK_PR`), une
**tâche de chargement vers le quai de recertification** est créée. La tâche
de mouvement est marquée `ProcessType = "recertification"`
(`Container_MovedEvent_PR_V1`) et porte le flag **`CstAtt02` = Recertification**
(affiché « Recertification » dans la vue des tâches `TaskVList`) - voir
[Catalogue AD customs - CstAtt Tâche](../07-admin/ad-customs.md#cstatt-tâche-task).
> **CstAtt de recertification : 01 → 02.** Le premier jet (revue Vincent
> 03/06) posait le flag sur le `CstAtt01` de la tâche ; il a été **déplacé
> sur le `CstAtt02`** (Maxime 26/06/2026), le `CstAtt01` étant réservé au
> numéro de séquence picking (LIM-84).
### Annulation des tâches
Si le conteneur d'expédition est supprimé (`ShippingContainerDeletedEvent`),
la souscription `CST_ShippingContainerDeleted_CancelRecertificationTask`
appelle `CST_Container_CancelRecertificationTasks` qui **annule les tâches
de mouvement** de recertification associées au conteneur.
### Garde-fous (revue Maxime 29/06/2026)
- **Pas de tâche générée** si le conteneur porte déjà une tâche, ou si le
support est **sur l'AGV**.
- **Blocage de la génération** de tâche si **aucun quai n'est assigné** à
l'OS de type RECERTIFICATION (erreur dans l'ordre de sortie).
### Éléments AD (LIM-106)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PickingStationAssignment_Recertification_PR` | Workflow | Mode Recertification du Mega Job : sélectionne le meilleur OS recertification en attente et crée l'assignation PK. |
| `CST_Outbound_Recertification_CreateShippingContainersTasks_PR` | Workflow | Récupère le PK assigné à l'OS et crée les tâches de mouvement des conteneurs d'expédition vers le PK. |
| `Outbound_CreateShippingContainersTasks_PR` | Workflow | Modifié : filtre les OS de classe RECERTIFICATION et redirige vers le sous-WF custom de création de tâches. |
| `Outbound_GetOutboundOrderShippingContainersAndPsGroup_PR` | Workflow | Modifié : remonte le code de classe et la priorité de l'OS. |
| `Container_MovedEvent_PR_V1` | Workflow | Modifié : positionne `ProcessType = "recertification"` sur la tâche si l'OS est de classe recertification. |
| `Container_MovedEventHandler_PK_PR` | Workflow | Modifié : crée une tâche de chargement vers le quai de recertification quand un conteneur termine une tâche de mouvement d'un OS recertification. |
| `CST_Container_CancelRecertificationTasks` | Workflow | Récupère et annule les tâches de recertification d'un conteneur (appelé par la souscription). |
| `CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` | Query | Meilleur OS recertification assignable à un PK (tri priorité → date de libération). |
| `CST_OutboundOrderLineDetails_ByRecertificationContainer` | Query | Détails de ligne d'OS pour un conteneur d'un OS recertification. |
| `CST_RecertificationTasks_ByContainer` | Query | Tâches de recertification associées à un conteneur. |
| `CST_ShippingContainerDeleted_CancelRecertificationTask` | Subscription | Sur `ShippingContainerDeletedEvent`, appelle `CST_Container_CancelRecertificationTasks`. |
| `TaskVList` | Vue | Ajout du `CstAtt02` (flag « tâche de recertification »). |
| `CST_Task_CustomAttribute1` | Ressource i18n | Libellé FR/EN « Recertification » de la colonne CstAtt tâche. |
## Points d'attention
⚠️ Le Mega Job est le chef d'orchestre du picking : il distribue le
travail aux PK en fonction des modes configurés par PK.
⚠️ Les commandes Messagerie sont prioritaires et ont une affinité
transporteur/PK via `PK_TRANSPORTEUR_MESSAGERIE`.
⚠️ Priorité Messagerie gérée par SAP via la priorité du SOR - pas de
custom WMS (`PK_TRANSPORTEUR_MESSAGERIE` non implémenté).
⚠️ L'éligibilité PK vérifie 4 conditions (mode autorisé, pas de
commande, vide, pas de tâche en cours).
⚠️ L'éligibilité PK vérifie plusieurs conditions (poste ouvert, pas de
commande, vide, pas de tâche en cours, pas de conteneur réception lié via
`CstAtt06`, `MODES_PKxx` non vide).
⚠️ Le job **sort globalement** si au moins un OS est en `Releasing` (pas
d'assignation pendant une libération de commandes).
## Questions ouvertes
- [ ] Fréquence du Mega Job toutes les N secondes ou événementiel ?
(@Nicolas)
- [ ] Sous-WF regroupement et échantillonnage quand les documenter ?
- ~~Fréquence du Mega Job - toutes les N secondes ou événementiel ?~~
**Résolu (LIM-70)** : job périodique, intervalle **5 secondes**.
- Sous-WF regroupement et échantillonnage - quand les documenter ?
(@Arthur)
- [ ] Interaction PK_BIGBAG et modes de travail un PK en mode
- Interaction PK_BIGBAG et modes de travail - un PK en mode
Big-Bag peut-il aussi traiter du picking normal ? (@Nicolas)
- Confirmer côté client que SAP gère la priorité des commandes Messagerie
dans le SOR - `PK_TRANSPORTEUR_MESSAGERIE` abandonné (LIM-80)
(@Arthur → Nicolas/Olivier) → voir
[questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
@@ -193,11 +348,18 @@ commande, vide, pas de tâche en cours).
| 2026-05-12 | Arthur | Création initiale depuis LIM-70 (Mega Job) |
| 2026-05-12 | Arthur | Ajout sous-WF assignation commandes (LIM-80) : Messagerie prioritaire, affinité transporteur/PK |
| 2026-05-13 | Arthur | Restauration sections tronquées (Messagerie détail, commandes standard, points d'attention, questions, historique, références) |
| 2026-07-17 | Arthur | Relecture commentaires LIM-70 : section Éléments AD (CST_PickingStationAssignment_Job intervalle 5s, CST_PickingStations_AvailableForAssignation, CST_AnyOutboundOrderReleasingStatus), condition de sortie globale « OS en Releasing », contrôle éligibilité CstAtt06, statut préprod + 2 revues de code, résolution question fréquence (5s) |
| 2026-07-17 | Arthur | LIM-75 (Mini Job PS → PK) confirmé Annulé → repris par LIM-82 : table sous-workflows annotée |
| 2026-07-17 | Arthur | Relecture revue de code LIM-80 (préprod, validée 26/06) : refonte section mini job assignation (query `CST_OutboundOrder_BestPendingAssignment_ForPK`, WF `CST_PickingStationAssignment_Picking_PR`, 8 subscriptions désactivées, OS hors RECERTIFICATION) ; tri final priorité → tâches de shipping → date de libération (arbitrage Justine 19/06) ; abandon `PK_TRANSPORTEUR_MESSAGERIE`, priorité Messagerie gérée par SAP/SOR |
| 2026-07-20 | Arthur | LIM-106 (lecture directe, attente déploiement test) : nouvelle section « Mini Job assignation recertification aux PK » (assignation OS RECERTIFICATION triée priorité → date de libération, création tâches de mouvement conteneurs d'expédition → PK + tâche chargement quai recertification, annulation sur suppression conteneur, garde-fous Maxime 29/06, flag CstAtt02 tâche déplacé du 01) ; ligne ajoutée à la table des sous-workflows |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation commandes) | 2026 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job, 7 commentaires) | 2026-04 → 2026-06 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation OS aux PK, 6 commentaires, préprod) | 2026-06 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) | 2026 |
| [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | Ticket Jira (Mini Job PS → PK, **Annulé** → LIM-82) | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (Mini Job PS → PK, reprise) | 2026 |
| [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Ticket Jira (Mini Job assignation recertification aux PK, 3 commentaires, attente déploiement test) | 2026-06 |
@@ -1,5 +1,5 @@
---
title: "Picking sur poste de travail Expédition client"
title: "Picking sur poste de travail - Expédition client"
tags: [picking, poste, expédition, ordonnancement, MOV, PCK]
status: draft
standard_ref: concepts/picking.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-13
author: Arthur
---
# Picking sur poste de travail Expédition client
# Picking sur poste de travail - Expédition client
> **Résumé** : processus [CUSTOM] de picking sur poste de travail pour
> les commandes client, avec ordonnancement par espèce, règles de picking
@@ -61,7 +61,7 @@ sur une même palette fille.~~
Limagrain ne fait pas de bio, pas de raison de maintenir cette
contrainte. Paramètre réactivable si besoin futur.
> Voir [Séquençage TK → PS Arbitrage](sequencage-tk-ps.md#arbitrage-des-contradictions-reu-11052026)
> Voir [Séquençage TK → PS - Arbitrage](sequencage-tk-ps-historique.md#arbitrage-des-contradictions-réu-11052026)
> pour le détail de l'analyse comparative.
## [CUSTOM] Règle du picking négatif
@@ -83,7 +83,7 @@ classique.
> Le picking négatif est **prioritaire sur Maïs first** et toutes les
> autres règles de tri (confirmé par Olivier, réu. 11/05/2026).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1--picking-négatif-en-premier).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1---picking-négatif-en-premier).
## [CUSTOM] Calcul équivalent palette (pro rata Bag/pal)
@@ -109,13 +109,13 @@ Seuil cible : **~95%** de remplissage (marge de sécurité).
Poids max palette : **1 250 kg** (AF fait foi, corrige 1 200 kg du
DevOps).
## [CUSTOM] Verrou « HORS TOLERANCE » Recomptage
## [CUSTOM] Verrou « HORS TOLERANCE » - Recomptage
Si la palette source porte le verrou « HORS TOLERANCE » → recomptage
demandé avant le picking (inventaire).
- Si stock restant suffisant après inventaire → assignation maintenue
(workflow `OnStockAdjust` recalcule uniquement si nécessaire ne casse
(workflow `OnStockAdjust` recalcule uniquement si nécessaire - ne casse
pas la tâche en cours)
- Si plus assez de stock → réassignation ailleurs + retrait verrou
@@ -168,16 +168,16 @@ sur les tables élévatrices des PK.
### Règles de priorité
1. **Picking négatif toujours en premier** une seule palette à la fois
1. **Picking négatif toujours en premier** - une seule palette à la fois
pour ce process, toujours déposée sur la **table du centre**
2. **Picking classique ensuite** jusqu'à **2 palettes simultanées** au
2. **Picking classique ensuite** - jusqu'à **2 palettes simultanées** au
PK, déposées sur les **tables latérales**
3. Le WMS peut envoyer **1 palette picking négatif + 1 palette picking
classique** en même temps (pour compléter la palette post-picking
négatif)
4. Le nombre de palettes de prélèvement au PK ne dépasse **jamais 2**
### Picking négatif Détail
### Picking négatif - Détail
À chaque tâche de picking négatif :
@@ -240,7 +240,7 @@ Contrôle PIE identique aux autres processus (voir
## Points d'attention
⚠️ Le picking négatif (seuil 55% + poids ≥ 7 kg, deux conditions
cumulatives) est une règle métier intégrée dans EasyWMS c'est un
cumulatives) est une règle métier intégrée dans EasyWMS - c'est un
développement custom.
⚠️ Le traitement commercial est **désactivé**
@@ -255,17 +255,17 @@ développement custom.
l'assignation si le stock restant est suffisant.
⚠️ L'algorithme de répartition TP est le « gros morceau » custom du
picking gestion combinatoire de tous les cas.
picking - gestion combinatoire de tous les cas.
## Questions ouvertes
- [x] Programme de filmage exact documenté, 8 programmes A→H
- [x] ~~Programme de filmage exact~~ - documenté, 8 programmes A→H
(voir [Flux expédition](../04-outbound/flux-expedition.md#filmage))
- [x] Process sans picking négatif / seuil confirmé 55% + poids ≥ 7 kg
- [x] ~~Process sans picking négatif / seuil~~ - confirmé 55% + poids ≥ 7 kg
(réu. 11/05/2026)
- [x] Traitement commercial supprimé
- [x] ~~Traitement commercial~~ - supprimé
(`CONTROLE_TRAITEMENT_COMMERCIAL = false`, réu. 11/05/2026)
- [ ] Gestion du picking négatif dans l'interface opérateur (@Nicolas)
- Gestion du picking négatif dans l'interface opérateur (@Nicolas)
## Historique des modifications
@@ -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 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 |
+140 -9
View File
@@ -3,10 +3,10 @@ title: "Placement des palettes PS → PK (choix de table)"
tags: [picking, placement, table, buffer, ping-pong, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-82]
jira_refs: [LIM-82, LIM-84, LIM-91, LIM-95, LIM-116]
confluence_refs: []
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md"]
last_updated: 2026-05-12
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md", "Jira LIM-82 (commentaires revue de code)", "Jira LIM-95 (Annulé, mergé dans LIM-82)", "Jira LIM-116 (capacité buffers PK → PK)"]
last_updated: 2026-07-20
author: Arthur
---
@@ -22,6 +22,27 @@ author: Arthur
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
> **Statut (LIM-82)** : dev terminé, **en attente de déploiement pour
> test**. Livré en préprod le 25/06/2026, revue de code validée le
> **03/07/2026** (après une itération NOK le 02/07). Ce ticket est la
> reprise de [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75)
> (V1 annulé). Positionnement dans la chaîne :
> [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) assignation →
> [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) séquençage
> TK → PS → **LIM-82 placement PS → PK** →
> [Process picking au PK (LIM-91)](process-picking-pk.md).
> ⚠️ **LIM-95 (Annulé) mergé ici** : le ticket
> [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95)
> « [JOB] génération des mouvements depuis les buffers » est
> **Annulé(e)** ; ses modifications ont été intégrées à **LIM-82**
> (commentaire Maxime Halgand, 26/06). Ses deux demandes sont couvertes
> ici : (1) ne pas générer le mouvement d'une palette si une autre tâche
> du même OS a une séquence prioritaire → voir
> [Gate de séquence (critère B)](#gate-de-séquence-critère-b) ; (2)
> contrôler la capacité de la **TP** (sous-emplacement) en plus de celle
> du PK → voir la note ci-dessous.
## Contexte projet
Chaque PK dispose de **3 tables** soumises à une contrainte d'adjacence
@@ -31,7 +52,7 @@ stricte :
TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE
✅ adjacentes ✅ adjacentes
TABLE_GAUCHE ←————————————————→ TABLE_DROITE
TABLE_GAUCHE ←----------------→ TABLE_DROITE
❌ INTERDIT
```
@@ -41,7 +62,7 @@ Règles de mouvement :
la table
- L'opérateur peut déplacer du **stock** (sacs, colis) d'une palette à
une autre **uniquement entre deux tables adjacentes**
- Il est **interdit de déplacer une palette d'une table à une autre**
- Il est **interdit de déplacer une palette d'une table à une autre** -
ni par l'opérateur, ni par l'AGV. Une palette arrive sur une table
et ne peut que repartir (évacuation)
- **TABLE_CENTRE** est le pivot : seule table adjacente aux deux autres
@@ -87,6 +108,12 @@ FONCTION décider_destination(palette, PK) :
RETOURNER ATTENTE
```
> [CUSTOM] **Capacité TP (LIM-95)** : dans tous les flux qui vérifient la
> capacité du PK, la capacité de la **TP** (sous-emplacement de la table)
> doit aussi être contrôlée. Attention : **aucun capteur de présence
> n'est relié à Galileo** - la capacité est donc suivie logiquement par
> le WMS, pas par un signal physique.
## Décision niveau 2 : choix de la table
Le choix dépend du **type de picking** de la tâche associée.
@@ -232,7 +259,7 @@ PICKING_DIRECT restants ≥ `SEUIL_RECENTRAGE_PF` (défaut : 3), le WMS
peut déclencher un mouvement AGV pour recentrer la PF sur
TABLE_CENTRE.
## Évacuation des tables Priorité
## Évacuation des tables - Priorité
Lorsqu'aucune table n'est libre et qu'il faut en libérer une :
@@ -259,6 +286,13 @@ buffer affectées à ce PK :
**Règle critique** : l'ordre de sortie des buffers est dicté par
`Line.CstAtt`, **pas** par l'ordre d'arrivée physique en buffer.
> [CUSTOM] **Capacité buffers PK → PK (LIM-116)** : la génération de
> mouvement depuis le picking (`Task_GenerateMovement_PR_V2`) contrôle la
> capacité des buffers lorsqu'une palette va d'un poste de picking à un
> autre. Les mouvements manuels du poste (appeler / renvoyer, filmage au
> retour) sont détaillés dans
> [Process picking au PK](process-picking-pk.md#mouvements-manuels-du-poste-appeler--renvoyer---lim-116).
## Palettes multi-commandes
Une palette source peut être assignée à plusieurs OS.
@@ -288,11 +322,91 @@ séquence du mode "Picking" dans `MODES_PKxx`
| `MAX_PRELOAD_PAR_PK` | Nombre max de palettes pré-chargées en buffer ES par PK | 3 |
| `SEUIL_RECENTRAGE_PF` | Nombre min de PICKING_DIRECT restants pour recentrer la PF au centre | 3 |
| `CONTROLE_TRAITEMENT_COMMERCIAL` | Séparer ou non les articles par TC sur les palettes filles | `false` (V1.1) |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | - |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | - |
## Implémentation définitive (LIM-82)
> Cette section reflète le **code livré et validé** (revue de code du
> 03/07/2026). Elle prime sur l'algorithme V1.0 ci-dessus en cas d'écart -
> ce dernier reste documenté comme référence de conception.
### Records et workflows
| Élément AD | Type | Rôle |
|------------|------|------|
| `TaskWF` | Record | Ajout d'un CstAtt de tâche (dont `CstAtt3`, flag « palette passée au shuttle »). |
| `CST_ChooseDestinationFromPS` | Workflow | Décision principale : table de picking (avec choix de la position), buffer ES si aucune place, ou attente au PS s'il n'y a plus de place (selon `MAX_PRELOAD_PAR_PK`). |
| `Container_MovedEventHandler_PS_PR` | Workflow | À l'arrivée d'une palette de tâche picking au PS, appelle `CST_ChooseDestinationFromPS`. |
| `Container_MovedEventHandler_ET_PR` | Workflow | Passe `CstAtt3` de la tâche à `True` **après** que la palette a quitté le shuttle, pour autoriser la sortie des palettes suivantes du TK. |
| `Container_MovedEventHandler_MS_PR` | Workflow | Idem : passe `CstAtt3` à `True` quand une palette atteint `TS_12` (sortie du `TK_01`, qui ne passe pas par le shuttle). |
| `CST_Job_CheckPSBufferContainers` | Job | Ré-évalue les palettes en attente au PS et en buffer : quand une place picking se libère, envoie la bonne palette au picking. |
### Queries
| Query | Rôle |
|-------|------|
| `CST_Picking_GetSiblingTasks` | Récupère les tâches de picking du même **ordre de sortie** (OS). |
| `CST_GetTasksWaitingOnPSAndBufffer` | Récupère toutes les tâches sans mouvement présentes sur un PS ou un buffer (en attente de picking ou de stage). |
| `CST_GetStationRoutes_ToDisable` | Récupère les routes à désactiver pour le mouvement PS : route PS → PK, et routes PS → buffer plein. |
### Gate de séquence (critère B)
Avant toute pose sur une table, le WMS vérifie via
`CST_Picking_GetSiblingTasks` s'il existe une autre palette du **même OS**
avec un `Line.CstAtt` (séquence, écrit par
[LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84)) **inférieur**
encore à traiter en amont (buffer / shuttle). Si oui, la palette qui arrive
n'est **pas** posée sur une table : elle part en buffer ES (ou en attente si
buffer indisponible).
> Cette règle correspond à la 1re demande de
> [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95) (Annulé,
> mergé ici) : « le job traite chaque tâche une par une ; si une autre
> tâche de l'OS a une séquence prioritaire (`Task.CstAtt01` plus faible),
> ne pas générer le mouvement ». `Task.CstAtt01` et `Line.CstAtt`
> désignent la même **séquence de picking** (voir
> [ad-customs](../07-admin/ad-customs.md), CstAtt Tâche 01).
> ⚠️ **Correction revue de code (02→03/07)** : le contrôle portait
> initialement sur les tâches de la **route** ; il a été ramené au périmètre
> de l'**OS**. Vérifier sur la route provoquait un faux blocage quand deux OS
> d'une même route étaient préparés simultanément sur deux PK différents.
### Gating shuttle (CstAtt3)
Le shuttle est le goulot d'ordonnancement entre le TK et les PS. Le flag
`CstAtt3` de la tâche est mis à `True` une fois la palette sortie du shuttle
(handler `ET`) ou arrivée à `TS_12` pour le `TK_01` qui ne passe pas par le
shuttle (handler `MS`). Ce flag conditionne la sortie des palettes suivantes
du TK, garantissant l'ordre de passage (cf.
[ad-customs](../07-admin/ad-customs.md) CstAtt Tâche 03).
### Écarts avec l'algorithme V1.0
- Les états `EN_ATTENTE_EVACUATION` et la « réactivation » d'une
`PALETTE_FILLE_EN_ATTENTE` sont **abandonnés** dans LIM-82 (barrés dans la
description du ticket). Les priorités V1.0 qui s'y réfèrent (ex. cas
picking direct « adjacente en cours d'évacuation ») ne sont donc plus
applicables.
- Picking négatif (critère C) : `TABLE_CENTRE` libre **ET** au moins une
table de côté adjacente libre → palette source sur `TABLE_CENTRE` ; sinon
buffer ES. Une seule palette négative à la fois par PK.
- Picking direct (critère D) : table de côté libre **adjacente** à la
`PALETTE_FILLE_ACTIVE` ; en cas de double disponibilité, `TABLE_GAUCHE`
prioritaire sur `TABLE_DROITE` ; sinon buffer ES.
- Les mécanismes `SEUIL_RECENTRAGE_PF` (recentrage AGV) et
`CONTROLE_TRAITEMENT_COMMERCIAL` proviennent de la spec V1.0 et ne
figurent pas dans les critères validés de LIM-82.
→ ⚠️ À confirmer côté implémentation.
## Points d'attention
⚠️ L'implémentation livrée (LIM-82) prime sur l'algorithme V1.0 ci-dessus :
voir [Implémentation définitive (LIM-82)](#implémentation-définitive-lim-82)
(états `EN_ATTENTE_EVACUATION` / réactivation abandonnés, gate de séquence
OS, gating shuttle `CstAtt3`).
⚠️ La contrainte d'adjacence est **physique** : l'opérateur ne peut pas
déplacer de sacs entre TABLE_GAUCHE et TABLE_DROITE directement.
@@ -307,7 +421,15 @@ d'entrée en buffer.
## Questions ouvertes
(Aucune identifiée — algorithme V1.0 complet)
- Big-bag : comportement attendu si une palette big-bag arrive et qu'aucun
PK `PK_BIGBAG` autorisé n'est disponible (attente dédiée, refus, autre
file) ? (question ouverte LIM-82)
- Confirmer si les mécanismes V1.0 `SEUIL_RECENTRAGE_PF` (recentrage AGV) et
`CONTROLE_TRAITEMENT_COMMERCIAL` sont réellement implémentés (absents des
critères validés LIM-82).
- LIM-75 est cité comme pré-requis « Mini Job picking négatif » (évaluation
du `TaskType` OrdinaryPicking/NegativePicking) alors qu'il est confirmé
Annulé → LIM-82 : clarifier où le `TaskType` est réellement écrit.
## Historique des modifications
@@ -315,11 +437,20 @@ d'entrée en buffer.
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis spec "Logique combinatoire picking - PS vers PK - V1.0" |
| 2026-05-13 | Arthur | Correction règle déplacement palette (jamais déplacée, ni AGV ni opérateur), ajout jira_ref LIM-82 |
| 2026-07-17 | Arthur | Relecture revue de code LIM-82 (préprod, validée 03/07) : ajout section « Implémentation définitive » (WF `CST_ChooseDestinationFromPS`, `Container_MovedEventHandler_PS/ET/MS_PR`, job `CST_Job_CheckPSBufferContainers`, queries `CST_Picking_GetSiblingTasks` / `CST_GetTasksWaitingOnPSAndBufffer` / `CST_GetStationRoutes_ToDisable`) ; gate de séquence OS (correction route → OS) ; gating shuttle `CstAtt3` ; abandon états `EN_ATTENTE_EVACUATION` + réactivation PF ; statut préprod ; questions big-bag / recentrage / TaskType LIM-75 |
| 2026-07-17 | Arthur | LIM-95 confirmé Annulé(e) → mergé dans LIM-82 (pattern V1/V2, pas de duplication) : note de supersession (chaîne), rattachement des 2 demandes (gate de séquence `Task.CstAtt01`=`Line.CstAtt` ; note capacité TP + absence capteurs Galileo), jira_refs/sources/Références |
| 2026-07-20 | Arthur | Note capacité buffers PK → PK (LIM-116, `Task_GenerateMovement_PR_V2`) + renvoi vers les mouvements manuels du poste (process-picking-pk.md) ; jira_refs +LIM-116, sources, last_updated, Références |
## Références
| Source | Type | Date |
|--------|------|------|
| Logique combinatoire picking - PS vers PK - V1.0 | Spécification technique | 27/04/2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, 5 commentaires, préprod) | 2026-06 → 07 |
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira (séquençage TK → PS, écrit `Line.CstAtt`) | 2026 |
| [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | Ticket Jira (picking négatif TaskType, **Annulé** → LIM-82) | 2026 |
| [LIM-95](https://easywmsfrance.atlassian.net/browse/LIM-95) | Ticket Jira ([JOB] mouvements depuis buffers, **Annulé** → mergé LIM-82) | 2026 |
| [LIM-91](https://easywmsfrance.atlassian.net/browse/LIM-91) | Ticket Jira (workflow opérateur au PK) | 2026 |
| [LIM-116](https://easywmsfrance.atlassian.net/browse/LIM-116) | Ticket Jira (LOT 3, mouvements manuels station picking - capacité buffers PK → PK `Task_GenerateMovement_PR_V2`) | 2026-07 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (modes PK) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
@@ -0,0 +1,326 @@
---
title: "Process de picking au poste de travail (PK)"
tags: [picking, PK, opérateur, étiquetage, filmage, picking-négatif, MII, custom]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-91, LIM-80, LIM-84, LIM-82, LIM-75, LIM-66, LIM-76, LIM-68, LIM-67, LIM-116]
confluence_refs: []
sources: ["Jira LIM-91 (lecture directe, en revue de code)", "Jira LIM-116 (lecture directe, revue de code)"]
last_updated: 2026-07-20
author: Arthur
---
# Process de picking au poste de travail (PK)
> **Résumé** : workflow opérateur de picking au poste de travail (PK).
> L'opérateur prélève les sacs d'une palette source vers une palette
> fille (client), gère l'étiquetage (RFID + intercalaires MII), le
> filmage et l'évacuation. Dernière étape de la chaîne picking.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Le WF standard `WorkStation_Picking_Default` sert de socle ; toute la
> logique Limagrain est construite en custom par-dessus.
> **Statut (LIM-91)** : **En revue de code** (assignée Maxime Halgand).
> Implémentation livrée le 16/07, revue de code du 17/07 avec plusieurs
> corrections en attente (voir Points d'attention). Le contenu ci-dessous
> reflète l'implémentation en cours, à reconfirmer à la validation.
## Positionnement dans la chaîne picking
Ce ticket est l'étape finale de la chaîne :
- [LIM-80](job-assignation-pk.md) assignation OS → PK (génère les tâches)
- [LIM-84](sequencage-tk-ps.md) séquençage TK → PS (écrit `Line.CstAtt`)
- [LIM-82](placement-ps-pk.md) placement PS → PK (choix de table, buffers)
- **LIM-91 (cette page)** : picking effectif au PK → étiquetage → filmage
→ évacuation
Le périmètre commence à la **détection de la palette source sur une
table du PK** et se termine à l'**évacuation de la palette fille**.
Hors périmètre (couvert ailleurs) : tri/séquençage (LIM-84), placement et
ping-pong (LIM-82), assignation PK (LIM-80), conditions de déclenchement
du picking négatif (LIM-75).
## Architecture du poste
Le picking se fait toujours sur **un seul poste = 3 tables (TP)** ;
jamais sur les 6 TP d'un îlot en même temps. Contrainte d'adjacence :
`TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE` (gauche et droite **non**
adjacentes). Détail dans [Placement PS → PK](placement-ps-pk.md).
- Une palette ne se déplace **jamais** d'une table à une autre (ni
opérateur, ni AGV) : elle arrive sur une table et n'en repart que pour
évacuation.
- Les **big-bags ne transitent jamais par les PK** : expédiés en palettes
complètes via le flux shipping direct. Seuls les sacs sont prélevés.
- Équipement par poste : 1 poste léger EasyWMS sur 2 écrans, 1 imprimante
Zebra (HU RFID), 1 imprimante A4, 1 douchette multi-format.
Le process démarre en mode **Tâches automatiques** sur PC (même mode que
la réception).
## Spécifications fonctionnelles
### Picking direct
Cas standard : l'opérateur prélève les sacs de la palette source (déjà
sur une table adjacente à la palette fille) et les dépose sur la palette
fille, confirme, puis la source est évacuée (retour ASRS si stock
restant) ou mise en attente si d'autres tâches l'utilisent. Le ping-pong
gauche/droite est géré par LIM-82.
Palette **multi-commandes** : si la source a encore des tâches pour
d'autres OS, elle est marquée `MULTI_COMMANDE` et envoyée vers un buffer
ES (LIM-82).
### Picking négatif
Optimisation physique : au lieu de déplacer les N sacs à expédier,
l'opérateur déplace les sacs **qui restent** (moins nombreux) vers une
autre palette. Toujours sur la **table du centre**, une seule palette en
picking négatif à la fois. Un nouveau SSCC est généré pour la palette
d'excédent (retour ASRS) et une étiquette RFID lui est imprimée.
Les **conditions de déclenchement** sont évaluées en amont (LIM-75 /
LIM-84), pas dans ce workflow : `QttyNegPick.PickingPercent` (défaut 50),
`QttyNegPick.MinCompletePercent` (défaut 55) et poids unitaire du sac
≥ 7 kg. Le dispatcher standard route selon le `TaskType` déjà déterminé
(pas de custom ici). La fusion standard neg+ord sur la même ligne de
commande est déjà gérée par EasyWMS.
### Verrou HORS TOLERANCE et recomptage
Si une palette source porte le verrou « HORS TOLERANCE » (posé au PIE,
[LIM-66](../01-inbound/controle-qualite-reception.md)), un **recomptage
obligatoire** est déclenché avant le picking :
- Stock suffisant après inventaire → assignation maintenue, picking
continue, verrou retiré sur la palette comptée.
- Stock insuffisant → réassignation sur une autre palette + retrait du
verrou.
Palette `MULTI_COMMANDE` revenant pour un autre OS : **pas besoin de
recompter** (le premier recomptage fait foi).
### Étiquetage au picking
Dépend de la **classe de commande**, détectée via le RUT
(`OutboundType = 0`, `AccountCode = MII`, `OutboundClassCode = MII`).
- **MII / multi-lots** : 1 étiquette HU **RFID** (palette mère physique,
à chaque nouvelle palette) + 1 étiquette HU **sans RFID** (intercalaire
/ palette fille, à chaque nouvelle ligne de stock flaggée). Pas de HU
imbriquée : le **SSCC virtuel** de la palette fille est porté par le
`CstAtt2` de la **ligne de stock** (ressource `SSCC MII [CST 2]`).
- **Non-MII (ou MII mono-lot)** : une seule étiquette HU RFID, pas
d'intercalaire.
Les rapports d'étiquette réutilisent ceux de
[LIM-68](../01-inbound/etiquette-rfid.md) (mono/multiref RFID, monoref
sans RFID pour l'intercalaire).
**Flag `CstAtt14` Container** (`true` après étiquetage au PK) consommé en
aval par l'**étiqueteuse automatique au poste de sortie TK** :
`true` → n'imprime pas ; `false` → imprime puis passe à `true` ;
`error` → échec impression. Voir [AD Customs](../07-admin/ad-customs.md).
> **Messagerie carton (phase 1)** : aucun traitement spécifique. Les
> supports suivent le flux client déjà en place et retournent à l'ASRS
> (pas d'emplacement au sol, pas de SSCC colis, pas de poumon
> transporteur).
### Filmage avant évacuation
Avant chaque évacuation de palette fille, l'opérateur choisit le
programme de filmage via un prompt. Valeur stockée dans le **`CstAtt05`
Container** et transmise en custom data à Galileo (TMS), qui arrête les
rouleaux et lance le programme. Choix **obligatoire** (« 0 - pas de
filmage » possible), **toujours proposé** à l'opérateur (pas de
pré-sélection par espèce/contenant).
Programmes : `0` (pas de filmage), `A-H` selon espèce (Tournesol /
Maïs & Blé) × contenant (Sacs / Big Bag) × mode (Complet / Réduit).
Détail dans [Stations picking](stations-picking.md).
### Évacuation et retour ASRS
- **Palette fille** : tâche AGV PK → Entrée TK, replacement **direct** en
zone client / défragmentation de l'ASRS (pas de stockage temporaire).
Le passage en « conteneur client » est remonté à SAP via le **LOC**
(`ACTION=P`, delta 5 min, [LIM-76](../06-erp-interface/loc-message-periodique.md)).
- **Palette source** : retour ASRS si stock restant ; si vidée, remise
manuelle sur la pile de palettes vides (pas de tâche AGV).
- Les transferts inter-HU au picking génèrent des lignes `ACTION=T` dans
le LOC.
> L'opérateur ne déplace **jamais** de sacs d'une TP à une autre (sacs de
> 25 à 50 kg). Garanti par le placement LIM-82.
### Mouvements manuels du poste (appeler / renvoyer) - LIM-116
Les actions standard « **Appeler** » (faire venir un conteneur au poste)
et « **Renvoyer conteneur** » sont customisées au PK pour tenir compte
des **AGV** et du besoin de **filmage** des palettes (LIM-116, LOT 3).
- **Renvoi manuel - bouton « Stocker support »** : avant le calcul de la
destination, l'opérateur choisit le **programme de filmage** (même
sélection que [LIM-67](../01-inbound/reception-fournisseur.md), WF
`CST_Workstation_Wrapping_UI`). WF modifié : `Return_ContainerFromPKStation_UI`.
- **Renvoi automatique (plus de tâches)** : dans le process tâche
automatique du poste, quand le conteneur est renvoyé parce qu'il n'a
**plus de tâches**, la sélection du **programme de filmage** est demandée
de la même manière. WF modifié : `Task_AutomaticPicking_UI`.
- **Destination du retour (PIE de filmage)** : le retour d'une palette
depuis le PK passe par le **custom de sélection du PIE** (PIE de
ré-insertion `PIE_ENTRY_PK`, défaut PIE02, pour que la palette soit
filmée). Une valeur a été ajoutée au `ProcessContext` de
`Container_MoveToStationTypeCodeListOrReject` (et de
`Container_CloseClientContainerOnMP_PR`) pour piloter ce choix - même WF
de destination que le [rejet PIE](../02-stockage/rejet-pie.md).
- **Capacité des buffers PK → PK** : la génération de mouvement depuis le
picking (`Task_GenerateMovement_PR_V2`) gère la capacité des buffers
quand une palette va d'un poste de picking à un autre (cf. buffers ES,
[Placement PS → PK](placement-ps-pk.md)).
### Cas 100 % : tâche de shipping, pas de picking
Quand la quantité assignée sur une palette source correspond à **100 % de
son stock**, on génère une **tâche de shipping** (pas de picking) :
inutile de déplacer tous les sacs pour rebaptiser la palette
(décision Vincent Charvet, 02/07). Solution testée : activer « Expédier
uniquement conteneur complet » ; en dessous de la valeur « palette
pleine » de la conversion de support, le WMS tente le picking négatif si
les critères sont réunis, sinon la palette est reprise par le calcul
global d'optimisation du volume.
### Modes opératoires
Fonctionne en **Full AGV**, **Mixte** (AGV + caristes) et **Full TRF**
(4 caristes, mode dégradé, finalisation manuelle du module AGV). Le
workflow opérateur au PK est **identique** quel que soit le mode ; seul
le transport physique change.
## Implémentation (revue de code en cours)
Custom construit au-dessus du framework standard `WorkStation_Picking_Default`
`Task_Automatic_PickingProcessType_UI``Expedition_Picking_UI_V1`.
### Workflows
| Workflow | Modification |
|---|---|
| `Task_AutomaticPicking_SelectTask_PR` | Si verrou « HORS TOLERANCE » → appelle `CST_Count_Picking_UI` (inventaire), puis relit les données du conteneur pour décider si la tâche de picking reste possible |
| `CST_Count_Picking_UI` | Compte chaque ligne de stock, affiche les infos utiles au client, message de confirmation avant ajustement ; corrige le process de retour |
| `Task_AutomaticPicking_UI` | Appelle `CST_Container_Picking_Options` (bouton « Retour » si stock, « Retirer » si vide) |
| `Expedition_Picking_GetInitialParameters_PR` | Ajout de `OutboundClassCode` à la query |
| `Expedition_Picking_ExecutePicking_UI` | Commandes MII : pose un code conteneur virtuel sur chaque ligne de stock, sauvé dans `CstAtt2` de stock, imprime l'étiquette correspondante |
| `Expedition_Picking_Finish_UI` | Appelle le WF de filmage (wrapping) à la fermeture du conteneur client |
| `Expedition_Picking_RequestProduct_UI_V1` | Dialog `CST_Picking_AutoReadQuantity_Prompt_V1` + paramètre poids produit |
| `Expedition_Picking_AutoreadQuantity_UI_V2` | Dialog `CST_Picking_ManualReadQuantity_Prompt_V2` + paramètre poids produit |
| `Container_MoveContainerListToLostAndFound` | Si conteneur vide → suppression au lieu d'envoi en Lost & Found |
| `PickingStation_RemoveOrReturnContainer_UI` | Appelle `CST_Container_Picking_Options` (option « Retirer » seule, conteneurs vides) |
| `PrintLabels_PrintSSCCList_PR` | Appelle le WF custom `CST_PrintRFIDLabel` |
| `PrintLabels_AutoPrintOnCloseClientContainer_PR` | Récupère l'imprimante et appelle `CST_PrintRFIDLabel` |
### Dialogs
| Dialog | Rôle |
|---|---|
| `CST_Count_Picking_GetQuantity` | Demande à l'opérateur de compter le stock de la palette |
| `CST_Container_Picking_Options` | Clone de `Container_Picking_Options` + paramètre bouton retour |
| `CST_Picking_ManualReadQuantity_Prompt_V2` | Clone + poids produit mesuré |
| `CST_Picking_AutoReadQuantity_Prompt_V1` | Clone + poids produit mesuré |
### Vues et ressources
- Vue `StockVList` : ajout de `CstAtt2` (SSCC MII).
- Ressources : `CST_Stock_CustomAttribute2` (« SSCC MII [CST 2] »),
`CST_MeasuredProductWeight_Prompt`, `CST_Alias_Prompt` (« Code lot
officiel »), `Product_Prompt` (« Code lot SAP »), `Shared_Alias`,
`Source_Prompt` (« Description courte SAP »),
`CST_Container_RemoveQuestion_1`, `CST_Container_StoreQuestion_1`.
## CstAtt impliqués
| CstAtt | Entité | Donnée |
|---|---|---|
| `CstAtt05` | Container | Programme de filmage (0, A-H), transmis à Galileo |
| `CstAtt06` | Container | Code PK assigné |
| `CstAtt14` | Container | Flag étiquetage PK (`true`/`false`/`error`) - LIM-91 |
| `CstAtt02` | Stock (StockLine) | SSCC virtuel palette MII - LIM-91 |
> `CstAtt14` a remplacé `CstAtt13` pour l'étiquetage (CstAtt13 déjà
> utilisé pour le code OE) - décision 01/07. Voir
> [AD Customs](../07-admin/ad-customs.md).
## Communication ERP
| Message | Direction | Déclencheur |
|---|---|---|
| ~~MOV~~ | ~~WMS → SAP~~ | **Annulé** (jugé inutile, décision client) |
| LOC (`ACTION=P`) | WMS → SAP | Passage en conteneur client (delta 5 min) |
| LOC (`ACTION=T`) | WMS → SAP | Transfert inter-HU au picking (delta 5 min) |
## Points d'attention
⚠️ **Revue de code en cours (17/07)** - corrections en attente :
- `PrintLabels_PrintSSCCList_PR` : arrêter la boucle si un SSCC est vide
(transition depuis « Set current SSCC »).
- `PrintLabels_AutoPrintOnCloseClientContainer_PR` : la transaction
`CON.PRINT` puis l'appel à `CST_PrintLabel` provoquent une **double
impression**.
- `Expedition_Picking_RequestProduct_UI_V1` / `AutoreadQuantity_UI_V2` :
`CustomAttribute1` non mappé, poids produit non affiché.
- En **picking négatif**, les écrans sont différents (pas de poids
produit) - à harmoniser.
⚠️ **Demande d'optimisation (Justine, 16/07)** à intégrer :
- Remplacer l'écran « Stocker support » de la palette mère par un écran
de filmage, et distinguer clairement (texte + couleur) l'écran de
filmage palette mère vs palette client.
- La palette client doit passer par **PIE02** et non PIE01 (pour pouvoir
être filmée).
> → Le filmage sur « Stocker support » et le passage par le PIE de retour
> (`PIE_ENTRY_PK`, PIE02) sont **livrés dans LIM-116** (voir
> [Mouvements manuels du poste](#mouvements-manuels-du-poste-appeler--renvoyer---lim-116)).
> Reste à confirmer la distinction visuelle (texte + couleur) mère vs client.
⚠️ **Correction temporaire (17/07, LIM-116)** : un fix a été posé sur le
mouvement `MP → PE` ; il sera **retiré** une fois la gestion complète des
mouvements `MP → PK` en place.
⚠️ L'impression de l'étiquette standard à la fermeture du conteneur
client a été retirée (elle s'ajoutait à tort à l'étiquette custom).
## Questions ouvertes
- Messagerie - choix du poumon : afficher uniquement les poumons
compatibles avec le transporteur, ou tous ? Ou retour ASRS pour le flux
classique ? (@Justine)
- Recomptage HORS TOLERANCE : dialog retenu = `CST_Count_Picking_GetQuantity`
(custom) ; confirmer l'ergonomie finale avec le client (@Justine)
- Étiquetage intercalaire (HU fille sans RFID, MII/multi-lots) : format
et rapport Zebra à créer (tâche à écrire par Arthur avec modèle rapport)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-07-17 | Arthur | Création depuis LIM-91 (lecture directe, en revue de code) : workflow opérateur PK, picking direct/négatif, HORS TOLERANCE, étiquetage MII (Stock CstAtt2 SSCC + CstAtt14), filmage CstAtt05, évacuation, cas 100 % → shipping, implémentation (WF/dialogs/vues/ressources), corrections revue de code 17/07 + optim Justine |
| 2026-07-20 | Arthur | Ajout LIM-116 (LOT 3, lecture directe + revue de code) : nouvelle section « Mouvements manuels du poste (appeler / renvoyer) » - filmage sur « Stocker support » (`Return_ContainerFromPKStation_UI`) et sur renvoi automatique sans tâches (`Task_AutomaticPicking_UI`), sélection PIE de retour via `ProcessContext` (`Container_MoveToStationTypeCodeListOrReject` + `Container_CloseClientContainerOnMP_PR`, PIE_ENTRY_PK/PIE02), capacité buffers PK → PK (`Task_GenerateMovement_PR_V2`) ; optim Justine 16/07 marquée livrée par LIM-116 ; caveat fix temporaire MP → PE ; jira_refs +LIM-116/LIM-67, sources, last_updated |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-91](https://easywmsfrance.atlassian.net/browse/LIM-91) | Ticket Jira (en revue de code) | 2026 |
| Revue de code LIM-91 (M. Halgand, V. Charvet) | Implémentation + revue | 2026-07-16/17 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) / [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) / [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Chaîne picking amont | 2026 |
| [LIM-116](https://easywmsfrance.atlassian.net/browse/LIM-116) | Ticket Jira (LOT 3, mouvements manuels station picking - filmage retour + capacité buffers, attente déploiement test) | 2026-07 |
| Revue de code LIM-116 (V. Charvet, M. Halgand) | Implémentation + revue (commit LOT3 e79f385242) | 2026-07-15/17 |
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (sélection programme filmage `CST_Workstation_Wrapping_UI`) | 2026 |
@@ -0,0 +1,195 @@
---
title: "Recertification - Workstation au poste de picking"
tags: [picking, recertification, workstation, ASN, MII, SmartUI, outbound]
status: review
standard_ref: concepts/shipping.md
jira_refs: [LIM-105, LIM-106, LIM-110]
confluence_refs: []
sources: ["Jira LIM-105 (lecture directe 2026-07-20)", "Jira LIM-106 (lecture directe 2026-07-20)", "Jira LIM-110 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Recertification - Workstation au poste de picking
> **Résumé** : process de recertification exécuté au **poste de picking** en
> mode « Tâches automatiques ». L'opérateur échange une palette existante
> contre une nouvelle identité (nouvelle HU / ASN) sans déplacer physiquement
> le stock, avec vérification de l'ASN auprès de SAP.
> **Standard EasyWMS** : → voir [Shipping](../../concepts/shipping.md) et
> [Picking](../../concepts/picking.md).
> Ce qui suit documente les **spécificités Limagrain** (LIM-105). Le contexte
> outbound de la recertification (SOR Recertification, quai, route via PK) est
> décrit dans [Flux expédition - Re-certification](../04-outbound/flux-expedition.md#re-certification).
## Contexte projet
La recertification consiste à **ré-étiqueter** une palette complète pour lui
donner une nouvelle identité, sans picking ni déplacement physique du stock :
c'est une **sortie administrative** suivie d'une **réception administrative**
(nouvelle HU en ASN). Un ordre de sortie de classe **RECERTIFICATION** est
descendu, contenant les quantités à recertifier (équivalentes à des supports
complets sans picking).
Le quai est **assigné automatiquement** quand la classe de l'OS est
Recertification (`QUAI_RECERTIFICATION`, param `RECERTIFICATION_CODE_QUAI`,
LIM-110), avec blocage du changement manuel du quai - voir
[Quai recertification](../04-outbound/shipping-orders.md#quai-recertification).
Ce mécanisme est **distinct** du job d'assignation des images de quai X_EXP
(LIM-94), qui exclut la classe Recertification.
Les palettes sont acheminées vers un poste de picking où l'opérateur effectue
des actions **hors WMS** (dont l'impression d'une nouvelle étiquette), puis
scanne la nouvelle étiquette pour déclencher l'échange de conteneur.
Le process est **intégré au flux « Tâches automatiques »** du poste de picking
(même mode que le picking et la réception - voir
[Stations de picking](stations-picking.md)). À l'arrivée au poste, les palettes
portent une **tâche de chargement** vers le quai de recertification.
> **Amont - acheminement au PK ([LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106))** :
> l'assignation du PK et la création des tâches d'acheminement (mouvement des
> conteneurs d'expédition vers le PK, puis chargement au quai de recertification)
> sont assurées par un **mini job dédié du Mega Job**, pendant du mini job
> picking (LIM-80). Voir
> [Mini Job - Assignation recertification aux PK](job-assignation-pk.md#mini-job---assignation-recertification-aux-pk-lim-106).
## Flux fonctionnel
```mermaid
sequenceDiagram
participant OP as Opérateur (PK)
participant WMS as EasyWMS
participant SAP as SAP
OP->>WMS: Scan ancienne palette
WMS->>SAP: Demande d'un nouvel ASN pour la palette
OP->>OP: Recertifie + ré-étiquette (hors WMS)
OP->>WMS: Scan de la nouvelle étiquette (SSCC)
WMS->>WMS: Attente ASN (polling ATH111)
alt ASN reçu
WMS->>WMS: Charge l'ancien conteneur au quai + déplace l'ASN au PK
WMS->>WMS: Filmage (emballage)
else Timeout / max retries
WMS-->>OP: Message d'erreur (réessai ou fin de process)
end
```
## Étapes détaillées
### Étape 1 - Scan de l'ancienne palette
Le code palette est scanné. Un message (à définir, voir Questions ouvertes) est
généré pour signaler à SAP le **besoin d'un nouvel ASN** pour cette palette.
### Étape 2 - Scan de la nouvelle étiquette
Le nouveau code palette (SSCC) est scanné (dialogue
`CST_Recertification_ScanLabelPrompt`, qui affiche le code et l'emplacement du
conteneur courant).
### Étape 3 - Vérification de l'ASN
Un écran d'attente vérifie qu'un **ASN existe** pour le nouveau code conteneur
scanné (query `CST_AsnContainer_ByCode`) :
- intervalle entre deux vérifications : paramètre `SAP_ATH111_REFRESH_INTERVAL` ;
- timeout : `SAP_ATH111_TIMEOUT` → message d'erreur avec **option de relance**
d'un cycle d'attente ;
- nombre maximum d'essais : `SAP_ATH111_MAX_RETRIES` → message d'erreur mettant
**fin au process**.
### Étape 4 - Échange des conteneurs
Une fois l'ASN existant : l'**ancien conteneur est chargé sur le quai**
(validation de la tâche de chargement) et le **conteneur en ASN est déplacé à
la position de l'ancienne palette** (au PK).
### Étape 5 - Filmage (emballage)
Un sous-processus de **filmage** est déclenché en fin de process (ajout
LIM-105, 01/07/2026), avec gestion des erreurs.
## Paramètres
| Paramètre | Rôle | Défaut |
|-----------|------|--------|
| `SAP_ATH111_REFRESH_INTERVAL` | Intervalle de polling de l'existence de l'ASN (ms) | `500` |
| `SAP_ATH111_TIMEOUT` | Timeout d'attente de l'ASN (s) | `60` |
| `SAP_ATH111_MAX_RETRIES` | Nombre maximum de tentatives | `5` |
| `RECERTIFICATION_CODE_CLASSE` | Code de la classe d'OS recertification (remplace les valeurs hard codées) | - |
Voir [Paramètres projet](../07-admin/parametres-projet.md).
## Implémentation technique
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_Recertification_PickingStationProcess_UI` | Workflow | Process principal : prompt nouveau SSCC, vérification ASN, gestion attente / timeout, échange des conteneurs, filmage |
| `Task_AutomaticPicking_UI` | Workflow | Redirige vers le process de recertification en mode « Tâches automatiques » du PK |
| `Workstation_Picking_Default` | Workflow | Prend en compte la tâche de chargement pour afficher le nombre de tâches en attente du conteneur au PK ; affichage du **code OS** (Justine 08/07) |
| `Outbound_AutomaticLoadProcess_PR` | Workflow | Ne crée **pas** automatiquement le chargement camion pour les OS de classe RECERTIFICATION (`RECERTIFICATION_CODE_CLASSE`) |
| `Outbound_CreateShippingContainersTasks_PR` | Workflow | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_JobAssignStage` | Workflow | Ajout du paramètre `warehouseCode` dans la query modifiée |
| `Container_MovedEventHandler_PK_PR` | Workflow | Ajout du paramètre `warehouseCode` dans la query modifiée |
| `CST_AsnContainer_ByCode` | Query | Conteneur en emplacement ASN par code |
| `CST_GetOutboundOrderAndRoutes_ToAssignStage` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_OutboundOrderLineDetails_ByRecertificationContainer` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_OutboundOrder_BestPendingAssignment_ForPK` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` (exclusion recertif de l'assignation PK) |
| `CST_OutboundOrder_Recertification_BestPendingAssignment_ForPK` | Query | Utilise `RECERTIFICATION_CODE_CLASSE` |
| `CST_Recertification_ScanLabelPrompt` | Dialog | Prompt nouveau SSCC ; affiche code + emplacement du conteneur courant |
Ressources i18n : `CST_Recertification_SSCCPrompt` (« Scanner la nouvelle
étiquette »), `CST_Recertification_CheckingAsn` (« Récupération des
informations... »), `CST_Recertification_Timeout` (« Erreur de communication
avec SAP. Réessayer ? »), `CST_Recertification_TimeoutExceededTry_1`
(« Impossible de contacter SAP après {0} tentatives... »),
`CST_RecertificationWorkstation_Header` (« Recertification »),
`CST_Recertification_Error` (erreur en cours de process).
Commits : [`8b4debc3da`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/8b4debc3daf22e59979f5c5949526796d7256a6f)
(process initial), [`3119445ff1`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/3119445ff1e3bfce3979e5678b3b80255ddefbae)
(filmage + suppression valeurs hard codées),
[`db4194c50e`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/db4194c50e0cc54716c90fb804f65b33084889c2)
(code OS sur la workstation).
## Points d'attention
- Le process est en **mode « Tâches automatiques »** du PK ; le PK doit être
passé en **mode recertif** par le manager (bloque le poste pour les autres
types de tâches). Voir [Job d'assignation PK](job-assignation-pk.md) : les OS
RECERTIFICATION sont exclus de l'assignation picking standard.
- Les **valeurs hard codées** d'identification des OS de classe recertification
ont été supprimées au profit du paramètre `RECERTIFICATION_CODE_CLASSE`
(01/07/2026).
- À **retester** suite aux customs de
[LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) (quai
recertification auto + stratégie d'assignation de stock, désormais
documentés dans [Quai recertification](../04-outbound/shipping-orders.md#quai-recertification)).
Retest côté process workstation encore à faire (note Arthur 30/06/2026).
- Risque connu : si l'**ASN n'est pas encore arrivé** au scan, l'écran
d'attente boucle jusqu'au timeout / max retries.
## Questions ouvertes
- Message déclenchant l'envoi de l'ASN par SAP à l'étape 1 : l'AF évoque un
**SOF par palette**. Deux options envisagées (LIM-105, Vincent 02/06/2026) :
soit imposer des **OS de recertification à une seule palette** (ralentit
l'acheminement, 1 palette par poste), soit créer un **message custom** avec
les informations nécessaires à SAP pour créer le nouvel ASN. À trancher
(@Vincent / @Justine).
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-07-20 | Arthur | Création depuis LIM-105 (lecture directe) : process workstation recertification au PK, 4 étapes + filmage, paramètres SAP_ATH111_* et RECERTIFICATION_CODE_CLASSE, éléments AD (WF / queries / dialog / ressources), question ouverte message ASN |
| 2026-07-20 | Arthur | LIM-106 (lecture directe) : renvoi amont vers le mini job d'assignation recertification + acheminement au PK (détaillé dans job-assignation-pk.md) |
| 2026-07-20 | Arthur | LIM-110 (lecture directe) : correction du renvoi quai auto (mécanisme QUAI_RECERTIFICATION/RECERTIFICATION_CODE_QUAI vers shipping-orders.md, distinct de LIM-94) ; note « à retester » précisée ; jira_refs +LIM-110 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-105](https://easywmsfrance.atlassian.net/browse/LIM-105) | Ticket Jira (workstation recertification - attente déploiement test, revue validée 17/07) | 2026 |
| [LIM-106](https://easywmsfrance.atlassian.net/browse/LIM-106) | Ticket Jira (mini job assignation recertification au PK + acheminement) | 2026 |
| [LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) | Ticket Jira (quai recertification auto + stratégie assignation stock ; customs à retester) | 2026 |
@@ -1,47 +1,50 @@
---
title: "Séquençage TK → PS Historique et arbitrage"
title: "Séquençage TK → PS - Historique et arbitrage"
tags: [picking, séquençage, historique, décision]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
last_updated: 2026-07-20
author: Arthur
---
# Séquençage TK → PS Historique et arbitrage
# Séquençage TK → PS - Historique et arbitrage
> **Résumé** : historique des solutions envisagées pour le séquençage
> TK → PS, et arbitrage des contradictions entre les 3 sources
> (DevOps #64854, AF §6.4.8, réunion 11/05/2026).
> **Standard EasyWMS** : → voir [Picking standard](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
> Pour l'algorithme retenu, voir
> [Séquençage TK → PS](sequencage-tk-ps.md).
## Solutions envisagées
### Solution 1 Process isolé sur finalisation des tâches d'OS
### Solution 1 - Process isolé sur finalisation des tâches d'OS
Séquençage via `OS.Line.CstAtt`, marquage OS traité via
`OS.CstAtt = true`.
**Problème** : pas assez dynamique en cas de recréation de tâches.
### Solution 2 Calcul dans le workflow stacker_crane
### Solution 2 - Calcul dans le workflow stacker_crane
Intégration dans `Galileo_StackerCraneSearch_PR` /
`StackerCrane_SortTasks_PR`, recalcul complet à chaque exécution.
**Problème** : complexité élevée (requêtes LINQ imbriquées multi-OS).
### Solution 3 Solution 1 transformée en job
### Solution 3 - Solution 1 transformée en job
Job planifié, excluant les tâches en cours.
**Problème** : pas assez réactif par rapport à la cadence des TK.
### Solution 4 Process événementiel (retenue)
### Solution 4 - Process événementiel (retenue)
Solution 1 déclenchée sur `TaskCreatedEvent` et
`OutboundOrderReleasedEvent`, avec verrouillage `OS.CstAtt`.
@@ -61,8 +64,8 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
| Poids max palette | 1 200 kg | 1 250 kg | **1 250 kg** (AF) |
| Négatif vs Maïs first | Pas de hiérarchie | Maïs en tête | **Négatif prioritaire** |
| Semences essais | Dédié en haut | Non mentionné | **Couvert par poids** |
| Lots même Bag/pal | Prioriser | | **Retenu** |
| Différenciation marque | Aucune | | **Confirmé** |
| Lots même Bag/pal | Prioriser | - | **Retenu** |
| Différenciation marque | Aucune | - | **Confirmé** |
| Calcul Bag/pal | "Prendre le max" | Équivalent palette | **Pro rata** |
## Changelog V1.1 (11/05/2026)
@@ -86,7 +89,7 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création extraction depuis sequencage-tk-ps.md |
| 2026-05-12 | Arthur | Création - extraction depuis sequencage-tk-ps.md |
## Références
@@ -94,5 +97,5 @@ Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
| DevOps #64854 | Note historique | |
| DevOps #64854 | Note historique | - |
| AF §6.4.8 | Analyse fonctionnelle V1.5 | 28/11/2025 |
+113 -28
View File
@@ -3,10 +3,10 @@ title: "Séquençage des tâches de picking TK → PS"
tags: [picking, séquençage, transstockeur, événement, workflow, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84, LIM-61]
jira_refs: [LIM-84, LIM-61, LIM-80, LIM-82]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md", "Jira LIM-84 (commentaires revue de code)"]
last_updated: 2026-07-17
author: Arthur
---
@@ -20,15 +20,31 @@ author: Arthur
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> **Statut (LIM-84)** : dev terminé, **en attente de déploiement pour
> test**. Revue de code validée le **02/07/2026** (après une itération NOK
> le 29/06 et corrections le 01/07).
## Déclenchement
L'algorithme est déclenché sur **deux événements** :
> **Implémentation définitive (revue de code 02/07/2026)** : le séquençage
> est réalisé **pendant l'assignation de stock**, et non sur
> `TaskCreatedEvent` comme le proposait la note de conception (Solution 4,
> voir [historique](sequencage-tk-ps-historique.md)).
- **TaskCreatedEvent** — nouvelle tâche de picking créée (MINI JOB
LIM-75 ou réassignation). Condition : tâche type PICKING et OS
statut Released
- **OutboundOrderReleasedEvent** — OS passe en Released (lancement
ou relance après arrêt)
Le workflow de séquençage `CST_PickingTasksSequencing_PR` est appelé par les
workflows d'assignation de stock :
- `Outbound_StockAssignProcess_PR` - assignation de stock (à la libération
de l'OS)
- `OutboundOrder_StockReassign_PR` - réassignation de stock (imprévu,
blocage, relance)
La **libération de l'OS** est déclenchée par la subscription
`CST_PKAssigned_ReleaseOrder` (WF
`CST_OutboundOrder_PKAssigned_ReleaseOrder_PR`) lorsqu'un PK est assigné à
l'OS ([LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80)), ce qui
déclenche l'assignation de stock. L'assignation/réassignation se fait **par
job** (les subscriptions standard sont désactivées, cf. LIM-80).
## Process principal
@@ -41,11 +57,11 @@ L'algorithme est déclenché sur **deux événements** :
## Contraintes amont (constitution palettes filles)
**C1. Palettes les plus complètes possible** seuil ~95%. Calcul en
**C1. Palettes les plus complètes possible** - seuil ~95%. Calcul en
pro rata Bag/pal : chaque sac = `1/Bag_pal` de son lot. Additif,
gère nativement les multi-lots.
**C2. Ne pas splitter les lignes de stock** prioritaire sur les
**C2. Ne pas splitter les lignes de stock** - prioritaire sur les
règles de tri. Regrouper la ligne complète quitte à décaler le maïs.
| Contrainte | Valeur |
@@ -68,25 +84,25 @@ tâches.trier_par(
)
```
### Critère 1 Picking négatif en premier
### Critère 1 - Picking négatif en premier
Prioritaire sur tout, y compris Maïs first. Condition cumulative
(V1.1) : % quantité > seuil fiche article (défaut 55%) **ET** poids
unitaire sac ≥ 7 kg.
### Critère 2 Espèce Maïs en premier
### Critère 2 - Espèce Maïs en premier
Le maïs est lourd/stable → base de palette fille.
### Critère 3 Espèce la plus volumineuse
### Critère 3 - Espèce la plus volumineuse
Espèce avec la plus grande quantité totale de sacs dans l'OS.
### Critère 4 Article le plus lourd en base
### Critère 4 - Article le plus lourd en base
Les semences essais (légères) se retrouvent naturellement en haut.
### Critère 5 Regroupement par palette source
### Critère 5 - Regroupement par palette source
L'opérateur enchaîne toutes les tâches d'une palette avant de la
libérer.
@@ -98,28 +114,94 @@ séquence (ex-aequo), laissant au stacker_crane la liberté
d'optimiser. Interchangeables si : même palette source, OU tous les
critères de tri identiques.
## Détermination picking négatif (MINI JOB LIM-75)
## Détermination picking négatif
> Le `TaskType` (OrdinaryPicking / NegativePicking) est déterminé à la
> création des tâches. Conditions **définitives** (revue de code LIM-84) :
```
SI quantité_à_prélever > seuil_article × quantité_palette_source
ET article unique dans la palette source
ET pas d'attribut logistique à capturer
ET poids_unitaire_sac ≥ 7 kg
SI % à prélever ≥ NegativePickingPercent (55% du stock actuel de la source)
ET remplissage source ≥ NegativeMinCompletePercent (25% de la capacité pleine)
ET palette source mono-lot
ET poids_unitaire_sac ≥ 7 kg // check custom Limagrain
ALORS → PICKING_NÉGATIF
SINON → PICKING_DIRECT
```
- Le picking négatif est désormais **autorisé même si des attributs
logistiques sont précisés dans la commande** (levée d'une restriction
initiale).
- Les 2 conditions de pourcentage sont **standard EasyWMS**
(`Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1`) ;
seul le check de poids (≥ 7 kg) est custom
(`Outbound_CreatePickingContainerTasksNegative_PR_V1` récupère le lot et
le poids de l'article).
## Paramètres WMS
| Paramètre | Défaut | Note V1.1 |
|-----------|--------|-----------|
| `CONTROLE_TRAITEMENT_COMMERCIAL` | **false** | Désactivé |
| Seuil picking négatif (fiche article) | 55% | Inchangé |
| Poids min picking négatif | **7 kg** | Nouveau |
| `NegativePickingPercent` (% à prélever du stock actuel) | 55% | Standard |
| `NegativeMinCompletePercent` (% remplissage min source) | 25% | Standard, capacité pleine |
| Poids min picking négatif | **7 kg** | Custom Limagrain |
| Seuil remplissage palette | **~95%** | Nouveau |
| Poids max palette | **1 250 kg** | Corrigé |
| `MAX_NB_BUFFER_PK` | 3 | Inchangé |
## Implémentation définitive (LIM-84)
> Reflète le **code livré et validé** (revue de code du 02/07/2026, après
> une itération NOK le 29/06 et corrections le 01/07). Prime sur les notes
> de conception ci-dessus en cas d'écart.
Le séquençage ne se contente pas de trier : `CST_PickingTasksSequencing_PR`
calcule d'abord la **composition des palettes finales** (quels stocks vont
sur quelle palette fille, via les records `CST_PickingPalletList` /
`CST_PickingStockList`), puis écrit le numéro de séquence (`CstAtt1` de la
tâche) sur chaque tâche. Le stacker crane consomme ensuite les tâches via
`CST_Tasks_PendingOutboundForStackerCrane`, en respectant le verrou
`OS.CstAtt` et l'ordre `Line.CstAtt` croissant.
### Workflows
| Workflow | Rôle |
|----------|------|
| `CST_PickingTasksSequencing_PR` | Calcule la constitution des palettes finales pour les tâches de picking d'un OS selon les critères actifs, puis écrit le numéro de séquence sur chaque tâche. |
| `CST_OutboundOrder_PKAssigned_ReleaseOrder_PR` | Libère l'OS (appelé par la subscription `CST_PKAssigned_ReleaseOrder`). |
| `Outbound_StockAssignProcess_PR` | Assignation de stock - appelle le séquençage. |
| `OutboundOrder_StockReassign_PR` | Réassignation de stock - appelle le séquençage. |
| `NegativePicking_CheckAllowsNegativePickingTask_PR` | Conditions picking négatif : palette source **mono-lot** ; négatif autorisé **même si** des attributs logistiques sont précisés dans la commande. |
| `Outbound_CreatePickingContainerTasksNegative_PR_V1` | Récupère le lot du stock et le poids de l'article. |
| `Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1` | Ajoute la condition de poids unitaire min (≥ 7 kg) aux 2 checks % standard. |
### Records / Lists
| Élément | Rôle |
|---------|------|
| `CST_PickingPalletList` | Palette construite au picking (caractéristiques physiques + stocks), pour le calcul de constitution des palettes finales. |
| `CST_PickingStockList` | Stock à prélever au picking et sa tâche, pour le calcul de constitution. |
### Queries et vue
| Élément | Rôle |
|---------|------|
| `CST_PickingStocksToSequence_ByOutboundOrder` | Stocks à prélever d'un OS qui ne font pas déjà partie du séquençage. |
| `CST_Tasks_ForView` | Format du `CstAtt1` (numéro de séquence). |
| `CST_Tasks_PendingOutboundForStackerCrane` | Tâches en attente pour le stacker crane (corrigée le 29/06 pour les tâches de mouvement - test recertification). |
| `TaskVList` (vue) | Ajout de `CstAtt1` : le numéro de séquence est visible dans la vue des tâches. |
### Points confirmés en revue de code
- **Recalcul** : les tâches déjà en cours conservent leur séquence ; seules
les tâches en attente sont re-séquencées.
- **Réassignation après épuisement** : si une réassignation de stock survient
alors que toutes les tâches précédentes sont faites, le séquençage repart
de 0. L'info de séquence sert **uniquement** à l'ordonnancement.
- **Concurrence inter-OS** : plusieurs OS simultanés sur un même PK est
**interdit** ; chaque OS a son propre pool de tâches et son propre verrou
`OS.CstAtt`.
## Points d'attention
⚠️ Le custom LIM-61 (capacité buffer) doit gérer les palettes
@@ -132,9 +214,9 @@ ramenés sur petits sacs).
## Liens
- [Placement PS → PK](placement-ps-pk.md) algorithme aval
- [Picking combinatoire](picking-combinatoire.md) vue d'ensemble
- [Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Placement PS → PK](placement-ps-pk.md) - algorithme aval
- [Picking combinatoire](picking-combinatoire.md) - vue d'ensemble
- [Historique et arbitrage](sequencage-tk-ps-historique.md) -
solutions envisagées + arbitrage contradictions réunion 11/05/2026
## Historique des modifications
@@ -144,12 +226,15 @@ ramenés sur petits sacs).
| 2026-05-12 | Arthur | Création initiale depuis LIM-84 |
| 2026-05-12 | Arthur | Refonte V1.1 : algo complet, 5 critères, contraintes amont, arbitrage réunion 11/05 |
| 2026-05-12 | Arthur | Découpage : historique solutions + arbitrage → page dédiée |
| 2026-07-17 | Arthur | Relecture revue de code LIM-84 (préprod, validée 02/07) : nouvelle section « Implémentation définitive » (WF `CST_PickingTasksSequencing_PR` = constitution palettes + séquence, records `CST_PickingPalletList`/`CST_PickingStockList`, queries `CST_PickingStocksToSequence_ByOutboundOrder` / `CST_Tasks_ForView` / `CST_Tasks_PendingOutboundForStackerCrane`, vue `TaskVList` +CstAtt1) ; déclenchement réel = pendant l'assignation de stock (`Outbound_StockAssignProcess_PR` / `OutboundOrder_StockReassign_PR`) + subscription `CST_PKAssigned_ReleaseOrder`, et non `TaskCreatedEvent` ; conditions picking négatif définitives (mono-lot, autorisé même avec attributs logistiques, poids ≥ 7 kg) + ajout NegativeMinCompletePercent 25% ; points confirmés (recalcul, repart de 0, inter-OS interdit) ; statut préprod |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira | 2026 |
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira (séquençage, 5 commentaires, préprod) | 2026-06 → 07 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira (capacité PK/buffer) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation PK, release OS) | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, consomme Line.CstAtt) | 2026 |
| Logique combinatoire picking - TK vers PS - V1.1 | Spec technique | 11/05/2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
+48 -10
View File
@@ -6,7 +6,7 @@ standard_ref: concepts/stations.md
jira_refs: [LIM-69, LIM-70]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-69 - LOT1.3 Modes de travail des PK.md"]
last_updated: 2026-05-12
last_updated: 2026-07-17
author: Arthur
---
@@ -67,7 +67,7 @@ dynamiquement.
| P1 à P6 | Postes de travail 01 à 06 |
| TP11 à TP63 | Tables de préparation 11 à 63 |
## Postes de travail Architecture physique
## Postes de travail - Architecture physique
### 3 îlots de 2 postes
@@ -113,11 +113,18 @@ de big-bags. Toute opération impliquant un big-bag (bag/pal ≤ 2) doit
est déjà plugué au mode Automatic tasks (custom) → même mode pour le
picking et la recertification.
Voir [Flux expédition Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
Voir [Flux expédition - Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
pour les règles détaillées (arrivée palettes 3 TP, algorithme répartition,
ordonnancement par gerbabilité).
### Modes de travail Configuration et fonctionnement
### Modes de travail - Configuration et fonctionnement
> **Statut (LIM-69)** : revue de code validée le 31/03/2026, livré en
> **pré-production** (test client). Une première revue (26/03) avait été
> rejetée : préfixe `CST_` manquant sur le paramètre
> `AdjacentPickingStation` → `CST_AdjacentPickingStation`, et suffixe `_1`
> à ajouter sur la ressource paramétrée `CST_Picking_ConfirmOpenWithAdjacent`
> → `CST_Picking_ConfirmOpenWithAdjacent_1`.
Chaque poste est **polyvalent** et peut être utilisé pour différents flux.
Le manager configure les modes autorisés et leur priorité ; l'opérateur
@@ -134,7 +141,7 @@ la palette qui arrive.
| Échantillonnage | Inventaire |
| Re certification | Picking |
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** remplacé par un simple
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** - remplacé par un simple
> message d'avertissement poste adjacent (voir section dédiée ci-dessous).
#### Configuration par le manager (vassist SmartUI)
@@ -154,6 +161,14 @@ ouvre une **vassist** qui permet de :
- Au moins un mode doit être coché (pour bloquer un PK, utiliser le
bouton standard dédié)
> **Reversal** : les contraintes initialement prévues sur les priorités
> (séquence continue à partir de 1, pas de doublon, pas de trou) ont été
> **abandonnées**. Les priorités sont de simples entiers libres ; seuls
> subsistent les contrôles ci-dessus. Deux ressources d'erreur portent la
> validation : `CST_VAssistantAssignWorkMode_Error_NoMode` (aucun mode
> coché) et `CST_VAssistantAssignWorkMode_Error_ParamNotFound` (paramètre
> système manquant).
**Stockage** : la configuration est enregistrée dans un **paramètre
SmartUI dédié par PK** au format :
@@ -194,7 +209,7 @@ en mode tâche automatique) :
- Bouton **Confirmer** : le PK s'ouvre normalement
- Bouton **Annuler** : le PK reste inactif
**Pas de blocage technique** uniquement informatif. Les opérateurs sont
**Pas de blocage technique** - uniquement informatif. Les opérateurs sont
physiquement à ~2 mètres et peuvent se coordonner verbalement. Les AGV
ont des capteurs de sécurité et demandent l'autorisation de dépose.
@@ -215,6 +230,26 @@ Au clic :
| MODES_PKxx | Modes autorisés + priorité pour le PK xx (un par PK, via vassist) | _(vide)_ | `RECEPTION;1\|PICKING;2` |
| PK_ADJACENT | Paires de postes adjacents | _(vide)_ | `PK01;PK02\|PK03;PK04` |
#### Éléments AD (LIM-69)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_PkStationWorkMode` | Entité | Contient le mode et la priorité - sert à afficher les modes configurés dans `PkMpVList` |
| `CST_PkStationWorkMode_ForView` | Query | Récupère les modes autorisés (paramètre `MODES_PKxx`) pour toutes les stations de picking |
| `CST_PickingStation_Adjacent` | Query | Récupère la station adjacente configurée dans `PK_ADJACENT` |
| `CST_VAssistAssignWorkMode` | Vue (vassist) | Assistant de choix des modes autorisés et de leur priorité sur un PK |
| `PkMpVList` | Vue | Ajout du bouton « Choix modes de travail » ; bouton d'ouverture modifié pour contrôler le statut du poste adjacent et demander confirmation |
| `WorkStation_Picking_OpenCloseStation_UI` | Workflow | Contrôle le statut du poste adjacent et demande confirmation s'il est ouvert (paramètre `CST_AdjacentPickingStation`) |
**Ressources** (FR / EN) : `CST_Prop_WorkMode_Mode` (Mode de travail / Working
mode), `CST_Prop_WorkMode_Priority` (Priorité / Priority),
`CST_PkMpVList_WorkModes` (Modes de travail / Working modes),
`CST_VAssistantAssignWorkMode_Title` (Choix modes de travail / Working modes
selection), libellés des 5 modes
(`CST_VAssistantAssignWorkMode_Reception|Picking|Consolidation|Count|Certification`),
et `CST_Picking_ConfirmOpenWithAdjacent_1` (message d'avertissement poste
adjacent).
### Équipement par poste
- 1 poste léger EasyWMS dupliqué sur 2 écrans
@@ -229,7 +264,7 @@ Au clic :
Job unique « chef d'orchestre » qui vérifie les modes de travail pour
chaque PK et orchestre l'envoi de tâches via des sous-workflows dédiés
(LIM-74, LIM-75). Transverse à tous les flux (réception, picking,
(LIM-74, LIM-75 annulé → LIM-82). Transverse à tous les flux (réception, picking,
regroupement, échantillonnage, re certification).
## Buffer postes de travail
@@ -260,7 +295,7 @@ une palette du buffer vers le convoyeur d'entrée pour stockage.
- Emplacement picking dédié pour réapprovisionnement automatique sur
seuil
- Aide à la manutention sur chaque poste pour prendre/poser des palettes
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile -
l'opérateur choisit la pile à réapprovisionner parmi une liste
Voir [Palettes vides](../02-stockage/palettes-vides.md) pour le détail.
@@ -280,7 +315,9 @@ redirection).
## Questions ouvertes
- [ ] Détail de la gestion des tables de préparation bloquées (@Nicolas)
- Détail de la gestion des tables de préparation bloquées (@Nicolas)
- Affichage des priorités de modes dans un ordre croissant dans la vassist -
demandé par Justine (20/05/2026), non tranché (LIM-69).
## Historique des modifications
@@ -290,6 +327,7 @@ redirection).
| 2026-05-05 | Arthur | Mode esclave abandonné, job transverse, vassist modes, 2 piles/îlot |
| 2026-05-05 | Arthur | Cross-ref flux expédition, picking WS vs RF, contrainte Big-Bag |
| 2026-05-12 | Arthur | Détail modes de travail (LIM-69) : vassist manager, paramètres MODES_PKxx/PK_ADJACENT, tâche automatique, avertissement adjacent, fermeture poste. Renvoi job vers page dédiée (LIM-70) |
| 2026-07-17 | Arthur | Relecture commentaires LIM-69 : ajout éléments AD (CST_PkStationWorkMode, queries, vassist, WF OpenCloseStation, ressources), statut pré-production + historique revue de code (préfixe CST_, suffixe _1), reversal contraintes de priorité (entiers libres), question ordre croissant (Justine) |
## Références
@@ -298,4 +336,4 @@ redirection).
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (6 commentaires) | 2026-03 → 2026-06 |