7496aafe64
- 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
208 lines
9.4 KiB
Markdown
208 lines
9.4 KiB
Markdown
---
|
|
title: "Assignation automatique de l'image de quai (OS/Tournée)"
|
|
tags: [outbound, expédition, image-quai, stage, job, assignation, AGV]
|
|
status: review
|
|
standard_ref: concepts/shipping.md
|
|
jira_refs: [LIM-94, LIM-88]
|
|
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
|
|
sources: ["Jira LIM-94 (lecture directe, 7 commentaires, revue de code)"]
|
|
last_updated: 2026-07-17
|
|
author: Arthur
|
|
---
|
|
|
|
# Assignation automatique de l'image de quai (OS/Tournée)
|
|
|
|
> **Résumé** : job périodique qui assigne automatiquement une image de
|
|
> quai (poumon d'expédition) aux ordres de sortie (OS) et tournées (RUT)
|
|
> éligibles, via un « faux » stage `X_EXP`. Automatise ce qui était une
|
|
> assignation manuelle et fournit le stage dont dépend le séquençage
|
|
> shipping (LIM-88).
|
|
|
|
> **Standard EasyWMS** : → voir [Shipping](../../concepts/shipping.md)
|
|
> Ce qui suit documente les **spécificités Limagrain** par rapport au
|
|
> standard.
|
|
|
|
## Contexte projet
|
|
|
|
Par défaut, l'assignation quai + image de quai pour l'expédition est
|
|
**manuelle** (voir
|
|
[Quais, poumons et chargement](consolidation-chargement.md)). LIM-94
|
|
automatise l'assignation de l'**image de quai** aux OS et tournées.
|
|
|
|
Ce job est **en amont** du
|
|
[séquençage shipping par STOP (LIM-88)](sequencage-shipping-stop.md) :
|
|
le garde-fou `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR` de
|
|
LIM-88 refuse de créer une tâche de chargement tant qu'aucun stage
|
|
(image de quai) n'est associé à l'OS. LIM-94 fournit cette association.
|
|
|
|
## Stages virtuels `X_EXP`
|
|
|
|
Un OS ou une Route ne peut être assigné qu'à un **« faux » stage** nommé
|
|
`X_EXP`, où `X` = code de l'image de quai (`A_EXP` pour l'image de quai
|
|
A). Ce sont les **seuls stages assignables** à un OS/Route.
|
|
|
|
- **Layout** : ajout des stages `A_EXP`, `B_EXP`, ... avec une
|
|
**capacité de 26** mais **un seul emplacement**
|
|
- **Pourquoi un stage virtuel à 1 emplacement ?** L'assignation doit
|
|
porter sur un **emplacement** et non une station. Sans ce stage
|
|
virtuel, il faudrait choisir une position précise (1 parmi 26) de
|
|
l'image de quai
|
|
- **Identification de l'image de quai associée à un stage** : c'est la
|
|
**seule image de quai ayant une route vers ce stage** (ex : la seule
|
|
route vers `A_EXP` part de l'image de quai A)
|
|
|
|
## Job `CST_AssignDockStage`
|
|
|
|
Job `CST_AssignDockStage` → WF `CST_Job_AssignStage`, exécuté **toutes
|
|
les 30 secondes**.
|
|
|
|
Le job récupère les Routes et les OS (OS **hors route**, en excluant les
|
|
OS de classe **Recertification**) et tente d'assigner une image de quai :
|
|
|
|
1. Vérifie via `CST_GetOutboundOrderAndRoutes_ToAssignStage` s'il existe
|
|
des ordres à assigner
|
|
2. Si oui, cherche les stages disponibles via
|
|
`CST_DockStage_GetAvailableStageToAssign`
|
|
3. Boucle simple : assigne les ordres un par un jusqu'à épuisement des
|
|
ordres ou des stages disponibles
|
|
4. La commande d'assignation diffère selon le type (Route ou OS)
|
|
|
|
**Priorisation** : par **priorité**, puis par **date de libération**.
|
|
|
|
### Conditions d'éligibilité de l'OS / Route
|
|
|
|
- **Libéré**
|
|
- **Toutes les palettes de picking sont revenues dans le TK** (même
|
|
principe que la tâche d'ordonnancement TK)
|
|
- Date actuelle à **H-3 de la date d'expédition prévue**
|
|
|
|
> La query contrôle en pratique : OS Released, non déjà assigné à un
|
|
> stage, date d'expédition prévue < 3 h, picking terminé (aucun
|
|
> conteneur picking + tous les conteneurs client en APS). Correction
|
|
> revue de code (05/06) : utiliser la **date d'expédition prévue** (et
|
|
> non la date de chargement prévue) pour les OS.
|
|
|
|
### Conditions d'assignabilité du stage
|
|
|
|
Un stage n'est assignable pour expédition que si le **stage virtuel**
|
|
`X_EXP` **et** l'**image de quai physique** associée sont libres.
|
|
|
|
**Stage virtuel `X_EXP`** :
|
|
|
|
- Non verrouillé
|
|
- Aucune tâche vers lui
|
|
- Aucun conteneur dessus
|
|
- Aucun autre OS, Route **ou réception** assigné
|
|
|
|
**Image de quai physique** (identifiée par la route qui va vers le
|
|
stage virtuel) :
|
|
|
|
- Non verrouillée
|
|
- Aucun conteneur dessus
|
|
- Aucune tâche vers elle
|
|
|
|
Ces contrôles sont portés par la query
|
|
`CST_DockStage_GetAvailableStageToAssign`.
|
|
|
|
## Génération des mouvements (PS → image de quai)
|
|
|
|
Le placement final vers l'image de quai est calculé au **poste de sortie
|
|
(PS)**, pas à l'assignation du stage. Quand un conteneur arrive au PS, le
|
|
WF `Container_MovedEventHandler_PS_PR` :
|
|
|
|
1. Récupère l'image de quai correspondant au stage assigné (la seule
|
|
image de quai ayant une route vers ce stage)
|
|
2. Change la destination de la tâche vers le **premier emplacement libre
|
|
calculé** de l'image de quai : l'emplacement avec le **X le plus
|
|
grand** n'ayant ni conteneur ni conteneur en mouvement
|
|
|
|
> Ce calcul « X le plus grand d'abord » rejoint le sens de dépose décrit
|
|
> dans [Quais, poumons et chargement](consolidation-chargement.md)
|
|
> (décharger en commençant par l'emplacement le plus éloigné du quai) et
|
|
> limite le problème de dépose AGV sur emplacements serrés.
|
|
|
|
## Désassignation à l'arrêt de l'OS / Route
|
|
|
|
Quand un OS (ou une Route) ayant une image de quai associée est
|
|
**stoppé** (repasse au statut « En attente »), l'association est
|
|
**supprimée**.
|
|
|
|
**Pourquoi ?** Sans cela, l'association peut devenir caduque : ex. image
|
|
B choisie, puis 2 jours plus tard, après re-libération, l'image B est
|
|
entre-temps réservée par une réception, ce qui pose problème.
|
|
|
|
- WF `CST_OutboundOrderUnassignStage_PR` : désassigne le stage de l'OS
|
|
s'il y en a un **et** que l'OS n'est pas inclus dans une route
|
|
- WF `CST_RouteUnassignStage_PR` : désassigne le stage de la route
|
|
- Souscription async `CST_OutboundOrderStopped_UnassignStage` sur
|
|
l'événement `OutboundOrderSetStoppingOperationEvent`
|
|
- Souscription async `CST_RouteStopped_UnassignStage` sur l'événement
|
|
`RouteStoppedEvent`
|
|
|
|
> Correction revue de code (05/06) : ces WF vérifient l'**image de quai**
|
|
> et non le quai de chargement.
|
|
|
|
## Assignation manuelle (VAssist)
|
|
|
|
L'assignation manuelle reste possible : les vues
|
|
`VAssistOutboundOrderAssignDock` et `VAssistRouteAssignDock` sont
|
|
restreintes pour n'afficher que les `DockStage` disponibles, selon les
|
|
**mêmes critères** que `CST_DockStage_GetAvailableStageToAssign`.
|
|
|
|
## [CUSTOM] Éléments techniques (revue de code)
|
|
|
|
> **Statut** : LIM-94 « En cours de test client (préprod) ». Revue de
|
|
> code réalisée (Maxime Halgand, Vincent Charvet).
|
|
|
|
| Élément | Type | Rôle |
|
|
|---|---|---|
|
|
| Stages `A_EXP`, `B_EXP`, ... | Layout | Stage virtuel par image de quai (capacité 26, 1 emplacement) |
|
|
| `CST_DockStage_GetAvailableStageToAssign` | Query | Liste des stages virtuels assignables (contrôle virtuel + image de quai physique) |
|
|
| `CST_GetOutboundOrderAndRoutes_ToAssignStage` | Query | Liste unifiée (Id + Description) des OS et Routes éligibles, pour un tri indépendant du type ; exclut la classe Recertification |
|
|
| `CST_Job_AssignStage` | WF | Boucle d'assignation, appelée toutes les 30 s |
|
|
| `CST_AssignDockStage` | Job | Appelle `CST_Job_AssignStage` toutes les 30 s |
|
|
| `Container_MovedEventHandler_PS_PR` | WF | Fin d'ordre au PS : redirige la tâche vers le 1er emplacement libre (X max) de l'image de quai du stage |
|
|
| `CST_OutboundOrderUnassignStage_PR` | WF | Désassigne le stage d'un OS stoppé (hors route) |
|
|
| `CST_RouteUnassignStage_PR` | WF | Désassigne le stage d'une route stoppée |
|
|
| `CST_OutboundOrderStopped_UnassignStage` | Souscription | Async sur `OutboundOrderSetStoppingOperationEvent` |
|
|
| `CST_RouteStopped_UnassignStage` | Souscription | Async sur `RouteStoppedEvent` |
|
|
| `VAssistOutboundOrderAssignDock` / `VAssistRouteAssignDock` | Vue | Assignation manuelle restreinte aux stages disponibles |
|
|
|
|
Commits : `f0536cce0c` (stages virtuels + redirection PS + vues),
|
|
`e3889b8003` (fix quai désassigné au passage du job + optim query),
|
|
`5de1618104` (désassignation à l'arrêt OS/Route).
|
|
|
|
## Points d'attention
|
|
|
|
⚠️ Le garde-fou LIM-88
|
|
(`Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`) dépend de
|
|
l'association de stage posée ici : sans stage assigné, pas de tâche de
|
|
chargement, les palettes bloquent aux PS.
|
|
|
|
⚠️ La désassignation à l'arrêt évite les réservations caduques d'image
|
|
de quai (conflit possible avec une réception qui réserverait entre-temps
|
|
la même image).
|
|
|
|
## Questions ouvertes
|
|
|
|
- Condition « l'image de quai n'a aucune réception assignée » : marquée
|
|
**TBD** dans la description initiale. La query intègre bien un contrôle
|
|
« aucune réception assignée » sur le stage virtuel ; confirmer le
|
|
périmètre exact (@Justine)
|
|
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
|
|
|
|
## Historique des modifications
|
|
|
|
| Date | Auteur | Modification |
|
|
|------|--------|--------------|
|
|
| 2026-07-17 | Arthur | Création depuis LIM-94 (lecture directe + revue de code) : stages virtuels `X_EXP`, job `CST_AssignDockStage`/`CST_Job_AssignStage` (30 s), conditions d'éligibilité OS/Route et d'assignabilité stage, redirection PS `Container_MovedEventHandler_PS_PR` (X max), désassignation à l'arrêt (WF + souscriptions), VAssist restreintes, éléments techniques + commits |
|
|
|
|
## Références
|
|
|
|
| Source | Type | Date |
|
|
|--------|------|------|
|
|
| [LIM-94](https://easywmsfrance.atlassian.net/browse/LIM-94) | Ticket Jira (statut préprod / test client) | 2026-07-17 |
|
|
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira (séquençage shipping, dépend du stage) | 2026 |
|
|
| Revue de code LIM-94 (M. Halgand, V. Charvet) | Commits `f0536cce0c` / `e3889b8003` / `5de1618104` | 2026-05/06 |
|
|
| Expédition - LIMAGRAIN - DEV | Page Confluence | 2026 |
|