diff --git a/src/features/ai-copilot/business/analysis-engine.ts b/src/features/ai-copilot/business/analysis-engine.ts index ab4a4d0..5d186c1 100644 --- a/src/features/ai-copilot/business/analysis-engine.ts +++ b/src/features/ai-copilot/business/analysis-engine.ts @@ -26,7 +26,7 @@ IMPORTANT : La gamme C est RÉSERVÉE aux produits saisonniers et gérée MANUEL Cependant, si les performances réelles du produit sont clairement insuffisantes (CA dérisoire, marge nulle ou négative), tu PEUX passer outre la protection et recommander Z avec justification. 2. SEUIL PLANCHER ABSOLU (règle critique) : - Si isLowContribution = true [poids CA < 0.5% ET poids QTÉ < 0.5% du fournisseur] + Si isLowContribution = true [percentile CA <= 30 ET percentile QTÉ <= 30 du fournisseur] ET score composite < 35 ET scoreCritique = true [score brut < 20] → Z DIRECT. Ce produit est marginal et sous-performant. @@ -48,6 +48,7 @@ IMPORTANT : La gamme C est RÉSERVÉE aux produits saisonniers et gérée MANUEL Sinon → A si actif (inactivité < 3 mois), Z si inactif ≥ 3 mois. — Quadrant WATCH ⚠️ : Signal négatif. Si poids CA rayon > 5% ou poids QTÉ rayon > 5% → A (surveiller). + Si percentileCa >= 50 ou percentileQty >= 50 → A (produit trop important au fournisseur). Sinon → Z si inactivité ≥ 2 mois, A si actif. --- COHÉRENCE INTER-PRODUITS --- @@ -116,7 +117,7 @@ JSON uniquement, sans markdown. // Signal rouge prioritaire if (ctx.isLowContribution) { - lines.push(`[⛔ CONTRIBUTION FAIBLE] Poids CA réseau : ${ctx.weightCaFournisseur}% et Poids QTÉ réseau : ${ctx.weightQtyFournisseur}% → produit marginal pour le fournisseur`); + lines.push(`[⛔ CONTRIBUTION FAIBLE] Percentiles CA (${ctx.percentileCa}) et QTÉ (${ctx.percentileQty}) dans les 30% inférieurs → produit marginal`); } if (ctx.scoreCritique) { lines.push(`[⛔ SCORE CRITIQUE] Score brut < 20 → sous-seuil absolu`); diff --git a/src/features/ai-copilot/business/context-profiler.ts b/src/features/ai-copilot/business/context-profiler.ts index bf74c8a..0fe047f 100644 --- a/src/features/ai-copilot/business/context-profiler.ts +++ b/src/features/ai-copilot/business/context-profiler.ts @@ -92,7 +92,7 @@ export interface ProductContextProfile { // Signal négatif fort /** - * Le produit pèse moins de 0.5% du CA ET des QTÉ du fournisseur. + * Le produit appartient aux 30% les moins performants en CA et Quantité. */ isLowContribution: boolean; @@ -226,7 +226,9 @@ export class ContextProfiler { // Bug fix : un produit dans le top 30% de marge du lot apporte une valeur // réelle en rentabilité. L'exclure du signal isLowContribution évite de le // pénaliser uniquement parce que son volume/CA est faible (profil 💎 pur). - const isLowContribution = weightCaFournisseur < 0.5 && weightQtyFournisseur < 0.5 && pMarge <= 70; + // Le seuil de faible contribution utilise désormais des percentiles plutôt + // que des valeurs absolues pour ne pas pénaliser les gros fournisseurs. + const isLowContribution = pCa <= 30 && pQty <= 30 && pMarge <= 70; // 6. Signaux Trafic / Marge + Quadrant (sur valeurs PAR MAGASIN) // Médianes calculées ici pour être disponibles dans les sections 6 ET 7.