màj wiki avec retour MES lot-5 AD

This commit is contained in:
Arthur Ria
2026-05-20 09:41:27 +02:00
commit 23eb3f3c84
4106 changed files with 469381 additions and 0 deletions
@@ -0,0 +1,148 @@
---
title: "Consolidation (regroupement) — Processus sur poste"
tags: [picking, regroupement, consolidation, MOV, poste, custom]
status: draft
standard_ref: concepts/picking.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
author: Arthur
---
# Consolidation (regroupement) — Processus sur poste
> **Résumé** : processus [CUSTOM] de consolidation de palettes incomplètes
> partageant les mêmes critères de stock, sur poste de travail.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Le regroupement permet de vider des palettes partiellement remplies en
déplaçant leur stock vers d'autres palettes contenant le même stock.
L'objectif est de libérer des emplacements dans l'ASRS.
## Critères de consolidation
Le regroupement est proposé quand deux palettes ou plus partagent :
- Article
- Lot SAP
- Propriétaire
- Statut de stock
- Flag anoxie
## [CUSTOM] Vue de proposition de regroupement
Une vue spécifique est développée pour Limagrain. Elle présente :
- Les palettes candidates au regroupement
- Le gain potentiel en nombre de palettes
**Règle** : le regroupement n'est proposé que s'il permet de gagner au
moins 1 palette. Exemple : Bag/Pal = 75, si palette H1 = 73 et H2 = 5
→ pas de regroupement (73 + 5 = 78 > 75, pas de gain).
L'opérateur sélectionne un ou plusieurs ordres de regroupement depuis
cette vue.
## Processus complet
```mermaid
flowchart TD
VUE[Vue proposition regroupement] --> SELECT[Sélection ordres]
SELECT --> ASSIGN[Assignation poste automatique]
ASSIGN --> TACHE[Création tâches mouvement]
TACHE --> ORD[Ordonnancement palettes au poste]
ORD --> VERROU{Verrou « Réception » ?}
VERROU -->|Oui| RECOUNT[Recomptage]
VERROU -->|Non| PICK[Déplacement sacs]
RECOUNT --> PICK
PICK --> VIDE{Palette vidée ?}
VIDE -->|Oui| DEGAGE[Dégagement palette vide]
VIDE -->|Non| PICK
DEGAGE --> EVAC[Évacuation palette stock]
EVAC --> FILM[Choix filmage]
FILM --> PIE[Passage PIE]
PIE --> STOCK[Stockage ASRS]
```
## Assignation poste de travail
- Assignation **automatique** quand un ordre est lancé
- [CUSTOM] Si le lot a un Bag/Pal ≤ 2 → considéré « big-bag » →
seul le **poste P6** (équipé d'un palan) est assignable
- Un big-bag ne peut être consolidé que sur un autre big-bag
- Si P6 n'est pas en mode regroupement → tâche en attente
- Si aucun poste disponible → ordre en attente de libération
## [CUSTOM] Ordonnancement des palettes au poste
Une fois l'ordre lancé et le poste assigné, les palettes arrivent dans
cet ordre :
1. **Minimum de mouvements palette** (moins de déplacements physiques)
2. **Minimum de mouvements sac** (moins de manipulations)
3. **Palette complète** (en priorité la palette destinataire)
## Exécution sur poste
1. [CUSTOM] Si verrou « Réception » → recomptage avant regroupement
2. Les sacs de la palette à éliminer sont déplacés vers la palette
destinataire
3. Quand la palette est vidée → dégagement de la table de préparation
4. Évacuation de la palette avec stock restant via bouton EasyWMS
5. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
6. [CUSTOM] Message **MOV** à chaque déplacement de stock :
- Palette d'origine
- Palette de destination
- Nouvelle palette ? (Oui/Non)
- Quantité + caractéristiques (article, lot SAP, ...)
## Passage PIE post-regroupement
Contrôle identique aux autres processus :
- Dimensions max : 1300 × 1100 × 1900 mm
- Poids max : 1250 kg
- État palette bois correct
- Étiquette RFID connue
[CUSTOM] Calcul poids de référence :
```
Poids réf = Σ (Poids_unité_ligne_i × quantité_ligne_i) + poids_palette_bois
```
Vérification avec tolérance par type d'article (voir
[Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
## Points d'attention
⚠️ Le message MOV est envoyé à chaque mouvement unitaire — volumétrie
potentiellement élevée pour un regroupement complexe.
⚠️ Les 3 tables de préparation d'un même poste peuvent être occupées
simultanément pendant le regroupement.
⚠️ Un big-bag ne peut être consolidé que sur un autre big-bag (contrainte
physique + système).
## Questions ouvertes
- [ ] Programme de filmage exact pour le regroupement (@Théo)
- [ ] Interface opérateur vue regroupement — maquette validée ? (@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
@@ -0,0 +1,145 @@
---
title: "Échantillonnage — Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom]
status: draft
standard_ref: concepts/inventory.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
author: Arthur
---
# Échantillonnage — Processus de contrôle qualité
> **Résumé** : processus [CUSTOM] d'échantillonnage pour contrôle qualité,
> assimilé à un inventaire dans EasyWMS, avec prélèvement sur poste de travail.
> **Standard EasyWMS** : → voir [Inventory](../../concepts/inventory.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
L'échantillonnage sert au contrôle qualité sur une partie des lots
produits. Il consiste à prélever environ 200 grammes dans une partie du
stock sélectionné. Le prélèvement est ensuite analysé pour valider la
qualité du produit fini.
Dans EasyWMS, ce processus est assimilé à un **inventaire** (ordre
d'inventaire).
## Création de l'ordre d'échantillonnage
Deux modes de création :
| Mode | Origine | Détail |
|------|---------|--------|
| Interface ERP | Message de l'ERP (COR) | Spécifie un lot à inventorier |
| Manuel | Interface EasyWMS | Choix d'un lot par l'opérateur |
[CUSTOM] Un champ texte est disponible pour donner des **consignes**
rattachées à l'ordre d'inventaire.
## [CUSTOM] Assignation du stock
L'assignation diffère selon le mode de création :
### Création par interface ERP
- Maximum **4 palettes** échantillonnées :
- Si stock global < 4 → toutes les palettes
- Si stock global ≥ 4 → 4 palettes sélectionnées
- [CUSTOM] Les palettes avec un verrou d'écart de poids (« Production »)
sont **prioritaires** pour permettre une vérification simultanée
### Création manuelle
- Nombre de palettes choisi par l'opérateur
## Assignation poste de travail
- Automatique, à condition que le poste soit ouvert et autorise le
mode « échantillonnage »
- Si aucun poste paramétré en mode échantillonnage → tâches en attente
- Une fois le poste assigné → création des tâches de mouvement
## Processus sur poste de travail
```mermaid
flowchart TD
ORDRE[Ordre échantillonnage] --> ASSIGN[Assignation stock]
ASSIGN --> POSTE[Assignation poste auto]
POSTE --> TACHE[Tâches mouvement créées]
TACHE --> ARRIVE[Palette arrive sur TP]
ARRIVE --> VERROU{Verrou « Réception » ?}
VERROU -->|Oui| RECOUNT[Recomptage]
VERROU -->|Non| PRELEV[Prélèvement ~200g]
RECOUNT --> PRELEV
PRELEV --> ETIQ[Impression étiquette échantillonnage]
ETIQ --> SCOTCH[Scotch sac ouvert]
SCOTCH --> FILM[Choix filmage]
FILM --> EVAC[Évacuation → PIE → stockage]
EVAC --> NEXT{Palette suivante ?}
NEXT -->|Oui| ARRIVE
NEXT -->|Non| FIN[Fin ordre]
```
Les 3 tables de préparation peuvent être occupées simultanément.
Le processus est démarré et effectué sur **une seule palette à la fois**.
### Séquence opérateur
1. [CUSTOM] Si verrou « Réception » → recomptage avant échantillonnage
2. Prendre une pochette d'échantillonnage vide (hors EasyWMS)
3. Effectuer un prélèvement dans un des sacs (~200g, hors EasyWMS)
4. Déposer le prélèvement dans la pochette (hors EasyWMS)
5. Éditer et imprimer une **étiquette d'échantillonnage**
6. Coller l'étiquette sur la pochette (hors EasyWMS)
7. Scotcher le sac ouvert sur la palette (hors EasyWMS)
8. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
9. Évacuer la palette vers le stockage
## Passage PIE post-échantillonnage
Contrôle identique aux autres processus :
- Dimensions max : 1300 × 1100 × 1900 mm
- Poids max : 1250 kg
- Étiquette RFID connue
- État palette bois correct
[CUSTOM] Poids de référence recalculé + vérification avec tolérance
(voir [Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
Si PIE NOK → rejet vers poste d'origine. Possibilité de forcer le
passage en cas d'excédent de poids non corrigeable.
## Points d'attention
⚠️ L'échantillonnage est un processus d'**inventaire** dans EasyWMS,
pas un processus de picking — important pour le paramétrage des modes
de poste.
⚠️ Les palettes avec verrou « Production » (écart poids) sont traitées
en priorité pour optimiser le recomptage.
⚠️ La quantité prélevée (~200g) n'est pas déduite du stock dans EasyWMS
(négligeable par rapport au poids total).
## Questions ouvertes
- [ ] Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)
- [ ] Programme de filmage exact (@Théo)
- [ ] Format de l'étiquette d'échantillonnage — validé ? (@Justine)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
@@ -0,0 +1,211 @@
---
title: "Mega Job — Assignation des tâches aux PK"
tags: [picking, job, assignation, agv, workflow]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80]
confluence_refs: []
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md"]
last_updated: 2026-05-12
author: Arthur
---
# Mega Job — Assignation des tâches aux PK
> **Résumé** : job unique « chef d'orchestre » qui analyse les postes de
> travail éligibles et leur assigne des tâches de mouvement selon les
> modes autorisés et leur priorité. Évite la concurrence entre
> mini-jobs indépendants.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md),
> [Stations & Routes](../../concepts/stations.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Chez Limagrain, les postes de travail (PK) sont polyvalents : réception,
picking, regroupement, échantillonnage, re certification. Plusieurs
flux différents génèrent des tâches de mouvement vers les PK. Sans
orchestration centralisée, ces flux se feraient concurrence.
Le Mega Job est un **job unique** avec une entête qui analyse l'ensemble
des supports concernés et, selon leur emplacement d'origine et leurs
caractéristiques, délègue à des **sous-workflows** dédiés.
## Éligibilité d'un PK
Pour qu'un poste soit éligible à une nouvelle assignation, **toutes** les
conditions suivantes doivent être remplies :
- **Aucun ordre de sortie** assigné au PK (écran Menu > Contrôle >
Affectation des postes de prélèvements)
- **Aucune tâche de mouvement** ayant pour destination ce PK
- **Aucune palette** présente sur un des sous-emplacements du PK
- **Le poste est ouvert** (mode actif)
- **Le paramètre MODES_PKxx existe et n'est pas vide** — sinon le PK
est ignoré
Si un PK ne remplit pas ces conditions, le job le saute et passe au
suivant.
## Logique principale
```mermaid
flowchart TD
A[Début du job] --> B[Lister les PK ouverts]
B --> C{PK éligible ?}
C -- Non --> D[PK suivant]
C -- Oui --> E[Lire MODES_PKxx]
E --> F{Paramètre existe et non vide ?}
F -- Non --> D
F -- Oui --> G[Trier les modes par priorité]
G --> H[Exécuter sous-WF du mode priorité 1]
H --> I{Tâche assignée ?}
I -- Oui --> D
I -- Non --> J[Exécuter sous-WF du mode priorité 2]
J --> K{Tâche assignée ?}
K -- Oui --> D
K -- Non --> L[... mode suivant ...]
L --> D
D --> M{Autres PK ?}
M -- Oui --> C
M -- Non --> N[Fin du job]
```
Pour chaque PK éligible :
1. Le WMS récupère le paramètre `MODES_PKxx` (x = numéro du poste)
2. Les modes sont triés par priorité croissante
3. Le sous-workflow du mode de priorité la plus haute est exécuté
4. Si le sous-WF a assigné une tâche → passage au PK suivant
5. Sinon → exécution du sous-WF du mode suivant dans l'ordre de priorité
6. Si aucun sous-WF n'a rien assigné → le PK reste en attente
## Gestion des Big-Bags
Le paramètre `PK_BIGBAG` définit quels PK autorisent la présence de
big-bags (physiquement : P5 et P6 avec palan).
- Les ordres contenant des supports big-bag sont **interdits** sur les
PK qui ne les autorisent pas
- Ces ordres sont **prioritaires** (en respectant le séquençage des
process en première priorité) sur les PK qui les autorisent
## Sous-workflows
Le Mega Job délègue la création effective des tâches à des sous-workflows
spécialisés :
| Sous-WF | Ticket | Process | Page wiki |
|---------|--------|---------|-----------|
| Mini Job images de quai → PK | [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Réception fournisseur / intersite / retour client (depuis images de quai) | [Job réception PK](../05-agv/job-reception-pk.md) |
| Mini Job PS → PK | [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | _(tâche à écrire)_ | — |
| Mini Job assignation commandes → PK | [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Assignation des ordres de sortie (commandes) aux PK pour picking | Voir section ci-dessous |
Chaque sous-workflow retourne une information au WF principal indiquant
s'il a assigné quelque chose ou non.
## Mini Job — Assignation commandes aux PK (LIM-80)
Ce sous-workflow est appelé par le Mega Job quand le mode **Picking** est
actif sur un PK. Il assigne un ordre de sortie (commande) au poste.
### Éligibilité du PK pour une commande
Le PK peut recevoir une commande si **toutes** les conditions sont
remplies :
- Le PK **autorise la préparation de commande** (mode Picking actif)
- Le PK **n'a pas de commande déjà assignée**
- Le PK **est vide** (aucune palette présente)
- Le PK **n'a aucune tâche en direction de celui-ci**
### Choix de la commande
```mermaid
flowchart TD
A[PK éligible en mode Picking] --> B{Commande Messagerie\ndisponible ?}
B -- Oui --> C{PK_TRANSPORTEUR_MESSAGERIE\ncontient une valeur ?}
C -- Non --> D[Assigner 1ère Messagerie\net enregistrer PK dans param]
C -- Oui --> E{Valeur = ce PK ?}
E -- Oui --> F[Assigner prochaine Messagerie\ndu même transporteur]
F --> G{Commande trouvée ?}
G -- Non --> H[Vider le paramètre]
E -- Non --> I[Ignorer les Messagerie\nde ce transporteur]
I --> J[Chercher autre commande]
B -- Non --> J
H --> J
J --> K[Assignation standard\npar tournée / numéro d'arrêt]
```
#### Commandes Messagerie (prioritaires)
Les commandes de **classe Messagerie** sont expédiées le jour même et
sont donc **prioritaires** sur les autres commandes.
**Affinité transporteur ↔ PK** : une fois qu'un PK est choisi pour une
commande Messagerie, **toutes les commandes Messagerie du même
transporteur** doivent être assignées au même PK. Le mécanisme repose
sur un paramètre par transporteur :
- `PK_TRANSPORTEUR_MESSAGERIE` : contient le code du PK assigné
- Si le paramètre contient une valeur correspondant au PK analysé →
assigner la prochaine commande Messagerie de ce transporteur
- Si la valeur correspond à un **autre PK** → ignorer toutes les
Messagerie de ce transporteur pour ce PK
- Si le PK a le paramètre mais qu'**aucune commande** Messagerie de ce
transporteur n'est trouvable → **vider le paramètre**
- Si le paramètre contient le nom du PK → le PK ne peut assigner **que**
des Messagerie de ce transporteur (exclusivité tant que le
paramètre est actif)
#### Autres commandes (standard)
Le processus standard est utilisé : assignation d'une commande à une
table de préparation et un PK, en respectant l'ordre de la **tournée**
(numéro d'arrêt croissant — plus petit numéro d'arrêt en premier).
## Paramètres
| Paramètre | Description | Valeur par défaut |
|-----------|-------------|-------------------|
| MODES_PKxx | Modes autorisés + priorité pour le PK xx (un par PK, renseigné via la vassist — voir [Stations picking](stations-picking.md)) | _(vide)_ |
| PK_BIGBAG | PK autorisant les big-bags | _(à définir — P5, P6)_ |
| PK_TRANSPORTEUR_MESSAGERIE | Code PK assigné au transporteur Messagerie en cours (un paramètre par transporteur) | _(vide)_ |
## Points d'attention
> **À reprendre par @Michael** : l'entête du job doit checker tous les
> PK en attente de tâche, vérifier leurs modes autorisés et la séquence
> de priorité pour entrer dans le sous-WF nécessaire.
- Le job standard `Task_GenerateMovementJob_PR` gère le passage
"en attente" → "créé" ; le Mega Job ne remplace pas ce mécanisme
mais crée les tâches en amont
- Un PK fermé n'est jamais éligible — le job le vérifie dès la première
condition
## Questions ouvertes
- [ ] Fréquence d'exécution du Mega Job à définir (@Michael)
- [ ] Sous-WF pour regroupement, échantillonnage : tickets à créer ?
- [ ] Interaction entre PK_BIGBAG et les modes : si P5 est en mode
regroupement, accepte-t-il quand même les big-bags en réception ?
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-70 |
| 2026-05-12 | Arthur | Ajout sous-WF assignation commandes (LIM-80) |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira | 2026 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira | 2026 |
| [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | Ticket Jira | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (modes PK) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation commandes PK) | 2026 |
@@ -0,0 +1,307 @@
---
title: "Picking sur poste de travail — Expédition client"
tags: [picking, poste, expédition, ordonnancement, MOV, PCK]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-82]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-82 LOT2.2 [PICKING] Ordonnancement des tâches de picking PS PK.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
author: Arthur
---
# Picking sur poste de travail — Expédition client
> **Résumé** : processus [CUSTOM] de picking sur poste de travail pour
> les commandes client, avec ordonnancement par espèce, règles de picking
> négatif et contraintes physiques.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Le picking chez Limagrain se fait sur les postes de travail automatisés
(pas de picking mobile en allée). Les palettes source et les palettes
de préparation sont acheminées par AGV sur les tables de préparation (TP).
> **Note** : cette page décrit le picking tel que défini dans l'AF V1.5.
> Le projet a depuis évolué vers un modèle « picking combinatoire »
> (CR V3.0, 4 jobs, CstAtt) qui sera documenté séparément.
## Déclenchement
Le picking est déclenché pour les commandes client (RUT type « Client »)
quand des palettes incomplètes sont nécessaires (la quantité demandée
ne correspond pas à des palettes complètes).
Prérequis : un **poste de travail assigné** (auto ou manuellement).
## [CUSTOM] Ordonnancement des palettes au poste
Une fois le poste assigné, les palettes arrivent dans cet ordre :
### Tri par espèce et gerbabilité
1. **Espèce Maïs** toujours en premier (pas la variété mais l'espèce)
2. Puis espèce avec la **plus grande quantité** dans la commande
3. Si égalité → **article/lot le plus lourd** en base de palette
**Mapping Espèce → stack (gerbabilité)** : le maïs = stack 0 (le plus
lourd/stable, donc en base). [CUSTOM] Gestion en **async sur l'ITM** pour
calculer la gerbabilité automatiquement à la création de l'article. Tri
des tâches de picking dans le workflow `StackerCrane_SortTasks_PR`.
### ~~Séparation par traitement commercial~~ SUPPRIMÉ (réu. 11/05/2026)
~~Pas de mélange entre articles avec traitement et sans traitement
sur une même palette fille.~~
**Décision** : `CONTROLE_TRAITEMENT_COMMERCIAL = false`. L'entrepôt
Limagrain ne fait pas de bio, pas de raison de maintenir cette
contrainte. Paramètre réactivable si besoin futur.
> Voir [Séquençage TK → PS — Arbitrage](sequencage-tk-ps.md#arbitrage-des-contradictions-reu-11052026)
> pour le détail de l'analyse comparative.
## [CUSTOM] Règle du picking négatif
**Deux conditions cumulatives** (réu. 11/05/2026) :
1. La quantité à prélever dépasse le **seuil fiche article** (défaut
55%, paramétrable par article via "Complete quantity percent excess
for negative picking")
2. Le **poids unitaire du sac ≥ 7 kg** (raison : instabilité palette si
gros sacs ramenés sur petits sacs)
Si les deux conditions sont remplies → **picking négatif** : au lieu de
déplacer les sacs à expédier, déplacer les sacs qui **retourneront en
stock** (moins de mouvements physiques).
Si l'une des deux conditions n'est pas remplie → picking direct
classique.
> Le picking négatif est **prioritaire sur Maïs first** et toutes les
> autres règles de tri (confirmé par Olivier, réu. 11/05/2026).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1--picking-négatif-en-premier).
## [CUSTOM] Calcul équivalent palette (pro rata Bag/pal)
Pour déterminer si une palette est « pleine », calcul en **pro rata
Bag/pal** (réu. 11/05/2026, remplace la logique DevOps "Bag/pal max") :
```
Équivalent palette d'un sac = 1 ÷ Bag/Pal de son lot
```
Le calcul est additif et gère nativement des lots avec des Bag/pal
différents sur une même palette :
```
Exemple :
15 sacs lot Bag/pal 20 + 10 sacs lot Bag/pal 75
= 15/20 + 10/75
= 0,75 + 0,133
= 88,3% → il reste ~12% de place
```
Seuil cible : **~95%** de remplissage (marge de sécurité).
Poids max palette : **1 250 kg** (AF fait foi, corrige 1 200 kg du
DevOps).
## [CUSTOM] Verrou « HORS TOLERANCE » — Recomptage
Si la palette source porte le verrou « HORS TOLERANCE » → recomptage
demandé avant le picking (inventaire).
- Si stock restant suffisant après inventaire → assignation maintenue
(workflow `OnStockAdjust` recalcule uniquement si nécessaire — ne casse
pas la tâche en cours)
- Si plus assez de stock → réassignation ailleurs + retrait verrou
## [CUSTOM] Algorithme de répartition des palettes sur les TP
Logique combinatoire complète gérant tous les cas :
- Picking négatif et enchaînement de pickings négatifs
- Ordonnancement par espèce
- Terminer une palette pleine avant d'en entamer une autre
- Cadencement des buffers devant les postes de picking
- Pas de mélange de traitement commercial (via famille d'article)
- **Contrainte** : l'opérateur ne doit **pas déplacer de sacs 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. Quand la palette de
prélèvement est vidée, l'opérateur la remet manuellement sur une pile
de palettes vides à proximité.
> Prévoir un process sans picking négatif pour les cas où c'est rarement
> utilisé (ou monter le seuil, ex : 70% au lieu de 50%).
## Processus de préparation
### Arrivée des palettes (toujours un poste 3 TP)
- Première palette au **centre** si picking négatif proposé, sinon sur
un côté
- Si une palette est sur un côté et qu'on propose du picking négatif →
prévenir l'opérateur de déplacer la palette au centre
- La palette client revient **toujours** au centre
- Pas de prépa sur 6 TP en simultané
### Picking
1. Palette source arrive sur une TP
2. Palette destination (vide ou en cours) sur une autre TP
3. Opérateur prélève les sacs (ou sacs retour si picking négatif)
4. ~~[CUSTOM] Message MOV envoyé à SAP~~ **ANNULÉ** (décision client)
5. Avant évacuation : choix filmage (CstData transmis à Galileo).
Possibilité de choisir « pas de filmage ».
6. Évacuation palette → PIE → contrôle poids → stockage/expédition
## [CUSTOM] Ordonnancement des tâches PS → PK (LIM-82)
Détail du cadencement des palettes depuis les postes de sortie (PS)
vers les postes de picking (PK). Toutes les tâches de picking se font
sur les tables élévatrices des PK.
### Règles de priorité
1. **Picking négatif toujours en premier** — une seule palette à la fois
pour ce process, toujours déposée sur la **table du centre**
2. **Picking classique ensuite** — jusqu'à **2 palettes simultanées** au
PK, déposées sur les **tables latérales**
3. Le WMS peut envoyer **1 palette picking négatif + 1 palette picking
classique** en même temps (pour compléter la palette post-picking
négatif)
4. Le nombre de palettes de prélèvement au PK ne dépasse **jamais 2**
### Picking négatif — Détail
À chaque tâche de picking négatif :
- Un **nouveau code SSCC** est généré pour la palette où l'excédent de
stock est déposé
- Une **étiquette RFID** est imprimée pour cette nouvelle palette
- La palette de picking négatif va toujours au **centre** du PK
### Cadencement des buffers
Les palettes non encore nécessaires au PK sont dirigées vers les
**zones d'attente** (buffers ES_X) s'il y a de la place disponible. Le
WMS **privilégie la sortie des palettes de picking négatif** vers les
buffers.
À chaque palette arrivant au PS, celui-ci vérifie s'il existe d'autres
tâches du même OS avec une **séquence plus faible** :
- Si oui → palette envoyée au **buffer ES_X** (attente)
- Si non → palette envoyée directement au **PK**
### Cas d'exemple — 10 tâches (3 négatif, 7 classique)
1. Le WMS envoie **2 palettes** vers le PK : 1 picking négatif + 1
picking classique
2. Les **8 autres** palettes sont dirigées vers les zones d'attente
(priorité aux palettes de picking négatif)
3. L'opérateur réalise le picking négatif → impression étiquette
SSCC/RFID pour la nouvelle palette
4. L'opérateur réalise le picking classique → stock déposé sur la
palette du milieu
5. Si la palette client n'est pas pleine → le WMS apporte une nouvelle
palette de picking classique
6. L'opérateur déclare la palette client **pleine** → le WMS apporte la
2ᵉ palette de picking négatif
7. Si le picking classique précédent est **en cours** (tâche partielle)
→ pas de nouvelle palette classique. Sinon → 2ᵉ palette classique
envoyée au PK
Voir aussi [Séquençage TK → PS](sequencage-tk-ps.md) pour le
mécanisme amont de tri des tâches entre les transstockeurs et les
postes de sortie, et [Placement PS → PK](placement-ps-pk.md) pour
l'algorithme de choix de table (ping-pong, buffers, évacuation).
## Information passage conteneur client
Le passage en conteneur client est visible dans le **LOC** envoyé
toutes les 5 minutes à SAP (flag « client » = true). Voir
[Flux ERP outbound](../04-outbound/flux-erp-outbound.md#communication-erp--loc--détails).
## Étiquetage
### Cas standard (non MII ou MII mono lot)
- 1 étiquette RFID pour la palette physique bois
### Cas MII multi lots
- 1 étiquette HU RFID pour la palette physique (HU mère)
- 1 étiquette HU sans RFID par ligne de stock (HU fille / intercalaire)
- Impression auto à chaque nouvelle palette (RFID) et à chaque article
(intercalaire)
- Basé sur la **classe de commande**
## Contraintes opérateur (hors EasyWMS)
Règles non gérées par le système mais à respecter :
1. Palette ne doit pas excéder **1,90 m** (sinon rejet PIE)
2. Palette ne doit pas excéder **1 250 kg** (sinon rejet PIE, AF fait foi)
3. Pas de gerbage de palette
4. Disposition d'intercalaires entre couches
## Calcul poids de référence (post-picking)
Pour les palettes multi-lignes de stock :
```
Poids réf = Σ (Poids_unité_ligne_i × quantité_ligne_i) + poids_palette_bois
```
Contrôle PIE identique aux autres processus (voir
[Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
## Points d'attention
⚠️ Le picking négatif (seuil 55% ET poids ≥ 7 kg) est une règle métier
custom — les deux conditions sont cumulatives (réu. 11/05/2026).
⚠️ L'ordonnancement espèce → quantité → poids est géré par EasyWMS
(pas un choix opérateur).
⚠️ Le message MOV est **ANNULÉ** (décision réunion client).
⚠️ Le verrou HORS TOLERANCE déclenche un recomptage mais ne casse pas
l'assignation si le stock restant est suffisant.
⚠️ L'algorithme de répartition TP est le « gros morceau » custom du
picking — gestion combinatoire de tous les cas.
## Questions ouvertes
- [x] ~~Programme de filmage exact~~ → 8 programmes documentés (A→H)
- [ ] Gestion du picking négatif dans l'interface opérateur (@Nicolas)
- [x] ~~Process sans picking négatif — seuil à 70% au lieu de 50%~~ →
Tranché : seuil paramétrable par article (défaut 55%) + condition
poids ≥ 7 kg (réu. 11/05/2026)
- [x] ~~Traitement commercial — séparation palette~~ → Supprimé
(`CONTROLE_TRAITEMENT_COMMERCIAL = false`, réu. 11/05/2026)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Gerbabilité/stack, algo répartition TP, verrou HORS TOLERANCE, MOV annulé, arrivée palettes 3 TP, filmage CstData |
| 2026-05-12 | Arthur | Ajout ordonnancement PS→PK (LIM-82) : priorité picking négatif, cadencement buffers, cas d'exemple, lien séquençage TK→PS |
| 2026-05-12 | Arthur | MAJ réunion 11/05 : picking négatif 2 conditions cumulatives (55% + 7 kg), TC supprimé, pro rata Bag/pal, poids max 1 250 kg, questions fermées |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (ordonnancement PS→PK) | 2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 |
@@ -0,0 +1,323 @@
---
title: "Placement des palettes PS → PK (choix de table)"
tags: [picking, placement, table, buffer, ping-pong, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: []
confluence_refs: []
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md"]
last_updated: 2026-05-12
author: Arthur
---
# Placement des palettes PS → PK (choix de table)
> **Résumé** : algorithme exécuté par le WMS lorsqu'une palette source
> arrive au poste de sortie (PS). Il décide sur quelle table du PK la
> poser, ou la redirige vers un buffer ES. Ce process s'exécute **en
> aval** du [séquençage TK → PS](sequencage-tk-ps.md) : les palettes
> arrivent au PS déjà triées.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Chaque PK dispose de **3 tables** soumises à une contrainte d'adjacence
stricte :
```
TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE
✅ adjacentes ✅ adjacentes
TABLE_GAUCHE ←————————————————→ TABLE_DROITE
❌ INTERDIT
```
Règles de mouvement :
- Le stock est **toujours sur une palette**, jamais posé directement sur
la table
- L'opérateur peut déplacer du **stock** (sacs, colis) d'une palette à
une autre **uniquement entre deux tables adjacentes**
- Il est **interdit de déplacer une palette d'une table à une autre** —
seul l'AGV peut déplacer une palette (arrivée, évacuation, recentrage)
- **TABLE_CENTRE** est le pivot : seule table adjacente aux deux autres
## Déclenchement
L'algorithme est appelé **à chaque arrivée physique d'une palette au
PS**. Le PS interroge le WMS qui retourne une réponse parmi :
- **TABLE_GAUCHE**, **TABLE_CENTRE** ou **TABLE_DROITE** → la palette
est envoyée sur cette table
- **Buffer ESx** → aucune table n'est disponible, la palette est
redirigée vers un emplacement buffer
- **Attente** → ni table ni buffer disponible, la palette reste au PS
## Entrées de l'algorithme
| Donnée | Source |
|--------|--------|
| Tâche courante : palette source, article, quantité, type de picking (NÉGATIF / DIRECT), `Line.CstAtt` (séquence) | Tâche associée à la palette |
| État des 3 tables du PK : VIDE, PALETTE_FILLE_ACTIVE, PALETTE_FILLE_EN_ATTENTE, PALETTE_SOURCE_EN_PICKING, PALETTE_SOURCE_EN_ATTENTE, EN_ATTENTE_EVACUATION | État temps réel du PK |
| Tâches suivantes de l'OS (triées par `Line.CstAtt` croissant) | OS en base |
| Buffers ES disponibles : parmi ES1ES16, ceux non occupés ni ciblés | État temps réel des buffers |
| Nombre de buffers déjà affectés à ce PK vs `MAX_PRELOAD_PAR_PK` (défaut : 3) | Compteur par PK |
## Décision niveau 1 : table du PK ou buffer ?
```
FONCTION décider_destination(palette, PK) :
table_cible ← choisir_table(palette, PK)
SI table_cible ≠ NULL :
RETOURNER table_cible
// Aucune table disponible → tenter un buffer
SI nb_buffers_affectés(PK) < MAX_PRELOAD_PAR_PK :
buffer ← premier ES libre
SI buffer existe :
RETOURNER buffer
// Ni table ni buffer disponible
RETOURNER ATTENTE
```
## Décision niveau 2 : choix de la table
Le choix dépend du **type de picking** de la tâche associée.
### Cas PICKING_NÉGATIF
En picking négatif, la palette source arrive sur une table, l'opérateur
retire l'excédent sur une palette posée sur une **table adjacente**,
puis échange d'étiquettes. La palette a besoin de **2 tables** : une
pour elle, une adjacente libre pour l'excédent.
```
FONCTION choisir_table_picking_négatif(PK) :
// Priorité 1 : centre + un côté libre
SI TABLE_CENTRE == VIDE ET (TABLE_GAUCHE == VIDE
OU TABLE_DROITE == VIDE) :
RETOURNER TABLE_CENTRE
// Priorité 2 : côté + centre libre
SI (TABLE_GAUCHE == VIDE OU TABLE_DROITE == VIDE)
ET TABLE_CENTRE == VIDE :
RETOURNER côté vide
// Priorité 3 : centre libre + un côté libérable
SI TABLE_CENTRE == VIDE ET un côté est libérable :
évacuer(côté libérable)
RETOURNER TABLE_CENTRE
// Priorité 4 : un côté libre + centre libérable
SI un côté == VIDE ET TABLE_CENTRE est libérable :
évacuer(TABLE_CENTRE)
RETOURNER côté vide
// Dernier recours : évacuation forcée
évacuer_table_prioritaire(PK)
RETOURNER choisir_table_picking_négatif(PK) // rappel
```
### Cas PICKING_DIRECT
La palette source doit être posée sur une table **adjacente à la
palette fille active**. Le choix se fait en fonction de l'emplacement
de la palette fille.
```
FONCTION choisir_table_picking_direct(tâche, PK) :
// Étape 1 : localiser la palette fille compatible
table_fille ← localiser_palette_fille(tâche, PK)
SI table_fille == NULL :
table_fille ← choisir_table_nouvelle_palette_fille(PK)
// Étape 2 : choisir une table adjacente
tables_adj ← tables_adjacentes(table_fille)
// Prio A : palette source déjà sur une adjacente
// (multi-tâches même palette)
POUR chaque t DANS tables_adj :
SI t contient tâche.PALETTE_SOURCE :
RETOURNER t
// Prio B : adjacente VIDE
// Si 2 adjacentes libres (PF au centre) → ping-pong
adjacentes_vides ← [t POUR t DANS tables_adj SI t == VIDE]
SI len(adjacentes_vides) == 2 :
RETOURNER choisir_côté_ping_pong(PK)
SI len(adjacentes_vides) == 1 :
RETOURNER adjacentes_vides[0]
// Prio C : adjacente en cours d'évacuation (AGV en route)
POUR chaque t DANS tables_adj :
SI t == EN_ATTENTE_EVACUATION :
RETOURNER t
// Prio D : forcer l'évacuation d'une adjacente
t_à_libérer ← choisir_table_à_évacuer(tables_adj)
évacuer(t_à_libérer)
RETOURNER t_à_libérer
```
### Localisation de la palette fille compatible
```
FONCTION localiser_palette_fille(tâche, PK) :
// Parmi les PF actives
POUR chaque table :
SI table.état == PALETTE_FILLE_ACTIVE :
RETOURNER table
// Note : CONTROLE_TRAITEMENT_COMMERCIAL = false,
// donc pas de filtre TC
// Puis parmi les PF en attente
POUR chaque table :
SI table.état == PALETTE_FILLE_EN_ATTENTE :
RETOURNER table
RETOURNER NULL
```
### Choix de table pour une nouvelle palette fille
```
FONCTION choisir_table_nouvelle_palette_fille(PK) :
// TABLE_CENTRE = pivot → maximise la flexibilité
SI TABLE_CENTRE == VIDE : RETOURNER TABLE_CENTRE
SI TABLE_GAUCHE == VIDE : RETOURNER TABLE_GAUCHE
SI TABLE_DROITE == VIDE : RETOURNER TABLE_DROITE
// Aucune table vide → forcer une évacuation
évacuer_table_prioritaire(PK)
RETOURNER choisir_table_nouvelle_palette_fille(PK)
```
## Optimisation ping-pong
Le ping-pong est l'optimisation principale pour le débit. Il n'est
possible que lorsque la **palette fille est au centre** : les palettes
sources alternent alors entre TABLE_GAUCHE et TABLE_DROITE, de sorte
que la palette suivante est déjà en place quand l'opérateur termine.
```
FONCTION choisir_côté_ping_pong(PK) :
SI TABLE_GAUCHE.état ∈ {PALETTE_SOURCE_EN_PICKING,
PALETTE_SOURCE_EN_ATTENTE} :
RETOURNER TABLE_DROITE
SI TABLE_DROITE.état ∈ {PALETTE_SOURCE_EN_PICKING,
PALETTE_SOURCE_EN_ATTENTE} :
RETOURNER TABLE_GAUCHE
// Aucun côté occupé → choix arbitraire
RETOURNER TABLE_GAUCHE
```
**Recentrage** : si la palette fille est sur un côté (issue d'un
picking négatif), le ping-pong est impossible. Si le nombre de
PICKING_DIRECT restants ≥ `SEUIL_RECENTRAGE_PF` (défaut : 3), le WMS
peut déclencher un mouvement AGV pour recentrer la PF sur
TABLE_CENTRE.
## Évacuation des tables — Priorité
Lorsqu'aucune table n'est libre et qu'il faut en libérer une :
```
FONCTION évacuer_table_prioritaire(PK) :
// 1. Palette vide → retrait manuel (pas d'AGV)
// 2. Table déjà en attente d'évacuation → attendre AGV
// 3. Palette source en attente, non réutilisée par
// la prochaine tâche → AGV vers buffer/ASRS
// 4. Palette fille en attente → AGV vers image de quai
// 5. Palette source en attente (même si réutilisée)
// → AGV vers buffer ES
```
## Gestion des buffers ES → PK
Quand une table se libère au PK, le WMS choisit parmi les palettes en
buffer affectées à ce PK :
- Tri par `Line.CstAtt` **croissant** (plus petit = plus prioritaire)
- La première palette compatible avec la table libérée est envoyée
**Règle critique** : l'ordre de sortie des buffers est dicté par
`Line.CstAtt`, **pas** par l'ordre d'arrivée physique en buffer.
## Palettes multi-commandes
Une palette source peut être assignée à plusieurs OS.
Après picking de la commande en cours :
- Si la palette a encore des tâches pour d'autres OS → marquée
`MULTI_COMMANDE`, envoyée vers un buffer ES libre
- Elle reste en buffer jusqu'au lancement de l'OS suivant
- Une palette multi-commande au PK ou en mouvement compte comme une
place buffer occupée dans le calcul de `MAX_PRELOAD_PAR_PK`
## Priorité d'accès aux buffers entre PK
Lorsque les buffers ES sont saturés, la priorité est définie par la
séquence du mode "Picking" dans `MODES_PKxx`
(voir [Modes de travail PK](stations-picking.md)) :
- Séquence 1 = priorité la plus haute
- Quand un buffer se libère → affecté en priorité au PK avec la
séquence la plus basse parmi ceux qui ont des palettes en attente
## Paramètres WMS
| Paramètre | Description | Défaut |
|-----------|-------------|--------|
| `MAX_PRELOAD_PAR_PK` | Nombre max de palettes pré-chargées en buffer ES par PK | 3 |
| `SEUIL_RECENTRAGE_PF` | Nombre min de PICKING_DIRECT restants pour recentrer la PF au centre | 3 |
| `CONTROLE_TRAITEMENT_COMMERCIAL` | Séparer ou non les articles par TC sur les palettes filles | `false` (V1.1) |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | — |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | — |
## Points d'attention
⚠️ La contrainte d'adjacence est **physique** : l'opérateur ne peut pas
déplacer de sacs entre TABLE_GAUCHE et TABLE_DROITE directement.
⚠️ Le picking négatif nécessite 2 tables (palette source + adjacente
pour l'excédent), ce qui complique la gestion des cas saturés.
⚠️ Le recentrage de la palette fille (AGV) n'est déclenché que si
suffisamment de tâches de picking direct restent (≥ SEUIL_RECENTRAGE_PF).
⚠️ L'ordre de sortie des buffers suit `Line.CstAtt`, pas l'ordre FIFO
d'entrée en buffer.
## Questions ouvertes
(Aucune identifiée — algorithme V1.0 complet)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis spec "Logique combinatoire picking - PS vers PK - V1.0" |
## Références
| Source | Type | Date |
|--------|------|------|
| Logique combinatoire picking - PS vers PK - V1.0 | Spécification technique | 27/04/2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (modes PK) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
@@ -0,0 +1,471 @@
---
title: "Séquençage des tâches de picking TK → PS"
tags: [picking, séquençage, transstockeur, événement, workflow, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84, LIM-61]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
author: Arthur
---
# Séquençage des tâches de picking TK → PS
> **Résumé** : algorithme événementiel qui ordonne les tâches de picking
> depuis les transstockeurs (TK) vers les postes de sortie (PS). Il
> écrit les numéros de séquence `Line.CstAtt` sur chaque tâche et
> contrôle le flag `OS.CstAtt` pour autoriser le stacker_crane.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Le séquençage TK → PS est critique pour garantir que les palettes
arrivent aux postes de picking dans le bon ordre. L'algorithme
s'exécute **en amont** de l'algorithme de
[placement PS → PK](placement-ps-pk.md) : les palettes arrivent au PS
**déjà triées**.
Quatre solutions ont été envisagées avant de retenir une approche
événementielle (solution 4).
## Historique des solutions envisagées
### Solution 1 — Process isolé sur finalisation des tâches d'OS
Déclenchement à la finalisation de la création des tâches d'un OS.
Séquençage via `OS.Line.CstAtt`, marquage OS traité via
`OS.CstAtt = true`.
**Problème** : pas assez dynamique en cas de recréation de tâches suite
à des imprévus dans le WMS.
### Solution 2 — Calcul dans le workflow stacker_crane
Intégration du tri directement dans les WF
`Galileo_StackerCraneSearch_PR` / `StackerCrane_SortTasks_PR`, avec
recalcul complet du pool de tâches à chaque exécution. Supprimerait le
besoin de `OS.Line.CstAtt` et `OS.CstAtt`.
**Problème** : complexité élevée (requêtes LINQ imbriquées sur les
tâches multi-OS).
### Solution 3 — Solution 1 transformée en job
Reprise du process de la solution 1 sous forme de job planifié, en
excluant les tâches de picking en cours.
**Problème** : pas assez réactif par rapport à la cadence de recherche
d'ordre des TK.
### Solution 4 — Process événementiel (retenue)
Reprise de la solution 1 déclenchée sur deux événements, avec
mécanisme de verrouillage `OS.CstAtt` pour bloquer le stacker_crane
pendant le séquençage.
**Avantages** : simple à développer, isolée et découplée du reste,
flexible et réactive.
## Changelog V1.1 (11/05/2026)
Modifications issues de la réunion Arthur + Justine (Mecalux) — Olivier
(Limagrain), croisées avec l'AF §6.4.8 et le DevOps #64854 :
- **Hiérarchie des règles** : nouvel ordre de priorité validé.
La complétude palette et l'anti-split de lignes de stock sont des
contraintes amont prioritaires sur les règles de tri
- **Picking négatif** : ajout condition cumulative poids ≥ 7 kg
- **Traitement commercial** : critère de regroupement par TC
**supprimé** (`CONTROLE_TRAITEMENT_COMMERCIAL = false`). Pas de bio
sur cet entrepôt
- **Calcul de remplissage** : méthode pro rata Bag/pal validée,
remplace la logique DevOps "Bag/pal max"
- **Poids max palette** : 1 250 kg (l'AF fait foi, corrige les 1 200 kg
du DevOps)
- **Règles confirmées** : mélange d'espèces OK, pas de gerbage,
hauteur max 1,90 m, séparateurs inter-lots hors WMS
> Voir la section [Arbitrage des contradictions](#arbitrage-des-contradictions-reu-11052026)
> pour le détail des décisions.
## Déclenchement
L'algorithme est déclenché sur **deux événements** :
### TaskCreatedEvent
Une nouvelle tâche de picking vient d'être créée (par le MINI JOB
Picking LIM-75, ou suite à une réassignation de stock).
```
SI événement.type == TaskCreatedEvent :
SI tâche.type == PICKING ET tâche.OS.statut == Released :
traiter_séquençage(tâche.OS)
```
### OutboundOrderReleasedEvent
Un OS passe au statut Released (première mise en service ou relance
après un arrêt).
```
SI événement.type == OutboundOrderReleasedEvent :
traiter_séquençage(OS)
```
## Process principal
```
FONCTION traiter_séquençage(OS) :
// ─── Étape 1 : verrouiller l'OS ───
OS.CstAtt ← false
// ─── Étape 2 : récupérer les tâches ───
toutes_tâches ← récupérer_tâches_picking(OS)
// ─── Étape 3 : filtrer ───
tâches_à_séquencer ← [t POUR t DANS toutes_tâches
SI t.statut == EN_ATTENTE]
SI tâches_à_séquencer est vide :
OS.CstAtt ← true
RETOURNER
// ─── Étape 4 : trier ───
tâches_triées ← trier_tâches(tâches_à_séquencer)
// ─── Étape 5 : écrire les séquences ───
écrire_séquences(tâches_triées)
// ─── Étape 6 : libérer l'OS ───
OS.CstAtt ← true
```
```mermaid
sequenceDiagram
participant EVT as Événement (TaskCreated / OS Released)
participant SEQ as Process séquençage
participant SC as Stacker Crane
EVT->>SEQ: Déclenche
SEQ->>SEQ: OS.CstAtt = false
Note over SC: Bloqué — ne prend pas<br/>de tâche de cet OS
SEQ->>SEQ: Récupère tâches en attente
SEQ->>SEQ: Applique tri + écrit séquences
SEQ->>SEQ: OS.CstAtt = true
Note over SC: Débloqué — reprend<br/>les tâches séquencées
```
## Contraintes amont (constitution des palettes filles)
Ces contraintes orientent le regroupement des lignes sur les palettes
filles **avant** le tri. L'algorithme de séquençage doit les respecter :
l'ordre de sortie doit être compatible avec la constitution de palettes
conformes à ces règles.
### C1. Palettes les plus complètes possible
Objectif premier — optimisation transport. Seuil de remplissage ~95%.
**Calcul : pro rata Bag/pal.** Chaque sac consomme `1/Bag_pal` de son
lot. Le calcul est additif et gère nativement des lots avec des Bag/pal
différents sur une même palette.
```
Exemple :
16 sacs d'un lot Bag/pal 20 + 7 sacs d'un lot Bag/pal 50
= 16/20 + 7/50
= 0,80 + 0,14
= 94%
```
Regrouper les lots de même Bag/pal sur une même palette fille facilite
la complétude.
> Cette méthode remplace la logique DevOps #64854 de "prendre le
> Bag/pal max entre lots". Le pro rata est plus précis et ne nécessite
> pas de Bag/pal de référence unique.
### C2. Ne pas splitter les lignes de stock
Éviter de répartir les sacs d'une même ligne de stock sur plusieurs
palettes. **Prioritaire sur les règles de tri** : si respecter
"Maïs first" implique de splitter une ligne, on regroupe la ligne
complète quitte à décaler le maïs.
### Autres contraintes palette
| Contrainte | Valeur | Source |
|------------|--------|--------|
| Poids max palette | **1 250 kg** | AF (corrige 1 200 kg du DevOps) |
| Hauteur max palette | 1,90 m | AF — rejet au PIE si dépassement |
| Gerbage | Interdit | — |
| Mélange d'espèces | Autorisé sur une même palette fille | — |
| Différenciation de marque | Aucune dans une même expédition | — |
| Séparateurs (intercalaires) | Règle opérateur, hors WMS | — |
## Règles de tri (séquençage des sorties ASRS)
Les tâches de picking d'un même OS sont triées selon les critères
suivants, **par ordre de priorité décroissante** :
### Critère 1 — Picking négatif en premier
Les tâches de type PICKING_NÉGATIF passent **avant** les tâches de type
PICKING_DIRECT. Prioritaire sur toutes les règles suivantes, y compris
Maïs first : si une tâche négatif concerne du tournesol, elle passe
avant une tâche maïs classique.
Condition cumulative pour la détermination NÉGATIF / DIRECT (cf.
[détermination picking négatif](#détermination-picking-négatif)) :
pourcentage quantité > seuil fiche article (défaut 55%) **ET** poids
unitaire sac ≥ 7 kg. En dessous de 7 kg, pas de picking négatif.
```
tri_1(tâche) → 0 si PICKING_NÉGATIF, 1 si PICKING_DIRECT
```
### Critère 2 — Espèce Maïs en premier
Les tâches portant sur l'espèce **Maïs** passent avant les autres
espèces. Le maïs est lourd/stable, il constitue la base de la palette
fille.
```
tri_2(tâche) → 0 si espèce == MAÏS, 1 sinon
```
### ~~Critère 3 (V1.0) — Traitement commercial~~ SUPPRIMÉ V1.1
`CONTROLE_TRAITEMENT_COMMERCIAL = false`. L'entrepôt ne fait pas de
bio. Paramètre réactivable si besoin futur.
### Critère 3 — Espèce la plus volumineuse
Les tâches sont regroupées par espèce, et l'espèce ayant la **plus
grande quantité totale de sacs** dans l'OS passe en premier. Commencer
par l'espèce la plus volumineuse permet de constituer rapidement la
base de la palette fille.
```
tri_3(tâche) → -quantité_totale_espèce(tâche.espèce, OS)
```
### Critère 4 — Article/lot le plus lourd en base
À espèce égale, les tâches portant sur les articles/lots **les plus
lourds** passent en premier. Corollaire : les semences essais, très
légères, se retrouvent naturellement en haut de palette.
```
tri_4(tâche) → -tâche.article.poids
```
### Critère 5 — Regroupement par palette source
Toutes les tâches portant sur la **même palette source** sont
consécutives. L'opérateur enchaîne toutes les tâches d'une palette
source avant de la libérer.
```
tri_5(tâche) → tâche.PALETTE_SOURCE.identifiant
```
### Récapitulatif du tri multi-critères (V1.1)
```
FONCTION trier_tâches(tâches) :
RETOURNER tâches.trier_par(
(1) type_picking ASC // NÉGATIF (0) avant DIRECT (1)
(2) espèce_maïs ASC // MAÏS (0) avant autres (1)
(3) quantité_espèce DESC // espèce la + volumineuse
(4) poids_article DESC // article le + lourd
(5) palette_source // regroupement par palette
)
```
## Écriture des séquences (Line.CstAtt)
### Règle des ex-aequo
Quand deux tâches consécutives sont **interchangeables** (l'ordre entre
elles n'a aucun impact fonctionnel), elles reçoivent le **même numéro
de séquence**. Cela laisse de la flexibilité au stacker_crane pour
optimiser son débit.
### Critères d'interchangeabilité
Deux tâches A et B sont interchangeables si :
- Elles portent sur la **même palette source**, **OU**
- Elles portent sur des **palettes sources différentes** mais tous les
critères de tri sont identiques : même type de picking, même espèce,
même quantité espèce, même poids article
### Algorithme d'écriture
```
FONCTION écrire_séquences(tâches_triées) :
séquence_actuelle ← max(Line.CstAtt des tâches en cours) + 1
SI aucune tâche en cours :
séquence_actuelle ← 1
POUR i DE 0 À len(tâches_triées) - 1 :
tâche ← tâches_triées[i]
tâche.Line.CstAtt ← séquence_actuelle
SI i < len(tâches_triées) - 1 :
tâche_suivante ← tâches_triées[i + 1]
SI interchangeables(tâche, tâche_suivante) :
CONTINUER
SINON :
séquence_actuelle ← séquence_actuelle + 1
```
### Exemple
```
Commande avec 5 tâches, après tri :
Tâche 1 : Palette A, Maïs, 500kg → séq 1
Tâche 2 : Palette B, Maïs, 500kg → séq 1 (interchangeable)
Tâche 3 : Palette C, Maïs, 500kg → séq 1 (interchangeable)
Tâche 4 : Palette D, Blé, 300kg → séq 2 (espèce différente)
Tâche 5 : Palette E, Blé, 300kg → séq 2 (interchangeable)
Résultat Line.CstAtt : [1, 1, 1, 2, 2]
Le stacker_crane peut sortir A, B, C dans n'importe quel ordre,
puis D ou E dans n'importe quel ordre.
```
## Comportement du stacker_crane après séquençage
Le stacker_crane **ignore** les tâches dont `OS.CstAtt == false`,
consomme celles dont `OS.CstAtt == true` par `Line.CstAtt` croissant,
et entre tâches à séquence égale il optimise librement (proximité ASRS,
charge TK). Il crée les tâches de mouvement TK → PS.
Les palettes arrivent ensuite au PS, où l'algorithme de
[placement PS → PK](placement-ps-pk.md) décide sur quelle table les
poser.
## Détermination picking négatif
Le type de picking (NÉGATIF ou DIRECT) est déterminé **par tâche** au
moment de la création des tâches par le MINI JOB Picking (LIM-75) :
```
SI quantité_à_prélever > seuil_article × quantité_palette_source
ET article unique dans la palette source
ET pas d'attribut logistique à capturer
ET poids_unitaire_sac ≥ 7 kg
ALORS → PICKING_NÉGATIF
SINON → PICKING_DIRECT
```
Le seuil % reste paramétrable par fiche article (champ "Complete
quantity percent excess for negative picking", défaut : 55%).
La détermination se fait **en amont** (MINI JOB Picking, LIM-75), avant
l'algorithme de séquençage. L'algorithme de séquençage lit ce type mais
ne le calcule pas.
## Cas particuliers
### Recalcul suite à une nouvelle tâche (réassignation de stock)
Si une tâche est créée après que l'OS a déjà été séquencé, le
`TaskCreatedEvent` déclenche un recalcul : verrouillage, re-tri des
tâches en attente uniquement (en commençant après le dernier numéro des
tâches en cours), puis libération.
### Relance d'un OS arrêté
Si un OS est arrêté puis relancé (`OutboundOrderReleasedEvent`), le
même process s'applique. Les tâches en cours conservent leur séquence,
les tâches en attente sont re-séquencées.
## Arbitrage des contradictions (réu. 11/05/2026)
Analyse comparative de 3 sources (DevOps #64854, AF §6.4.8, réunion
11/05/2026 Arthur + Justine + Olivier). **Tous les points sont résolus.**
| Sujet | DevOps | AF | Réunion (fait foi) |
|-------|--------|----|--------------------|
| Traitement commercial | À creuser | Séparation stricte | **Supprimé** (`CONTROLE_TRAITEMENT_COMMERCIAL = false`) |
| Seuil picking négatif | Pas de seuil explicite | > 50% | **Deux conditions cumulatives** : % seuil fiche article (défaut 55%) ET poids sac ≥ 7 kg |
| Poids max palette | 1 200 kg | 1 250 kg | **1 250 kg** (AF fait foi) |
| Picking négatif vs Maïs first | Pas de hiérarchie | Maïs en tête, négatif séparé | **Picking négatif prioritaire** (confirmé Olivier) |
| Semences essais en haut | Oui (dédié) | Non mentionné | **Couvert par règle du plus lourd en base** (essais = légères → haut) |
| Lots même Bag/pal | Prioriser regroupement | — | **Retenu** (WF palettes complètes) |
| Différenciation marque | Aucune | — | **Confirmé** |
| Calcul Bag/pal multi-lots | "Prendre le Bag/pal max" | Équivalent palette | **Pro rata** (chaque sac = 1/Bag_pal de son lot) |
## Paramètres WMS
| Paramètre | Description | Défaut | Statut V1.1 |
|-----------|-------------|--------|-------------|
| `CONTROLE_TRAITEMENT_COMMERCIAL` | Regroupement par TC dans le tri | ~~true~~ | **false** — désactivé |
| Seuil picking négatif (fiche article) | "Complete quantity percent excess for negative picking" | 55% | Inchangé |
| Poids min picking négatif | Poids unitaire sac minimum pour autoriser le picking négatif | **7 kg** | **Nouveau V1.1** |
| Seuil remplissage palette | Taux cible remplissage palette fille | **~95%** | **Nouveau V1.1** |
| Poids max palette | Poids maximum palette fille | **1 250 kg** | Corrigé (était 1 200 kg) |
| `OS.CstAtt` | Flag verrouillage OS pendant séquençage (true = stacker_crane autorisé) | true | Inchangé |
| `MAX_NB_BUFFER_PK` | Nombre de buffers disponibles par PK | 3 | Inchangé |
## Points d'attention
⚠️ Le custom LIM-61 (vérification capacité buffer) doit être modifié
pour prendre en compte les palettes multi-PK.
⚠️ Le verrouillage `OS.CstAtt` est temporaire (durée du séquençage) —
en cas d'erreur du process, l'OS risque de rester bloqué.
⚠️ Les tâches **en cours** sont exclues du séquençage — seules les
tâches en attente sont réordonnées.
⚠️ La condition poids ≥ 7 kg pour le picking négatif est ajoutée pour
éviter l'instabilité palette (gros sacs ramenés sur petits sacs).
## Points non traités (hors scope)
- Affichage opérateur au PK (combien de sacs ajouter, possibilité de
dévier de la consigne) — à traiter une fois les fondations posées
- Picking négatif < 7 kg en option (avantage opérationnel sans
obligation) — nécessite discussion élargie
- Messagerie carton (moins prioritaire, navette du lendemain, zone
angle Est) — en attente de précisions
- Verrou réception → recomptage avant picking (mentionné dans l'AF
uniquement, non reconfirmé)
## Questions ouvertes
- [ ] Comportement en cas d'erreur du process de séquençage — OS reste
bloqué avec CstAtt = false ? (@Nicolas)
- [ ] Impact sur les performances si beaucoup d'OS sont Released
simultanément — risque de contention sur les événements ? (@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-84 |
| 2026-05-12 | Arthur | Refonte complète : intégration spec V1.1 (algo complet, contraintes amont, 5 critères tri, écriture séquences, ex-aequo, cas particuliers) + arbitrage contradictions réunion 11/05/2026 |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira (custom capacité buffer) | 2026 |
| Logique combinatoire picking - TK vers PS - V1.1 | Spécification technique | 11/05/2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 |
| DevOps #64854 | Note historique | — |
| AF §6.4.8 | Analyse fonctionnelle V1.5 | 28/11/2025 |
@@ -0,0 +1,301 @@
---
title: "Stations et postes de travail Limagrain"
tags: [picking, stations, postes, ilots, buffer]
status: draft
standard_ref: concepts/stations.md
jira_refs: [LIM-69, LIM-70]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-69 - LOT1.3 Modes de travail des PK.md"]
last_updated: 2026-05-12
author: Arthur
---
# Stations et postes de travail Limagrain
> **Résumé** : description des stations de l'entrepôt automatique, des
> postes de travail polyvalents (3 îlots × 2 postes) et des buffers associés.
> **Standard EasyWMS** : → voir [Stations & Routes](../../concepts/stations.md),
> [Mechanical Elements](../../concepts/mechanical-elements.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Chez Limagrain, les postes de travail sont **polyvalents** et multi-processus.
L'ensemble des opérations (réception, picking, regroupement, échantillonnage,
re-certification) se fait sur les mêmes postes physiques, configurables
dynamiquement.
## Cartographie des stations
### Zone entrée production / sortie expéditions
| Station | Description |
|---------|-------------|
| PIE_01 | Poste d'identification 01 (côté quais) |
| NAV_01 | Navette 01 |
### Zone entrée/sortie postes de travail
| Station | Description |
|---------|-------------|
| PIE_02 | Poste d'identification 02 |
| PIE_03 | Poste d'identification 03 |
| REAC_01 | Poste de reconditionnement 01 |
| NAV_02 | Navette 02 |
| ET_21, ET_22 | Tables intermédiaires |
### Zone stockage côté postes de travail
| Station | Description |
|---------|-------------|
| ET_23 à ET_28 | Tables intermédiaires 23 à 28 |
| TE_01 à TE_04 | Tables d'entrée 01 à 04 |
| TS_01 à TS_04 | Tables de sortie 01 à 04 |
### Zone stockage côté quais
| Station | Description |
|---------|-------------|
| ET_11 à ET_15 | Tables intermédiaires 11 à 15 |
| TE/TS_01 à TE/TS_04 | Tables mixtes entrée/sortie 01 à 04 |
### Zone postes de travail
| Station | Description |
|---------|-------------|
| P1 à P6 | Postes de travail 01 à 06 |
| TP11 à TP63 | Tables de préparation 11 à 63 |
## Postes de travail — Architecture physique
### 3 îlots de 2 postes
Physiquement, il y a **3 îlots**, chacun composé de **6 tables de préparation
(TP)**. Chaque îlot peut être configuré de 2 façons :
1. **Mode scindé** : 2 postes individuels × 3 TP chacun (mode par défaut)
2. ~~**Mode global** : 1 poste × 6 TP (mode « esclave »)~~ **ABANDONNÉ**
> **MISE À JOUR** : le mode esclave (6 TP) est abandonné au profit d'un
> simple **message d'avertissement**. Si le poste adjacent est déjà
> ouvert → « Attention, le poste PVx est déjà ouvert. Voulez-vous quand
> même ouvrir ? ». L'opérateur peut confirmer ou annuler. Pas de blocage
> technique, juste un avertissement.
>
> **Justification** : les opérateurs sont physiquement à ~2 mètres l'un
> de l'autre et peuvent se coordonner verbalement. Les AGV ont des
> capteurs de sécurité et demandent l'autorisation de dépose. Trop de cas
> complexes à gérer avec un mode esclave custom. L'AGV amène toujours la
> palette au centre du PV actif.
>
> **Développement** : message d'avertissement à l'ouverture du poste,
> vérification si le poste conjoint est déjà ouvert (via support présent
> ou poste en mode réception), workflow action sur le end process pour
> fermer le poste.
### Numérotation
```
Îlot 1 : P1 (TP11, TP12, TP13) | P2 (TP21, TP22, TP23)
Îlot 2 : P3 (TP31, TP32, TP33) | P4 (TP41, TP42, TP43)
Îlot 3 : P5 (TP51, TP52, TP53) | P6 (TP61, TP62, TP63)
```
### Spécificités P5 & P6
Les postes **P5 et P6** sont équipés d'un **palan** pour la manipulation
de big-bags. Toute opération impliquant un big-bag (bag/pal ≤ 2) doit
être traitée sur P5 ou P6.
**Picking** : WS PK picking rob en priorité, process RF comme fallback
(plus robuste pour picking négatif, multi-tables). Le process de réception
est déjà plugué au mode Automatic tasks (custom) → même mode pour le
picking et la recertification.
Voir [Flux expédition — Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
pour les règles détaillées (arrivée palettes 3 TP, algorithme répartition,
ordonnancement par gerbabilité).
### Modes de travail — Configuration et fonctionnement
Chaque poste est **polyvalent** et peut être utilisé pour différents flux.
Le manager configure les modes autorisés et leur priorité ; l'opérateur
ouvre le poste et le WMS gère automatiquement le process en fonction de
la palette qui arrive.
#### Modes disponibles
| Mode | Correspondance EasyWMS |
|------|------------------------|
| Picking | Picking |
| Réception | Réception |
| Regroupement | Consolidation |
| Échantillonnage | Inventaire |
| Re certification | Picking |
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** — remplacé par un simple
> message d'avertissement poste adjacent (voir section dédiée ci-dessous).
#### Configuration par le manager (vassist SmartUI)
Dans la vue des postes de travail, un **bouton d'action "Choix modes de
travail"** est disponible à la sélection d'un ou plusieurs PK. Ce bouton
ouvre une **vassist** qui permet de :
- **Cocher/décocher les modes autorisés** parmi les 5 modes ci-dessus
- **Définir la priorité** de chaque mode coché via un champ numérique
(séquence)
**Règles de validation** à la soumission :
- Chaque mode coché doit avoir une priorité renseignée
- Un mode non coché ne doit pas avoir de priorité
- Au moins un mode doit être coché (pour bloquer un PK, utiliser le
bouton standard dédié)
**Stockage** : la configuration est enregistrée dans un **paramètre
SmartUI dédié par PK** au format :
```
MODES_PK01 = "RECEPTION;1|PICKING;2|CONSOLIDATION;3"
MODES_PK02 = "RECEPTION;1"
```
Chaque entrée : `MODE;PRIORITÉ` séparés par `|`.
Cette configuration est utilisée par le
[Mega Job d'assignation](job-assignation-pk.md)
([LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70)) pour
déterminer si un PK est éligible à recevoir des tâches d'un flux donné
et dans quel ordre de priorité.
#### Ouverture du poste par l'opérateur (SmartUI)
L'opérateur accède à **Poste de travail > Station de picking**.
L'interface affiche un **bouton "Fermer le poste"** toujours visible.
Par défaut, le poste fonctionne en **tâche automatique** : le WMS
choisit le bon process en fonction de la palette qui arrive ou qui est
déjà sur le PK. L'opérateur n'a pas à sélectionner manuellement un mode.
#### Avertissement poste adjacent
À chaque ouverture d'un PK, le WMS vérifie si le **poste adjacent** est
déjà ouvert (en mode actif). Le mapping des paires est défini dans le
paramètre `PK_ADJACENT`.
**Si le poste adjacent est actif** → message d'avertissement (y compris
en mode tâche automatique) :
> "Attention, le poste [CODE_PK_ADJACENT] est déjà ouvert.
> Voulez-vous quand même ouvrir ?"
- Bouton **Confirmer** : le PK s'ouvre normalement
- Bouton **Annuler** : le PK reste inactif
**Pas de blocage technique** — uniquement informatif. Les opérateurs sont
physiquement à ~2 mètres et peuvent se coordonner verbalement. Les AGV
ont des capteurs de sécurité et demandent l'autorisation de dépose.
#### Fermeture du poste
Le bouton **"Fermer le poste"** est toujours visible quel que soit l'état.
Au clic :
- Le PK est remis en mode **inactif** (aucun mode actif)
- Le PK redevient éligible pour une nouvelle assignation par le
[Mega Job](job-assignation-pk.md) (sous réserve qu'il n'ait plus de
tâches actives)
#### Paramètres modes de travail
| Paramètre | Description | Valeur par défaut | Exemple |
|-----------|-------------|-------------------|---------|
| MODES_PKxx | Modes autorisés + priorité pour le PK xx (un par PK, via vassist) | _(vide)_ | `RECEPTION;1\|PICKING;2` |
| PK_ADJACENT | Paires de postes adjacents | _(vide)_ | `PK01;PK02\|PK03;PK04` |
### Équipement par poste
- 1 poste léger EasyWMS dupliqué sur 2 écrans
- 1 imprimante Zebra (étiquettes HU RFID)
- 1 imprimante A4 (étiquettes A4)
- 1 douchette multi-format (RFID, QR Code, code à barres)
## [CUSTOM] Mega Job d'assignation des tâches aux postes
→ Voir page dédiée : **[Job d'assignation PK](job-assignation-pk.md)**
([LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70))
Job unique « chef d'orchestre » qui vérifie les modes de travail pour
chaque PK et orchestre l'envoi de tâches via des sous-workflows dédiés
(LIM-74, LIM-75). Transverse à tous les flux (réception, picking,
regroupement, échantillonnage, re certification).
## Buffer postes de travail
16 emplacements palettes au sol le long de l'allée TK_01 :
| Nb emplacements | Usage |
|-----------------|-------|
| 14 | Avance pour les processus en cours |
| 2 | Piles de palettes vides |
> ⚠️ 2 emplacements supplémentaires pour palettes rejetées en attente de
> libération d'un poste de travail.
### [CUSTOM] Buffer configurable
Les emplacements du buffer sont **interchangeables** : un champ « type de
fonctionnement » peut être modifié quand l'emplacement est vide.
### [CUSTOM] Bouton d'évacuation
Un bouton spécifique sur l'écran EasyWMS permet d'évacuer automatiquement
une palette du buffer vers le convoyeur d'entrée pour stockage.
## Piles de palettes vides par poste
- **2 piles par îlot de travail** (et non par poste individuel)
- Emplacement picking dédié pour réapprovisionnement automatique sur
seuil
- Aide à la manutention sur chaque poste pour prendre/poser des palettes
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile —
l'opérateur choisit la pile à réapprovisionner parmi une liste
Voir [Palettes vides](../02-stockage/palettes-vides.md) pour le détail.
## Points d'attention
⚠️ Un poste fermé ne peut pas être assigné à un processus.
⚠️ L'assignation automatique du poste optimise la distance la plus courte.
⚠️ Si une TP est HS, elle peut être bloquée individuellement sans impacter
le reste du poste.
⚠️ L'entrée côté postes de travail et l'entrée côté quais sont
interchangeables manuellement en cas de blocage long terme (bouton de
redirection).
## Questions ouvertes
- [ ] Détail de la gestion des tables de préparation bloquées (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Mode esclave abandonné, job transverse, vassist modes, 2 piles/îlot |
| 2026-05-05 | Arthur | Cross-ref flux expédition, picking WS vs RF, contrainte Big-Bag |
| 2026-05-12 | Arthur | Détail modes de travail (LIM-69) : vassist manager, paramètres MODES_PKxx/PK_ADJACENT, tâche automatique, avertissement adjacent, fermeture poste. Renvoi job vers page dédiée (LIM-70) |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira | 2026 |
@@ -0,0 +1,50 @@
---
title: "Picking — Vue d'ensemble"
tags: [picking, combinatoire, stations, index]
status: draft
last_updated: 2026-05-12
---
# Picking — Vue d'ensemble
> **Périmètre** : picking combinatoire (CR V3.0, 4-job, CstAtt), stations de
> picking, job d'assignation PK, waves et groupes, replenishment.
> **Standard EasyWMS** : voir [Picking](../../concepts/picking.md)
## Pages de cette section
- [Picking combinatoire](picking-combinatoire.md)
- [Stations de picking](stations-picking.md)
- [Job d'assignation PK (Mega Job)](job-assignation-pk.md)
- [Waves et groupes](waves-groupes.md)
- [Replenishment](replenishment.md)
- [Séquençage TK → PS](sequencage-tk-ps.md)
- [Placement PS → PK (choix de table)](placement-ps-pk.md)
- [Consolidation / Regroupement](consolidation-regroupement.md)
- [Échantillonnage](echantillonnage.md)
## Vue synthétique du picking Limagrain
```mermaid
flowchart TD
OS[OS libéré + stock assigné] --> SEQ[Séquençage TK → PS]
SEQ --> TRI["Tri : négatif > maïs > volume > poids"]
TRI --> PS[Palette arrive au PS]
PS --> PLACE[Placement PS → PK]
PLACE --> TABLE{Table ou buffer ?}
TABLE -->|Table libre| PICK[Prélèvement au PK]
TABLE -->|Buffer ES| WAIT[Attente buffer]
WAIT --> PICK
PICK --> NEG{"Picking négatif ?\n(% > 55% ET ≥ 7 kg)"}
NEG -->|Oui| PNEG[Picking négatif]
NEG -->|Non| PPOS[Picking direct]
PNEG --> FILM[Choix filmage]
PPOS --> FILM
FILM --> PIE[Passage PIE]
PIE --> DEFRAG[Zone défrag client]
```
> **Note** : le picking AF V1.5 a depuis évolué vers le modèle
> « picking combinatoire » CR V3.0 (4 jobs, CstAtt). Les pages de cette
> section couvrent les deux versions.
+58
View File
@@ -0,0 +1,58 @@
---
title: "Picking — Vue d'ensemble"
tags: [picking, combinatoire, stations, index]
status: draft
last_updated: 2026-05-13
---
# Picking — Vue d'ensemble
> **Périmètre** : picking combinatoire (CR V3.0, 4-job, CstAtt), stations de
> picking, job d'assignation PK, waves et groupes, replenishment.
> **Standard EasyWMS** : voir [Picking](../../concepts/picking.md)
## Pages de cette section
- [Picking combinatoire](picking-combinatoire.md)
- [Stations de picking](stations-picking.md)
- [Job d'assignation PK (Mega Job)](job-assignation-pk.md)
- [Waves et groupes](waves-groupes.md)
- [Replenishment](replenishment.md)
- [Séquençage TK → PS](sequencage-tk-ps.md)
- [Séquençage TK → PS — Historique et arbitrage](sequencage-tk-ps-historique.md)
- [Placement PS → PK (choix de table)](placement-ps-pk.md)
- [Consolidation / Regroupement](consolidation-regroupement.md)
- [Échantillonnage](echantillonnage.md)
## Chaîne picking — Ordre des traitements
L'ordre réel de la chaîne picking est le suivant :
1. **LIM-80** — [Assignation PK](job-assignation-pk.md) : quelle commande
sur quel poste → déclenche la génération des tâches de picking
2. **LIM-84** — [Séquençage TK → PS](sequencage-tk-ps.md) : ordonne les
sorties des TK vers les PS
3. **LIM-82** — [Placement PS → PK](placement-ps-pk.md) : la palette
arrivant au PS va sur quelle table du PK
4. Workflow opérateur au PK (picking effectif)
## Vue synthétique du picking Limagrain
```mermaid
flowchart TD
OS[OS libéré + stock assigné] --> ASSIGN["LIM-80 : Assignation PK\n(commande → poste)"]
ASSIGN --> SEQ["LIM-84 : Séquençage TK → PS\n(tri : négatif > maïs > volume > poids)"]
SEQ --> PS[Palette arrive au PS]
PS --> PLACE["LIM-82 : Placement PS → PK\n(choix de table)"]
PLACE --> TABLE{Table ou buffer ?}
TABLE -->|Table libre| PICK[Prélèvement au PK]
TABLE -->|Buffer ES| WAIT[Attente buffer]
WAIT --> PICK
PICK --> NEG{"Picking négatif ?\n(% > 55% ET ≥ 7 kg)"}
NEG -->|Oui| PNEG[Picking négatif]
NEG -->|Non| PPOS[Picking direct]
PNEG --> FILM[Choix filmage]
PPOS --> FILM
FILM --> PIE[Passage PIE]
@@ -0,0 +1,148 @@
---
title: "Consolidation (regroupement) — Processus sur poste"
tags: [picking, regroupement, consolidation, MOV, poste, custom]
status: draft
standard_ref: concepts/picking.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
author: Arthur
---
# Consolidation (regroupement) — Processus sur poste
> **Résumé** : processus [CUSTOM] de consolidation de palettes incomplètes
> partageant les mêmes critères de stock, sur poste de travail.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Le regroupement permet de vider des palettes partiellement remplies en
déplaçant leur stock vers d'autres palettes contenant le même stock.
L'objectif est de libérer des emplacements dans l'ASRS.
## Critères de consolidation
Le regroupement est proposé quand deux palettes ou plus partagent :
- Article
- Lot SAP
- Propriétaire
- Statut de stock
- Flag anoxie
## [CUSTOM] Vue de proposition de regroupement
Une vue spécifique est développée pour Limagrain. Elle présente :
- Les palettes candidates au regroupement
- Le gain potentiel en nombre de palettes
**Règle** : le regroupement n'est proposé que s'il permet de gagner au
moins 1 palette. Exemple : Bag/Pal = 75, si palette H1 = 73 et H2 = 5
→ pas de regroupement (73 + 5 = 78 > 75, pas de gain).
L'opérateur sélectionne un ou plusieurs ordres de regroupement depuis
cette vue.
## Processus complet
```mermaid
flowchart TD
VUE[Vue proposition regroupement] --> SELECT[Sélection ordres]
SELECT --> ASSIGN[Assignation poste automatique]
ASSIGN --> TACHE[Création tâches mouvement]
TACHE --> ORD[Ordonnancement palettes au poste]
ORD --> VERROU{Verrou « Réception » ?}
VERROU -->|Oui| RECOUNT[Recomptage]
VERROU -->|Non| PICK[Déplacement sacs]
RECOUNT --> PICK
PICK --> VIDE{Palette vidée ?}
VIDE -->|Oui| DEGAGE[Dégagement palette vide]
VIDE -->|Non| PICK
DEGAGE --> EVAC[Évacuation palette stock]
EVAC --> FILM[Choix filmage]
FILM --> PIE[Passage PIE]
PIE --> STOCK[Stockage ASRS]
```
## Assignation poste de travail
- Assignation **automatique** quand un ordre est lancé
- [CUSTOM] Si le lot a un Bag/Pal ≤ 2 → considéré « big-bag » →
seul le **poste P6** (équipé d'un palan) est assignable
- Un big-bag ne peut être consolidé que sur un autre big-bag
- Si P6 n'est pas en mode regroupement → tâche en attente
- Si aucun poste disponible → ordre en attente de libération
## [CUSTOM] Ordonnancement des palettes au poste
Une fois l'ordre lancé et le poste assigné, les palettes arrivent dans
cet ordre :
1. **Minimum de mouvements palette** (moins de déplacements physiques)
2. **Minimum de mouvements sac** (moins de manipulations)
3. **Palette complète** (en priorité la palette destinataire)
## Exécution sur poste
1. [CUSTOM] Si verrou « Réception » → recomptage avant regroupement
2. Les sacs de la palette à éliminer sont déplacés vers la palette
destinataire
3. Quand la palette est vidée → dégagement de la table de préparation
4. Évacuation de la palette avec stock restant via bouton EasyWMS
5. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
6. [CUSTOM] Message **MOV** à chaque déplacement de stock :
- Palette d'origine
- Palette de destination
- Nouvelle palette ? (Oui/Non)
- Quantité + caractéristiques (article, lot SAP, ...)
## Passage PIE post-regroupement
Contrôle identique aux autres processus :
- Dimensions max : 1300 × 1100 × 1900 mm
- Poids max : 1250 kg
- État palette bois correct
- Étiquette RFID connue
[CUSTOM] Calcul poids de référence :
```
Poids réf = Σ (Poids_unité_ligne_i × quantité_ligne_i) + poids_palette_bois
```
Vérification avec tolérance par type d'article (voir
[Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
## Points d'attention
⚠️ Le message MOV est envoyé à chaque mouvement unitaire — volumétrie
potentiellement élevée pour un regroupement complexe.
⚠️ Les 3 tables de préparation d'un même poste peuvent être occupées
simultanément pendant le regroupement.
⚠️ Un big-bag ne peut être consolidé que sur un autre big-bag (contrainte
physique + système).
## Questions ouvertes
- [ ] Programme de filmage exact pour le regroupement (@Théo)
- [ ] Interface opérateur vue regroupement — maquette validée ? (@Fabien)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
@@ -0,0 +1,145 @@
---
title: "Échantillonnage — Processus de contrôle qualité"
tags: [picking, échantillonnage, inventaire, qualité, poste, custom]
status: draft
standard_ref: concepts/inventory.md
jira_refs: []
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx]
last_updated: 2026-05-05
author: Arthur
---
# Échantillonnage — Processus de contrôle qualité
> **Résumé** : processus [CUSTOM] d'échantillonnage pour contrôle qualité,
> assimilé à un inventaire dans EasyWMS, avec prélèvement sur poste de travail.
> **Standard EasyWMS** : → voir [Inventory](../../concepts/count.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
L'échantillonnage sert au contrôle qualité sur une partie des lots
produits. Il consiste à prélever environ 200 grammes dans une partie du
stock sélectionné. Le prélèvement est ensuite analysé pour valider la
qualité du produit fini.
Dans EasyWMS, ce processus est assimilé à un **inventaire** (ordre
d'inventaire).
## Création de l'ordre d'échantillonnage
Deux modes de création :
| Mode | Origine | Détail |
|------|---------|--------|
| Interface ERP | Message de l'ERP (COR) | Spécifie un lot à inventorier |
| Manuel | Interface EasyWMS | Choix d'un lot par l'opérateur |
[CUSTOM] Un champ texte est disponible pour donner des **consignes**
rattachées à l'ordre d'inventaire.
## [CUSTOM] Assignation du stock
L'assignation diffère selon le mode de création :
### Création par interface ERP
- Maximum **4 palettes** échantillonnées :
- Si stock global < 4 → toutes les palettes
- Si stock global ≥ 4 → 4 palettes sélectionnées
- [CUSTOM] Les palettes avec un verrou d'écart de poids (« Production »)
sont **prioritaires** pour permettre une vérification simultanée
### Création manuelle
- Nombre de palettes choisi par l'opérateur
## Assignation poste de travail
- Automatique, à condition que le poste soit ouvert et autorise le
mode « échantillonnage »
- Si aucun poste paramétré en mode échantillonnage → tâches en attente
- Une fois le poste assigné → création des tâches de mouvement
## Processus sur poste de travail
```mermaid
flowchart TD
ORDRE[Ordre échantillonnage] --> ASSIGN[Assignation stock]
ASSIGN --> POSTE[Assignation poste auto]
POSTE --> TACHE[Tâches mouvement créées]
TACHE --> ARRIVE[Palette arrive sur TP]
ARRIVE --> VERROU{Verrou « Réception » ?}
VERROU -->|Oui| RECOUNT[Recomptage]
VERROU -->|Non| PRELEV[Prélèvement ~200g]
RECOUNT --> PRELEV
PRELEV --> ETIQ[Impression étiquette échantillonnage]
ETIQ --> SCOTCH[Scotch sac ouvert]
SCOTCH --> FILM[Choix filmage]
FILM --> EVAC[Évacuation → PIE → stockage]
EVAC --> NEXT{Palette suivante ?}
NEXT -->|Oui| ARRIVE
NEXT -->|Non| FIN[Fin ordre]
```
Les 3 tables de préparation peuvent être occupées simultanément.
Le processus est démarré et effectué sur **une seule palette à la fois**.
### Séquence opérateur
1. [CUSTOM] Si verrou « Réception » → recomptage avant échantillonnage
2. Prendre une pochette d'échantillonnage vide (hors EasyWMS)
3. Effectuer un prélèvement dans un des sacs (~200g, hors EasyWMS)
4. Déposer le prélèvement dans la pochette (hors EasyWMS)
5. Éditer et imprimer une **étiquette d'échantillonnage**
6. Coller l'étiquette sur la pochette (hors EasyWMS)
7. Scotcher le sac ouvert sur la palette (hors EasyWMS)
8. [CUSTOM] Choix filmage depuis vue spécifique (programme à définir)
9. Évacuer la palette vers le stockage
## Passage PIE post-échantillonnage
Contrôle identique aux autres processus :
- Dimensions max : 1300 × 1100 × 1900 mm
- Poids max : 1250 kg
- Étiquette RFID connue
- État palette bois correct
[CUSTOM] Poids de référence recalculé + vérification avec tolérance
(voir [Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
Si PIE NOK → rejet vers poste d'origine. Possibilité de forcer le
passage en cas d'excédent de poids non corrigeable.
## Points d'attention
⚠️ L'échantillonnage est un processus d'**inventaire** dans EasyWMS,
pas un processus de picking — important pour le paramétrage des modes
de poste.
⚠️ Les palettes avec verrou « Production » (écart poids) sont traitées
en priorité pour optimiser le recomptage.
⚠️ La quantité prélevée (~200g) n'est pas déduite du stock dans EasyWMS
(négligeable par rapport au poids total).
## Questions ouvertes
- [ ] Le prélèvement de 200g est-il déduit du stock ou négligé ? (@Nicolas)
- [ ] Programme de filmage exact (@Théo)
- [ ] Format de l'étiquette d'échantillonnage — validé ? (@Justine)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
@@ -0,0 +1,203 @@
---
title: "Mega Job — Assignation des tâches aux PK"
tags: [picking, job, assignation, agv, workflow]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-70, LIM-74, LIM-75, LIM-80]
confluence_refs: []
sources: ["LIM-70 LOT1.3 [AGV][JOB] MEGA JOB - assignation d'ordre par priorité de process par PK.md", "LIM-80 LOT2.1 2 Mini Job Assignation des postes PK aux commandes.md"]
last_updated: 2026-05-12
author: Arthur
---
# Mega Job — Assignation des tâches aux PK
> **Résumé** : job unique « chef d'orchestre » qui analyse les postes de
> travail éligibles et leur assigne des tâches de mouvement selon les
> modes autorisés et leur priorité. Évite la concurrence entre
> mini-jobs indépendants.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md),
> [Stations & Routes](../../concepts/stations.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Chez Limagrain, les postes de travail (PK) sont polyvalents : réception,
picking, regroupement, échantillonnage, re certification. Plusieurs
flux différents génèrent des tâches de mouvement vers les PK. Sans
orchestration centralisée, ces flux se feraient concurrence.
Le Mega Job est un **job unique** avec une entête qui analyse l'ensemble
des supports concernés et, selon leur emplacement d'origine et leurs
caractéristiques, délègue à des **sous-workflows** dédiés.
## Éligibilité d'un PK
Pour qu'un poste soit éligible à une nouvelle assignation, **toutes** les
conditions suivantes doivent être remplies :
- **Aucun ordre de sortie** assigné au PK (écran Menu > Contrôle >
Affectation des postes de prélèvements)
- **Aucune tâche de mouvement** ayant pour destination ce PK
- **Aucune palette** présente sur un des sous-emplacements du PK
- **Le poste est ouvert** (mode actif)
- **Le paramètre MODES_PKxx existe et n'est pas vide** — sinon le PK
est ignoré
Si un PK ne remplit pas ces conditions, le job le saute et passe au
suivant.
## Logique principale
```mermaid
flowchart TD
A[Début du job] --> B[Lister les PK ouverts]
B --> C{PK éligible ?}
C -- Non --> D[PK suivant]
C -- Oui --> E[Lire MODES_PKxx]
E --> F{Paramètre existe et non vide ?}
F -- Non --> D
F -- Oui --> G[Trier les modes par priorité]
G --> H[Exécuter sous-WF du mode priorité 1]
H --> I{Tâche assignée ?}
I -- Oui --> D
I -- Non --> J[Exécuter sous-WF du mode priorité 2]
J --> K{Tâche assignée ?}
K -- Oui --> D
K -- Non --> L[... mode suivant ...]
L --> D
D --> M{Autres PK ?}
M -- Oui --> C
M -- Non --> N[Fin du job]
```
Pour chaque PK éligible :
1. Le WMS récupère le paramètre `MODES_PKxx` (x = numéro du poste)
2. Les modes sont triés par priorité croissante
3. Le sous-workflow du mode de priorité la plus haute est exécuté
4. Si le sous-WF a assigné une tâche → passage au PK suivant
5. Sinon → exécution du sous-WF du mode suivant dans l'ordre de priorité
6. Si aucun sous-WF n'a rien assigné → le PK reste en attente
## Gestion des Big-Bags
Le paramètre `PK_BIGBAG` définit quels PK autorisent la présence de
big-bags (physiquement : P5 et P6 avec palan).
- Les ordres contenant des supports big-bag sont **interdits** sur les
PK qui ne les autorisent pas
- Ces ordres sont **prioritaires** (en respectant le séquençage des
process en première priorité) sur les PK qui les autorisent
## Sous-workflows
Le Mega Job délègue la création effective des tâches à des sous-workflows
spécialisés :
| Sous-WF | Ticket | Process | Page wiki |
|---------|--------|---------|-----------|
| Mini Job images de quai → PK | [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Réception fournisseur / intersite / retour client (depuis images de quai) | [Job réception PK](../05-agv/job-reception-pk.md) |
| Mini Job PS → PK | [LIM-75](https://easywmsfrance.atlassian.net/browse/LIM-75) | _(tâche à écrire)_ | — |
| Mini Job assignation commandes → PK | [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Assignation des ordres de sortie (commandes) aux PK pour picking | Voir section ci-dessous |
Chaque sous-workflow retourne une information au WF principal indiquant
s'il a assigné quelque chose ou non.
## Mini Job — Assignation commandes aux PK (LIM-80)
Ce sous-workflow est appelé par le Mega Job quand le mode **Picking** est
actif sur un PK. Il assigne un ordre de sortie (commande) au poste.
### Éligibilité du PK pour une commande
Le PK peut recevoir une commande si **toutes** les conditions sont
remplies :
- Le PK **autorise la préparation de commande** (mode Picking actif)
- Le PK **n'a pas de commande déjà assignée**
- Le PK **est vide** (aucune palette présente)
- Le PK **n'a aucune tâche en direction de celui-ci**
### Choix de la commande
```mermaid
flowchart TD
A[PK éligible en mode Picking] --> B{Commande Messagerie\ndisponible ?}
B -- Oui --> C{PK_TRANSPORTEUR_MESSAGERIE\ncontient une valeur ?}
C -- Non --> D[Assigner 1ère Messagerie\net enregistrer PK dans param]
C -- Oui --> E{Valeur = ce PK ?}
E -- Oui --> F[Assigner prochaine Messagerie\ndu même transporteur]
F --> G{Commande trouvée ?}
G -- Non --> H[Vider le paramètre]
E -- Non --> I[Ignorer les Messagerie\nde ce transporteur]
I --> J[Chercher autre commande]
B -- Non --> J
H --> J
J --> K[Assignation standard\npar tournée / numéro d'arrêt]
```
#### Commandes Messagerie (prioritaires)
Les commandes de **classe Messagerie** sont expédiées le jour même et
sont donc **prioritaires** sur les commandes standard.
Une fois un PK choisi pour une commande Messagerie, **toutes les
commandes Messagerie du même transporteur** doivent être assignées au
même PK. Pour cela, un paramètre par transporteur est créé :
`PK_TRANSPORTEUR_MESSAGERIE`.
Règles :
- À l'assignation d'une commande Messagerie au PK, le nom du PK est
enregistré dans le paramètre
- Si le paramètre contient le nom de ce PK → assigner **uniquement**
des commandes Messagerie du même transporteur. Si aucune n'est
trouvée → vider le paramètre
- Si le paramètre contient un autre PK → ignorer toutes les commandes
Messagerie de ce transporteur pour ce PK
#### Commandes standard
Le processus standard est utilisé pour assigner une commande à une
table de préparation et un PK. Les commandes d'une même tournée sont
préparées en respectant le **numéro d'arrêt** (plus petit numéro
d'arrêt en premier).
## Points d'attention
⚠️ Le Mega Job est le chef d'orchestre du picking : il distribue le
travail aux PK en fonction des modes configurés par PK.
⚠️ Les commandes Messagerie sont prioritaires et ont une affinité
transporteur/PK via `PK_TRANSPORTEUR_MESSAGERIE`.
⚠️ L'éligibilité PK vérifie 4 conditions (mode autorisé, pas de
commande, vide, pas de tâche en cours).
## Questions ouvertes
- [ ] Fréquence du Mega Job — toutes les N secondes ou événementiel ?
(@Nicolas)
- [ ] Sous-WF regroupement et échantillonnage — quand les documenter ?
(@Arthur)
- [ ] Interaction PK_BIGBAG et modes de travail — un PK en mode
Big-Bag peut-il aussi traiter du picking normal ? (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-70 (Mega Job) |
| 2026-05-12 | Arthur | Ajout sous-WF assignation commandes (LIM-80) : Messagerie prioritaire, affinité transporteur/PK |
| 2026-05-13 | Arthur | Restauration sections tronquées (Messagerie détail, commandes standard, points d'attention, questions, historique, références) |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation commandes) | 2026 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) | 2026 |
@@ -0,0 +1,287 @@
---
title: "Picking sur poste de travail — Expédition client"
tags: [picking, poste, expédition, ordonnancement, MOV, PCK]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-82]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-82 LOT2.2 [PICKING] Ordonnancement des tâches de picking PS PK.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-13
author: Arthur
---
# Picking sur poste de travail — Expédition client
> **Résumé** : processus [CUSTOM] de picking sur poste de travail pour
> les commandes client, avec ordonnancement par espèce, règles de picking
> négatif et contraintes physiques.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Le picking chez Limagrain se fait sur les postes de travail automatisés
(pas de picking mobile en allée). Les palettes source et les palettes
de préparation sont acheminées par AGV sur les tables de préparation (TP).
> **Note** : cette page décrit le picking tel que défini dans l'AF V1.5.
> Le projet a depuis évolué vers un modèle « picking combinatoire »
> (CR V3.0, 4 jobs, CstAtt) qui sera documenté séparément.
## Déclenchement
Le picking est déclenché pour les commandes client (RUT type « Client »)
quand des palettes incomplètes sont nécessaires (la quantité demandée
ne correspond pas à des palettes complètes).
Prérequis : un **poste de travail assigné** (auto ou manuellement).
## [CUSTOM] Ordonnancement des palettes au poste
Une fois le poste assigné, les palettes arrivent dans cet ordre :
### Tri par espèce et gerbabilité
1. **Espèce Maïs** toujours en premier (pas la variété mais l'espèce)
2. Puis espèce avec la **plus grande quantité** dans la commande
3. Si égalité → **article/lot le plus lourd** en base de palette
**Mapping Espèce → stack (gerbabilité)** : le maïs = stack 0 (le plus
lourd/stable, donc en base). [CUSTOM] Gestion en **async sur l'ITM** pour
calculer la gerbabilité automatiquement à la création de l'article. Tri
des tâches de picking dans le workflow `StackerCrane_SortTasks_PR`.
### ~~Séparation par traitement commercial~~ SUPPRIMÉ (réu. 11/05/2026)
~~Pas de mélange entre articles avec traitement et sans traitement
sur une même palette fille.~~
**Décision** : `CONTROLE_TRAITEMENT_COMMERCIAL = false`. L'entrepôt
Limagrain ne fait pas de bio, pas de raison de maintenir cette
contrainte. Paramètre réactivable si besoin futur.
> Voir [Séquençage TK → PS — Arbitrage](sequencage-tk-ps.md#arbitrage-des-contradictions-reu-11052026)
> pour le détail de l'analyse comparative.
## [CUSTOM] Règle du picking négatif
**Deux conditions cumulatives** (réu. 11/05/2026) :
1. La quantité à prélever dépasse le **seuil fiche article** (défaut
55%, paramétrable par article via "Complete quantity percent excess
for negative picking")
2. Le **poids unitaire du sac ≥ 7 kg** (raison : instabilité palette si
gros sacs ramenés sur petits sacs)
Si les deux conditions sont remplies → **picking négatif** : au lieu de
déplacer les sacs à expédier, déplacer les sacs qui **retourneront en
stock** (moins de mouvements physiques).
Si l'une des deux conditions n'est pas remplie → picking direct
classique.
> Le picking négatif est **prioritaire sur Maïs first** et toutes les
> autres règles de tri (confirmé par Olivier, réu. 11/05/2026).
> Voir [Séquençage TK → PS](sequencage-tk-ps.md#critère-1--picking-négatif-en-premier).
## [CUSTOM] Calcul équivalent palette (pro rata Bag/pal)
Pour déterminer si une palette est « pleine », calcul en **pro rata
Bag/pal** (réu. 11/05/2026, remplace la logique DevOps "Bag/pal max") :
```
Équivalent palette d'un sac = 1 ÷ Bag/Pal de son lot
```
Le calcul est additif et gère nativement des lots avec des Bag/pal
différents sur une même palette :
```
Exemple :
15 sacs lot Bag/pal 20 + 10 sacs lot Bag/pal 75
= 15/20 + 10/75
= 0,75 + 0,133
= 88,3% → il reste ~12% de place
```
Seuil cible : **~95%** de remplissage (marge de sécurité).
Poids max palette : **1 250 kg** (AF fait foi, corrige 1 200 kg du
DevOps).
## [CUSTOM] Verrou « HORS TOLERANCE » — Recomptage
Si la palette source porte le verrou « HORS TOLERANCE » → recomptage
demandé avant le picking (inventaire).
- Si stock restant suffisant après inventaire → assignation maintenue
(workflow `OnStockAdjust` recalcule uniquement si nécessaire — ne casse
pas la tâche en cours)
- Si plus assez de stock → réassignation ailleurs + retrait verrou
## [CUSTOM] Algorithme de répartition des palettes sur les TP
Logique combinatoire complète gérant tous les cas :
- Picking négatif et enchaînement de pickings négatifs
- Ordonnancement par espèce
- Terminer une palette pleine avant d'en entamer une autre
- Cadencement des buffers devant les postes de picking
- Pas de mélange de traitement commercial (via famille d'article)
- **Contrainte** : l'opérateur ne doit **pas déplacer de sacs 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. Quand la palette de
prélèvement est vidée, l'opérateur la remet manuellement sur une pile
de palettes vides à proximité.
> Prévoir un process sans picking négatif pour les cas où c'est rarement
> utilisé (ou monter le seuil, ex : 70% au lieu de 55%).
## Processus de préparation
### Arrivée des palettes (toujours un poste 3 TP)
- Première palette au **centre** si picking négatif proposé, sinon sur
un côté
- Si une palette est sur un côté et qu'on propose du picking négatif →
prévenir l'opérateur de déplacer la palette au centre
- La palette client revient **toujours** au centre
- Pas de prépa sur 6 TP en simultané
### Picking
1. Palette source arrive sur une TP
2. Palette destination (vide ou en cours) sur une autre TP
3. Opérateur prélève les sacs (ou sacs retour si picking négatif)
4. ~~[CUSTOM] Message MOV envoyé à SAP~~ **ANNULÉ** (décision client)
5. Avant évacuation : choix filmage (CstData transmis à Galileo).
Possibilité de choisir « pas de filmage ».
6. Évacuation palette → PIE → contrôle poids → stockage/expédition
## [CUSTOM] Ordonnancement des tâches PS → PK (LIM-82)
Détail du cadencement des palettes depuis les postes de sortie (PS)
vers les postes de picking (PK). Toutes les tâches de picking se font
sur les tables élévatrices des PK.
### Règles de priorité
1. **Picking négatif toujours en premier** — une seule palette à la fois
pour ce process, toujours déposée sur la **table du centre**
2. **Picking classique ensuite** — jusqu'à **2 palettes simultanées** au
PK, déposées sur les **tables latérales**
3. Le WMS peut envoyer **1 palette picking négatif + 1 palette picking
classique** en même temps (pour compléter la palette post-picking
négatif)
4. Le nombre de palettes de prélèvement au PK ne dépasse **jamais 2**
### Picking négatif — Détail
À chaque tâche de picking négatif :
- Un **nouveau code SSCC** est généré pour la palette où l'excédent de
stock est déposé
- Une **étiquette RFID** est imprimée pour cette nouvelle palette
- La palette de picking négatif va toujours au **centre** du PK
### Cadencement des buffers
Les palettes non encore nécessaires au PK sont dirigées vers les
**zones d'attente** (buffers ES_X) situées entre le PS et le PK.
Le nombre max de palettes pré-chargées est contrôlé par
`MAX_PRELOAD_PAR_PK` (défaut : 3). L'ordre de sortie des buffers
suit `Line.CstAtt` (séquence), pas l'ordre FIFO d'entrée physique.
Voir [Placement PS → PK](placement-ps-pk.md) pour l'algorithme
complet de choix de table et de gestion des buffers.
## Information passage conteneur client
Le passage en conteneur client est visible dans le **LOC** envoyé
toutes les 5 minutes à SAP (flag « client » = true). Voir
[Flux ERP outbound](../04-outbound/flux-erp-outbound.md).
## Étiquetage
### Cas standard (non MII ou MII mono lot)
- 1 étiquette RFID pour la palette physique bois
### Cas MII multi lots
- 1 étiquette HU RFID pour la palette physique (HU mère)
- 1 étiquette HU sans RFID par ligne de stock (HU fille / intercalaire)
- Impression auto à chaque nouvelle palette (RFID) et à chaque article
(intercalaire)
- Basé sur la **classe de commande**
## Contraintes opérateur (hors EasyWMS)
Règles non gérées par le système mais à respecter :
1. Palette ne doit pas excéder **1,90 m** (sinon rejet PIE)
2. Palette ne doit pas excéder **1 250 kg** (sinon rejet PIE)
3. Pas de gerbage de palette
4. Disposition d'intercalaires entre couches
## Calcul poids de référence (post-picking)
Pour les palettes multi-lignes de stock :
```
Poids réf = Σ (Poids_unité_ligne_i × quantité_ligne_i) + poids_palette_bois
```
Contrôle PIE identique aux autres processus (voir
[Contrôle qualité réception](../01-inbound/controle-qualite-reception.md)).
## Points d'attention
⚠️ Le picking négatif (seuil 55% + poids ≥ 7 kg, deux conditions
cumulatives) est une règle métier intégrée dans EasyWMS — c'est un
développement custom.
⚠️ Le traitement commercial est **désactivé**
(`CONTROLE_TRAITEMENT_COMMERCIAL = false`, réu. 11/05/2026).
⚠️ L'ordonnancement espèce → quantité → poids est géré par EasyWMS
(pas un choix opérateur).
⚠️ Le message MOV est **ANNULÉ** (décision réunion client).
⚠️ Le verrou HORS TOLERANCE déclenche un recomptage mais ne casse pas
l'assignation si le stock restant est suffisant.
⚠️ L'algorithme de répartition TP est le « gros morceau » custom du
picking — gestion combinatoire de tous les cas.
## Questions ouvertes
- [x] Programme de filmage exact — documenté, 8 programmes A→H
(voir [Flux expédition](../04-outbound/flux-expedition.md#filmage))
- [x] Process sans picking négatif / seuil — confirmé 55% + poids ≥ 7 kg
(réu. 11/05/2026)
- [x] Traitement commercial — supprimé
(`CONTROLE_TRAITEMENT_COMMERCIAL = false`, réu. 11/05/2026)
- [ ] Gestion du picking négatif dans l'interface opérateur (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Gerbabilité/stack, algo répartition TP, verrou HORS TOLERANCE, MOV annulé, arrivée palettes 3 TP, filmage CstData |
| 2026-05-12 | Arthur | Ajout ordonnancement PS → PK (LIM-82), picking négatif détaillé, cadencement buffers |
| 2026-05-12 | Arthur | TC supprimé, picking négatif 2 conditions cumulatives 55% + 7 kg, pro rata Bag/pal, poids max 1 250 kg (réu. 11/05/2026) |
| 2026-05-13 | Arthur | Restauration sections perdues (étiquetage, contraintes, poids réf, points d'attention), correction seuil 50% → 55% |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| LIM-82 LOT2.2 | Ticket Jira (ordonnancement PS → PK) | 2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion + analyse comparative | 11/05/2026 |
@@ -0,0 +1,325 @@
---
title: "Placement des palettes PS → PK (choix de table)"
tags: [picking, placement, table, buffer, ping-pong, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-82]
confluence_refs: []
sources: ["Logique combinatoire picking - PS vers PK - V1.0.md"]
last_updated: 2026-05-12
author: Arthur
---
# Placement des palettes PS → PK (choix de table)
> **Résumé** : algorithme exécuté par le WMS lorsqu'une palette source
> arrive au poste de sortie (PS). Il décide sur quelle table du PK la
> poser, ou la redirige vers un buffer ES. Ce process s'exécute **en
> aval** du [séquençage TK → PS](sequencage-tk-ps.md) : les palettes
> arrivent au PS déjà triées.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
Chaque PK dispose de **3 tables** soumises à une contrainte d'adjacence
stricte :
```
TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE
✅ adjacentes ✅ adjacentes
TABLE_GAUCHE ←————————————————→ TABLE_DROITE
❌ INTERDIT
```
Règles de mouvement :
- Le stock est **toujours sur une palette**, jamais posé directement sur
la table
- L'opérateur peut déplacer du **stock** (sacs, colis) d'une palette à
une autre **uniquement entre deux tables adjacentes**
- Il est **interdit de déplacer une palette d'une table à une autre**
ni par l'opérateur, ni par l'AGV. Une palette arrive sur une table
et ne peut que repartir (évacuation)
- **TABLE_CENTRE** est le pivot : seule table adjacente aux deux autres
## Déclenchement
L'algorithme est appelé **à chaque arrivée physique d'une palette au
PS**. Le PS interroge le WMS qui retourne une réponse parmi :
- **TABLE_GAUCHE**, **TABLE_CENTRE** ou **TABLE_DROITE** → la palette
est envoyée sur cette table
- **Buffer ESx** → aucune table n'est disponible, la palette est
redirigée vers un emplacement buffer
- **Attente** → ni table ni buffer disponible, la palette reste au PS
## Entrées de l'algorithme
| Donnée | Source |
|--------|--------|
| Tâche courante : palette source, article, quantité, type de picking (NÉGATIF / DIRECT), `Line.CstAtt` (séquence) | Tâche associée à la palette |
| État des 3 tables du PK : VIDE, PALETTE_FILLE_ACTIVE, PALETTE_FILLE_EN_ATTENTE, PALETTE_SOURCE_EN_PICKING, PALETTE_SOURCE_EN_ATTENTE, EN_ATTENTE_EVACUATION | État temps réel du PK |
| Tâches suivantes de l'OS (triées par `Line.CstAtt` croissant) | OS en base |
| Buffers ES disponibles : parmi ES1ES16, ceux non occupés ni ciblés | État temps réel des buffers |
| Nombre de buffers déjà affectés à ce PK vs `MAX_PRELOAD_PAR_PK` (défaut : 3) | Compteur par PK |
## Décision niveau 1 : table du PK ou buffer ?
```
FONCTION décider_destination(palette, PK) :
table_cible ← choisir_table(palette, PK)
SI table_cible ≠ NULL :
RETOURNER table_cible
// Aucune table disponible → tenter un buffer
SI nb_buffers_affectés(PK) < MAX_PRELOAD_PAR_PK :
buffer ← premier ES libre
SI buffer existe :
RETOURNER buffer
// Ni table ni buffer disponible
RETOURNER ATTENTE
```
## Décision niveau 2 : choix de la table
Le choix dépend du **type de picking** de la tâche associée.
### Cas PICKING_NÉGATIF
En picking négatif, la palette source arrive sur une table, l'opérateur
retire l'excédent sur une palette posée sur une **table adjacente**,
puis échange d'étiquettes. La palette a besoin de **2 tables** : une
pour elle, une adjacente libre pour l'excédent.
```
FONCTION choisir_table_picking_négatif(PK) :
// Priorité 1 : centre + un côté libre
SI TABLE_CENTRE == VIDE ET (TABLE_GAUCHE == VIDE
OU TABLE_DROITE == VIDE) :
RETOURNER TABLE_CENTRE
// Priorité 2 : côté + centre libre
SI (TABLE_GAUCHE == VIDE OU TABLE_DROITE == VIDE)
ET TABLE_CENTRE == VIDE :
RETOURNER côté vide
// Priorité 3 : centre libre + un côté libérable
SI TABLE_CENTRE == VIDE ET un côté est libérable :
évacuer(côté libérable)
RETOURNER TABLE_CENTRE
// Priorité 4 : un côté libre + centre libérable
SI un côté == VIDE ET TABLE_CENTRE est libérable :
évacuer(TABLE_CENTRE)
RETOURNER côté vide
// Dernier recours : évacuation forcée
évacuer_table_prioritaire(PK)
RETOURNER choisir_table_picking_négatif(PK) // rappel
```
### Cas PICKING_DIRECT
La palette source doit être posée sur une table **adjacente à la
palette fille active**. Le choix se fait en fonction de l'emplacement
de la palette fille.
```
FONCTION choisir_table_picking_direct(tâche, PK) :
// Étape 1 : localiser la palette fille compatible
table_fille ← localiser_palette_fille(tâche, PK)
SI table_fille == NULL :
table_fille ← choisir_table_nouvelle_palette_fille(PK)
// Étape 2 : choisir une table adjacente
tables_adj ← tables_adjacentes(table_fille)
// Prio A : palette source déjà sur une adjacente
// (multi-tâches même palette)
POUR chaque t DANS tables_adj :
SI t contient tâche.PALETTE_SOURCE :
RETOURNER t
// Prio B : adjacente VIDE
// Si 2 adjacentes libres (PF au centre) → ping-pong
adjacentes_vides ← [t POUR t DANS tables_adj SI t == VIDE]
SI len(adjacentes_vides) == 2 :
RETOURNER choisir_côté_ping_pong(PK)
SI len(adjacentes_vides) == 1 :
RETOURNER adjacentes_vides[0]
// Prio C : adjacente en cours d'évacuation (AGV en route)
POUR chaque t DANS tables_adj :
SI t == EN_ATTENTE_EVACUATION :
RETOURNER t
// Prio D : forcer l'évacuation d'une adjacente
t_à_libérer ← choisir_table_à_évacuer(tables_adj)
évacuer(t_à_libérer)
RETOURNER t_à_libérer
```
### Localisation de la palette fille compatible
```
FONCTION localiser_palette_fille(tâche, PK) :
// Parmi les PF actives
POUR chaque table :
SI table.état == PALETTE_FILLE_ACTIVE :
RETOURNER table
// Note : CONTROLE_TRAITEMENT_COMMERCIAL = false,
// donc pas de filtre TC
// Puis parmi les PF en attente
POUR chaque table :
SI table.état == PALETTE_FILLE_EN_ATTENTE :
RETOURNER table
RETOURNER NULL
```
### Choix de table pour une nouvelle palette fille
```
FONCTION choisir_table_nouvelle_palette_fille(PK) :
// TABLE_CENTRE = pivot → maximise la flexibilité
SI TABLE_CENTRE == VIDE : RETOURNER TABLE_CENTRE
SI TABLE_GAUCHE == VIDE : RETOURNER TABLE_GAUCHE
SI TABLE_DROITE == VIDE : RETOURNER TABLE_DROITE
// Aucune table vide → forcer une évacuation
évacuer_table_prioritaire(PK)
RETOURNER choisir_table_nouvelle_palette_fille(PK)
```
## Optimisation ping-pong
Le ping-pong est l'optimisation principale pour le débit. Il n'est
possible que lorsque la **palette fille est au centre** : les palettes
sources alternent alors entre TABLE_GAUCHE et TABLE_DROITE, de sorte
que la palette suivante est déjà en place quand l'opérateur termine.
```
FONCTION choisir_côté_ping_pong(PK) :
SI TABLE_GAUCHE.état ∈ {PALETTE_SOURCE_EN_PICKING,
PALETTE_SOURCE_EN_ATTENTE} :
RETOURNER TABLE_DROITE
SI TABLE_DROITE.état ∈ {PALETTE_SOURCE_EN_PICKING,
PALETTE_SOURCE_EN_ATTENTE} :
RETOURNER TABLE_GAUCHE
// Aucun côté occupé → choix arbitraire
RETOURNER TABLE_GAUCHE
```
**Recentrage** : si la palette fille est sur un côté (issue d'un
picking négatif), le ping-pong est impossible. Si le nombre de
PICKING_DIRECT restants ≥ `SEUIL_RECENTRAGE_PF` (défaut : 3), le WMS
peut déclencher un mouvement AGV pour recentrer la PF sur
TABLE_CENTRE.
## Évacuation des tables — Priorité
Lorsqu'aucune table n'est libre et qu'il faut en libérer une :
```
FONCTION évacuer_table_prioritaire(PK) :
// 1. Palette vide → retrait manuel (pas d'AGV)
// 2. Table déjà en attente d'évacuation → attendre AGV
// 3. Palette source en attente, non réutilisée par
// la prochaine tâche → AGV vers buffer/ASRS
// 4. Palette fille en attente → AGV vers image de quai
// 5. Palette source en attente (même si réutilisée)
// → AGV vers buffer ES
```
## Gestion des buffers ES → PK
Quand une table se libère au PK, le WMS choisit parmi les palettes en
buffer affectées à ce PK :
- Tri par `Line.CstAtt` **croissant** (plus petit = plus prioritaire)
- La première palette compatible avec la table libérée est envoyée
**Règle critique** : l'ordre de sortie des buffers est dicté par
`Line.CstAtt`, **pas** par l'ordre d'arrivée physique en buffer.
## Palettes multi-commandes
Une palette source peut être assignée à plusieurs OS.
Après picking de la commande en cours :
- Si la palette a encore des tâches pour d'autres OS → marquée
`MULTI_COMMANDE`, envoyée vers un buffer ES libre
- Elle reste en buffer jusqu'au lancement de l'OS suivant
- Une palette multi-commande au PK ou en mouvement compte comme une
place buffer occupée dans le calcul de `MAX_PRELOAD_PAR_PK`
## Priorité d'accès aux buffers entre PK
Lorsque les buffers ES sont saturés, la priorité est définie par la
séquence du mode "Picking" dans `MODES_PKxx`
(voir [Modes de travail PK](stations-picking.md)) :
- Séquence 1 = priorité la plus haute
- Quand un buffer se libère → affecté en priorité au PK avec la
séquence la plus basse parmi ceux qui ont des palettes en attente
## Paramètres WMS
| Paramètre | Description | Défaut |
|-----------|-------------|--------|
| `MAX_PRELOAD_PAR_PK` | Nombre max de palettes pré-chargées en buffer ES par PK | 3 |
| `SEUIL_RECENTRAGE_PF` | Nombre min de PICKING_DIRECT restants pour recentrer la PF au centre | 3 |
| `CONTROLE_TRAITEMENT_COMMERCIAL` | Séparer ou non les articles par TC sur les palettes filles | `false` (V1.1) |
| `MODES_PKxx` | Modes autorisés + priorité par PK (LIM-69) | — |
| `PK_BIGBAG` | Autorise ou non les big-bags par PK (LIM-70) | — |
## Points d'attention
⚠️ La contrainte d'adjacence est **physique** : l'opérateur ne peut pas
déplacer de sacs entre TABLE_GAUCHE et TABLE_DROITE directement.
⚠️ Le picking négatif nécessite 2 tables (palette source + adjacente
pour l'excédent), ce qui complique la gestion des cas saturés.
⚠️ Le recentrage de la palette fille (AGV) n'est déclenché que si
suffisamment de tâches de picking direct restent (≥ SEUIL_RECENTRAGE_PF).
⚠️ L'ordre de sortie des buffers suit `Line.CstAtt`, pas l'ordre FIFO
d'entrée en buffer.
## Questions ouvertes
(Aucune identifiée — algorithme V1.0 complet)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création depuis spec "Logique combinatoire picking - PS vers PK - V1.0" |
| 2026-05-13 | Arthur | Correction règle déplacement palette (jamais déplacée, ni AGV ni opérateur), ajout jira_ref LIM-82 |
## Références
| Source | Type | Date |
|--------|------|------|
| Logique combinatoire picking - PS vers PK - V1.0 | Spécification technique | 27/04/2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira (modes PK) | 2026 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
@@ -0,0 +1,98 @@
---
title: "Séquençage TK → PS — Historique et arbitrage"
tags: [picking, séquençage, historique, décision]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
author: Arthur
---
# Séquençage TK → PS — Historique et arbitrage
> **Résumé** : historique des solutions envisagées pour le séquençage
> TK → PS, et arbitrage des contradictions entre les 3 sources
> (DevOps #64854, AF §6.4.8, réunion 11/05/2026).
> Pour l'algorithme retenu, voir
> [Séquençage TK → PS](sequencage-tk-ps.md).
## Solutions envisagées
### Solution 1 — Process isolé sur finalisation des tâches d'OS
Séquençage via `OS.Line.CstAtt`, marquage OS traité via
`OS.CstAtt = true`.
**Problème** : pas assez dynamique en cas de recréation de tâches.
### Solution 2 — Calcul dans le workflow stacker_crane
Intégration dans `Galileo_StackerCraneSearch_PR` /
`StackerCrane_SortTasks_PR`, recalcul complet à chaque exécution.
**Problème** : complexité élevée (requêtes LINQ imbriquées multi-OS).
### Solution 3 — Solution 1 transformée en job
Job planifié, excluant les tâches en cours.
**Problème** : pas assez réactif par rapport à la cadence des TK.
### Solution 4 — Process événementiel (retenue)
Solution 1 déclenchée sur `TaskCreatedEvent` et
`OutboundOrderReleasedEvent`, avec verrouillage `OS.CstAtt`.
**Avantages** : simple, découplée, réactive.
## Arbitrage des contradictions (réu. 11/05/2026)
Analyse comparative : DevOps #64854 (le plus ancien), AF §6.4.8
(intermédiaire), réunion 11/05/2026 Arthur + Justine + Olivier
(fait foi). **Tous les points sont résolus.**
| Sujet | DevOps | AF | Réunion (fait foi) |
|-------|--------|----|--------------------|
| Traitement commercial | À creuser | Séparation stricte | **Supprimé** (`false`) |
| Seuil picking négatif | Pas de seuil | > 50% | **55% ET poids ≥ 7 kg** |
| Poids max palette | 1 200 kg | 1 250 kg | **1 250 kg** (AF) |
| Négatif vs Maïs first | Pas de hiérarchie | Maïs en tête | **Négatif prioritaire** |
| Semences essais | Dédié en haut | Non mentionné | **Couvert par poids** |
| Lots même Bag/pal | Prioriser | — | **Retenu** |
| Différenciation marque | Aucune | — | **Confirmé** |
| Calcul Bag/pal | "Prendre le max" | Équivalent palette | **Pro rata** |
## Changelog V1.1 (11/05/2026)
- Hiérarchie des règles : complétude palette et anti-split
prioritaires sur le tri
- Picking négatif : condition cumulative poids ≥ 7 kg ajoutée
- TC **supprimé** (`CONTROLE_TRAITEMENT_COMMERCIAL = false`)
- Calcul remplissage : pro rata Bag/pal (remplace "Bag/pal max")
- Poids max palette : 1 250 kg (corrige 1 200 kg du DevOps)
- Confirmé : mélange espèces OK, pas de gerbage, 1,90 m max
## Points non traités (hors scope réunion)
- Affichage opérateur au PK (consignes, déviation possible)
- Picking négatif < 7 kg en option
- Messagerie carton (navette du lendemain, zone angle Est)
- Verrou réception → recomptage avant picking (AF uniquement)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création — extraction depuis sequencage-tk-ps.md |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
| DevOps #64854 | Note historique | — |
| AF §6.4.8 | Analyse fonctionnelle V1.5 | 28/11/2025 |
@@ -0,0 +1,155 @@
---
title: "Séquençage des tâches de picking TK → PS"
tags: [picking, séquençage, transstockeur, événement, workflow, algorithme]
status: draft
standard_ref: concepts/picking.md
jira_refs: [LIM-84, LIM-61]
confluence_refs: []
sources: ["LIM-84 LOT2.2 [PICKING] Séquençage des tâches de picking TK PS.md", "Logique combinatoire picking - TK vers PS - V1.1.md", "REU PICKING SEQUENCAGE 11-05-2026 - Analyse comparative notes + AF + devops.md"]
last_updated: 2026-05-12
author: Arthur
---
# Séquençage des tâches de picking TK → PS
> **Résumé** : algorithme événementiel (V1.1) qui ordonne les tâches
> de picking depuis les transstockeurs (TK) vers les postes de sortie
> (PS). Il écrit les numéros de séquence `Line.CstAtt` sur chaque
> tâche et contrôle le flag `OS.CstAtt` pour autoriser le
> stacker_crane.
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
## Déclenchement
L'algorithme est déclenché sur **deux événements** :
- **TaskCreatedEvent** — nouvelle tâche de picking créée (MINI JOB
LIM-75 ou réassignation). Condition : tâche type PICKING et OS
statut Released
- **OutboundOrderReleasedEvent** — OS passe en Released (lancement
ou relance après arrêt)
## Process principal
1. `OS.CstAtt ← false` (verrouille le stacker_crane)
2. Récupérer toutes les tâches de picking de l'OS
3. Filtrer : tâches **en attente** uniquement (en cours = intouchables)
4. Trier selon les 5 critères ci-dessous
5. Écrire les séquences `Line.CstAtt`
6. `OS.CstAtt ← true` (déverrouille le stacker_crane)
## Contraintes amont (constitution palettes filles)
**C1. Palettes les plus complètes possible** — seuil ~95%. Calcul en
pro rata Bag/pal : chaque sac = `1/Bag_pal` de son lot. Additif,
gère nativement les multi-lots.
**C2. Ne pas splitter les lignes de stock** — prioritaire sur les
règles de tri. Regrouper la ligne complète quitte à décaler le maïs.
| Contrainte | Valeur |
|------------|--------|
| Poids max palette | **1 250 kg** |
| Hauteur max | 1,90 m |
| Gerbage | Interdit |
| Mélange espèces | Autorisé |
| Traitement commercial | **Désactivé** (V1.1) |
## Les 5 critères de tri (V1.1)
```
tâches.trier_par(
(1) type_picking ASC // NÉGATIF (0) avant DIRECT (1)
(2) espèce_maïs ASC // MAÏS (0) avant autres (1)
(3) quantité_espèce DESC // espèce la + volumineuse
(4) poids_article DESC // article le + lourd en base
(5) palette_source // regroupement par palette
)
```
### Critère 1 — Picking négatif en premier
Prioritaire sur tout, y compris Maïs first. Condition cumulative
(V1.1) : % quantité > seuil fiche article (défaut 55%) **ET** poids
unitaire sac ≥ 7 kg.
### Critère 2 — Espèce Maïs en premier
Le maïs est lourd/stable → base de palette fille.
### Critère 3 — Espèce la plus volumineuse
Espèce avec la plus grande quantité totale de sacs dans l'OS.
### Critère 4 — Article le plus lourd en base
Les semences essais (légères) se retrouvent naturellement en haut.
### Critère 5 — Regroupement par palette source
L'opérateur enchaîne toutes les tâches d'une palette avant de la
libérer.
## Écriture des séquences (Line.CstAtt)
Deux tâches **interchangeables** reçoivent le **même numéro** de
séquence (ex-aequo), laissant au stacker_crane la liberté
d'optimiser. Interchangeables si : même palette source, OU tous les
critères de tri identiques.
## Détermination picking négatif (MINI JOB LIM-75)
```
SI quantité_à_prélever > seuil_article × quantité_palette_source
ET article unique dans la palette source
ET pas d'attribut logistique à capturer
ET poids_unitaire_sac ≥ 7 kg
ALORS → PICKING_NÉGATIF
SINON → PICKING_DIRECT
```
## Paramètres WMS
| Paramètre | Défaut | Note V1.1 |
|-----------|--------|-----------|
| `CONTROLE_TRAITEMENT_COMMERCIAL` | **false** | Désactivé |
| Seuil picking négatif (fiche article) | 55% | Inchangé |
| Poids min picking négatif | **7 kg** | Nouveau |
| Seuil remplissage palette | **~95%** | Nouveau |
| Poids max palette | **1 250 kg** | Corrigé |
| `MAX_NB_BUFFER_PK` | 3 | Inchangé |
## Points d'attention
⚠️ Le custom LIM-61 (capacité buffer) doit gérer les palettes
multi-PK.
⚠️ En cas d'erreur du process, l'OS reste bloqué (CstAtt = false).
⚠️ Condition poids ≥ 7 kg : évite l'instabilité palette (gros sacs
ramenés sur petits sacs).
## Liens
- [Placement PS → PK](placement-ps-pk.md) — algorithme aval
- [Picking combinatoire](picking-combinatoire.md) — vue d'ensemble
- [Historique et arbitrage](sequencage-tk-ps-historique.md) —
solutions envisagées + arbitrage contradictions réunion 11/05/2026
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-84 |
| 2026-05-12 | Arthur | Refonte V1.1 : algo complet, 5 critères, contraintes amont, arbitrage réunion 11/05 |
| 2026-05-12 | Arthur | Découpage : historique solutions + arbitrage → page dédiée |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira | 2026 |
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira | 2026 |
| Logique combinatoire picking - TK vers PS - V1.1 | Spec technique | 11/05/2026 |
| REU PICKING SEQUENCAGE 11-05-2026 | CR réunion | 11/05/2026 |
@@ -0,0 +1,301 @@
---
title: "Stations et postes de travail Limagrain"
tags: [picking, stations, postes, ilots, buffer]
status: draft
standard_ref: concepts/stations.md
jira_refs: [LIM-69, LIM-70]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "Réception - LIMAGRAIN - DEV - Confluence.md", "Expédition - LIMAGRAIN - DEV - Confluence.md", "LIM-69 - LOT1.3 Modes de travail des PK.md"]
last_updated: 2026-05-12
author: Arthur
---
# Stations et postes de travail Limagrain
> **Résumé** : description des stations de l'entrepôt automatique, des
> postes de travail polyvalents (3 îlots × 2 postes) et des buffers associés.
> **Standard EasyWMS** : → voir [Stations & Routes](../../concepts/stations.md),
> [Mechanical Elements](../../concepts/mechanical-elements.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au standard.
## Contexte projet
Chez Limagrain, les postes de travail sont **polyvalents** et multi-processus.
L'ensemble des opérations (réception, picking, regroupement, échantillonnage,
re-certification) se fait sur les mêmes postes physiques, configurables
dynamiquement.
## Cartographie des stations
### Zone entrée production / sortie expéditions
| Station | Description |
|---------|-------------|
| PIE_01 | Poste d'identification 01 (côté quais) |
| NAV_01 | Navette 01 |
### Zone entrée/sortie postes de travail
| Station | Description |
|---------|-------------|
| PIE_02 | Poste d'identification 02 |
| PIE_03 | Poste d'identification 03 |
| REAC_01 | Poste de reconditionnement 01 |
| NAV_02 | Navette 02 |
| ET_21, ET_22 | Tables intermédiaires |
### Zone stockage côté postes de travail
| Station | Description |
|---------|-------------|
| ET_23 à ET_28 | Tables intermédiaires 23 à 28 |
| TE_01 à TE_04 | Tables d'entrée 01 à 04 |
| TS_01 à TS_04 | Tables de sortie 01 à 04 |
### Zone stockage côté quais
| Station | Description |
|---------|-------------|
| ET_11 à ET_15 | Tables intermédiaires 11 à 15 |
| TE/TS_01 à TE/TS_04 | Tables mixtes entrée/sortie 01 à 04 |
### Zone postes de travail
| Station | Description |
|---------|-------------|
| P1 à P6 | Postes de travail 01 à 06 |
| TP11 à TP63 | Tables de préparation 11 à 63 |
## Postes de travail — Architecture physique
### 3 îlots de 2 postes
Physiquement, il y a **3 îlots**, chacun composé de **6 tables de préparation
(TP)**. Chaque îlot peut être configuré de 2 façons :
1. **Mode scindé** : 2 postes individuels × 3 TP chacun (mode par défaut)
2. ~~**Mode global** : 1 poste × 6 TP (mode « esclave »)~~ **ABANDONNÉ**
> **MISE À JOUR** : le mode esclave (6 TP) est abandonné au profit d'un
> simple **message d'avertissement**. Si le poste adjacent est déjà
> ouvert → « Attention, le poste PVx est déjà ouvert. Voulez-vous quand
> même ouvrir ? ». L'opérateur peut confirmer ou annuler. Pas de blocage
> technique, juste un avertissement.
>
> **Justification** : les opérateurs sont physiquement à ~2 mètres l'un
> de l'autre et peuvent se coordonner verbalement. Les AGV ont des
> capteurs de sécurité et demandent l'autorisation de dépose. Trop de cas
> complexes à gérer avec un mode esclave custom. L'AGV amène toujours la
> palette au centre du PV actif.
>
> **Développement** : message d'avertissement à l'ouverture du poste,
> vérification si le poste conjoint est déjà ouvert (via support présent
> ou poste en mode réception), workflow action sur le end process pour
> fermer le poste.
### Numérotation
```
Îlot 1 : P1 (TP11, TP12, TP13) | P2 (TP21, TP22, TP23)
Îlot 2 : P3 (TP31, TP32, TP33) | P4 (TP41, TP42, TP43)
Îlot 3 : P5 (TP51, TP52, TP53) | P6 (TP61, TP62, TP63)
```
### Spécificités P5 & P6
Les postes **P5 et P6** sont équipés d'un **palan** pour la manipulation
de big-bags. Toute opération impliquant un big-bag (bag/pal ≤ 2) doit
être traitée sur P5 ou P6.
**Picking** : WS PK picking rob en priorité, process RF comme fallback
(plus robuste pour picking négatif, multi-tables). Le process de réception
est déjà plugué au mode Automatic tasks (custom) → même mode pour le
picking et la recertification.
Voir [Flux expédition — Préparation](../04-outbound/flux-expedition.md#6-préparation-au-poste-de-travail)
pour les règles détaillées (arrivée palettes 3 TP, algorithme répartition,
ordonnancement par gerbabilité).
### Modes de travail — Configuration et fonctionnement
Chaque poste est **polyvalent** et peut être utilisé pour différents flux.
Le manager configure les modes autorisés et leur priorité ; l'opérateur
ouvre le poste et le WMS gère automatiquement le process en fonction de
la palette qui arrive.
#### Modes disponibles
| Mode | Correspondance EasyWMS |
|------|------------------------|
| Picking | Picking |
| Réception | Réception |
| Regroupement | Consolidation |
| Échantillonnage | Inventaire |
| Re certification | Picking |
> ~~Mode esclave (3 ou 6 tables)~~ **ABANDONNÉ** — remplacé par un simple
> message d'avertissement poste adjacent (voir section dédiée ci-dessous).
#### Configuration par le manager (vassist SmartUI)
Dans la vue des postes de travail, un **bouton d'action "Choix modes de
travail"** est disponible à la sélection d'un ou plusieurs PK. Ce bouton
ouvre une **vassist** qui permet de :
- **Cocher/décocher les modes autorisés** parmi les 5 modes ci-dessus
- **Définir la priorité** de chaque mode coché via un champ numérique
(séquence)
**Règles de validation** à la soumission :
- Chaque mode coché doit avoir une priorité renseignée
- Un mode non coché ne doit pas avoir de priorité
- Au moins un mode doit être coché (pour bloquer un PK, utiliser le
bouton standard dédié)
**Stockage** : la configuration est enregistrée dans un **paramètre
SmartUI dédié par PK** au format :
```
MODES_PK01 = "RECEPTION;1|PICKING;2|CONSOLIDATION;3"
MODES_PK02 = "RECEPTION;1"
```
Chaque entrée : `MODE;PRIORITÉ` séparés par `|`.
Cette configuration est utilisée par le
[Mega Job d'assignation](job-assignation-pk.md)
([LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70)) pour
déterminer si un PK est éligible à recevoir des tâches d'un flux donné
et dans quel ordre de priorité.
#### Ouverture du poste par l'opérateur (SmartUI)
L'opérateur accède à **Poste de travail > Station de picking**.
L'interface affiche un **bouton "Fermer le poste"** toujours visible.
Par défaut, le poste fonctionne en **tâche automatique** : le WMS
choisit le bon process en fonction de la palette qui arrive ou qui est
déjà sur le PK. L'opérateur n'a pas à sélectionner manuellement un mode.
#### Avertissement poste adjacent
À chaque ouverture d'un PK, le WMS vérifie si le **poste adjacent** est
déjà ouvert (en mode actif). Le mapping des paires est défini dans le
paramètre `PK_ADJACENT`.
**Si le poste adjacent est actif** → message d'avertissement (y compris
en mode tâche automatique) :
> "Attention, le poste [CODE_PK_ADJACENT] est déjà ouvert.
> Voulez-vous quand même ouvrir ?"
- Bouton **Confirmer** : le PK s'ouvre normalement
- Bouton **Annuler** : le PK reste inactif
**Pas de blocage technique** — uniquement informatif. Les opérateurs sont
physiquement à ~2 mètres et peuvent se coordonner verbalement. Les AGV
ont des capteurs de sécurité et demandent l'autorisation de dépose.
#### Fermeture du poste
Le bouton **"Fermer le poste"** est toujours visible quel que soit l'état.
Au clic :
- Le PK est remis en mode **inactif** (aucun mode actif)
- Le PK redevient éligible pour une nouvelle assignation par le
[Mega Job](job-assignation-pk.md) (sous réserve qu'il n'ait plus de
tâches actives)
#### Paramètres modes de travail
| Paramètre | Description | Valeur par défaut | Exemple |
|-----------|-------------|-------------------|---------|
| MODES_PKxx | Modes autorisés + priorité pour le PK xx (un par PK, via vassist) | _(vide)_ | `RECEPTION;1\|PICKING;2` |
| PK_ADJACENT | Paires de postes adjacents | _(vide)_ | `PK01;PK02\|PK03;PK04` |
### Équipement par poste
- 1 poste léger EasyWMS dupliqué sur 2 écrans
- 1 imprimante Zebra (étiquettes HU RFID)
- 1 imprimante A4 (étiquettes A4)
- 1 douchette multi-format (RFID, QR Code, code à barres)
## [CUSTOM] Mega Job d'assignation des tâches aux postes
→ Voir page dédiée : **[Job d'assignation PK](job-assignation-pk.md)**
([LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70))
Job unique « chef d'orchestre » qui vérifie les modes de travail pour
chaque PK et orchestre l'envoi de tâches via des sous-workflows dédiés
(LIM-74, LIM-75). Transverse à tous les flux (réception, picking,
regroupement, échantillonnage, re certification).
## Buffer postes de travail
16 emplacements palettes au sol le long de l'allée TK_01 :
| Nb emplacements | Usage |
|-----------------|-------|
| 14 | Avance pour les processus en cours |
| 2 | Piles de palettes vides |
> ⚠️ 2 emplacements supplémentaires pour palettes rejetées en attente de
> libération d'un poste de travail.
### [CUSTOM] Buffer configurable
Les emplacements du buffer sont **interchangeables** : un champ « type de
fonctionnement » peut être modifié quand l'emplacement est vide.
### [CUSTOM] Bouton d'évacuation
Un bouton spécifique sur l'écran EasyWMS permet d'évacuer automatiquement
une palette du buffer vers le convoyeur d'entrée pour stockage.
## Piles de palettes vides par poste
- **2 piles par îlot de travail** (et non par poste individuel)
- Emplacement picking dédié pour réapprovisionnement automatique sur
seuil
- Aide à la manutention sur chaque poste pour prendre/poser des palettes
- [CUSTOM] Bouton WfAction pour demander ou renvoyer une pile —
l'opérateur choisit la pile à réapprovisionner parmi une liste
Voir [Palettes vides](../02-stockage/palettes-vides.md) pour le détail.
## Points d'attention
⚠️ Un poste fermé ne peut pas être assigné à un processus.
⚠️ L'assignation automatique du poste optimise la distance la plus courte.
⚠️ Si une TP est HS, elle peut être bloquée individuellement sans impacter
le reste du poste.
⚠️ L'entrée côté postes de travail et l'entrée côté quais sont
interchangeables manuellement en cas de blocage long terme (bouton de
redirection).
## Questions ouvertes
- [ ] Détail de la gestion des tables de préparation bloquées (@Nicolas)
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-05 | Arthur | Mode esclave abandonné, job transverse, vassist modes, 2 piles/îlot |
| 2026-05-05 | Arthur | Cross-ref flux expédition, picking WS vs RF, contrainte Big-Bag |
| 2026-05-12 | Arthur | Détail modes de travail (LIM-69) : vassist manager, paramètres MODES_PKxx/PK_ADJACENT, tâche automatique, avertissement adjacent, fermeture poste. Renvoi job vers page dédiée (LIM-70) |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| Réception - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| Expédition - LIMAGRAIN - DEV - Confluence | Page ateliers DEV | 2026 |
| [LIM-69](https://easywmsfrance.atlassian.net/browse/LIM-69) | Ticket Jira | 2026 |