Files
mcp-wms-wiki/wiki/limagrain/02-stockage/defragmentation.md
T
arthur 7496aafe64 lint(limagrain): corrections completes Phase 1+2
- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary)
- Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees
- Liens: 9 ancres reparees (slugs GitHub)
- Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete
- Glossaire: 15 termes standard deplaces en section rappel avec renvoi
- Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final)
- Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
2026-07-20 12:56:42 +02:00

272 lines
14 KiB
Markdown

---
title: "Défragmentation - Zone client et ordonnancement par tournée"
tags: [stockage, défragmentation, expédition, zone-client, planning, tournée, STOP, custom]
status: draft
standard_ref: concepts/defragmentation.md
jira_refs: [LIM-85, LIM-87]
confluence_refs: []
sources: [FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5.docx, "LIM-85 LOT2.1 Configuration stratégies defragmentation du stock client par tournée.md", "LIM-87 LOT2.1 [TOURNÉES] Défragmentation client - quai non assigné ATTENTE_CLIENT CT-13.md"]
last_updated: 2026-07-17
author: Arthur
---
# Défragmentation - Zone client et ordonnancement par tournée
> **Résumé** : processus de défragmentation pour préparer les palettes
> d'expédition vers la zone de défragmentation client dans l'ASRS.
> Inclut un **custom majeur** de défragmentation par tournée (RUT) avec
> ordonnancement par numéro de STOP, déclenché uniquement quand toutes
> les palettes sont prêtes et qu'aucun quai n'est assigné.
> **Standard EasyWMS** : → voir [Defragmentation](../../concepts/defragmentation.md)
> Ce qui suit documente les **spécificités Limagrain** par rapport au
> standard.
## Contexte projet
La défragmentation est un processus standard des entrepôts automatisés.
Chez Limagrain, elle sert à préparer les routes (expéditions) en
déplaçant les conteneurs vers la zone de défragmentation client
(TK02-04, rangées 60-69).
La défragmentation shipping standard propose trois modes d'assignation
(Picking Only, Shipping Only, Picking & Shipping) mais **aucun ne
répond au besoin Limagrain** :
| Mode standard | Comportement | Problème |
|---------------|-------------|----------|
| Shipping Only | Défrag uniquement les palettes complètes | Les palettes de picking ne sont pas repositionnées → ordonnancement STOP faux dans le canal |
| Picking & Shipping | Défrag toutes les palettes (y compris celles à picker) | Les palettes sortent pour être défragmentées alors qu'elles doivent d'abord passer au PK → casse l'ordonnancement |
| Picking Only | Non applicable au besoin | - |
**Contrainte métier** : le stock doit être rangé dans le canal
d'expédition ASRS dans l'**ordre inverse des STOP** de la tournée, de
sorte que les palettes sortent du canal dans le bon ordre lors du
chargement camion (STOP max chargé en premier → déchargé en dernier).
Deux cas se présentent selon l'assignation du quai :
| Situation | Custom | Page |
|-----------|--------|------|
| Quai **non assigné** au RUT | Défrag custom décrite ci-dessous | Cette page |
| Quai **déjà assigné** au RUT | Override du WF stacker crane | → voir [Séquençage shipping par STOP](../04-outbound/sequencage-shipping-stop.md) |
## Principe général
Les conteneurs assignés à une expédition sont relocalisés dans la zone
de défragmentation client **en avance**, généralement la nuit ou pendant
les périodes de moindre charge. Cela permet une sortie rapide le jour
de l'expédition.
## Caractéristiques
- **Priorité** : basse (s'exécute en arrière-plan)
- **Planification** : horaires configurables par Limagrain
- **Zone cible** : zone défragmentation client (TK02, 03, 04 -
rangées 60-69, profondeurs 2-10)
- **Déclencheur** : stratégie de défragmentation par rotation (standard)
+ custom défrag client par tournée (ci-dessous)
## Configuration du planning (standard)
Limagrain peut modifier les horaires de façon autonome :
1. Menu « Configuration » → « Défragmentation » → « Planning de
défragmentation »
2. Bouton « Ajouter » → paramétrer les horaires/planning souhaités
3. Activer la défragmentation via le bouton « Activer »
Prérequis : au moins une **stratégie de défragmentation par rotation**.
## Lien avec l'expédition
La défragmentation est l'étape 4 du flux d'expédition (voir
[Flux expédition](../04-outbound/flux-expedition.md)) :
1. OS reçu et libéré → stock assigné
2. Palettes complètes → défragmentation vers zone client
3. Palettes picking → poste de travail d'abord, puis zone client
4. Depuis zone client → sortie vers poumon le jour J
## [CONFIG] Stratégies de défragmentation client par tournée (LIM-85)
> **Statut (LIM-85)** : **en cours de test client (pré-production)**.
> Stratégies importées sur Git le 23/04/2026 (suite à l'atelier du 2 avril).
> Ticket de suivi - peu de contenu technique, il sert à tracer la
> configuration.
Ce ticket couvre la **configuration des stratégies de défragmentation** du
stock client par tournée : définition des stratégies (mode Shipping, type
d'ordre Tournée) et de la zone cible ASRS (zone client TK02-04, rangées
60-69). Ces stratégies sont le socle sur lequel s'appuie le custom
d'éligibilité par tournée ci-dessous (LIM-87).
La logique custom (filtre « toutes les palettes du RUT prêtes »,
ordonnancement inverse des STOP, quai non assigné) relève de
[LIM-87](https://easywmsfrance.atlassian.net/browse/LIM-87).
## [CUSTOM] Défrag client par tournée - Quai non assigné (LIM-87)
> **Statut (LIM-87)** : **en cours de test client (pré-production)**. Revue
> de code validée le **28/04/2026** (après un NOK le 24/04 : bug de nommage
> de paramètre `c` réutilisé entre le `Any` et le `Where` de la query,
> corrigé le 27/04).
### Objectif
Déclencher la défragmentation client d'une tournée **uniquement
lorsque toutes ses palettes de tous ses OS sont prêtes à partir vers
l'image de quai** :
- Les palettes complètes sont dans l'ASRS
- Les palettes ayant nécessité un picking sont revenues dans l'ASRS
après prélèvement
- **Aucun quai n'est encore associé à la tournée** (sinon le flux
shipping standard prend le relais →
[Séquençage shipping par STOP](../04-outbound/sequencage-shipping-stop.md))
La condition « toutes les palettes terminées » s'évalue **au niveau
de la tournée** (RUT), pas de l'OS individuel.
### Mécanisme
- Utiliser le **job de défragmentation client standard** avec une
stratégie en mode Shipping et type d'ordre Tournée
- Ajouter un **filtre custom au niveau de la sélection des candidats**
qui exclut de l'éligibilité toute tournée dont au moins une palette
(d'au moins un OS) n'est pas encore prête dans l'ASRS
La sélection des candidats passe par la query standard
`OutboundDefragContainers_PendingByWarehouseExcludedIds`, **modifiée en
custom** : elle ne retient un conteneur que si sa tournée (ou son OS) n'a
**plus de picking en cours**. Elle exclut donc les conteneurs de picking
restants **et** les conteneurs pas encore rangés dans l'ASRS (encore en
mouvement, `LocationType != Aps`). S'il en existe au moins un, aucun
conteneur de cet ordre n'est retenu pour la défrag.
### Règle d'éligibilité (pseudocode)
```
POUR CHAQUE RUT candidat à la défrag shipping
(en standard, exclut les RUT avec quai assigné) :
POUR CHAQUE OS du RUT :
SI l'OS a des lignes picking non terminées
→ EXCLURE le RUT
SI au moins une palette complète assignée
n'est pas dans l'ASRS
→ EXCLURE le RUT
SI aucune exclusion → ÉLIGIBLE
SINON → reste candidat pour le prochain passage du job
```
> **Point clé** : l'éligibilité est « tout-ou-rien » au niveau
> tournée. Tant qu'un seul OS du RUT n'a pas toutes ses palettes
> prêtes, aucune défrag n'est lancée pour le RUT.
### Ordonnancement dans le canal
Les palettes du **STOP max** entrent dans le canal en premier, celles
du **STOP 1** en dernier. Ainsi les palettes sortent dans le bon ordre
lors du chargement camion (STOP 1 chargé en premier).
Le rangement se fait dans un canal (ou plusieurs canaux) par tournée
- pas un canal par STOP.
### Paramètre MAX_DEFRAG_ATTEMPT
À chaque passage du job, le WMS essaie de trouver un emplacement
valide. Si aucun n'est trouvé, le compteur de tentatives est
incrémenté. Une fois MAX_DEFRAG_ATTEMPT atteint (défaut : 5), le
support est retiré des candidats défrag.
**Important** : le compteur ne s'incrémente que si le WMS a cherché
un emplacement de destination et n'en a pas trouvé. Si le filtre
custom exclut la tournée avant même de chercher une destination,
aucune tentative n'est décomptée.
> **Résolu (LIM-87, 23/04/2026)** : `MAX_DEFRAG_ATTEMPT` ne concerne que la
> défrag **par rotation**, **pas** la défrag d'expédition/client. Le custom
> de défrag client par tournée n'est donc **pas** plafonné par ce compteur.
## Cas de tests (LIM-87)
Légende : PC = palette complète, PP = palette de picking (mère),
PF = palette fille (sortie du picking, retour ASRS).
### Cas nominaux
| CT | Description | Préconditions | Résultat attendu |
|----|-------------|---------------|------------------|
| 01 | RUT mono-OS, uniquement PC | 1 SOR, 3 PC dans ASRS, pas de quai | Éligible. 3 tâches défrag, séquence STOP respectée |
| 02 | RUT mono-OS, uniquement picking terminé | 1 SOR, 2 PP → 2 PF revenues ASRS, pas de quai | Éligible. 2 tâches défrag pour les PF |
| 03 | RUT mono-OS mixte (PC + picking terminé) | 1 SOR : 2 PC + 1 PF revenue ASRS, pas de quai | Éligible. 3 tâches défrag |
| 04 | RUT multi-OS, ordonnancement STOP | 3 SOR (STOP 1,2,3), 2 PC chacun, toutes ASRS | Éligible. 6 tâches, STOP 3 en premier dans le canal |
| 05 | RUT multi-OS, tous prêts simultanément | 3 SOR mixtes, toutes palettes ASRS | Éligible en un seul passage. 5 tâches, séquence STOP |
### Cas limites
| CT | Description | Préconditions | Résultat attendu |
|----|-------------|---------------|------------------|
| 06 | PP partie, PF pas encore revenue | 2 SOR, SOR1 prêt, SOR2 avec PF pas revenue | **NON éligible** (un OS bloque tout le RUT) |
| 07 | PF encore sur AGV (en mouvement) | Multi-OS, 1 PF en transit AGV | **NON éligible** tant que PF pas dans ASRS |
| 08 | Quai déjà assigné à la tournée | Toutes palettes prêtes, quai assigné | **NON éligible** pour custom défrag - flux standard prend le relais |
| 09 | Picking partiel sur un OS | 1 SOR, 3 lignes picking, 2 PF revenues, 1 PP au PK | **NON éligible** (on attend la totalité) |
### Cas dégradés
| CT | Description | Préconditions | Résultat attendu |
|----|-------------|---------------|------------------|
| 11 | AGV HS pendant retour PF | PF bloquée sur PK/buffer | **NON éligible** jusqu'à rangement ASRS |
| 12 | Support sous révision | PP → buffer litige, stock réassigné sur PP' | Éligible quand toutes les palettes (réassignations incluses) dans ASRS |
| 13 | Rupture de stock (ATTENTE CLIENT) | SOR1 prêt, SOR2 avec 1 ligne en rupture | Implémentation : commande incomplète → **pas de défrag** (proche option A). Arbitrage client à confirmer (option A vs B) |
| 14 | Modification quantité (bouton Problème) | OnStockAdjust recalcule | Si stock suffisant → PF revient, RUT éligible. Si réassignation → attendre PP'/PF' |
| 15 | RUT libéré, aucune PP partie (figé) | Pas de PK disponible | **NON éligible** (picking pas déclenché ≠ prêt). Pas de MAX_DEFRAG_ATTEMPT |
| 16 | Ajout SOR à un RUT déjà éligible | Nouveau SOR avec lignes picking non traitées | **Redevient NON éligible** jusqu'à fin du nouveau SOR |
## Pause et reprise
Le processus peut être mis en pause et repris ultérieurement (par
exemple si l'activité reprend la nuit).
## Points d'attention
⚠️ Les tâches de défragmentation ont une priorité **basse** - elles ne
perturbent pas l'activité normale mais peuvent être longues.
⚠️ MECALUX conseille une présence sur site lors de la défragmentation
en cas de défaut sur les transstockeurs (non obligatoire).
⚠️ L'avancée des tâches est consultable sur la vue des tâches.
⚠️ L'éligibilité est « tout-ou-rien » au niveau tournée. Un seul OS
non prêt bloque toute la défrag du RUT.
## Questions ouvertes
- ❓ Rupture de stock CT-13 : option A (RUT bloqué tant que rupture
non résolue) ou option B (défrag sur les palettes dispo) ? (@Justine)
Implémentation actuelle : commande incomplète → pas de défrag (proche
option A), à confirmer client
- [x] ~~MAX_DEFRAG_ATTEMPT : scope défrag client seul ou aussi défrag par
rotation ?~~ → Résolu (LIM-87) : uniquement la défrag par rotation, pas
la défrag d'expédition
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-05 | Arthur | Création initiale depuis AF V1.5 |
| 2026-05-12 | Arthur | Refonte : ajout custom défrag client par tournée (LIM-87), mécanisme filtre éligibilité, ordonnancement STOP, 16 cas de tests |
| 2026-05-13 | Arthur | Restauration contenu tronqué (caractéristiques, config, custom, cas de tests, points d'attention) |
| 2026-07-17 | Arthur | Relecture LIM-85 (lecture directe, 1 commentaire) : ajout section « [CONFIG] Stratégies de défragmentation (LIM-85) » distinguant la config des stratégies (LIM-85, préprod, import Git 23/04) du custom d'éligibilité par tournée (LIM-87) ; statut + Références |
| 2026-07-17 | Arthur | Relecture revue de code LIM-87 (préprod, validée 28/04) : ajout statut + query `OutboundDefragContainers_PendingByWarehouseExcludedIds` (filtre custom picking restant + conteneurs pas en Aps ; bug nommage paramètre corrigé 27/04) ; résolution MAX_DEFRAG_ATTEMPT (uniquement défrag rotation, pas expédition) ; CT-13 précisé (commande incomplète → pas de défrag, proche option A) |
## Références
| Source | Type | Date |
|--------|------|------|
| FR-SW-04-07_LIMAGRAIN_Functional_Analysis_V1.5 | Analyse fonctionnelle | 28/11/2025 |
| [LIM-85](https://easywmsfrance.atlassian.net/browse/LIM-85) | Ticket Jira (config stratégies défrag, préprod, import Git 23/04) | 2026 |
| [LIM-87](https://easywmsfrance.atlassian.net/browse/LIM-87) | Ticket Jira (défrag client quai non assigné, 5 commentaires, préprod) | 2026-04 |