fix(ai): improved seasonality detection in batch by sending detailed month-by-month history

This commit is contained in:
Michael committed 2026-02-21 22:28:41 +01:00
1 parent 4f7701fa14
commit fe8d0f1b32
2 files changed
+6 -4

No files matched your search

+2 -2
View File
@@ -44,8 +44,8 @@ export async function POST(req: NextRequest) {
En analysant les données de ventes fournies (CA, Marge, Volume, Historique), génère pour chaque produit une recommandation de gamme (A=Permanent, C=Saisonnier, Z=Sortie). En analysant les données de ventes fournies (CA, Marge, Volume, Historique), génère pour chaque produit une recommandation de gamme (A=Permanent, C=Saisonnier, Z=Sortie).
CRITÈRES : CRITÈRES :
- A (Permanent) : Produit permanent avec une rotation régulière et satisfaisante. - A (Permanent) : Produit permanent avec une rotation régulière et satisfaisante sur toute l'année.
- C (Saisonnier) : Produit dont les ventes sont concentrées sur des périodes spécifiques (pics saisonniers). - C (Saisonnier) : Produit dont les ventes sont concentrées sur des périodes spécifiques. Détecte les pics dans l' 'historique' (ex: ventes en 202412 mais rien ailleurs). Aide-toi de la 'nomenclature' et du 'nom' pour confirmer l'usage saisonnier.
- Z (Sortie) : Produit à arrêter car les ventes sont quasi nulles ou la rotation est insuffisante. - Z (Sortie) : Produit à arrêter car les ventes sont quasi nulles ou la rotation est insuffisante.
DÉTECTION : DÉTECTION :
@@ -55,8 +55,10 @@ export function BulkAiAnalyzer() {
ventes: r.totalQuantite || 0, ventes: r.totalQuantite || 0,
marge: r.totalMarge ? parseFloat(((r.totalMarge / (r.totalCa || 1)) * 100).toFixed(1)) : 0, marge: r.totalMarge ? parseFloat(((r.totalMarge / (r.totalCa || 1)) * 100).toFixed(1)) : 0,
gammeInit: r.codeGammeInit || "N/A", gammeInit: r.codeGammeInit || "N/A",
// Simplified history: last 12 values joined (e.g., "5,0,10...") // Detailed history: "YYYYMM: Qty, YYYYMM: Qty..." to help AI see seasonality
historique: Object.values(r.sales12m || {}).join(","), historique: Object.entries(r.sales12m || {})
.map(([month, qty]) => `${month}:${qty}`)
.join(", "),
// Contextual nomenclature // Contextual nomenclature
nomenclature: `${r.libelleNiveau1 || ""} > ${r.libelleNiveau2 || ""} > ${r.libelle3 || ""}` nomenclature: `${r.libelleNiveau1 || ""} > ${r.libelleNiveau2 || ""} > ${r.libelle3 || ""}`
})); }));