Un bouton « Non travaillés » ouvre, sur le haut du classement AFFICHÉ, la liste des produits qu'un magasin ne travaille pas. Le classement de référence est celui du tableau à l'instant où l'on ouvre : le tri en cours — CA réseau, quantité, marge, peu importe — fixe l'ordre, et la valeur qui a servi à classer est relue sur la colonne triée pour être affichée en regard. Recalculer un ordre maison aurait répondu à une autre question que celle qu'on vient de poser à l'écran. « Non travaillé » = aucune vente sur 12 mois glissants ET aucun stock au dernier mois connu. Les deux conditions comptent : un produit sans vente mais en stock est détenu par le magasin — c'est un invendu, pas un trou d'assortiment, et le mélanger aux vrais trous ferait commander ce qui dort déjà en rayon. Chaque ligne porte son rang, la valeur du critère de tri, et ce que les AUTRES magasins en font : sans les ventes d'à côté, un trou ne se distingue pas d'un produit que personne ne vend. Une dernière colonne sépare « jamais détenu » de « déjà détenu, sans vente » — le premier est une piste, le second une tentative déjà faite. Profondeur réglable (100 / 200 / 500), magasin au choix parmi ceux réellement présents dans les données. Le classement n'est extrait que fenêtre ouverte, et tronqué à la profondeur maximale : sans quoi on copierait 130 000 lignes pour en regarder 500. Vérifié sur build de production, quatre profils de produits : à Houdemont seuls remontent les jamais détenus, à Frouard seuls les déjà détenus sans vente, et le profil « stock sans vente » n'apparaît dans aucun des deux. Les rangs affichés correspondent aux positions dans le classement trié par CA réseau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYGgoQCG1VCe42HzbzhAXR
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)