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 |