lint(limagrain): corrections completes Phase 1+2

- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary)
- Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees
- Liens: 9 ancres reparees (slugs GitHub)
- Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete
- Glossaire: 15 termes standard deplaces en section rappel avec renvoi
- Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final)
- Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
2026-07-20 12:56:42 +02:00
parent 23eb3f3c84
commit 7496aafe64
59 changed files with 6457 additions and 2023 deletions
@@ -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 |