lint(limagrain): corrections completes Phase 1+2
- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary) - Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees - Liens: 9 ancres reparees (slugs GitHub) - Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete - Glossaire: 15 termes standard deplaces en section rappel avec renvoi - Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final) - Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
@@ -3,10 +3,10 @@ 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]
|
||||
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"]
|
||||
last_updated: 2026-05-12
|
||||
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
|
||||
---
|
||||
|
||||
@@ -20,15 +20,31 @@ author: Arthur
|
||||
|
||||
> **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
|
||||
|
||||
L'algorithme est déclenché sur **deux événements** :
|
||||
> **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)).
|
||||
|
||||
- **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)
|
||||
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
|
||||
|
||||
@@ -41,11 +57,11 @@ L'algorithme est déclenché sur **deux événements** :
|
||||
|
||||
## Contraintes amont (constitution palettes filles)
|
||||
|
||||
**C1. Palettes les plus complètes possible** — seuil ~95%. Calcul en
|
||||
**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
|
||||
**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 |
|
||||
@@ -68,25 +84,25 @@ tâches.trier_par(
|
||||
)
|
||||
```
|
||||
|
||||
### Critère 1 — Picking négatif en premier
|
||||
### 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
|
||||
### 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
|
||||
### 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
|
||||
### 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
|
||||
### Critère 5 - Regroupement par palette source
|
||||
|
||||
L'opérateur enchaîne toutes les tâches d'une palette avant de la
|
||||
libérer.
|
||||
@@ -98,28 +114,94 @@ 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)
|
||||
## 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 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
|
||||
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é |
|
||||
| Seuil picking négatif (fiche article) | 55% | Inchangé |
|
||||
| Poids min picking négatif | **7 kg** | Nouveau |
|
||||
| `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
|
||||
@@ -132,9 +214,9 @@ 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) —
|
||||
- [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
|
||||
@@ -144,12 +226,15 @@ ramenés sur petits sacs).
|
||||
| 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 | 2026 |
|
||||
| [LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) | Ticket Jira | 2026 |
|
||||
| [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 |
|
||||
|
||||
Reference in New Issue
Block a user