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
+4 -3
View File
@@ -1,11 +1,11 @@
---
title: "Outbound Vue d'ensemble"
title: "Outbound - Vue d'ensemble"
tags: [outbound, expédition, shipping, index]
status: draft
last_updated: 2026-05-05
---
# Outbound Vue d'ensemble
# Outbound - Vue d'ensemble
> **Périmètre** : flux SOR → RUT → SOF → LOF, consolidation, chargement,
> messages ERP outbound.
@@ -18,6 +18,7 @@ last_updated: 2026-05-05
- [Flux expédition](flux-expedition.md)
- [Shipping Orders](shipping-orders.md)
- [Séquençage shipping par STOP](sequencage-shipping-stop.md)
- [Assignation automatique de l'image de quai](assignation-image-quai.md)
- [Consolidation et chargement](consolidation-chargement.md)
- [Flux ERP outbound](flux-erp-outbound.md)
@@ -44,4 +45,4 @@ flowchart LR
| Commande client | RUT « Client » | Oui (partiel) | Poumon → camion |
| Conso OF hors recert | SOR « Production » | Non | Poumon → production |
| Conso OF avec recert | SOR « Recert » | Passage poste | Restockage |
| Messagerie carton | RUT « Messagerie » | Oui | Emplacement sol |
| Messagerie carton | RUT « Messagerie » | Oui | Emplacement sol |
@@ -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 |
@@ -3,10 +3,10 @@ title: "Quais, poumons et chargement"
tags: [outbound, quais, poumons, chargement, AGV, étiqueteuse]
status: draft
standard_ref: concepts/shipping.md
jira_refs: []
jira_refs: [LIM-94]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md"]
last_updated: 2026-05-05
last_updated: 2026-07-17
author: Arthur
---
@@ -39,7 +39,7 @@ Modes de fonctionnement configurables par quai :
Chaque poumon est composé de **26 emplacements palettes au sol**, répartis en
2 colonnes de 13 emplacements numérotés.
Toutes les combinaisons quai/poumon sont possibles aucune restriction.
Toutes les combinaisons quai/poumon sont possibles - aucune restriction.
La cohérence des assignations est de la responsabilité de Limagrain.
### [CUSTOM] Quai fictif « Parking »
@@ -79,6 +79,11 @@ poumon pour lancer la livraison.
**Dès qu'un poumon est assigné** : les tâches de mouvement vers ce poumon
sont générées, **même si aucun quai n'est encore assigné**.
> [CUSTOM] Depuis LIM-94, l'assignation de l'**image de quai** aux OS et
> tournées peut être **automatique** (job périodique via un stage virtuel
> `X_EXP`), en plus de l'assignation manuelle. Voir
> [Assignation automatique de l'image de quai](assignation-image-quai.md).
**Libération** :
- Image de quai : **automatique** à la dernière palette chargée
@@ -113,18 +118,18 @@ respectés par les caristes pour les prises/déposes AGV.
| Quai bloqué | Plus assignable → assigner un autre quai manuellement |
| Poumon bloqué | Plus assignable → assigner un autre poumon. Palettes déjà présentes traitées normalement, les suivantes réorientées |
### Cas particulier Messagerie carton
### Cas particulier - Messagerie carton
- Pas d'image de quai assignée
- **Emplacement au sol dédié** par transporteur (ex: « Colissimo »,
« Chronopost ») ne pas utiliser d'image de quai classique pour ne
« Chronopost ») - ne pas utiliser d'image de quai classique pour ne
pas perdre 25 places
- [CUSTOM] À l'import du SOR, vérification combo shipping class code +
transporteur → poumon associé automatiquement
## Points d'attention
⚠️ Le process de messagerie carton n'utilise pas d'image de quai un
⚠️ Le process de messagerie carton n'utilise pas d'image de quai - un
emplacement au sol spécifique est réservé (à définir).
⚠️ Possibilité de modifier quai/image de quai a posteriori manuellement
@@ -143,10 +148,15 @@ emplacements serrés).
laisser l'AGV (iGO/Still) choisir l'emplacement disponible le plus
proche, puis remonter l'emplacement exact au WMS
2. OU imposer à Still de **respecter l'ordre des STOP** tel que sorti par
le WMS c'est Still qui est responsable de l'ordonnancement
le WMS - c'est Still qui est responsable de l'ordonnancement
> ⚠️ À valider avec Still lors d'une réunion technique dédiée.
> [CUSTOM] LIM-94 atténue ce problème côté WMS : le placement final est
> calculé au PS (`Container_MovedEventHandler_PS_PR`) vers le premier
> emplacement libre à **X le plus grand** de l'image de quai. Voir
> [Assignation automatique de l'image de quai](assignation-image-quai.md).
## Confirmation prise/dépose AGV
Quand l'AGV prend une palette (sortie TK, sortie buffer, sortie PK), il
@@ -157,7 +167,7 @@ doit **informer le WMS** que la palette est sur l'AGV (emplacement =
incorrecte (occupée informatiquement alors que physiquement vide), ce qui
bloque les flux suivants.
Confirmation de dépose (fin de mission) déjà prévue par Still il faut
Confirmation de dépose (fin de mission) déjà prévue par Still - il faut
aussi le **début de mission** (prise palette).
Les AGV déposent les palettes sur le poumon en respectant l'**ordre des
@@ -165,8 +175,8 @@ arrêts (STOP)** pour la livraison.
## Questions ouvertes
- [ ] Emplacement au sol exact par transporteur pour messagerie carton (@Théo)
- [ ] Validation réunion technique Still pour le problème dépose AGV
- Emplacement au sol exact par transporteur pour messagerie carton (@Théo)
- Validation réunion technique Still pour le problème dépose AGV
sur image de quai (@Théo)
## Historique des modifications
@@ -175,6 +185,7 @@ arrêts (STOP)** pour la livraison.
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | QUAI_TEMPORAIRE, messagerie carton, problème dépose AGV, confirmation prise/dépose |
| 2026-07-17 | Arthur | Renvois vers la nouvelle page LIM-94 (assignation auto image de quai via stage `X_EXP` ; placement PS X max) dans « Règles d'assignation » et « Problème de dépose AGV » ; front matter jira_refs/last_updated |
## Références
+52 -20
View File
@@ -1,16 +1,16 @@
---
title: "Flux ERP outbound Messages expédition"
tags: [outbound, ERP, SOR, RUT, SOF, LOF, PCK, MOV, interface]
title: "Flux ERP outbound - Messages expédition"
tags: [outbound, ERP, SOR, RUT, SOF, LOF, PCK, MOV, interface, adresse, tournee]
status: draft
standard_ref: architecture/erp-integration.md
jira_refs: []
standard_ref: concepts/erp-interface.md
jira_refs: [LIM-117]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", "Jira LIM-117 (lecture directe)"]
last_updated: 2026-07-20
author: Arthur
---
# Flux ERP outbound Messages expédition
# Flux ERP outbound - Messages expédition
> **Résumé** : catalogue des messages ERP liés aux processus d'expédition
> chez Limagrain, avec direction, déclencheur et contenu principal.
@@ -26,7 +26,7 @@ Pour les messages de réception, voir
## Messages entrants (SAP → EasyWMS)
### RUT Route
### RUT - Route
| Champ | Description |
|-------|-------------|
@@ -35,7 +35,7 @@ Pour les messages de réception, voir
| Contenu | Image camion (tournée), 1+ ordres de sortie (SOR), date/heure libération, n° stops |
| Types | « Client » (commandes client + messagerie palette), « Messagerie » (messagerie carton) |
### SOR Shipping Order Request
### SOR - Shipping Order Request
| Champ | Description |
|-------|-------------|
@@ -44,9 +44,35 @@ Pour les messages de réception, voir
| Contenu | Lignes de stock (article/lot SAP, propriétaire Limagrain, statut de stock, quantité), priorité, date/heure libération |
| Types | « Production » (consommation OF hors recert), « Recert » (consommation OF avec recert) |
### [CUSTOM] Adresse de livraison des SOR de tournée (LIM-117)
En standard, le SOR porte des champs d'adresse de livraison, mais la
**liste de SOR d'un RUT** (`RouteErpCommand`) ne les expose pas. SAP
transmet donc l'adresse dans le bloc **`CustomAttribute` de chaque SOR**
du RUT. Un **post-subscription** WMS (à développer) lit ces attributs et
les mappe sur l'**ordre de sortie (OS)** correspondant.
| CstAtt du SOR | Contenu (déduit de l'exemple SAP) | Exemple |
|---|---|---|
| `Attribute1` | Code postal | `63720` |
| `Attribute2` | Site / lieu-dit | `Biopôle Clermont-Limagne` |
| `Attribute3` | Rue | `Rue Henri Mondor` |
| `Attribute4` | Commune | `SAINT-BEAUZIRE` |
| `Attribute5` | Région | `AUVERGNE-RHONE-ALPES` |
| `Attribute6` | Pays | `FR` |
| `Attribute7` | Téléphone / commentaire | `0415400300 ou commentaire` |
Les attributs sont portés au niveau de chaque SOR de la `SorList`, quel
que soit le type (l'exemple SAP `RUT-2026-000451_BIS` concerne un SOR
`AccountCode = PRODUCTION`).
> ⚠️ Statut LIM-117 **Ouvert** : mapping validé côté SAP (exemple fourni),
> le post-subscription WMS reste **à développer**. Les libellés de champs
> ci-dessus sont déduits des valeurs de l'exemple - à confirmer avec SAP.
## Messages sortants (EasyWMS → SAP)
### SOF Shipping Order Fulfilled
### SOF - Shipping Order Fulfilled
| Champ | Description |
|-------|-------------|
@@ -61,7 +87,7 @@ Pour les messages de réception, voir
- **Cancelled** = commande annulée, ShippedQuantity = 0 sur les lignes non
expédiées
### LOF Load Order Fulfilled
### LOF - Load Order Fulfilled
| Champ | Description |
|-------|-------------|
@@ -81,18 +107,18 @@ Palette support (IsSlave=TRUE) → Palette fille (IsSlave=FALSE) → Lignes
de stock avec attributs logistiques. Cas des supports remontés M2I :
Palette US (IsSlave=TRUE) → Séparateur 1 → Séparateur 2.
### [CUSTOM] PCK Passage Conteneur Client
### [CUSTOM] PCK - Passage Conteneur Client
| Champ | Description |
|-------|-------------|
| Direction | WMS → ERP |
| Déclencheur | Stock préparé passage en conteneur client EasyWMS |
| Déclencheur | Stock préparé - passage en conteneur client EasyWMS |
| Contenu | Information passage conteneur client |
| Envoyé pour | Commande client, consommation OF hors recert, messagerie carton |
### ~~[CUSTOM] MOV Movement~~ ANNULÉ
### ~~[CUSTOM] MOV - Movement~~ ANNULÉ
> **ANNULÉ** décision réunion client, jugé inutile.
> **ANNULÉ** - décision réunion client, jugé inutile.
| Champ | Description |
|-------|-------------|
@@ -100,7 +126,7 @@ Palette US (IsSlave=TRUE) → Séparateur 1 → Séparateur 2.
| Déclencheur | ~~Déplacement de stock entre palettes (picking, regroupement)~~ |
| Contenu | ~~Palette d'origine, palette de destination, nouvelle palette (Oui/Non), quantité + caractéristiques~~ |
## Communication ERP : LOC Détails
## Communication ERP : LOC - Détails
### Principe retenu
@@ -135,7 +161,7 @@ les mouvements (et non une autre date).
| Chargement camion terminé | LOF |
| Réception palette re-certifiée | ASN (depuis MII) |
## Diagramme de séquence Expédition client complète
## Diagramme de séquence - Expédition client complète
```mermaid
sequenceDiagram
@@ -164,7 +190,7 @@ sequenceDiagram
WMS->>SAP: LOF (camion chargé)
```
## Diagramme de séquence Consommation OF avec recertification
## Diagramme de séquence - Consommation OF avec recertification
```mermaid
sequenceDiagram
@@ -196,12 +222,16 @@ sequenceDiagram
## Points d'attention
⚠️ Le message MOV est **ANNULÉ** (décision réunion client jugé inutile).
⚠️ Le message MOV est **ANNULÉ** (décision réunion client - jugé inutile).
⚠️ Le SOF est automatique quand tous les conteneurs sont chargés.
En cas d'expédition partielle, la clôture (et le SOF) est manuelle.
Les lignes sans quantité expédiée n'apparaissent pas dans le SOF.
⚠️ **Adresse de livraison (LIM-117)** : non exposée dans la liste de SOR
d'un RUT ; transmise par SAP dans le `CustomAttribute` de chaque SOR et
mappée sur l'OS par un post-subscription WMS à développer.
⚠️ Pour la recertification, le SOF est envoyé **avant** la réception
de la nouvelle HU (séquence SOF → ASN).
@@ -215,7 +245,8 @@ le flag « client ».
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | MOV annulé, LOC détaillé (5 min, delta, structure), synthèse communications |
| 2026-05-06 | Arthur | Enrichissement SOF (phase 2, statuts, contenu), LOF (structure conteneurs, articulation SOF/LOF), PCK remplacé par LOC depuis CR consolidé |
| 2026-05-06 | Arthur | Enrichissement SOF (phase 2, statuts, contenu), LOF (structure conteneurs, articulation SOF/LOF), PCK remplacé par LOC - depuis CR consolidé |
| 2026-07-20 | Arthur | Ajout LIM-117 (LOT 2.1, lecture directe, Ouvert) : section « Adresse de livraison des SOR de tournée » (`CustomAttribute` Attribute1-7 des SOR du RUT, post-subscription WMS de mapping vers l'OS à développer) ; point d'attention ; front matter jira_refs/sources/tags/last_updated |
## Références
@@ -224,3 +255,4 @@ le flag « client ».
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| [LIM-117](https://easywmsfrance.atlassian.net/browse/LIM-117) | Ticket Jira (LOT 2.1, mapping adresse SOR de tournée, Ouvert) | 2026-07 |
+175 -50
View File
@@ -1,16 +1,16 @@
---
title: "Flux expédition Processus complet"
title: "Flux expédition - Processus complet"
tags: [outbound, expédition, défragmentation, étiquetage, chargement, recertification, messagerie, litiges, AGV]
status: draft
standard_ref: concepts/shipping.md
jira_refs: []
jira_refs: [LIM-105, LIM-107, LIM-111]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md"]
last_updated: 2026-05-13
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "Jira LIM-105 (lecture directe 2026-07-20)", "Jira LIM-107 (lecture directe 2026-07-20)", "Jira LIM-111 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Flux expédition Processus complet
# Flux expédition - Processus complet
> **Résumé** : processus d'expédition de bout en bout en 12 étapes, de la
> réception de l'OS jusqu'à la libération du quai, incluant les flux
@@ -63,7 +63,7 @@ ordonnancés par n° de STOP). Voir [Ordres de sortie](shipping-orders.md).
### 3. Assignation du stock
Voir [Ordres de sortie Assignation](shipping-orders.md#assignation-de-stock)
Voir [Ordres de sortie - Assignation](shipping-orders.md#assignation-de-stock)
pour les stratégies détaillées (FIFO 24h, économie de mouvement, pas de
FEFO, max palettes complètes).
@@ -71,12 +71,12 @@ FEFO, max palettes complètes).
| Type de palette | Action |
|-----------------|--------|
| Palettes complètes / picking terminées | [CUSTOM] Tâche de défragmentation (reloc) vers zone d'expédition ASRS. Ne se déclenche que si **toutes** les palettes clientes sont « terminées » et qu'aucun quai n'est associé à l'OS. Voir [Défragmentation custom](../02-stockage/defragmentation.md#custom-défrag-client-par-tournée--quai-non-assigné-lim-87). |
| Palettes complètes / picking terminées | [CUSTOM] Tâche de défragmentation (reloc) vers zone d'expédition ASRS. Ne se déclenche que si **toutes** les palettes clientes sont « terminées » et qu'aucun quai n'est associé à l'OS. Voir [Défragmentation custom](../02-stockage/defragmentation.md#custom-défrag-client-par-tournée---quai-non-assigné-lim-87). |
| Palettes picking | Aucune tâche tant qu'un poste de travail n'est pas assigné |
> **Règle générale** : on n'envoie aucune palette sur l'image de quai tant
> que le picking n'est pas terminé (et que les palettes sont revenues à
> l'ASRS) sauf si le stop précédent est fini.
> l'ASRS) - sauf si le stop précédent est fini.
>
> **Deux customs complémentaires** gèrent l'ordonnancement par STOP :
> quai non assigné → [Défragmentation custom](../02-stockage/defragmentation.md),
@@ -126,7 +126,7 @@ workflow `StackerCrane_SortTasks_PR`.
| Règle | Détail |
|-------|--------|
| Picking négatif | **Deux conditions cumulatives** (réu. 11/05/2026) : seuil fiche article (défaut **55%**, pas 50%) ET poids unitaire sac **≥ 7 kg**. Si l'une des deux n'est pas remplie → picking direct classique. Voir [Picking combinatoire](../03-picking/picking-combinatoire.md#custom-règle-du-picking-négatif). |
| ~~Traitement commercial~~ | ~~Articles avec/sans traitement sur palettes filles séparées~~ **SUPPRIMÉ** (réu. 11/05/2026, `CONTROLE_TRAITEMENT_COMMERCIAL = false`). L'entrepôt ne fait pas de bio. |
| ~~Traitement commercial~~ | ~~Articles avec/sans traitement sur palettes filles séparées~~ - **SUPPRIMÉ** (réu. 11/05/2026, `CONTROLE_TRAITEMENT_COMMERCIAL = false`). L'entrepôt ne fait pas de bio. |
| Verrou « HORS TOLERANCE » | Si présent → recomptage avant picking. Si stock restant suffisant après inventaire → assignation maintenue. Sinon → réassignation ailleurs + retrait verrou. |
#### Algorithme de répartition des palettes sur les TP
@@ -135,7 +135,7 @@ workflow `StackerCrane_SortTasks_PR`.
enchaînements, ordonnancement par espèce, terminer une palette pleine
avant d'en entamer une autre, cadencement des buffers, pas de mélange
traitement commercial, contrainte opérateur (pas de déplacement de sacs
d'une table à l'autre sacs lourds).
d'une table à l'autre - sacs lourds).
**Table du milieu** : toujours occupée soit par une palette de picking
négatif, soit par une palette vide de dépôt. Palette vide remise
@@ -154,12 +154,16 @@ classe de commande.
#### Message MOV
~~À chaque déplacement de stock durant le picking, un message MOV est
envoyé à SAP.~~ **ANNULÉ** vu en réunion client, jugé inutile.
envoyé à SAP.~~ **ANNULÉ** - vu en réunion client, jugé inutile.
#### Filmage
Avant chaque évacuation, l'opérateur choisit le programme de filmage
(CstData transmis à Galileo). Possibilité de choisir « pas de filmage ».
(stocké dans `CstAtt05`, transmis à Galileo). Possibilité de choisir « pas
de filmage ». Le mécanisme de transmission (event `MovementCreated` sur
source PIE_02 → CustomData de la tâche) est décrit dans
[Configuration Galileo - Transmission du filmage](../02-stockage/galileo-config.md#transmission-du-programme-de-filmage-à-la-filmeuse-lim-115)
(LIM-115).
**Programmes de filmage disponibles** :
@@ -264,47 +268,90 @@ deuxième chargement est recréé automatiquement pour le reliquat.
| Élément | Mode de libération |
|---------|-------------------|
| Image de quai | **Automatique** dernière palette chargée |
| Quai | **Manuel** départ du camion |
| Image de quai | **Automatique** - dernière palette chargée |
| Quai | **Manuel** - départ du camion |
## Étiqueteuse automatique
> **Statut** : le **mécanisme d'intégration Galileo** est spécifié dans
> **LIM-111** (Ouvert) ; le **contenu des rapports** relève de **LIM-107** ;
> la **pose initiale du flag `CstAtt14` au PK** relève de **LIM-91**. Cette
> section documente le fonctionnement au poste de sortie TK.
### Principe
Deux étiqueteuses au niveau des deux postes de sortie TK, pouvant imprimer
une ou plusieurs étiquettes selon le processus.
Deux étiqueteuses automatiques, **LBLM_01** et **LBLM_02** (stations de type
**ET**), équipent les deux postes de sortie de l'ASRS, sur les convoyeurs
allant vers les images de quai. Elles servent **uniquement** aux supports
qui sortent de l'ASRS pour aller **directement sur une image de quai** dans
un flux d'expédition. Elles peuvent poser une ou deux étiquettes selon le
processus. Le WMS envoie un *print command* avec l'un des rapports (mono ou
multiréférence) - voir
[Étiquette support RFID](../01-inbound/etiquette-rfid.md).
Positionnement dans la chaîne : sortie TK (ordonnancée par n° STOP, voir
[Séquençage shipping par STOP](sequencage-shipping-stop.md)) → table de
sortie TK → **étiqueteuse ET** → poste de sortie PS → AGV Still → image de
quai → chargement camion.
### Étiquetage au picking (étiqueteuse auto)
100% des palettes passant par le picking sont étiquetées (étiquette
d'expédition) directement au PK. Un `CstAtt` est positionné à `true` sur
la palette pour indiquer qu'elle a déjà été étiquetée.
100% des palettes passant par le picking sont étiquetées (étiquette de
picking HU RFID) directement au PK. Le flag `CstAtt14` est positionné à
`true` sur la palette (LIM-91) pour indiquer qu'elle a déjà été étiquetée.
### Comportement à la sortie TK
### Comportement à la sortie TK - décision d'impression (LIM-111)
L'étiqueteuse **n'imprime pas** si :
Deux étiquettes **distinctes** peuvent être posées, avec des règles
**séparées**. Le flag **`CstAtt14`** (Container, String - voir
[AD Customs](../07-admin/ad-customs.md#cstatt-support-container--palette)) ne conditionne
que la **2e** (étiquette de picking), pas l'étiquette d'expédition.
- `CstAtt` = `true` (palette déjà étiquetée au picking)
- OU hauteur palette trop faible (PLC height type = 1)
| Étiquette | Rapport | Condition d'impression |
|-----------|---------|------------------------|
| Expédition (client / production) | LIM-107 | **Toujours**, sauf palette trop basse (PLC Height Type = 1). Indépendante de `CstAtt14`. |
| Picking (HU RFID mono/multiréférence) | LIM-68 | Uniquement si `CstAtt14` = `false`/vide **et** PLC Height Type ≠ 1. Non imprimée si `CstAtt14` = `true` (déjà étiquetée au PK) ou palette trop basse. |
L'étiqueteuse **imprime** si :
**Cas d'usage de la 2e étiquette** : une palette complète sortie
directement de l'ASRS vers l'image de quai **sans passer par un poste de
picking** n'a pas ses étiquettes HU RFID → `CstAtt14` vide → l'étiqueteuse
les pose (monoref ou multiref RFID selon le nombre de lignes de stock).
- `CstAtt` = `false` ET PLC height type ≠ 1
- Si impression réussie → `CstAtt` passe à `true`
- Si impression échouée → `CstAtt` passe à `error`
**Mise à jour du flag** après passage à l'étiqueteuse :
### Mode dégradé — Chargement camion
- Impression OK → `CstAtt14` passe à `true`
- Impression échouée → `CstAtt14` passe à `error` (voir Gestion des pannes)
Si l'opérateur scanne une palette sans étiquette (`CstAtt` = `false` ou
`error`, PLC height type ≠ 1) au chargement camion → impression
automatique sur une imprimante proche du quai.
> ⚠️ La condition « PLC Height Type ≠ 1 » sur l'étiquette d'expédition
> reste **à vérifier** avec le fournisseur (LIM-111 §4.2).
### Communication Galileo
### Mode dégradé - Chargement camion
On envoie un **custom data** à Galileo (pas de changement de
destination/route). Galileo, en recevant le custom data avec le bon
tracking de palette, arrête les rouleaux et lance l'impression. Un seul
chemin — l'arrêt est piloté par le custom data.
Si l'opérateur scanne une palette sans étiquette (`CstAtt14` = `false` ou
`error`, PLC height type ≠ 1) au chargement camion → le WMS propose de
réimprimer le rapport d'expédition (LIM-107), avec prompt du code
imprimante. Réimpression via imprimante proche du quai (menu TRF dédié).
### Communication Galileo (LIM-111)
Pilotage **par custom data**, sans changement de destination ni de route
(un seul chemin physique). Même principe que le filmage (CstAtt05 → custom
data, voir LIM-91).
Points d'insertion :
- **Subscription sur l'event `MovementCreated`** : si la destination est
une étiqueteuse (`LBLM_01`/`LBLM_02`), le WMS met à jour le **CustomData
de la tâche** avec le **nombre d'étiquettes** à imprimer. Ce nombre est
essentiel : il indique au **bras articulé** s'il y a une ou deux
positions de collage.
- Galileo, en recevant le custom data avec le bon tracking de palette,
**arrête les rouleaux**.
- À la **fin d'ordre** (event = palette arrivée à l'étiqueteuse), le WMS
lance le **`printerCommand`**. Le contenu du rapport est envoyé
directement à l'imprimante par EasyWMS via le **`printerService`**.
- Galileo gère l'impression et le **collage**, puis la **relance des
rouleaux**.
### Multi-étiquettes (2 étiquettes)
@@ -321,10 +368,68 @@ la palette (positions à définir avec Théo).
- [CUSTOM Galileo] Communication HS imprimante → mise en défaut ET à
documenter dans le document TMS
### Contenu des étiquettes d'expédition par type (LIM-107)
> **Statut (LIM-107)** : en revue de code.
Dès qu'une palette sort de l'installation pour expédition, un rapport est
imprimé **selon le type d'expédition** (classe de l'OS). Format **A5**. Le
type est déterminé par la classe de l'OS via les paramètres
`EXPEDITION_CLASSE_CLIENT` / `EXPEDITION_CLASSE_PRODUCTION` (voir
[Paramètres projet](../07-admin/parametres-projet.md)).
Où l'étiquette est imprimée (arbitrage Justine 02/07/2026) :
- **Client** et **Production** → sur les **étiqueteuses automatiques**
d'expédition (sortie TK).
- **Échantillonnage** → sur les **étiqueteuses des postes de travail**, via
le flux inventaire COR/COF. Contenu détaillé dans
[Échantillonnage - Étiquette d'échantillonnage](../03-picking/echantillonnage.md#étiquette-déchantillonnage-lim-107).
Étiquette **CLIENT** (report `CST_RPT_OUTBOUND_CLIENT`) :
| # | Champ |
|---|-------|
| 1 | Code de la tournée |
| 2 | Code de l'OS |
| 3 | Code du transporteur de l'OS |
| 4 | Adresse de livraison de l'OS |
Étiquette **PRODUCTION** (report `CST_RPT_OUTBOUND_PRODUCTION`) :
| # | Champ |
|---|-------|
| 1 | Code de l'OS |
| 2 | Code-barre 128 du code de l'OS |
| 3 | `SOR.Document` |
Une **impression manuelle** est aussi disponible depuis la vue conteneurs
(`ContainerVList`) via deux boutons (« Imprimer étiquette d'expédition
client / production »), affichés sous condition que le conteneur soit un
conteneur client ou d'expédition de la bonne classe d'OS.
| Élément AD | Type | Rôle |
|------------|------|------|
| `EXPEDITION_CLASSE_CLIENT` / `EXPEDITION_CLASSE_PRODUCTION` | Paramètre | Classe d'OS identifiant le type d'expédition (client / production). |
| `CST_RPT_OUTBOUND_CLIENT` | Report | Étiquette d'expédition client. |
| `CST_RPT_OUTBOUND_PRODUCTION` | Report | Étiquette d'expédition production. |
| `CST_RPT_ECHANTILLONAGE` | Report | Étiquette d'échantillonnage (voir [Échantillonnage](../03-picking/echantillonnage.md)). |
| `CST_VSearchPrintShippingClientContainerLabel` | Vue | Génération de l'étiquette d'expédition client. |
| `CST_VSearchPrintShippingProductionContainerLabel` | Vue | Génération de l'étiquette d'expédition production. |
| `ContainerVList` | Vue | Ajout des 2 boutons de génération d'étiquette (sous condition de classe d'OS). |
| `CST_ContainerVList_Action_PrintShippingClientLabel` / `...ProductionLabel` | Ressource i18n | Libellés des boutons d'impression. |
| `CST_ShippingClientContainerLabel` (client + production) | Ressource i18n | Libellés « Générer étiquette expédition client / production ». |
## Flux spécifiques
### Re-certification
> **Workstation LIM-105** : le **process opérateur détaillé au poste de
> picking** (scan ancienne/nouvelle étiquette, vérification ASN via
> `SAP_ATH111_*`, échange de conteneur, filmage, éléments AD) est documenté
> dans [Recertification - Workstation au poste de picking](../03-picking/recertification.md).
> La section ci-dessous décrit le **flux outbound** de bout en bout.
La re-certification consiste à ré-étiqueter une palette existante pour
lui donner une nouvelle identité (nouvelle HU) sans déplacer physiquement
le stock. C'est une **sortie administrative** suivie d'une **réception
@@ -343,7 +448,7 @@ manager), ce qui bloque le PK pour les autres types de tâches.
(ex: PK02) dans un CstAtt de la palette
5. **Route virtuelle** : la palette est déplacée informatiquement du PK
vers QUAI_RECERTIF
6. [CUSTOM] **Event sur le déplacement vers QUAI_RECERTIF** 3 actions :
6. [CUSTOM] **Event sur le déplacement vers QUAI_RECERTIF** - 3 actions :
- Récupération du CstAtt (code PK d'origine)
- Fermeture de la commande → expédition du stock → génération du SOF
- Création d'une **palette vide** sur le PK d'origine (pour maintenir
@@ -426,7 +531,7 @@ SOR.Line si besoin.
- S'il reste du stock dispo : assignation maintenue (workflow
`OnStockAdjust` recalcule uniquement si nécessaire)
- Si plus assez de stock → réassignation ailleurs
3. Autre problème le support n'est pas ok (90% du stock a un problème) :
3. Autre problème - le support n'est pas ok (90% du stock a un problème) :
- **Verrou de support** interdisant le picking (bouton « mettre sous
révision » en standard, à configurer)
- Tâche créée pour que l'AGV dépose la palette sur un **emplacement
@@ -464,20 +569,26 @@ documentés pour chaque process.
## Questions ouvertes
- [ ] Ordonnancement des palettes dans le canal du poumon d'expé du
magasin automatique géré par le WMS ou naturellement via l'ordre
- Ordonnancement des palettes dans le canal du poumon d'expé du
magasin automatique - géré par le WMS ou naturellement via l'ordre
de stockage ? (@Nicolas)
- [ ] Fermeture auto OS si chargement complet standard ou custom ?
- Fermeture auto OS si chargement complet - standard ou custom ?
(@Nicolas)
- [ ] Comportement du reliquat chargement camion avec fichier RUT
- Comportement du reliquat chargement camion avec fichier RUT -
à paramétrer et tester (@Fabien)
- [ ] Positions des 2 étiquettes articulées sur la palette (@Théo)
- [ ] Custom Galileo : communication HS imprimante → mise en défaut ET
à documenter dans le TMS (@Théo)
- [ ] Combien de commandes messagerie en parallèle sur un poste ? (@Justine)
- [ ] Emplacement au sol buffer litige — localisation exacte (@Théo)
- [ ] Emplacement au sol messagerie carton par transporteur (@Théo)
- [ ] Réunion technique avec Still pour valider le problème de dépose
- Positions des 2 étiquettes articulées sur la palette (@Théo)
- Custom Galileo : communication HS imprimante → mise en défaut ET
- à documenter dans le TMS (@Théo)
- Étiqueteuse auto (LIM-111) : mécanisme de remontée d'une erreur
d'impression par les automates au WMS à définir - nécessaire pour que
le mode dégradé TRF sache si l'impression a réussi (@Vincent)
- Étiqueteuse auto (LIM-111) : palette à l'arrêt en cas de problème
d'impression - intervention opérateur (laquelle ?) et procédure de
redémarrage de la palette à définir (@Théo / @Vincent)
- ❓ Combien de commandes messagerie en parallèle sur un poste ? (@Justine)
- ❓ Emplacement au sol buffer litige - localisation exacte (@Théo)
- ❓ Emplacement au sol messagerie carton par transporteur (@Théo)
- ❓ Réunion technique avec Still pour valider le problème de dépose
AGV sur image de quai (@Théo)
## Historique des modifications
@@ -486,4 +597,18 @@ documentés pour chaque process.
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Réécriture complète depuis ateliers DEV expédition |
| 2026-05-13 | Arthur | Correction seuil picking négatif 50% → 55% + poids ≥ 7 kg, suppression règle traitement commercial |
| 2026-05-13 | Arthur | Correction seuil picking négatif 50% → 55% + poids ≥ 7 kg, suppression règle traitement commercial |
| 2026-07-20 | Arthur | Renvoi vers la nouvelle page [Recertification workstation](../03-picking/recertification.md) (LIM-105) depuis la section Re-certification ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-107 (lecture directe, en revue de code) : sous-section « Contenu des étiquettes d'expédition par type » sous Étiqueteuse automatique (format A5 ; Client/Production sur étiqueteuses auto, Échantillonnage sur poste via COR/COF ; contenu étiquettes Client 4 champs + Production 3 champs ; params EXPEDITION_CLASSE_CLIENT/PRODUCTION ; reports/vues/ContainerVList/ressources ; impression manuelle via 2 boutons ContainerVList) ; front matter jira_refs +LIM-107/sources |
| 2026-07-20 | Arthur | LIM-111 (lecture directe, Ouvert) : formalisation de l'intégration Galileo de l'étiqueteuse (noms de stations LBLM_01/LBLM_02 type ET ; refonte « Comportement à la sortie TK » en logique 2 étiquettes distinctes - expédition LIM-107 toujours sauf palette basse, picking LIM-68 conditionnée par CstAtt14 ; mécanisme Galileo subscription MovementCreated → CustomData nombre d'étiquettes → printerCommand/printerService ; CstAtt14 nommé) ; front matter jira_refs +LIM-111/sources ; 2 questions ouvertes (remontée erreur impression, palette à l'arrêt) |
| 2026-07-20 | Arthur | Lint : ajout section Références ; correction ancres et liens |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | AF (docx) | 2026 |
| "Expédition - LIMAGRAIN - DEV" Confluence | Page | 2026 |
| [LIM-105](https://easywmsfrance.atlassian.net/browse/LIM-105) | Ticket Jira (lecture directe) | 2026-07-20 |
| [LIM-107](https://easywmsfrance.atlassian.net/browse/LIM-107) | Ticket Jira (lecture directe) | 2026-07-20 |
| [LIM-111](https://easywmsfrance.atlassian.net/browse/LIM-111) | Ticket Jira (lecture directe) | 2026-07-20 |
@@ -1,16 +1,16 @@
---
title: "Séquençage shipping par STOP Quai assigné"
title: "Séquençage shipping par STOP - Quai assigné"
tags: [outbound, expédition, shipping, tournée, STOP, stacker-crane, custom, AGV]
status: draft
status: review
standard_ref: concepts/shipping.md
jira_refs: [LIM-88]
jira_refs: [LIM-88, LIM-94]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: ["LIM-88 LOT2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assigné.md"]
last_updated: 2026-05-12
sources: ["LIM-88 LOT2.1 [TOURNÉES] Séquençage des tâches de shipping par STOP - quai assigné.md", "Jira LIM-88 (lecture directe, revue de code)"]
last_updated: 2026-07-17
author: Arthur
---
# Séquençage shipping par STOP Quai assigné
# Séquençage shipping par STOP - Quai assigné
> **Résumé** : quand un quai est déjà assigné à une tournée (RUT),
> les palettes doivent sortir de l'ASRS vers l'image de quai dans
@@ -30,9 +30,12 @@ Ce custom est le **cas complémentaire** de la
(LIM-87) qui traite le cas « quai non assigné ».
Ici, le quai est **déjà assigné au RUT** quand la tournée est libérée
(ou assigné avant la fin du picking, ou après). Dans ce cas, LIM-87
(défrag custom) ne s'applique pas : c'est le **flux shipping standard**
qui prend le relais pour envoyer les palettes vers l'image de quai.
(ou assigné avant la fin du picking, ou après). L'assignation de l'image
de quai peut être manuelle ou **automatique** via le job LIM-94 (voir
[Assignation automatique de l'image de quai](assignation-image-quai.md)).
Dans ce cas, LIM-87 (défrag custom) ne s'applique pas : c'est le **flux
shipping standard** qui prend le relais pour envoyer les palettes vers
l'image de quai.
Il faut néanmoins respecter la règle métier d'ordonnancement par n° de
STOP (ordre inverse : STOP max → STOP 1) pour que les palettes soient
posées sur l'image de quai dans le bon ordre de chargement camion.
@@ -50,7 +53,7 @@ pas :
> Custom imaginé au départ : bloquer la génération des tâches de
> shipping tant que tout le picking n'est pas terminé.
Trop restrictif on ne profiterait pas du temps pendant lequel les
Trop restrictif - on ne profiterait pas du temps pendant lequel les
palettes complètes pourraient déjà être pré-positionnées sur l'image
de quai dans l'ordre. Par ailleurs, bloquer la génération de tâche est
complexe car de nombreux process la déclenchent (pas uniquement des
@@ -65,7 +68,7 @@ jobs).
Dès que le quai est assigné, toutes les palettes prêtes (complètes
dans l'ASRS + palettes filles revenues de picking) ont leur tâche de
shipping générée par le standard. Une palette non encore pickée n'a
pas de tâche sa tâche sera créée au moment où elle rentrera dans un
pas de tâche - sa tâche sera créée au moment où elle rentrera dans un
TK après picking.
#### 2. Ordonnancement d'exécution (custom stacker crane)
@@ -99,7 +102,7 @@ palette rentre bien dans l'ASRS.
- **Le tri du stacker crane doit considérer les palettes sur tous les
TK** (pas uniquement celles dans un TK unique comme en standard).
Pattern déjà réalisé sur le **projet Bardinet** à reprendre.
Pattern déjà réalisé sur le **projet Bardinet** - à reprendre.
### Ce qui reste standard
@@ -109,6 +112,40 @@ palette rentre bien dans l'ASRS.
si pas de stock trouvé → palettes suivantes du STOP envoyées ;
si nouveau stock trouvé → récupère le séquençage
## Implémentation définitive (revue de code validée 2026-06-02)
> **Statut** : En cours de test client (pré-production). Revue de code
> et tests validés. Deux revues successives : le tri multi-TK (Maxime
> Halgand) puis un garde-fou complémentaire sur la génération des
> tâches de chargement (Vincent Charvet).
Le custom se limite à une **query clonée** et deux **workflows**
overridés. Aucune génération de tâche custom : le standard crée les
tâches shipping au fil de l'eau, le custom n'intervient qu'au **tri**
et pose un garde-fou sur la génération des tâches de chargement AGV.
### Query
| Élément | Rôle |
|---|---|
| `CST_Tasks_PendingOutboundForStackerCrane` | Cœur du custom. Clone de `Tasks_PendingOutboundForStackerCrane`. Filtre pour récupérer toutes les tâches shipping, conteneurs picking, conteneurs shipping et conteneurs client d'un **numéro de STOP supérieur**, et vérifier s'ils sont **tous en station image de quai (DockStage)** ou non |
### Workflows
| Workflow | Modification |
|---|---|
| `StackerCrane_GetOutboundPendingTasks_PR` | Utilise la query custom au lieu de la standard. Ajoute un log pour conserver les informations de recherche |
| `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR` | Empêche la création d'une tâche de chargement s'il n'y a **pas de stage (image de quai) associé à l'OS**. Sans ce garde-fou, les palettes bloquent aux PS car les AGV n'ont pas de destination pour effectuer le mouvement (commit `0aec1c3b`). Le stage est posé par [LIM-94](assignation-image-quai.md) |
### Règle de filtrage
Le filtre ne bloque que les **sorties d'expédition** : une palette d'un
STOP donné ne sort vers l'image de quai que si tous les STOP supérieurs
sont déjà arrivés en station DockStage. En revanche, les **sorties de
palettes picking restent toujours autorisées** pour permettre le
prélèvement anticipé : le picking n'est jamais bloqué par le
séquençage.
## Flux fonctionnel
```mermaid
@@ -149,7 +186,7 @@ sequenceDiagram
|----|--------------|------------------|
| CT-01 | RUT mono-STOP, 3 PC dans ASRS, quai assigné | 3 tâches shipping, palettes partent vers image de quai |
| CT-02 | RUT multi-STOP (1, 2, 3), 2 PC chacun, quai assigné | 6 tâches. Stacker crane exécute STOP 3, puis 2, puis 1 |
| CT-03 | RUT multi-STOP, picking terminé avant libération, toutes PF revenues | Identique à CT-02 PF ou PC, même logique |
| CT-03 | RUT multi-STOP, picking terminé avant libération, toutes PF revenues | Identique à CT-02 - PF ou PC, même logique |
### Cas limites (cœur du custom)
@@ -173,7 +210,7 @@ sequenceDiagram
| CT-09 | 2 RUT en parallèle, quais distincts | Ordonnancement indépendant par RUT. Pas de fuite de tri |
| CT-11 | RUT A avec quai, RUT B sans quai | RUT A traité par ce custom. RUT B relève de LIM-87 (défrag). Vérifier absence d'interférence |
| CT-12 | SOR ajouté à un RUT en cours d'exécution | Nouvelles palettes s'insèrent dans l'ordre STOP. Si picking nécessaire → PF reviendront à l'ASRS |
| CT-13 | Bascule de quai en cours de tournée | **À définir en recette.** Tâches restantes regénérées vers nouveau quai. Palettes déjà à l'ancien quai → traitement manuel |
| CT-13 | Bascule de quai en cours de tournée | **Scénario exclu** : on ne peut pas changer le quai une fois la RUT libérée (contrainte WMS, note dev revue de code). Une rebascule relève d'une opération manuelle exceptionnelle, hors périmètre custom |
### Stock reassign au picking
@@ -184,25 +221,31 @@ sequenceDiagram
## Points d'attention
⚠️ Le custom de tri multi-TK reprend un **pattern Bardinet** ne pas
⚠️ Le custom de tri multi-TK reprend un **pattern Bardinet** - ne pas
réinventer le mécanisme.
⚠️ Le retour systématique des PF vers l'ASRS (pas de crossdock) est
le comportement standard attendu mais **doit être validé en recette**.
⚠️ La bascule de quai en cours de tournée (CT-13) n'est pas couverte
par le custom — les palettes déjà à l'image de quai de l'ancien quai
sont à traiter manuellement.
⚠️ La bascule de quai en cours de tournée (CT-13) est **impossible** :
le quai ne peut pas être changé une fois la RUT libérée. Une rebascule
serait une opération manuelle exceptionnelle, hors périmètre custom.
⚠️ Les tâches de chargement ne doivent jamais être générées sans image
de quai associée à l'OS, sinon les palettes bloquent aux PS (les AGV
n'ont pas de destination). Garde-fou porté par
`Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`.
## Questions ouvertes
- [ ] Retour PF vers ASRS (CT-08) : confirmer que le standard crée
- Retour PF vers ASRS (CT-08) : confirmer que le standard crée
bien une tâche de rangement quand pas de route vers l'image de quai.
Sinon custom de secours nécessaire. (@Nicolas)
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
- [ ] Bascule de quai en cours de tournée (CT-13) : définir le
comportement attendu pour les palettes déjà à l'ancien quai.
(@Justine)
- [x] ~~Bascule de quai en cours de tournée (CT-13) : définir le
comportement attendu pour les palettes déjà à l'ancien quai.~~
**Résolu** (note dev, revue de code) : on ne peut pas changer le
quai une fois la RUT libérée. Scénario exclu du custom.
→ voir [Questions ouvertes](../08-transverse/questions-ouvertes.md)
## Historique des modifications
@@ -210,11 +253,14 @@ sont à traiter manuellement.
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-88 |
| 2026-07-17 | Arthur | Ajout implémentation définitive (revue de code 02/06 : query `CST_Tasks_PendingOutboundForStackerCrane`, WF `StackerCrane_GetOutboundPendingTasks_PR` + `Outbound_CreateShippingOrLoadTasksToDockOrStage_PR`, règle picking toujours autorisé) ; statut préprod ; résolution CT-13 (quai non modifiable après libération RUT) |
| 2026-07-17 | Arthur | Cross-ref LIM-94 (assignation auto de l'image de quai / stage `X_EXP` dont dépend le garde-fou de chargement) ; jira_refs +LIM-94 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira | 2026 |
| [LIM-88](https://easywmsfrance.atlassian.net/browse/LIM-88) | Ticket Jira (statut préprod / test client) | 2026 |
| Revue de code LIM-88 (M. Halgand, V. Charvet, N. Chabanis) | Revue de code validée, commit `0aec1c3b` | 2026-06-02 |
| Expédition - LIMAGRAIN - DEV | Page Confluence | 2026 |
| Projet Bardinet | Pattern custom stacker crane multi-TK | |
| Projet Bardinet | Pattern custom stacker crane multi-TK | - |
+98 -17
View File
@@ -1,16 +1,16 @@
---
title: "Ordres de sortie Types et libération"
title: "Ordres de sortie - Types et libération"
tags: [outbound, OS, SOR, RUT, libération, assignation, FIFO, LOC]
status: draft
standard_ref: concepts/order-outbound.md
jira_refs: []
jira_refs: [LIM-109, LIM-110]
confluence_refs: ["Expédition - LIMAGRAIN - DEV"]
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md"]
last_updated: 2026-05-06
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "CR CONSOLIDES REU ERP LIMAGRAIN V1 - CR.md", "Jira LIM-109 (lecture directe 2026-07-20)", "Jira LIM-110 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Ordres de sortie Types et libération
# Ordres de sortie - Types et libération
> **Résumé** : 4 types d'ordres de sortie chez Limagrain, avec des
> comportements de libération, d'assignation et de préparation distincts.
@@ -51,6 +51,29 @@ re-certification. Le message d'entrée diffère selon le type.
- Chaque OS peut avoir plusieurs **lignes** (article + quantité)
- Chaque palette est étiquetée et ordonnancée par **n° STOP**
## [CUSTOM] Lot obligatoire sur les lignes d'OS (LIM-109)
> **Statut (LIM-109)** : dev terminé, en attente de déploiement pour test.
> Revue de code validée (Maxime, 29/06/2026).
La création d'un ordre de sortie ou d'une **ligne d'OS** est **interdite si
l'attribut logistique lot n'est pas renseigné**. Le lot est indispensable à
l'assignation de stock (critère « article/lot SAP », voir
[Assignation de stock](#assignation-de-stock)) : une ligne sans lot ne
pourrait jamais être servie.
Le contrôle est posé par une **subscription en Preview** sur l'event de
création de ligne d'OS, qui lève une **exception** si le lot est vide. Combiné
à `TransactionalLineList = true` (voir
[Paramètres ERP](#paramètres-erp-des-sorrut)), le refus est **total** : tout
l'import de l'OS est rejeté.
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_OutboundOrderLineCreated_CheckLotRequired_PRE` | Subscription | En **Preview** sur l'event de création de ligne d'OS ; appelle le WF de contrôle. |
| `CST_OutboundOrderLineCreated_CheckLotRequired_PRE_PR` | Workflow | Lève une exception si le lot n'est pas renseigné sur la ligne. |
| `CST_OutboundOrderLineCreation_MissingLot` | Ressource i18n | Message d'erreur « lot manquant ». |
## Paramètres ERP des SOR/RUT
| Paramètre | Valeur | Commentaire |
@@ -62,7 +85,7 @@ re-certification. Le message d'entrée diffère selon le type.
| CompleteSorList (RUT) | true | SOR absents de la RUT = supprimés |
| AllowAssignStockExcess | true | Palettes pleines, jamais de picking partiel |
| Limite d'annulation | Statut "Chargé" | Avant = OK, après = refusé |
| IgnoreNulls (RUT) | false | |
| IgnoreNulls (RUT) | false | - |
## Gestion des ruptures SOR Production
@@ -76,9 +99,63 @@ manuel.
## Quai recertification
Pour les SOR de type recertification :
`AssignedDockStationCode = "QUAI_RECERTIFICATION"` (quai fictif, renseigné
par Limagrain dans le SOR).
> **Statut (LIM-110)** : en cours de test client (pré-production). Revue de
> code validée (Maxime, 03/07/2026).
Le quai de recertification (`QUAI_RECERTIFICATION`, code porté par le
paramètre `RECERTIFICATION_CODE_QUAI`) est **assigné automatiquement** par le
WMS :
- à la **création** d'un OS de classe RECERTIFICATION
(`OutboundOrder_OutboundOrderCreatedEventHandler_PR`) ;
- à l'**édition** d'un OS auquel on ajoute la classe RECERTIFICATION (ajout
Vincent 09/07/2026).
Ce quai est **réservé à ce process**. Le **changement manuel** du quai
(assignation ou dé-assignation) est **empêché** : les boutons correspondants
sont masqués dans la vue `OutboundOrderVList` pour les OS de recertification.
> **Évolution vs V1** : le quai fictif `QUAI_RECERTIFICATION` était auparavant
> renseigné par Limagrain **dans le SOR**. Il est désormais posé
> **automatiquement** par le WMS (LIM-110).
Ce quai n'est **pas** géré par le job d'assignation des images de quai X_EXP
(LIM-94), qui **exclut** la classe Recertification (voir
[Assignation image de quai](assignation-image-quai.md)).
### Stratégie d'assignation de stock RECERTIFICATION (LIM-110)
Une stratégie d'assignation de stock spécifique, **« expédition uniquement des
supports complets »**, est forcée pour les OS de classe RECERTIFICATION :
- La stratégie (code `RECERTIFICATION`) est **toujours désactivée** en
configuration : elle n'est jamais choisie par le mécanisme standard.
- Lors de l'assignation de stock d'un OS de recertification, le choix est
**forcé** sur cette stratégie
(`StockAssignProcess_GetStockAssignStrategies_PR`).
- Le flag `AllowPick` est **forcé à `false`**
(`StockAssignProcess_GetStockToAssignForStrategy_PR`) : supports complets
uniquement, pas de picking.
- La stratégie est identifiée par une **balise `[XXX]`** dans son code, avec
`XXX = RECERTIFICATION_CODE_QUAI` ; la query
`CST_StockAssignStrategyV2_Recertification` récupère les stratégies portant
ce tag.
> ⚠️ La description du ticket indique que `RECERTIFICATION_CODE_QUAI` sert
> aussi à **identifier les OS de classe recertification** ; à relier au
> paramètre `RECERTIFICATION_CODE_CLASSE` (LIM-105) qui porte déjà ce rôle -
> voir [questions ouvertes](../08-transverse/questions-ouvertes.md).
| Élément AD | Type | Rôle |
|------------|------|------|
| `OutboundOrder_OutboundOrderCreatedEventHandler_PR` | Workflow | À la création d'un OS de recertification, assigne automatiquement le quai (paramètre `RECERTIFICATION_CODE_QUAI`). |
| `StockAssignProcess_GetStockAssignStrategies_PR` | Workflow | Filtre les stratégies d'assignation de stock à appliquer pour les OS de recertification. |
| `StockAssignProcess_GetLockAndUpdateDetail_PR` | Workflow | Récupère l'`OutboundClassCode`. |
| `StockAssignProcess_GetStockToAssignForStrategy_PR` | Workflow | Force `AllowPick = false` pour les ordres de recertification. |
| `OutboundOrderVList` | Vue | Masque les boutons d'assignation / dé-assignation de quai pour les OS de recertification. |
| `CST_StockAssignStrategyV2_Recertification` | Query | Récupère les stratégies dont le code contient le tag `[code classe recertification]`. |
| `OutboundOrder_CreatedEvent` | Subscription | Ajout du paramètre `OutboundClassCode`. |
| `RECERTIFICATION_CODE_QUAI` | Paramètre | Code du quai recertification / balise `[XXX]` de la stratégie. Voir [Paramètres projet](../07-admin/parametres-projet.md). |
## Libération
@@ -125,12 +202,12 @@ Filtres appliqués :
Dans l'ordre de priorité :
1. **Article/lot SAP + attributs logistiques** spécifiés dans le SOR/RUT
2. **Économie de mouvement** (minimum de mouvements) **prioritaire**
2. **Économie de mouvement** (minimum de mouvements) - **prioritaire**
3. **FIFO sur 24h** : standard confirmé. Les palettes reçues le même jour
ont le même FIFO (heures/minutes ignorées), ce qui permet de prendre
la palette la plus accessible dans un canal. Pas de FIFO strict
infra-journalier.
4. **Pas de FEFO** la proposition initiale de faire du FEFO sur du stock
4. **Pas de FEFO** - la proposition initiale de faire du FEFO sur du stock
sans DLC est **abandonnée**. Il n'y a pas de date d'expiration sur les
produits. Le FIFO journalier est retenu.
5. **Maximum palettes complètes** puis palettes incomplètes (avec picking)
@@ -169,7 +246,7 @@ Dans l'ordre de priorité :
- [CUSTOM] Stratégie d'assignation excluant les supports multi-lignes
(= mono-ref uniquement). Combiné avec AllowAssignStockExcess → shipping
sans picking.
- Stock assigné directement déposé sur l'image de quai aucun passage
- Stock assigné directement déposé sur l'image de quai - aucun passage
poste de travail
- Ruptures de stock ne bloquent pas l'expédition. Le client utilise
`isCritical` / `isRequired` au niveau SOR.Line si besoin.
@@ -179,7 +256,7 @@ Dans l'ordre de priorité :
- Stock assigné mais **aucune tâche** tant que poste de travail non assigné
- Le PK doit être passé en **mode recertif** (par le manager)
- Flux détaillé en 11 étapes voir
- Flux détaillé en 11 étapes - voir
[Re-certification](flux-expedition.md#re-certification)
### Messagerie carton
@@ -188,7 +265,7 @@ Dans l'ordre de priorité :
- Tous les OS de la RUT préparés **simultanément** sur un seul poste
- Tri par transporteur (l'opérateur ne dépose que sur une seule palette)
- Consolidation sur palette unique avec supports carton identifiés
- Pas d'image de quai emplacement au sol dédié par transporteur
- Pas d'image de quai - emplacement au sol dédié par transporteur
- [CUSTOM] À l'import du SOR, vérification combo shipping class code +
transporteur → si OK, poumon associé automatiquement
- Voir [Messagerie carton](flux-expedition.md#messagerie-carton)
@@ -211,11 +288,11 @@ Possible depuis EasyWMS avec choix de destination :
## Points d'attention
⚠️ La libération automatique est le mode principal la date est dans le
⚠️ La libération automatique est le mode principal - la date est dans le
message ERP.
⚠️ L'assignation spécifie **toujours** les 4 critères (article, lot SAP,
propriétaire, statut) pas d'assignation « ouverte ».
propriétaire, statut) - pas d'assignation « ouverte ».
⚠️ Le FIFO est à la **journée** (palettes du même jour = même rang FIFO),
avec l'**économie de mouvement** prioritaire sur le FIFO. Pas de FEFO.
@@ -224,7 +301,7 @@ avec l'**économie de mouvement** prioritaire sur le FIFO. Pas de FEFO.
possible **un canal dédié par route/STOP**.
⚠️ Le custom de défragmentation attend que toutes les palettes de picking
soient terminées et retournées dans l'ASRS avant de lancer les relocs
soient terminées et retournées dans l'ASRS avant de lancer les relocs -
c'est le développement clé du flux outbound.
## Historique des modifications
@@ -234,6 +311,8 @@ c'est le développement clé du flux outbound.
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Enrichissement : 5 types OS, FIFO 24h, pas de FEFO, custom défrag, conso OF détaillé, messagerie carton |
| 2026-05-06 | Arthur | Ajout classifications, paramètres ERP, ruptures production, quai recertif (CR consolidé) |
| 2026-07-20 | Arthur | LIM-109 (lecture directe, attente déploiement test, revue validée 29/06) : section [CUSTOM] Lot obligatoire sur les lignes d'OS (subscription Preview `CST_OutboundOrderLineCreated_CheckLotRequired_PRE` → WF exception si lot vide, ressource `CST_OutboundOrderLineCreation_MissingLot`, refus total via TransactionalLineList) ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | LIM-110 (lecture directe, pré-production, revue validée 03/07) : refonte section Quai recertification (assignation auto du quai à la création ET à l'édition d'un OS recertif, blocage du changement manuel via OutboundOrderVList, param `RECERTIFICATION_CODE_QUAI`, évolution vs V1 renseigné dans le SOR, exclusion LIM-94) + sous-section Stratégie d'assignation de stock RECERTIFICATION (supports complets uniquement, forcée, toujours désactivée, AllowPick=false, tag `[XXX]`, query `CST_StockAssignStrategyV2_Recertification`) ; table AD ; caveat param QUAI vs CLASSE |
## Références
@@ -242,3 +321,5 @@ c'est le développement clé du flux outbound.
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| CR CONSOLIDES REU ERP LIMAGRAIN V1 | CR ateliers interfaçage | 23/02/2026 |
| [LIM-109](https://easywmsfrance.atlassian.net/browse/LIM-109) | Ticket Jira (interdire lignes d'OS sans lot - attente déploiement test) | 2026 |
| [LIM-110](https://easywmsfrance.atlassian.net/browse/LIM-110) | Ticket Jira (quai recertification auto + stratégie assignation stock - pré-production) | 2026 |