mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-11 17:26:32 +02:00
feat(produits): recherche Qlik d'abord + fiche réseau complète, tendance 12 mois glissants
Recherche produit - La page /produits interroge désormais Qlik Sense EN PREMIER (src/lib/qlik-search.ts) : recherche globale Engine sur les champs article (code + libellé détectés dynamiquement via FieldList), sélection des valeurs trouvées, puis liste des Article Code correspondants. - Les métriques réseau des articles trouvés sont extraites sur 12 mois glissants et mises en cache (qlik_network_metrics), puis rapprochées du catalogue FF Nancy par code centrale (pgGetProduitsByCodeCentrale). - Repli propre sur la recherche catalogue local si Qlik est injoignable, signalé dans l'UI. Résultats mis en cache mémoire 10 min, requête dédupliquée. - Nouvelle route GET /api/produits/search (runtime nodejs, 300 s) ; la liste est chargée côté client avec état de chargement, l'extraction Qlik prenant plusieurs secondes. Informations affichées - Résultats : magasins vendeurs (+ % du réseau), quantité réseau, quantité par magasin, prix moyen réseau, CA par magasin, marge %, sparkline de tendance, fournisseur, et présence ou non au catalogue Nancy. - Fiche : carte « Performance réseau · 12 mois glissants » en tête (8 indicateurs + détail mensuel qté / magasins / qté par magasin / CA / prix moyen / marge %), puis carte « Fournisseur » dédiée, puis identité, stock, nos ventes 12 mois. - La fiche s'ouvre aussi par code centrale (?cc=) pour les produits que le réseau travaille et que Nancy ne référence pas — le libellé et le fournisseur Qlik sont persistés dans le cache réseau pour ce cas. Tendance réseau - computeNetworkTrend reconstruit sa fenêtre depuis la date du jour : 12 mois complets, mois en cours EXCLU (il est partiel et écrasait la pente). Les mois absents du cache valent 0 ; ceux antérieurs à la première extraction réelle sont écartés au lieu d'être inventés à 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DfqUihgixw4K1AmJhizWiu
This commit is contained in:
16 files changed
+1550
-329
No files matched your search
@@ -14,6 +14,34 @@ La Foir'Fouille : **CA réseau, Qté vendue réseau, Nb magasins** par produit.
|
||||
| Bouton UI | `src/features/grid/components/sync-qlik-button.tsx` |
|
||||
| Jointure grille | `enrichWithNetworkMetrics()` dans `src/features/grid/api/get-product-rows.ts` (Phase 8) |
|
||||
| Colonnes grille | CA réseau / Qté réseau / Magasins (/270) / % présence (`heatmap-grid.tsx`) |
|
||||
| Recherche produit (Qlik d'abord) | `src/lib/qlik-search.ts` → `src/features/produits/api/search-produits.ts` → `GET /api/produits/search` |
|
||||
|
||||
## Recherche produit — Qlik d'abord
|
||||
|
||||
La page `/produits` ne cherche **plus** dans le catalogue FF Nancy en premier :
|
||||
le réseau référence bien plus de produits que Nancy, et ce sont précisément
|
||||
ceux-là qu'on veut voir.
|
||||
|
||||
1. `searchQlikArticles()` — recherche globale Engine (`SearchResults`) restreinte
|
||||
aux champs article (code + libellé, détectés dynamiquement via `FieldList`).
|
||||
Les valeurs trouvées sont sélectionnées dans leur champ, ce qui restreint la
|
||||
dimension « Article Code » aux articles correspondants.
|
||||
2. `fetchNetworkMetricsPlaywright()` — mesures réseau + détail mensuel sur la
|
||||
fenêtre 12 mois glissants (mois en cours exclu), puis `upsertNetworkMetrics()`
|
||||
pour que la fiche produit soit immédiatement servie depuis le cache.
|
||||
3. `pgGetProduitsByCodeCentrale()` — rapprochement avec le catalogue Nancy.
|
||||
Un code absent = produit réseau que nous ne référençons pas (`?cc=` sur la fiche).
|
||||
|
||||
Repli : si Qlik est injoignable, la recherche retombe sur `pgSearchProduits()` et
|
||||
la réponse le signale (`source: "db"`). Résultats mis en cache mémoire 10 min.
|
||||
|
||||
## Tendance réseau = 12 mois glissants stricts
|
||||
|
||||
`computeNetworkTrend()` reconstruit sa fenêtre à partir de la date du jour :
|
||||
12 mois complets, **mois en cours exclu** (partiel, il tirait la pente vers le bas).
|
||||
Les mois de la fenêtre absents du cache valent 0 (produit non vendu) ; ceux
|
||||
antérieurs au premier mois réellement extrait sont écartés au lieu d'être
|
||||
inventés à 0 (extraction plus courte que 12 mois).
|
||||
|
||||
Retirés : ranking (champs/query/colonnes), analyse IA (routes `/api/ai/*`, `bulk-ai-analyzer`,
|
||||
dossier `ai-copilot`), score (`score-engine.ts`, colonne score).
|
||||
|
||||
Reference in new issue
Block a user