La requête Hit Parade divergeait du calcul canonique de la Grille : - SUM(ABS(qtemvt)) additionnait les retours clients comme des ventes au lieu de les déduire → quantités et CA gonflés sur le magasin ayant des retours/avoirs sur la période (visible sur 579). - ABS(SUM(mntmvtttc)) inversait le signe d'un CA net négatif. - GROUP BY no_id + jointure artfou1 preference=1 non dédupliquée pouvait produire plusieurs lignes par (codein, site), écrasées par le pivot. Corrections : - Hit Parade : ventes nettes SUM(-qtemvt) / SUM(-mntmvtttc), agrégation par (codein, site), fournisseur préféré via LATERAL ... LIMIT 1, stock agrégé par codein ; pivot en accumulation (+=) par sécurité. - Analytics (même classe de bug) : pgGetCaByFournisseur et pgGetCaByNomenclature passent en CA net ; jointure fournisseur dédupliquée (LATERAL LIMIT 1) pour éviter le double comptage. - Gestion de stock : pgGetStockNegatif et pgGetSansVente6Mois dédupliquent le fournisseur préféré (LATERAL LIMIT 1) pour éviter les lignes en double. Audit complet du mapping par magasin (292/579) côté client : aucun champ inversé (hit-parade, analytics, dashboard, grid, heatmap). Build OK.
CollectFlow
CollectFlow est une application de révision d'assortiment et d'analyse de performances des produits en point de vente, conçue pour consolider les données issues de plusieurs fournisseurs et magasins.
Prérequis
- Node.js 18+ (pour le développement local)
- Docker et Docker Compose (pour le déploiement conteneurisé)
- PostgreSQL 16+
Lancer avec Docker
Le projet est configuré pour tourner dans un conteneur Docker optimisé (mode standalone de Next.js). Note : Vous devez disposer d'une base de données PostgreSQL séparée (le conteneur ne lance que l'application web).
1. Démarrer l'application
À la racine du projet, lancez :
npm run docker:build
# ou directement
docker-compose up -d --build
L'application sera accessible sur http://localhost:5643.
L'application sera attachée au réseau Docker externe nginx_default afin d'être exposée derrière votre reverse proxy Nginx. Assurez-vous que ce réseau existe (docker network create nginx_default).
2. Arrêter l'application
npm run docker:down
# ou directement
docker-compose down
Développement Local (Sans Docker)
Si vous préférez développer en local, vous devrez configurer votre propre base de données PostgreSQL.
- Installer les dépendances :
npm install
-
Configurer la connexion DB : Allez sur la page des Paramètres (
/settings) dans l'application pour configurer l'accès à votre PostgreSQL local. -
Lancer le serveur de développement :
npm run dev
Structure du Projet (BMAD)
Ce projet respecte l'architecture BMAD (Business, Model, Application/API, Data) :
src/features/*: Logique métier (Business) isolée par feature (ex:grid,snapshots)src/types/*: Interfaces TypeScript (Model)src/app/*: Routeurs Next.js UI et endpoints d'API (Application/API)src/db/*: Schémas Drizzle ORM et connexions (Data)