# Progress Dernière mise à jour : 2026-02-23 ## Ce qui fonctionne - [x] Projet Laravel 12 initialisé (livewire-starter-kit) - [x] Livewire 4 + Flux UI Free v2 installés - [x] Fortify installé (authentification existante, non utilisée par Filament) - [x] Documentation API rédigée avec accents (`documentation/documentation_api_logistics.md`) - [x] Memory bank créé et structuré (`memory-bank/`, `.cursor/rules/memory-bank.mdc`) - [x] Configuration API Logistics (`.env`, `config/logistics.php`) avec timeout et retry - [x] `LogisticsService` créé (`app/Services/LogisticsService.php`) avec 19 méthodes, timeout, retry, gestion d'erreur - [x] `LogisticsApiException` créée (`app/Exceptions/LogisticsApiException.php`) avec messages français - [x] Migration `api_request_logs` créée - [x] Filament v5.0.0 installé et configuré sans authentification - [x] 7 pages Filament créées : Documentation, TablesExplorer, Articles, Documents, Journaux, Tiers, Divers - [x] 7 vues Blade associées dans `resources/views/filament/pages/` - [x] Toggle Lecture/Ecriture sur toutes les pages entité (Articles, Documents, Journaux, Tiers, Divers) - [x] Page Documents : 9 endpoints couverts (7 lecture + 2 écriture) - [x] Page Divers : 3 endpoints couverts (2 lecture + 1 écriture fonctionnel en MODE=1 Restock) - [x] Gestion d'erreur dans toutes les pages Filament (LogisticsApiException + Throwable) - [x] Logging des requêtes API réussies et échouées dans `api_request_logs` - [x] Système de design unifié : 11 composants Blade dans `resources/views/components/logistics/` - [x] Convention de design documentée dans `.cursor/rules/design-system.mdc` - [x] Toutes les pages Filament utilisent les composants `x-logistics.*` - [x] Thème Filament personnalisé (`resources/css/filament/admin/theme.css`) - [x] Plugin `@tailwindcss/typography` activé pour le rendu prose - [x] Styles `.documentation-prose` personnalisés pour le dark mode - [x] TablesExplorer amélioré : selectTable, déduplication colonnes, filtre, badges de types - [x] Page Documentation avec rendu markdown stylisé et export PDF - [x] Connectivité API fonctionnelle (serveur `tse-10-test.esi.local`) - [x] Convention d'écriture avec accents français appliquée - [x] `README.md` créé - [x] Formatage Pint validé - [x] CI GitHub Actions (lint + tests) - [x] `ApiErrorTranslator` créé (`app/Support/ApiErrorTranslator.php`) : normalisation et traduction des erreurs API - [x] Composant `error-banner` amélioré (supporte `nl2br` pour les explications) - [x] Composant `json-block` amélioré (prop `$searched` + état vide) - [x] Badge de comptage corrigé (`count($data)` au lieu de `$metadata['rowcount']`) - [x] Validation des champs obligatoires sur toutes les pages API (messages en français) - [x] Propriétés de tracking (`$hasSearched`, etc.) sur toutes les pages - [x] `ApiErrorTranslator` intégré dans toutes les pages API (Articles, Documents, Divers, Journaux, Tiers, TablesExplorer) - [x] 4 nouveaux fichiers de tests : ArticlesPageTest, JournauxPageTest, TiersPageTest, ApiErrorTranslatorTest - [x] Tests existants mis à jour (DiversPageTest, DocumentsPageTest) avec validation et tracking - [x] Investigation paramètre `results` : sans effet sur `art_list` (5 max) et `third_list` (10 max), limite fixe côté serveur - [x] Investigation paramètre `barcode` : sans effet observable sur `art_list`, `search` reste obligatoire - [x] Page Articles : `$results` supprimé, `$barcode` ajouté, formulaire mis à jour - [x] Documentation `art_list` et `third_list` corrigée (métadonnées réelles, paramètres inefficaces documentés) - [x] 2 nouveaux tests barcode dans ArticlesPageTest (envoi quand renseigné, omission quand vide) - [x] Investigation complète des 9 endpoints Documents (appels API réels, structures de réponse, formats) - [x] Document_GetPDF reclassé comme fonctionnel (LAYOUT numérique en string, ex: "1") - [x] Format de date YYYY-MM-DD confirmé et documenté pour tous les endpoints avec paramètre date - [x] Codes paydelay documentés (10 codes via codes_list PAYDELAY : 30, 30F, 45F, 50, 60, 60F, 75F, 90, 90F, 0F) - [x] Modes de paiement documentés (codes_list PAYMODE : CAS, VIR, BC, CBEF) - [x] Paramètre `results` ajouté à document_list (fonctionne, défaut ~108) - [x] Documents.php : propriété `$results` ajoutée, transmise en string à l'API - [x] documents.blade.php : champ `results` ajouté, bandeau "non fonctionnel" retiré de GetPDF, placeholder LAYOUT mis à jour - [x] Documentation API massivement enrichie (réponses réelles, structures détaillées, section endpoints partiellement fonctionnels) - [x] 1 nouveau test Pest (results envoyé en string à document_list) - [x] Investigation complète des 2 endpoints Tiers (appels API réels) - [x] `third_list` : colonnes de recherche confirmées (`name,groupid,vat`, pas `custid`), colonnes valides documentées (15 colonnes), colonne `custname` invalide - [x] `third_GetArtHistory` : structure de réponse documentée (8 champs), casse `thirdid` obligatoire, retourne tout l'historique sans limite - [x] Tiers.php : valeur par défaut `$select` corrigée de `custid,custname` à `custid,name` - [x] tiers.blade.php : placeholder du champ select mis à jour - [x] Documentation `third_list` et `third_GetArtHistory` massivement enrichie (colonnes valides, métadonnées, exemples de réponse, structure de réponse) - [x] 3 nouvelles remarques dans la documentation (colonnes third_list vs column_list/cust, colonnes de recherche, casse thirdid) - [x] 7 nouveaux tests Pest dans TiersPageTest (total : 15 tests) - [x] Investigation complète des 3 endpoints Divers (appels API réels) - [x] `getserialnumber` : structure de réponse documentée (objet `{ "getserialnumber": "..." }`, pas une chaîne) - [x] `codes_list` : correspondance exacte (pas préfixe), sensible à la casse, chaîne vide = liste maître (42 groupes), signification des champs documentée - [x] `custom_geninv_updatestock` reclassé comme FONCTIONNEL (MODE=1 Restock). STKID = code de dépôt. THIRDID obligatoire en Restock. QTY négatif possible. - [x] Divers.php : ajout THIRDID, valeur par défaut MODE=1, validation améliorée - [x] divers.blade.php : bandeau mis à jour, champ THIRDID, labels corrigés - [x] Documentation enrichie : getserialnumber (structure réponse), codes_list (2 modes, groupes, champs), custom_geninv_updatestock (reclassé, 7 paramètres, modes, erreurs). Section "Endpoints non fonctionnels" supprimée. 4 nouvelles remarques. - [x] 12 nouveaux tests Pest dans DiversPageTest (total : 22 tests) - [x] Composant `` créé : tableau de référence des paramètres API réutilisable - [x] Tableaux de paramètres ajoutés sous chaque endpoint de toutes les pages (17 endpoints au total) - [x] Tableau brut HTML de `custom_geninv_updatestock` refactorisé vers le composant `param-table` ## Ce qui reste à faire - [ ] Corriger les tests pré-existants `FilamentDashboardTest` (2 tests en échec) - [ ] Vérifier le rendu visuel de toutes les pages avec de vraies données API - [ ] Éventuellement : pagination / tri côté client pour les grands tableaux - [ ] Éventuellement : page de consultation des logs API ## Problèmes connus - 2 tests `FilamentDashboardTest` échouent car le dashboard ne contient pas les sections attendues. Tests créés avant la refonte du dashboard. - L'erreur `SQLSTATE[HY000] [1049] Unknown database` peut apparaître lors de `composer update` si la base n'est pas encore créée (script `boost:update`). Sans impact une fois la base créée. - L'API retourne chaque colonne en double dans `column_list`. Le `TablesExplorer` déduplique côté client. - Le paramètre `results` n'a aucun effet sur `art_list` (toujours 5 max) ni sur `third_list` (toujours 10 max). Limite fixe côté serveur. En revanche, `results` fonctionne sur `document_list` et `jnl_list`. - Le paramètre `barcode` n'a aucun effet observable sur `art_list`. Le paramètre `search` reste obligatoire même avec `barcode`. - La colonne `custname` n'existe pas dans `third_list`. Le nom du tiers est dans la colonne `name`. Beaucoup de colonnes de la table `cust` (visibles dans `column_list/cust`) ne sont pas acceptées par `third_list` dans le paramètre `select`. - `third_GetArtHistory` retourne l'intégralité de l'historique sans pagination (potentiellement des milliers d'éléments), ce qui peut être lent pour certains tiers. - `custom_geninv_updatestock` MODE=0 (Inventaire) dépend de la configuration des journaux KI du dossier. Dans le dossier de test, aucun journal KI n'est configuré pour les dépôts "A" ou "SG", ce qui rend MODE=0 non fonctionnel dans cet environnement. ## Métriques - Tests : 147 passent, 2 en échec pré-existant - Pages Filament : 7 (Documentation, TablesExplorer, Articles, Documents, Journaux, Tiers, Divers) - Composants Blade design system : 11 (card, section-header, error-banner, stat-bar, stat-item, data-table, empty-state, search-input, form-field, json-block, param-table) - Endpoints API couverts par LogisticsService : 19 - Endpoints accessibles depuis l'interface : 19 (tous fonctionnels, MODE=0 de custom_geninv_updatestock dépend de la config) - Migrations : 5 (users, cache, jobs, two_factor, api_request_logs) - Règles Cursor : 4 (laravel-boost, memory-bank, design-system, update-documentation) - Classes support : 1 (ApiErrorTranslator)