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
+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 |