--- 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 |