lint(limagrain): corrections completes Phase 1+2

- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary)
- Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees
- Liens: 9 ancres reparees (slugs GitHub)
- Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete
- Glossaire: 15 termes standard deplaces en section rappel avec renvoi
- Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final)
- Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
2026-07-20 12:56:42 +02:00
parent 23eb3f3c84
commit 7496aafe64
59 changed files with 6457 additions and 2023 deletions
+2 -2
View File
@@ -1,11 +1,11 @@
---
title: "AGV Vue d'ensemble"
title: "AGV - Vue d'ensemble"
tags: [agv, still, igo, index]
status: draft
last_updated: 2026-05-12
---
# AGV Vue d'ensemble
# AGV - Vue d'ensemble
> **Périmètre** : intégration Still iGo, stations et routes AGV,
> jobs AGV spécifiques, troubleshooting.
+12 -12
View File
@@ -1,5 +1,5 @@
---
title: "Stations et routes AGV Topologie iGO"
title: "Stations et routes AGV - Topologie iGO"
tags: [agv, still, igo, stations, routes, topologie, location, group]
status: draft
standard_ref: concepts/stations.md
@@ -10,7 +10,7 @@ last_updated: 2026-05-12
author: Arthur
---
# Stations et routes AGV Topologie iGO
# Stations et routes AGV - Topologie iGO
> **Résumé** : correspondance entre les stations/routes EasyWMS et les
> concepts Location/Group/Vehicle d'iGO. Configuration dans MyMA vs
@@ -25,14 +25,14 @@ author: Arthur
Chez Limagrain, les AGV Still (EXV CB iGo) circulent entre les images
de quai, les PIE, les postes de picking (PK) et les zones de stockage.
La topologie physique (positions, trajets) est gérée **entièrement
dans iGO** (MyMA / iGO designer) EasyWMS ne connaît que les points
dans iGO** (MyMA / iGO designer) - EasyWMS ne connaît que les points
de départ et d'arrivée.
## Mapping topologique EasyWMS ↔ iGO
| Concept EasyWMS | Concept iGO | Notes |
|----------------|-------------|-------|
| Station (type 65 AGV) | **Vehicle** | Le véhicule physique lui-même |
| Station (type 65 - AGV) | **Vehicle** | Le véhicule physique lui-même |
| Location (`IRealLocation`) | **Location** | Point physique avec `possibleActions` |
| Route entre stations | _(pas d'équivalent)_ | iGO gère le routage en interne |
| WorkingZone | **Group** | Ensemble de Locations (décision tardive) |
@@ -61,14 +61,14 @@ Restent dans EasyS :
- Création du warehouse station lié à l'AGV equipment group
- Déclaration des AGV dans le groupe
- Routes EasyWMS **entre stations WMS** (type "External" pour les
segments AGV le manager d'exécution est "External")
segments AGV - le manager d'exécution est "External")
> ⚠️ Pas d'équivalent aux "Routes between stations" de type Galileo
> pour iGO. Les routes EasyS servent uniquement à valider l'existence
> d'un chemin logique côté WMS avant de créer la tâche AGV la
> d'un chemin logique côté WMS avant de créer la tâche AGV - la
> trajectoire physique est résolue par iGO.
## Décision tardive utilisation des Groups
## Décision tardive - utilisation des Groups
Cas d'utilisation chez Limagrain :
@@ -87,7 +87,7 @@ Cas d'utilisation chez Limagrain :
|---------|-----|
| `LocationLockType` avec flag "For AGV" | `Location.isEnabled = false` |
| Lock typé (par erreur extraction, putaway, etc.) | Un seul flag binaire côté iGO |
| Lock posé automatiquement par les workflows | À gérer côté WMS uniquement iGO ne pose pas de lock |
| Lock posé automatiquement par les workflows | À gérer côté WMS uniquement - iGO ne pose pas de lock |
> ⚠️ iGO n'a pas de granularité dans les types de verrous. La
> traduction entre les codes erreur EasyWMS (1001-2700) et le flag
@@ -104,12 +104,12 @@ ces champs EasyWMS (obligatoires en FIFO compact) sont portés par la
Location côté iGO, pas par le transport.
⚠️ **Modification des Locations via API** : l'API iGO n'expose que
`GET /api/locations` pas de `POST`/`PUT`. Toute modification de
`GET /api/locations` - pas de `POST`/`PUT`. Toute modification de
topologie passe par MyMA manuellement.
## Questions ouvertes
- [ ] Création/modification de Location via API iGO actuellement
- Création/modification de Location via API iGO - actuellement
en lecture seule, à clarifier avec STILL (@Arthur)
## Historique des modifications
@@ -123,5 +123,5 @@ topologie passe par MyMA manuellement.
| Source | Type | Date |
|--------|------|------|
| CR technique iGO STILL v1 | CR technique | 2026-04-28 |
| [Stations & Routes standard](../../concepts/stations.md) | Wiki standard | |
| [AGV module standard](../../modules/agv.md) | Wiki standard | |
| [Stations & Routes standard](../../concepts/stations.md) | Wiki standard | - |
| [AGV module standard](../../modules/agv.md) | Wiki standard | - |
+4 -4
View File
@@ -1,5 +1,5 @@
---
title: "Troubleshooting AGV Contraintes terrain"
title: "Troubleshooting AGV - Contraintes terrain"
tags: [agv, still, igo, terrain, convoyeurs, troubleshooting]
status: draft
standard_ref: operations/troubleshooting.md
@@ -119,11 +119,11 @@ nécessaire pour manoeuvrer.
## Questions ouvertes
- [ ] Confirmation par Still de l'espace max palette/convoyeur ~45 mm
- Confirmation par Still de l'espace max palette/convoyeur ~45 mm
(@Théo)
- [ ] Mesure réelle SAS7 à effectuer lors de l'implantation
- Mesure réelle SAS7 à effectuer lors de l'implantation
(@Abdennaim)
- [ ] Solution Still pour augmenter la distance mât/bord palette :
- Solution Still pour augmenter la distance mât/bord palette :
quel impact sur les specs AGV (capacité, hauteur de levée) ?
(@Cyprien Allard / Still)
+24 -11
View File
@@ -1,16 +1,16 @@
---
title: "Mini Job Images de quai vers poste de travail (PK)"
title: "Mini Job - Images de quai vers poste de travail (PK)"
tags: [agv, job, réception, pk, mini-job, big-bag]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: [LIM-74, LIM-70, LIM-60]
confluence_refs: []
sources: ["LIM-74 LOT1.3 [AGV][JOB] MINI JOB - images de quai poste de travail (PK).md"]
last_updated: 2026-05-12
sources: ["LIM-74 LOT1.3 [AGV][JOB] MINI JOB - images de quai poste de travail (PK).md", "Jira LIM-74 (revue de code validée 2026-04-07, relecture 2026-07-17)"]
last_updated: 2026-07-17
author: Arthur
---
# Mini Job Images de quai vers poste de travail (PK)
# Mini Job - Images de quai vers poste de travail (PK)
> **Résumé** : sous-workflow du [Mega Job](../03-picking/job-assignation-pk.md)
> qui orchestre l'envoi des palettes depuis les images de quai vers les
@@ -38,7 +38,7 @@ pas dans ce sous-workflow.
> Ce job ne concerne **pas** les réceptions de type Production. Celles-ci
> sont envoyées directement vers le PIE de l'ASRS via des supports
> virtuels voir
> virtuels - voir
> [Job réception production](job-reception-production.md) (LIM-71).
### Process complet de réception
@@ -47,12 +47,12 @@ pas dans ce sous-workflow.
|---|-------|--------|
| 1 | Déclaration sur l'image de quai | [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) |
| 2 | **Déplacement AGV → poste de travail** | **LIM-74 (cette page)** |
| 3 | Traitement au poste de travail | [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) / [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) |
| 4 | Déplacement AGV → table d'entrée (+ filmage) | |
| 3 | Traitement au poste de travail | [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) / [LIM-72](https://easywmsfrance.atlassian.net/browse/LIM-72) (V1 annulé → [LIM-93](https://easywmsfrance.atlassian.net/browse/LIM-93)) |
| 4 | Déplacement AGV → table d'entrée (+ filmage) | - |
| 5 | Passage PIE | [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) |
| 6 | Stockage ou rejet | |
| 6 | Stockage ou rejet | - |
| 7 | Clôture de la réception | [LIM-73](https://easywmsfrance.atlassian.net/browse/LIM-73) |
| 8 | Libération quai / image de quai | |
| 8 | Libération quai / image de quai | - |
## Logique principale
@@ -123,10 +123,22 @@ module AGV/GNA envoie les tâches à la flotte iGo.
|-----------|-------------|-------------------|
| PK_BIGBAG | Liste des PK compatibles big-bag (séparés par `;`) | _(vide)_ |
## [CUSTOM] Éléments techniques (revue de code validée 2026-04-07)
Implémentation définitive (commit `24067c85fc`, statut préprod) :
| Élément | Type | Rôle |
|---------|------|------|
| `CST_Reception_BestPendingAssignment_ForPK` | Query | Sélection de la réception à assigner (supports fictifs 8000*, CstAtt06 vide, filtre big-bag, tri big-bag puis FIFO) |
| `CST_PickingStationAssignment_Reception_PR` | WF | Génère les tâches pour la réception sélectionnée et assigne les conteneurs au PK. Appelé par le Mega Job [LIM-70](../03-picking/job-assignation-pk.md) |
| `CST_PickingStationAssignment_Job` | WF (Mega Job) | Modifié : gestion du paramètre `PK_BIGBAG` + appel de `CST_PickingStationAssignment_Reception_PR` |
| `ContainerVList` | Vue | Ajout de la colonne CustomAttribute6 (PK assigné) |
| `CST_Container_CustomAttribute6` | Ressource | FR « PK Assigné » / EN « Assigned PK » |
## Points d'attention
⚠️ Un PK compatible big-bag (`PK_BIGBAG`) peut aussi traiter des
réceptions sans big-bag le filtre ne s'applique que dans le sens
réceptions sans big-bag - le filtre ne s'applique que dans le sens
"big-bag vers PK non compatible".
⚠️ Toutes les palettes d'une même réception vont vers le **même PK** en
@@ -148,11 +160,12 @@ _(aucune question ouverte identifiée dans cette tâche)_
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-74 |
| 2026-07-17 | Arthur | Relecture revue de code LIM-74 (validée 07/04, préprod) : section « Éléments techniques » (query `CST_Reception_BestPendingAssignment_ForPK`, WF `CST_PickingStationAssignment_Reception_PR`, Mega Job modifié, vue ContainerVList, ressource `CST_Container_CustomAttribute6`) |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira | 2026 |
| [LIM-74](https://easywmsfrance.atlassian.net/browse/LIM-74) | Ticket Jira (Mini Job réception PK) - revue de code validée, préprod | 2026-04-07 |
| [LIM-70](https://easywmsfrance.atlassian.net/browse/LIM-70) | Ticket Jira (Mega Job) | 2026 |
| [LIM-60](https://easywmsfrance.atlassian.net/browse/LIM-60) | Ticket Jira (sous-emplacement auto) | 2026 |
@@ -1,21 +1,21 @@
---
title: "Job AGV Réception production vers ASRS"
title: "Job AGV - Réception production vers ASRS"
tags: [agv, job, reception, production, asrs, pie]
status: draft
standard_ref: architecture/galileo-integration.md
jira_refs: [LIM-71, LIM-64, LIM-66]
confluence_refs: []
sources: ["LIM-71 LOT1.2 RECEPTION PRODUCTION AGV Job de création des tâches images de quai ASRS.md"]
last_updated: 2026-05-12
last_updated: 2026-07-17
author: Arthur
---
# Job AGV Réception production vers ASRS
# Job AGV - Réception production vers ASRS
> **Résumé** : job périodique (30 s) qui crée les tâches de déplacement
> AGV depuis les images de quai vers le buffer d'entrée production
> (alimentant le PIE de l'ASRS). Concerne uniquement les réceptions
> production (CstAtt04 = "ASN").
> AGV depuis les images de quai vers le PIE de l'ASRS, via les stratégies
> de rangement. Concerne les réceptions production (CstAtt04 = "ASN") et
> les piles de palettes vides (code `PAL`).
> **Standard EasyWMS** : → voir
> [Galileo Integration](../../architecture/galileo-integration.md),
@@ -25,6 +25,12 @@ author: Arthur
## Contexte projet
> **Statut (LIM-71)** : en préprod (test client). Revues de code validées
> le 27/03/2026, le 28/04/2026 (ajout piles de palettes) et le 01/07/2026
> (ajout job de régénération). Deux tentatives ont été **annulées en cours
> de dev** : le marquage `CstAtt06` (abandonné, cf. plus bas) et la condition
> `CstAtt12` sur les conteneurs production (non requise : pas d'étiquette).
Dans le flux de réception production, les palettes arrivent de la
production (ou de l'ancien magasin) et vont **directement dans l'ASRS**
sans passer par un poste de travail. Elles sont déchargées par un
@@ -72,39 +78,82 @@ sequenceDiagram
## Logique d'éligibilité
Le job parcourt tous les supports positionnés sur des images de quai.
Un support est éligible si **toutes** les conditions suivantes sont
réunies :
Le job parcourt tous les conteneurs positionnés sur des **stages d'image de
quai** (`LocationType.DockStage`). Un conteneur est éligible si **toutes**
les conditions suivantes sont réunies :
| Condition | Détail |
|-----------|--------|
| Séquence 8000* | Support fictif créé lors de la déclaration image de quai ([LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64)) |
| Emplacement = DockStage | Conteneur posé sur un stage d'image de quai |
| Code `8000*` **ou** `PAL*` | Support fictif production (séq. 8000, [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64)) **ou** pile de palettes vides (`PAL`) |
| CstAtt04 = "ASN" | Support de type production |
| CstAtt06 vide | Pas encore traité par ce job |
| Aucune tâche active | Statuts actifs = Bloqué, Créé, En attente, En attente d'annulation, En cours. Statuts historiques (ignorés) = Annulé, Terminé |
| Aucune tâche active | `!c.Tasks.Any()` - aucun ordre de mouvement rattaché au conteneur |
La double vérification CstAtt06 + absence de tâche active est une
**sécurité anti-doublon**.
> **Reversal marquage CstAtt06** : la logique initiale prévoyait de marquer
> `CstAtt06` = destination pour éviter les doublons. Décidé en interne
> (19/03/2026) de **ne pas l'implémenter** : l'absence de tâche active suffit
> comme anti-doublon, et ne pas marquer `CstAtt06` permet de **regénérer** une
> tâche de rangement au prochain cycle si la précédente a été annulée. Ce job
> **n'utilise donc pas** `CstAtt06`.
>
> **Reversal condition CstAtt12** : une condition `CstAtt12 = true` (étiquette
> posée) a été ajoutée puis **retirée** pour la production et les piles de
> palettes - ces conteneurs n'ont pas d'étiquette. `CstAtt12` ne conditionne
> que les réceptions **fournisseur** vers les PK.
## Traitement d'un support éligible
## Traitement d'un conteneur éligible
### Marquage
Le job positionne `CstAtt06` = valeur du paramètre
`DESTINATION_PRODUCTION` (ex : "ENTREE_PRODUCTION").
### Création de la tâche
Pour chaque conteneur récupéré, le job effectue une **recherche
d'emplacement** basée sur les **stratégies de rangement** configurées, puis
génère la tâche de rangement si un emplacement est trouvé.
| Champ | Valeur |
|-------|--------|
| Origine | Sous-emplacement de l'image de quai |
| Destination | Déterminée par la **stratégie de rangement** configurée (MU d'entrée Est ou Ouest, Est par défaut) |
| Origine | Stage de l'image de quai |
| Destination | Déterminée par la **stratégie de rangement** (PIE_01 / PIE_02, entrée Est ou Ouest, **Est par défaut**) |
| Statut initial | "En attente" |
Les stratégies sont importées et configurées via la vue standard
`LocationPutawayStrategyVList`, modifiée pour autoriser les **stages** comme
station d'origine (type Stage, ou un stage précis). Les stratégies vont des
stages vers PIE_01 / PIE_02 en « fin de séquence ».
Le passage "en attente" → "créé" est géré par le WMS standard
(`Task_GenerateMovementJob_PR`). Le module AGV / GNA écoute ce
changement et envoie les tâches à la flotte iGo.
### Éléments AD (LIM-71)
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_StoreProductionContainer_Job` | Workflow + Job (30 s) | Récupère les conteneurs via la query, cherche un emplacement pour chacun et génère la tâche de rangement si trouvé |
| `CST_AvailableProductionContainers` | Query | Récupère les conteneurs candidats : sur DockStage, `CstAtt04 = "ASN"`, code `8000*` ou `PAL*`, sans tâche active |
| `LocationPutawayStrategyVList` | Vue | Ajout des stages dans la liste des stations d'origine (sélection type Stage ou stage précis) |
| `Galileo_PIEEventHandler_PR` | Workflow | Ignore l'erreur de lecture d'étiquette au PIE quand il s'agit d'une pile de palettes |
## Piles de palettes vides
Le job gère aussi le rangement des **piles de palettes vides** (conteneurs
dont le code commence par `PAL`). Elles suivent le même mécanisme
(query + stratégie de rangement + tâche AGV). Au PIE, l'erreur de lecture
d'étiquette est ignorée pour ces piles (`Galileo_PIEEventHandler_PR`).
## Job de régénération des tâches réception → PK
En complément (ajouté sous LIM-71, revue de code OK 01/07/2026), un job
distinct **régénère** les tâches manquantes pour les conteneurs de réception
**fournisseur** qui ont un PK assigné mais aucune tâche.
| Élément AD | Type | Rôle |
|------------|------|------|
| `CST_Reception_RegenerateTask_Job` | Workflow + Job (15 s) | Crée une tâche pour les conteneurs de réception (`CstAtt08`) avec un PK assigné (`CstAtt06`) posés sur une image de quai sans tâche. Vérifie que la station de picking est trouvée |
| `CST_ReceptionContainers_WithoutTasksToPK` | Query | Récupère ces conteneurs de réception sans tâche vers leur PK |
> Ce job de régénération relève du flux **réception fournisseur → PK**
> (cf. [Réception fournisseur](../01-inbound/reception-fournisseur.md),
> LIM-67 / LIM-74) et non de la réception production. Il confirme l'usage de
> `CstAtt06` = code du PK assigné côté réception fournisseur.
## Redirection si PIE saturé
Gérée en **standard** par le système de routes et distances configuré
@@ -124,37 +173,39 @@ destination ; c'est le WMS qui reroute si nécessaire.
| Paramètre | Description | Valeur par défaut |
|-----------|-------------|-------------------|
| DESTINATION_PRODUCTION | Code du buffer d'entrée production (destination des tâches AGV) | ENTREE_PRODUCTION |
| ~~DESTINATION_PRODUCTION~~ | ~~Code du buffer d'entrée production~~ - **obsolète** : la destination est désormais déterminée par les stratégies de rangement, plus par ce paramètre | ~~ENTREE_PRODUCTION~~ |
## Points d'attention
- Un support non ASN (fournisseur, intersite, retour) sur une image
de quai est **ignoré** il est géré par le
de quai est **ignoré** - il est géré par le
[Mega Job](../03-picking/job-assignation-pk.md) (LIM-70)
- Le marquage CstAtt06 a été simplifié en cours de développement
(certains cas de tests marqués "Plus utilisé") — la vérification
par absence de tâche active reste la sécurité principale
- La stratégie de rangement détermine l'entrée Est/Ouest ; le
paramètre DESTINATION_PRODUCTION n'est plus directement utilisé
comme destination de tâche
- Ce job **n'utilise pas** `CstAtt06` (marquage abandonné) : l'anti-doublon
repose uniquement sur l'absence de tâche active, ce qui permet la
régénération après annulation
- La stratégie de rangement détermine l'entrée Est/Ouest (Est par défaut) ;
le paramètre `DESTINATION_PRODUCTION` est **obsolète**
- Les piles de palettes vides (`PAL*`) sont traitées par le même job ;
l'erreur de lecture d'étiquette au PIE est ignorée pour ces piles
## Questions ouvertes
- [ ] Redirection multi-poumons / multi-PIE : config EasyS prête ?
- Redirection multi-poumons / multi-PIE : config EasyS prête ?
(@Nicolas)
- [ ] CstAtt06 encore nécessaire comme marqueur si la vérification
par tâche active suffit ? (@Fabien)
- ~~CstAtt06 encore nécessaire comme marqueur ?~~ → **Résolu (LIM-71)** :
marquage CstAtt06 abandonné, l'absence de tâche active suffit.
## Historique des modifications
| Date | Auteur | Modification |
|------|--------|--------------|
| 2026-05-12 | Arthur | Création initiale depuis LIM-71 |
| 2026-07-17 | Arthur | Relecture 18 commentaires : abandon marquage CstAtt06 (anti-doublon = tâche active), destination via stratégies de rangement (DESTINATION_PRODUCTION obsolète), gestion piles de palettes (PAL), reversal CstAtt12 (non requis production), éléments AD (CST_StoreProductionContainer_Job, CST_AvailableProductionContainers, LocationPutawayStrategyVList, Galileo_PIEEventHandler_PR), job régénération CST_Reception_RegenerateTask_Job, statut préprod + 3 revues de code |
## Références
| Source | Type | Date |
|--------|------|------|
| [LIM-71](https://easywmsfrance.atlassian.net/browse/LIM-71) | Ticket Jira | 2026 |
| [LIM-71](https://easywmsfrance.atlassian.net/browse/LIM-71) | Ticket Jira (18 commentaires) | 2026-03 → 2026-07 |
| [LIM-64](https://easywmsfrance.atlassian.net/browse/LIM-64) | Ticket Jira (déclaration image quai) | 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (passage PIE) | 2026 |
| [LIM-66](https://easywmsfrance.atlassian.net/browse/LIM-66) | Ticket Jira (passage PIE) | 2026 |
+197 -59
View File
@@ -1,16 +1,16 @@
---
title: "Intégration Still iGo API PACS et architecture"
title: "Intégration Still iGo - API PACS et architecture"
tags: [agv, still, igo, pacs, api, integration, architecture]
status: draft
standard_ref: modules/agv.md
jira_refs: []
jira_refs: [LIM-103, LIM-104]
confluence_refs: []
sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le module AGV EasyWMS Opus 4.7 v1.md"]
last_updated: 2026-05-12
sources: ["CR technique - iGO STILL - fonctionnement et flux API + correspondance avec le module AGV EasyWMS Opus 4.7 v1.md", "Jira LIM-103 (lecture directe 2026-07-20)", "Jira LIM-104 (lecture directe 2026-07-20)"]
last_updated: 2026-07-20
author: Arthur
---
# Intégration Still iGo API PACS et architecture
# Intégration Still iGo - API PACS et architecture
> **Résumé** : documentation complète de l'intégration du fleet manager
> **iGO easy** (STILL / KION Group) avec EasyWMS chez Limagrain.
@@ -18,20 +18,20 @@ author: Arthur
> avec le module AGV standard, l'architecture cible à 4 composants et
> les réponses FAQ STILL contractuelles.
> **Standard EasyWMS** : → voir [AGV Automated Guided Vehicles](../../modules/agv.md)
> **Standard EasyWMS** : → voir [AGV - Automated Guided Vehicles](../../modules/agv.md)
> Le standard communique par **tables d'échange DB** (EAG/AGE/AGS).
> Chez Limagrain, iGO easy remplace le protocole historique par une
> **API REST HTTPS** un middleware (pool IIS C#) assure la traduction.
> **API REST HTTPS** - un middleware (pool IIS C#) assure la traduction.
## Contexte projet
Limagrain utilise des AGV **Still EXV CB iGo** (gerbeurs électriques
automatisés) pour les transports internes entre images de quai, PIE,
postes de picking et zones de stockage. Le fleet manager est
**iGO easy** (variante simplifiée de PACS Productized Automated
**iGO easy** (variante simplifiée de PACS - Productized Automated
Concept Solutions), motorisé par le moteur interne **E'tricc**.
La communication est **100 % REST HTTPS** (port 7002, TLS 1.2) pas
La communication est **100 % REST HTTPS** (port 7002, TLS 1.2) - pas
de PLC ni de tables d'échange SQL directes entre WMS et iGO. Le modèle
est **pull + push** : le WMS pousse les ordres (`POST /transports`),
iGO pousse les changements d'état via webhook (callback POST vers une
@@ -63,14 +63,14 @@ flowchart LR
Concepts clés :
- Pas de notion de routes/segments côté WMS : iGO ne demande qu'une
`sourceLocation` et une `destinationLocation` la trajectoire
`sourceLocation` et une `destinationLocation` - la trajectoire
physique est gérée par iGO en interne.
- **Décision tardive** (Group / decision point) : si la destination
exacte est inconnue à la création, on donne un `destinationGroupId`.
iGO place le transport en `RequestDestination` et interroge le WMS
quand l'AGV arrive au point de décision.
- **Load** = container EasyWMS passé directement dans le payload de
création du transport (pas de `POST /api/loads` préalable FAQ #5).
- **Load** = container EasyWMS - passé directement dans le payload de
création du transport (pas de `POST /api/loads` préalable - FAQ #5).
## Stack technique iGO (MyMA)
@@ -92,9 +92,9 @@ Concepts clés :
| API Host (HTTPS REST) | **7002** |
| Postgres | 5432 |
## Véhicule Still EXV CB iGo
## Véhicule - Still EXV CB iGo
Gerbeur électrique automatisé (EXV = Elektro-Vertikal) se déplace
Gerbeur électrique automatisé (EXV = Elektro-Vertikal) - se déplace
sur ses propres roues et lève la charge avec le mât. Pas de couloir
mécanique ni de canal compact.
@@ -118,7 +118,7 @@ L'API PACS 2.3 expose **8 ressources** :
| **LoadType** | `ContainerType` | Catalogue de types de charge |
| **Location** | `Location` (`IRealLocation`) | Point physique du warehouse |
| **Group** | `WorkingZone` | Ensemble de locations (décision tardive) |
| **System** | | État global + abonnements |
| **System** | - | État global + abonnements |
### Champs clés du Transport
@@ -130,7 +130,7 @@ L'API PACS 2.3 expose **8 ressources** :
| `destinationLocationId` / `destinationGroupId` | string | `UnloadLocation` |
| `load` | Load | Container (`PalletId`, type, dimensions) |
| `priority` | int 0-10 | Priority 0-4 (conversion inversée) |
| `suspended` | bool | (pas d'équivalent `false` par défaut) |
| `suspended` | bool | (pas d'équivalent - `false` par défaut) |
| `customMetaData` | dict | `HasTopper`, `PalletType`, etc. |
| `status` | enum | `AgvStatus` (mapping § ci-dessous) |
@@ -183,7 +183,7 @@ Tous sur `https://[IP]:7002/api/...` avec header `X-API-Key`.
| GET | `/api/system` | Status global + subscriptions |
| GET | `/api/groups` / `/{id}` | Lecture des groupes |
| GET | `/api/loads` / `/{id}` | Lecture des loads |
| POST | `/api/loads` | Créer une load (non recommandé FAQ #5) |
| POST | `/api/loads` | Créer une load (non recommandé - FAQ #5) |
| GET | `/api/locations` / `/{id}` | Lecture des locations |
| GET | `/api/load-types` | Catalogue des types |
@@ -222,7 +222,7 @@ flowchart TD
États terminaux : **Finished**, **Cancelled**, **Aborted**.
> ⚠️ Le statut `New` est un état interne instantané d'iGO il
> ⚠️ Le statut `New` est un état interne instantané d'iGO - il
> n'apparaît jamais dans les callbacks. Le premier état observable est
> `Requested` (FAQ #4).
@@ -230,17 +230,17 @@ flowchart TD
| iGO Transport.status | Phase AGV EasyWMS | AgvStatus | Notes |
|---------------------|-------------------|-----------|-------|
| Requested | | (après POST) | Premier état observable |
| Requested | - | (après POST) | Premier état observable |
| Pending | 100 (Order accepted) | `Sent` | En file d'attente iGO |
| Assigned | 103 (Vehicle assigned) | (Sent) | ⚠️ Pas de Vehicle.id dans le payload (FAQ #1) |
| RequestSource | 104 (Load permission) | `PendingToBeLoad` | Uniquement en mode Group |
| Retrieving | | (Sent) | AGV en route / chargement |
| Retrieving | - | (Sent) | AGV en route / chargement |
| Retrieved | 106 (Load confirmed) | (Sent) | **Vehicle.id disponible ici** (FAQ #1) |
| RequestDestination | 108 (Unload permission) | `PendingToBeUnload` | Uniquement en mode Group |
| Storing | | | AGV en dépose |
| Storing | - | - | AGV en dépose |
| Stored / Finished | 110 (Unload confirmed) | (purge) | Transport terminé |
| Cancelled | 255 | (Cancelled) | Annulé |
| Aborted | 255 | (Cancelled) | Erreur irrécupérable aucun code d'erreur dans le payload (FAQ #2) |
| Aborted | 255 | (Cancelled) | Erreur irrécupérable - aucun code d'erreur dans le payload (FAQ #2) |
### Différence sémantique majeure : CanPick / CanDrop
@@ -258,13 +258,13 @@ l'usage de Groups** (même mono-location) là où EasyWMS aurait
| EasyWMS | iGO | Suggestion |
|---------|-----|------------|
| 0 Urgent | 10 Highest | mapping direct |
| 1 High | 8 | |
| 2 Normal | 5 | |
| 3 Low | 3 | |
| 4 VeryLow | 1 | |
| 0 - Urgent | 10 - Highest | mapping direct |
| 1 - High | 8 | |
| 2 - Normal | 5 | |
| 3 - Low | 3 | |
| 4 - VeryLow | 1 | |
## Flux nominal création et exécution
## Flux nominal - création et exécution
```mermaid
sequenceDiagram
@@ -322,14 +322,14 @@ intervenir manuellement.
### Authentification
**`X-API-Key`** (confirmé par STILL FAQ #8). Le header
**`X-API-Key`** (confirmé par STILL - FAQ #8). Le header
`Authorization: Bearer` mentionné dans certaines parties de la doc
PACS est obsolète. La clé est fixe, fournie par le PM STILL, stockée
chiffrée dans la config du middleware.
### TLS
HTTPS avec TLS 1.2. Certificats **auto-signés** côté iGO le WMS
HTTPS avec TLS 1.2. Certificats **auto-signés** côté iGO - le WMS
doit les truster explicitement (import dans le keystore).
### Modèle d'abonnement
@@ -372,7 +372,7 @@ déduplication = `transport.id + status` (FAQ #9).
| Auth load | EAG `Update` (CanPick=true) | `POST /final-source` |
| Auth unload | EAG `Update` (CanDrop=true) | `POST /final-destination` |
## Architecture cible Pattern à 4 composants
## Architecture cible - Pattern à 4 composants
### Principe directeur
@@ -401,7 +401,7 @@ flowchart LR
AGS[(AGV_AGS)]
end
subgraph Pool["Pool IIS C# .NET 8 À DÉVELOPPER"]
subgraph Pool["Pool IIS C# .NET 8 - À DÉVELOPPER"]
Pump[Pompe sortante<br/>poll OUTPUTQUEUE → API iGO]
Hook[Webhook receiver<br/>callbacks iGO → tables]
end
@@ -420,7 +420,7 @@ flowchart LR
Hook --> IQ & AGE & AGS
```
### Composants existants RIEN à modifier
### Composants existants - RIEN à modifier
| Composant | Rôle | Statut |
|-----------|------|--------|
@@ -429,7 +429,7 @@ flowchart LR
| Tables AGV_* (5) | Base intermédiaire | ✅ Existantes |
| Vues SmartUI AGV | Monitoring opérateur | ✅ Existantes |
### Middleware pool IIS seul livrable nouveau
### Middleware pool IIS - seul livrable nouveau
| Aspect | Description |
|--------|-------------|
@@ -452,18 +452,18 @@ Controller ASP.NET Core exposant deux endpoints HTTPS. À réception :
insert dans `AGV_INPUTQUEUE` → insert dans `AGV_AGE` ou `AGV_AGS`
avec le mapping Status → EventType/Flags (cf. tableau ci-dessous).
Horodatage `DateTime.UtcNow` à la réception (iGO ne fournit pas de
timestamp FAQ #3).
timestamp - FAQ #3).
### Mapping Status iGO → (EventType, Flags) AGE
| iGO Transport.status | EventType | Flags | Notes |
|---------------------|-----------|-------|-------|
| Pending | 100 | 0 | Order accepted |
| Assigned | 103 | 0 | Vehicle assigned `StationNumber=null` (FAQ #1) |
| Retrieved | 106 | 0 | Load confirmed `Vehicle.id` disponible ici |
| Assigned | 103 | 0 | Vehicle assigned - `StationNumber=null` (FAQ #1) |
| Retrieved | 106 | 0 | Load confirmed - `Vehicle.id` disponible ici |
| Stored / Finished | 110 | 0 | Unload confirmed |
| Cancelled | 255 | 0 | Annulé |
| Aborted | | 2003/2004 | À enrichir via `GET /api/vehicles/{id}` (FAQ #2) |
| Aborted | - | 2003/2004 | À enrichir via `GET /api/vehicles/{id}` (FAQ #2) |
### Pattern de boot du middleware
@@ -471,7 +471,7 @@ timestamp — FAQ #3).
1. Vérifier la base intermédiaire accessible
2. Vérifier l'API iGO : `GET /api/system`
3. Vérifier les subscriptions actives (re)créer si absentes
3. Vérifier les subscriptions actives - (re)créer si absentes
4. Réconcilier les transports : `GET /api/transports` vs
`AGV_OUTPUTQUEUE` non acquittées → générer les lignes AGE manquantes
5. Démarrer le polling sortant
@@ -487,6 +487,46 @@ le status iGO courant :
fallback (attendre Finished + tâche retour, ou RFT)
- **Cancelled / Aborted / Finished** → no-op (déjà terminal)
### Refus WMS de l'annulation quand le support est sur un AGV (LIM-104)
> **Statut** : préprod ; revue de code validée le 23/06/2026 (Vincent Charvet).
**Problème** (découvert aux tests STILL) : si on annule / supprime une Task
AGV alors que le support est **déjà pris par l'AGV** (transport iGO
`>= Retrieved`), iGO **refuse** l'annulation et termine physiquement la
mission - mais le WMS a déjà **supprimé la Task** au moment de la demande.
`ProcessEvents_PR` s'arrête alors sur sa garde `CST Get Task` (« CST Task
exists » = false) pour toutes les AGE suivantes :
- l'AGE `255/1009` ne déclenche jamais `ProcessError1009` → **notification
opérateur du refus perdue** ;
- l'AGE `110` (Unload confirmed) ne déclenche jamais `ContainerMove`
**support figé sur l'AGV**.
**Solution** : souscription **preview** sur la commande de suppression /
annulation de Task. Avant exécution :
1. récupérer le support (container) associé à la Task ;
2. vérifier s'il est sur un AGV - critère retenu `Container.StationType ==
Agv` (équivalent métier de « palette physiquement sur l'AGV » = iGO
`>= Retrieved` ; repli possible : `LocationCode` commençant par `AGV_`) ;
3. si **sur AGV** → **refuser** la commande (exception) avec message
opérateur explicite. La Task reste vivante, l'AGV termine sa mission, le
support est livré à destination ;
4. sinon (support encore à la source ou déjà déposé) → laisser la commande
s'exécuter normalement.
| Élément AD | Type | Rôle |
|-----------|------|------|
| `CST_TaskCancel_CheckAgv` | Subscription | Appelle le WF à l'**annulation** d'une tâche |
| `CST_TaskDelete_CheckAgv` | Subscription | Appelle le WF à la **suppression** d'une tâche |
| `CST_CancelTask_CheckForAgv` | Workflow | Récupère la tâche annulée / supprimée ; si le conteneur est sur un emplacement AGV, lève une erreur (numéro de tâche + code conteneur) |
| `CST_CancelTask_NotPossible_2` | Ressource | FR « Impossible de supprimer la tâche {0} car le conteneur {1} est sur un AGV » / EN « Cannot delete task {0} because container {1} is on AGV » |
Cas de test : (1) annulation **après** pickup (`>= Retrieved`) → refusée,
support livré, Task `Finished` ; (2) annulation **avant** pickup
(`< Retrieved`) → acceptée, EAG `D`, middleware POST cancel iGO `204`.
### Comparaison avec les Gateways historiques
| Aspect | EasyWMSGateway2015 (Galileo) | GatewayRocla2015 | Pool IIS iGO |
@@ -501,24 +541,116 @@ le status iGO courant :
> (ancienne architecture monolithique). Développement **from scratch**
> sur ASP.NET Core .NET 8 recommandé.
## Workflows EasyWMS impact iGO
## Workflows EasyWMS - impact iGO
Avec le pattern Gateway iGO + tables AGV_*, **aucun workflow EasyWMS
ni la Gateway AGV Mecalux n'a besoin d'être modifié**. La spécificité
iGO est entièrement encapsulée dans le middleware.
> ⚠️ **Réserve (LIM-103, préprod)** : ce tableau reflète l'**hypothèse de
> conception**. À l'implémentation, plusieurs **bugs du module AGV standard
> Mecalux** ont dû être corrigés (dispatch d'events cassé par la
> transformation Gateway `phase + 100`, attributs `canPick`/`canDrop`
> jamais assignés, events 106/110 non gérés, refus de mission iGo). Détail :
> [Corrections des bugs du module AGV standard (LIM-103)](#corrections-des-bugs-du-module-agv-standard-lim-103).
| Workflow | Comportement avec Gateway iGO |
|----------|-------------------------------|
| `MovementCreatedEventHandler_PR` | ✅ Inchangé déclencheur |
| `MovementCreatedEventHandler_PR` | ✅ Inchangé - déclencheur |
| `AgvTask_CreateTaskFromMovement_PR` | ✅ Inchangé |
| `SerializeAgvTasks_PR` | ✅ Inchangé écrit EAG, le middleware lit et POST |
| `ProcessEvents_PR` + `ProcessEvent_*_PR` | ✅ Inchangé — poll AGE comme d'habitude |
| `ProcessErrors_PR` | ✅ Inchangé réagit aux Flags dans AGE |
| `Agvtask_CanPick/CanDrop_PendingToBeSent_PR` | ✅ Inchangé écrit EAG, le middleware appelle `/final-source` ou `/final-destination` |
| `TaskCanceledEventHandler_PR` | ✅ Inchangé écrit EAG Delete, le middleware gère |
| Workflows RFT | ✅ Inchangés fallback préservé |
| `SerializeAgvTasks_PR` | ✅ Inchangé - écrit EAG, le middleware lit et POST |
| `ProcessEvents_PR` + `ProcessEvent_*_PR` | ⚠️ **Modifié (LIM-103)** - patch dispatch `phase+100`, gestion events 106/110, refus mission, fix `canPick`/`canDrop` |
| `ProcessErrors_PR` | ✅ Inchangé - réagit aux Flags dans AGE |
| `Agvtask_CanPick/CanDrop_PendingToBeSent_PR` | ✅ Inchangé - écrit EAG, le middleware appelle `/final-source` ou `/final-destination` |
| `TaskCanceledEventHandler_PR` | ✅ Inchangé - écrit EAG Delete, le middleware gère |
| Workflows RFT | ✅ Inchangés - fallback préservé |
## FAQ STILL — réponses contractuelles
## Corrections des bugs du module AGV standard (LIM-103)
> **Statut** : préprod ; revue de code à faire (@Vincent, 30/06/2026),
> assignée Vincent Charvet. Ticket regroupant les corrections nécessaires
> pour faire fonctionner le module AGV standard sur ce projet.
### Queries standard corrigées
- `Equipment_AgvTask_GetTask_ByWorkingZone_UI` : correction d'une null
exception sur query standard.
- `Equipment_AgvTask_LoadEquipment_UI` : correction d'un paramètre erroné
sur query standard.
### Dispatch d'events cassé par la transformation Gateway `phase + 100`
Bug de cohérence Mecalux entre la Gateway et le module AGV. Le record
`agvEvent` reçu par `ProcessEvents_PR` est un `GalileoEventCreatedWF` dont
le champ `EventType` (Integer) porte la valeur **SIMO** de la Gateway,
alors que la DecisionActivity « Event type » de `ProcessEvents_PR` dispatche
sur les **valeurs natives** 100 / 103 / 104 / 108.
Chaîne du bug :
- le middleware écrit `phase = 104` dans `agv_age.phase` ;
- la Gateway lit la ligne et pose `EventType = phase + 100 = 204`
(avec `Extension[PHASE] = 104`) ;
- `ProcessEvents_PR` reçoit `EventType = 204` ≠ 100/103/104/108 → **default
silencieux** → workflow Completed sans side-effect (silent fail).
Fix : patch de l'activité « Check parameters » de `ProcessEvents_PR`
(soustraction de 100 pour retrouver la valeur native).
### `canPick` / `canDrop` jamais assignés (LoadPermission / UnloadPermission)
Bug majeur du standard : dans `ProcessEvent_LoadPermission_PR`, l'attribut
interne `canPick` (InitialValue vide) n'est **jamais assigné**. La
DecisionActivity « Can pick? » prend donc toujours la branche `Otherwise No`
→ End, et le sous-workflow `Agvtask_CanPick_PendingToBeSent_PR` (qui pose
`CanPick = true`) n'est **jamais appelé**. Même défaut dans
`ProcessEvent_UnloadPermission_PR` (attribut `canDrop`).
| Workflow | État | Logique |
|----------|------|---------|
| `ProcessEvents_PR` | OK (après patch -100) | Dispatch sur `EventType == 100/103/104/108` |
| `Agvtask_CanPick_PendingToBeSent_PR` | OK | `CanPick = true` hardcodé, fait le flip |
| `SetAgvStatus_PR` | OK | `if CanPick && CanDrop → Sent ; elif CanPick → PendingToBeUnload ; else → PendingToBeLoad` |
| `ProcessEvent_LoadPermission_PR` / `ProcessEvent_UnloadPermission_PR` | BUGGÉ | `canPick` / `canDrop` jamais assigné → branche No systématique |
Fix : remplacer l'expression de la condition `Yes` de la DecisionActivity
par `!agvTask.CanPick` (resp. `!agvTask.CanDrop`), qui teste directement la
propriété de l'`AgvTask` récupérée par « Get AGV task ». En l'état, le
standard Mecalux est **inutilisable** pour le flow LoadPermission /
UnloadPermission.
### Events 106 / 110 non gérés (fix temporaire)
Le standard ne gère pas les events **106** (déplacer le support sur l'AGV)
et **110** (déplacer le support de l'AGV vers son emplacement de
destination). Fix temporaire (Michael Chaudier, 29/05) : `ProcessEvents_PR`
gère désormais les events 106 (confirmation load) et 110 (confirmation
unload), avec ajout des commandes de déplacement du support - chargement
sur l'AGV à l'event 106, déchargement à la destination de la tâche à
l'event 110.
### Refus de mission iGo
Ajout (Arthur, 01/06) d'une condition dans `ProcessEvents_PR` pour gérer le
refus de mission par iGo → **annulation de la tâche AGV** ; la transition
« sequence 0 » est modifiée pour ne pas catcher cette erreur (non gérée par
le sous-workflow) tant qu'aucun flag d'erreur n'est levé.
### Génération du mouvement PS → position PK
`Container_MovedEventHandler_PS_PR` modifié (Vincent, 02/06, commit
[`9fa84a83e2`](https://msscode.mecalux.com/Proyectos_SW/EASYWMS_11351_LIMAGRAIN/commit/9fa84a83e2dfeaa8a4bde22b10a7e2318658bfbb))
pour générer le mouvement des PS vers la bonne position du PK (**première
position libre**). Logique conservée pour la recertification et
l'échantillonnage.
> Ce même handler est ensuite spécialisé : redirection selon le **type de
> tâche** au picking (voir [Placement PS → PK](../03-picking/placement-ps-pk.md),
> LIM-82) et placement à la **position X max** de l'image de quai à
> l'expédition (voir [Assignation automatique de l'image de quai](../04-outbound/assignation-image-quai.md),
> LIM-94). LIM-103 en pose la base (première position libre).
## FAQ STILL - réponses contractuelles
Réponses obtenues de STILL en avril 2026. Valeur contractuelle.
@@ -552,16 +684,18 @@ Réponses obtenues de STILL en avril 2026. Valeur contractuelle.
⚠️ **CanPick/CanDrop** : pour reproduire le standard EasyWMS, forcer
l'usage de Groups même mono-location.
⚠️ **Priorité inversée** : EasyWMS 0=Urgent, iGO 10=Max conversion
⚠️ **Priorité inversée** : EasyWMS 0=Urgent, iGO 10=Max - conversion
à coder dans le middleware.
⚠️ **Pas de routing exposé** : iGO gère ses routes en interne pas
⚠️ **Pas de routing exposé** : iGO gère ses routes en interne - pas
d'équivalent à "Routes between stations" en EasyS, pas d'erreur
"Disabled route" côté iGO.
⚠️ **Annulation après chargement impossible** : la logique
`AgvTask_SetCancelledTask_PR` qui déclenche la recherche de relocation
après chargement n'a plus de sens dans le mapping iGO.
après chargement n'a plus de sens dans le mapping iGO. Le WMS **refuse
désormais l'annulation en amont** via la souscription preview LIM-104 (voir
[Refus WMS de l'annulation…](#refus-wms-de-lannulation-quand-le-support-est-sur-un-agv-lim-104)).
⚠️ **Tests de charge webhook à mener** : simuler Gateway iGO down
pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
@@ -575,16 +709,16 @@ pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
## Questions ouvertes
- [ ] Fréquence des callbacks `vehicle/event` pour les mises à jour de
position risque de flood (@Nicolas)
- [ ] Taille max et caractères autorisés dans `customMetaData` (@STILL)
- [ ] Les `customMetaData` sont-elles ré-émises dans les callbacks
- Fréquence des callbacks `vehicle/event` pour les mises à jour de
position - risque de flood (@Nicolas)
- Taille max et caractères autorisés dans `customMetaData` (@STILL)
- Les `customMetaData` sont-elles ré-émises dans les callbacks
transport ? (@STILL)
- [ ] Création/modification de Location via API iGO limité à GET
- Création/modification de Location via API iGO - limité à GET
pour l'instant (@STILL)
- [ ] Gestion Pallet Shuttle via iGO (LoadType = 1) hors scope
- Gestion Pallet Shuttle via iGO (LoadType = 1) - hors scope
actuel ? (@Théo)
- [ ] Multi-warehouse : iGO suppose un seul site impact si extension
- Multi-warehouse : iGO suppose un seul site - impact si extension
future ? (@Michael)
## Historique des modifications
@@ -592,12 +726,16 @@ pendant 30s / 1min / 5min pour observer le comportement réel d'iGO
| Date | Auteur | Modification |
|------|--------|-------------|
| 2026-05-12 | Arthur | Création initiale depuis CR technique iGO STILL |
| 2026-07-20 | Arthur | Intégration LIM-103 (corrections bugs module AGV standard, préprod, revue de code à faire) : nouvelle section (2 queries standard corrigées, dispatch d'events cassé par `phase+100`, `canPick`/`canDrop` jamais assignés dans LoadPermission/UnloadPermission, events 106/110 non gérés, refus de mission iGo, `Container_MovedEventHandler_PS_PR` première position libre) ; réserve ajoutée sur le tableau « workflows inchangés » (ligne `ProcessEvents_PR` = Modifié) ; front matter jira_refs/sources/last_updated |
| 2026-07-20 | Arthur | Intégration LIM-104 (refus WMS annulation/suppression Task si support sur AGV, préprod, revue validée 23/06) : sous-section sous « Logique d'annulation » (désync task supprimée avant refus iGo, souscription preview, critère `Container.StationType == Agv`, table AD `CST_TaskCancel_CheckAgv`/`CST_TaskDelete_CheckAgv`/`CST_CancelTask_CheckForAgv`/`CST_CancelTask_NotPossible_2`, cas de test) ; cross-ref depuis le point d'attention « Annulation après chargement impossible » ; jira_refs +LIM-104 |
## Références
| Source | Type | Date |
|--------|------|------|
| CR technique iGO STILL fonctionnement et flux API v1 | CR technique | 2026-04-28 |
| CR technique iGO STILL - fonctionnement et flux API v1 | CR technique | 2026-04-28 |
| [LIM-103](https://easywmsfrance.atlassian.net/browse/LIM-103) | Ticket Jira (corrections bugs module AGV standard - préprod, revue à faire, commit `9fa84a83e2`) | 2026 |
| [LIM-104](https://easywmsfrance.atlassian.net/browse/LIM-104) | Ticket Jira (refus annulation Task si support sur AGV - préprod, revue validée 23/06) | 2026 |
| 2510_PACS-2.3-Host-Interface-Technical-Specifications | Spec API STILL | 2025-10 |
| iGo easy 2.3 - Host Interface Specifications | Spec API STILL | 2025 |
| IT requirements R1 20250929 | Spec infra STILL | 2025-09-29 |