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:
@@ -0,0 +1,207 @@
|
||||
---
|
||||
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 |
|
||||
Reference in New Issue
Block a user