-
- {p.asin}
- {p.title}
+
+
+ {ranks.map((r, i) => (
+
+ ))}
+ {p.sku}
+ {p.asin}
+
+ {p.title}
+ {p.line}
|
- {p.annualForecast.toLocaleString('de-DE')}
+ {filteredForecast.toLocaleString('de-DE')}
|
- {actualTotal.toLocaleString('de-DE')}
+ {actualPeriod.toLocaleString('de-DE')}
|
- = 50 ? 'bg-emerald-500/10 text-emerald-400' : fulfillment >= 20 ? 'bg-indigo-500/10 text-indigo-400' : 'bg-slate-800 text-slate-500'}`}>
- {fulfillment.toFixed(1)}%
-
+
+ = 50 ? 'bg-emerald-500/10 text-emerald-400' : totalAchievement >= 10 ? 'bg-indigo-500/10 text-indigo-400' : 'bg-slate-800 text-slate-500'}`}>
+ {totalAchievement.toFixed(1)}%
+
+ of Annual {p.annualForecast.toLocaleString('de-DE')}
+
|
-
-
- {p.monthlyData.map((md, idx) => {
- const isMet = md.actualUnits >= md.forecastUnits && md.forecastUnits > 0;
- const height = md.forecastUnits > 0 ? (Math.min(1.5, md.actualUnits / md.forecastUnits) * 100) : 0;
- return (
- 0 ? 'bg-indigo-500' : 'bg-slate-800'}`}
- style={{ height: `${Math.max(10, height)}%` }}
- title={`${md.month}: ${md.actualUnits} / ${md.forecastUnits}`}
- >
- );
- })}
+
+
+
+ = 100 ? 'bg-emerald-500' : periodAchievement >= 50 ? 'bg-indigo-500' : 'bg-amber-500'}`}
+ style={{ width: `${Math.min(100, periodAchievement)}%` }}
+ >
+
+ = 100 ? 'text-emerald-400' : periodAchievement >= 50 ? 'text-indigo-400' : 'text-amber-400'}`}>
+ {periodAchievement.toFixed(1)}%
+
|
|
diff --git a/services/dataProcessor.ts b/services/dataProcessor.ts
index 357420d..f5a6923 100644
--- a/services/dataProcessor.ts
+++ b/services/dataProcessor.ts
@@ -1584,6 +1584,7 @@ export const calculateForecastViewData = (
asin: identifier,
sku: meta?.sku || identifier, // Fallback to ASIN if SKU not found
title: meta?.title || identifier,
+ line: meta?.line || "",
annualForecast: fc.annualForecast,
monthlyData
};
diff --git a/types.ts b/types.ts
index 850b181..76b6666 100644
--- a/types.ts
+++ b/types.ts
@@ -210,6 +210,7 @@ export interface ProductForecastData {
asin: string;
sku: string;
title: string;
+ line: string;
annualForecast: number;
monthlyData: MonthlyForecastPoint[];
}