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:
@@ -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
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
Reference in New Issue
Block a user