7496aafe64
- 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
241 lines
11 KiB
Markdown
241 lines
11 KiB
Markdown
---
|
|
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, LIM-80, LIM-82]
|
|
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", "Jira LIM-84 (commentaires revue de code)"]
|
|
last_updated: 2026-07-17
|
|
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)
|
|
|
|
> **Statut (LIM-84)** : dev terminé, **en attente de déploiement pour
|
|
> test**. Revue de code validée le **02/07/2026** (après une itération NOK
|
|
> le 29/06 et corrections le 01/07).
|
|
|
|
## Déclenchement
|
|
|
|
> **Implémentation définitive (revue de code 02/07/2026)** : le séquençage
|
|
> est réalisé **pendant l'assignation de stock**, et non sur
|
|
> `TaskCreatedEvent` comme le proposait la note de conception (Solution 4,
|
|
> voir [historique](sequencage-tk-ps-historique.md)).
|
|
|
|
Le workflow de séquençage `CST_PickingTasksSequencing_PR` est appelé par les
|
|
workflows d'assignation de stock :
|
|
|
|
- `Outbound_StockAssignProcess_PR` - assignation de stock (à la libération
|
|
de l'OS)
|
|
- `OutboundOrder_StockReassign_PR` - réassignation de stock (imprévu,
|
|
blocage, relance)
|
|
|
|
La **libération de l'OS** est déclenchée par la subscription
|
|
`CST_PKAssigned_ReleaseOrder` (WF
|
|
`CST_OutboundOrder_PKAssigned_ReleaseOrder_PR`) lorsqu'un PK est assigné à
|
|
l'OS ([LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80)), ce qui
|
|
déclenche l'assignation de stock. L'assignation/réassignation se fait **par
|
|
job** (les subscriptions standard sont désactivées, cf. LIM-80).
|
|
|
|
## 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
|
|
|
|
> Le `TaskType` (OrdinaryPicking / NegativePicking) est déterminé à la
|
|
> création des tâches. Conditions **définitives** (revue de code LIM-84) :
|
|
|
|
```
|
|
SI % à prélever ≥ NegativePickingPercent (55% du stock actuel de la source)
|
|
ET remplissage source ≥ NegativeMinCompletePercent (25% de la capacité pleine)
|
|
ET palette source mono-lot
|
|
ET poids_unitaire_sac ≥ 7 kg // check custom Limagrain
|
|
ALORS → PICKING_NÉGATIF
|
|
SINON → PICKING_DIRECT
|
|
```
|
|
|
|
- Le picking négatif est désormais **autorisé même si des attributs
|
|
logistiques sont précisés dans la commande** (levée d'une restriction
|
|
initiale).
|
|
- Les 2 conditions de pourcentage sont **standard EasyWMS**
|
|
(`Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1`) ;
|
|
seul le check de poids (≥ 7 kg) est custom
|
|
(`Outbound_CreatePickingContainerTasksNegative_PR_V1` récupère le lot et
|
|
le poids de l'article).
|
|
|
|
## Paramètres WMS
|
|
|
|
| Paramètre | Défaut | Note V1.1 |
|
|
|-----------|--------|-----------|
|
|
| `CONTROLE_TRAITEMENT_COMMERCIAL` | **false** | Désactivé |
|
|
| `NegativePickingPercent` (% à prélever du stock actuel) | 55% | Standard |
|
|
| `NegativeMinCompletePercent` (% remplissage min source) | 25% | Standard, capacité pleine |
|
|
| Poids min picking négatif | **7 kg** | Custom Limagrain |
|
|
| Seuil remplissage palette | **~95%** | Nouveau |
|
|
| Poids max palette | **1 250 kg** | Corrigé |
|
|
| `MAX_NB_BUFFER_PK` | 3 | Inchangé |
|
|
|
|
## Implémentation définitive (LIM-84)
|
|
|
|
> Reflète le **code livré et validé** (revue de code du 02/07/2026, après
|
|
> une itération NOK le 29/06 et corrections le 01/07). Prime sur les notes
|
|
> de conception ci-dessus en cas d'écart.
|
|
|
|
Le séquençage ne se contente pas de trier : `CST_PickingTasksSequencing_PR`
|
|
calcule d'abord la **composition des palettes finales** (quels stocks vont
|
|
sur quelle palette fille, via les records `CST_PickingPalletList` /
|
|
`CST_PickingStockList`), puis écrit le numéro de séquence (`CstAtt1` de la
|
|
tâche) sur chaque tâche. Le stacker crane consomme ensuite les tâches via
|
|
`CST_Tasks_PendingOutboundForStackerCrane`, en respectant le verrou
|
|
`OS.CstAtt` et l'ordre `Line.CstAtt` croissant.
|
|
|
|
### Workflows
|
|
|
|
| Workflow | Rôle |
|
|
|----------|------|
|
|
| `CST_PickingTasksSequencing_PR` | Calcule la constitution des palettes finales pour les tâches de picking d'un OS selon les critères actifs, puis écrit le numéro de séquence sur chaque tâche. |
|
|
| `CST_OutboundOrder_PKAssigned_ReleaseOrder_PR` | Libère l'OS (appelé par la subscription `CST_PKAssigned_ReleaseOrder`). |
|
|
| `Outbound_StockAssignProcess_PR` | Assignation de stock - appelle le séquençage. |
|
|
| `OutboundOrder_StockReassign_PR` | Réassignation de stock - appelle le séquençage. |
|
|
| `NegativePicking_CheckAllowsNegativePickingTask_PR` | Conditions picking négatif : palette source **mono-lot** ; négatif autorisé **même si** des attributs logistiques sont précisés dans la commande. |
|
|
| `Outbound_CreatePickingContainerTasksNegative_PR_V1` | Récupère le lot du stock et le poids de l'article. |
|
|
| `Outbound_CreatePickingContainerTasksNegative_CheckPercents_PR_V1` | Ajoute la condition de poids unitaire min (≥ 7 kg) aux 2 checks % standard. |
|
|
|
|
### Records / Lists
|
|
|
|
| Élément | Rôle |
|
|
|---------|------|
|
|
| `CST_PickingPalletList` | Palette construite au picking (caractéristiques physiques + stocks), pour le calcul de constitution des palettes finales. |
|
|
| `CST_PickingStockList` | Stock à prélever au picking et sa tâche, pour le calcul de constitution. |
|
|
|
|
### Queries et vue
|
|
|
|
| Élément | Rôle |
|
|
|---------|------|
|
|
| `CST_PickingStocksToSequence_ByOutboundOrder` | Stocks à prélever d'un OS qui ne font pas déjà partie du séquençage. |
|
|
| `CST_Tasks_ForView` | Format du `CstAtt1` (numéro de séquence). |
|
|
| `CST_Tasks_PendingOutboundForStackerCrane` | Tâches en attente pour le stacker crane (corrigée le 29/06 pour les tâches de mouvement - test recertification). |
|
|
| `TaskVList` (vue) | Ajout de `CstAtt1` : le numéro de séquence est visible dans la vue des tâches. |
|
|
|
|
### Points confirmés en revue de code
|
|
|
|
- **Recalcul** : les tâches déjà en cours conservent leur séquence ; seules
|
|
les tâches en attente sont re-séquencées.
|
|
- **Réassignation après épuisement** : si une réassignation de stock survient
|
|
alors que toutes les tâches précédentes sont faites, le séquençage repart
|
|
de 0. L'info de séquence sert **uniquement** à l'ordonnancement.
|
|
- **Concurrence inter-OS** : plusieurs OS simultanés sur un même PK est
|
|
**interdit** ; chaque OS a son propre pool de tâches et son propre verrou
|
|
`OS.CstAtt`.
|
|
|
|
## 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 |
|
|
| 2026-07-17 | Arthur | Relecture revue de code LIM-84 (préprod, validée 02/07) : nouvelle section « Implémentation définitive » (WF `CST_PickingTasksSequencing_PR` = constitution palettes + séquence, records `CST_PickingPalletList`/`CST_PickingStockList`, queries `CST_PickingStocksToSequence_ByOutboundOrder` / `CST_Tasks_ForView` / `CST_Tasks_PendingOutboundForStackerCrane`, vue `TaskVList` +CstAtt1) ; déclenchement réel = pendant l'assignation de stock (`Outbound_StockAssignProcess_PR` / `OutboundOrder_StockReassign_PR`) + subscription `CST_PKAssigned_ReleaseOrder`, et non `TaskCreatedEvent` ; conditions picking négatif définitives (mono-lot, autorisé même avec attributs logistiques, poids ≥ 7 kg) + ajout NegativeMinCompletePercent 25% ; points confirmés (recalcul, repart de 0, inter-OS interdit) ; statut préprod |
|
|
|
|
## Références
|
|
|
|
| Source | Type | Date |
|
|
|--------|------|------|
|
|
| [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) | Ticket Jira (séquençage, 5 commentaires, préprod) | 2026-06 → 07 |
|
|
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira (capacité PK/buffer) | 2026 |
|
|
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) | Ticket Jira (assignation PK, release OS) | 2026 |
|
|
| [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Ticket Jira (placement PS → PK, consomme Line.CstAtt) | 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 |
|