Files
mcp-wms-wiki/wiki/limagrain/03-picking/job-assignation-pk.md
T
arthur 7496aafe64 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
2026-07-20 12:56:42 +02:00

366 lines
20 KiB
Markdown

---
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, 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", "Jira LIM-106 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# 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
> modes autorisés et leur priorité. Évite la concurrence entre
> mini-jobs indépendants.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md),
> [Stations & Routes](../../concepts/stations.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## 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
orchestration centralisée, ces flux se feraient concurrence.
Le Mega Job est un **job unique** avec une entête qui analyse l'ensemble
des supports concernés et, selon leur emplacement d'origine et leurs
caractéristiques, délègue à des **sous-workflows** dédiés.
## Éligibilité d'un PK
Pour qu'un poste soit éligible à une nouvelle assignation, **toutes** les
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 (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
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
flowchart TD
A[Début du job] --> B[Lister les PK ouverts]
B --> C{PK éligible ?}
C -- Non --> D[PK suivant]
C -- Oui --> E[Lire MODES_PKxx]
E --> F{Paramètre existe et non vide ?}
F -- Non --> D
F -- Oui --> G[Trier les modes par priorité]
G --> H[Exécuter sous-WF du mode priorité 1]
H --> I{Tâche assignée ?}
I -- Oui --> D
I -- Non --> J[Exécuter sous-WF du mode priorité 2]
J --> K{Tâche assignée ?}
K -- Oui --> D
K -- Non --> L[... mode suivant ...]
L --> D
D --> M{Autres PK ?}
M -- Oui --> C
M -- Non --> N[Fin du job]
```
Pour chaque PK éligible :
1. Le WMS récupère le paramètre `MODES_PKxx` (x = numéro du poste)
2. Les modes sont triés par priorité croissante
3. Le sous-workflow du mode de priorité la plus haute est exécuté
4. Si le sous-WF a assigné une tâche → passage au PK suivant
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
big-bags (physiquement : P5 et P6 avec palan).
- Les ordres contenant des supports big-bag sont **interdits** sur les
PK qui ne les autorisent pas
- Ces ordres sont **prioritaires** (en respectant le séquençage des
process en première priorité) sur les PK qui les autorisent
## Sous-workflows
Le Mega Job délègue la création effective des tâches à des sous-workflows
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)~~ **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)
> **Statut (LIM-80)** : dev terminé, **en cours de test client
> (pré-production)**. Revue de code validée le **26/06/2026**.
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.
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.
### Éligibilité du PK
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.
### OS concernés
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`).
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).
### Choix de la commande - critères de tri
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**) :
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
> 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.
> **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.
⚠️ 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 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 ?~~
**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
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
| Date | Auteur | Modification |
|------|--------|--------------|
| 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, 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 |