Fix projected revenue trend regression

This commit is contained in:
2025-01-04 11:15:35 -05:00
parent 5063120731
commit 304d09e3c4
2 changed files with 51 additions and 14 deletions

View File

@@ -246,25 +246,45 @@ const MiniStatCards = ({
}, []); }, []);
const calculateRevenueTrend = useCallback(() => { const calculateRevenueTrend = useCallback(() => {
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null;
return null;
const currentRevenue = // If period is complete, use actual revenue
stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue; // If period is incomplete, use smart projection when available, fallback to simple projection
const prevRevenue = stats.prevPeriodRevenue; const currentRevenue = stats.periodProgress < 100
? (projection?.projectedRevenue || stats.projectedRevenue)
: stats.revenue;
const prevRevenue = stats.prevPeriodRevenue; // Previous period's total revenue
console.log('[MiniStatCards RevenueTrend Debug]', {
periodProgress: stats.periodProgress,
currentRevenue,
smartProjection: projection?.projectedRevenue,
simpleProjection: stats.projectedRevenue,
actualRevenue: stats.revenue,
prevRevenue,
isProjected: stats.periodProgress < 100
});
if (!currentRevenue || !prevRevenue) return null; if (!currentRevenue || !prevRevenue) return null;
// Calculate absolute difference percentage
const trend = currentRevenue >= prevRevenue ? "up" : "down"; const trend = currentRevenue >= prevRevenue ? "up" : "down";
const diff = Math.abs(currentRevenue - prevRevenue); const diff = Math.abs(currentRevenue - prevRevenue);
const percentage = (diff / prevRevenue) * 100; const percentage = (diff / prevRevenue) * 100;
console.log('[MiniStatCards RevenueTrend Result]', {
trend,
percentage,
calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%`
});
return { return {
trend, trend,
value: percentage, value: percentage,
current: currentRevenue, current: currentRevenue,
previous: prevRevenue, previous: prevRevenue,
}; };
}, [stats]); }, [stats, projection]);
const calculateOrderTrend = useCallback(() => { const calculateOrderTrend = useCallback(() => {
if (!stats?.prevPeriodOrders) return null; if (!stats?.prevPeriodOrders) return null;

View File

@@ -1476,28 +1476,45 @@ const StatCards = ({
}, []); }, []);
const calculateRevenueTrend = useCallback(() => { const calculateRevenueTrend = useCallback(() => {
if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) if (!stats?.prevPeriodRevenue && stats?.prevPeriodRevenue !== 0) return null;
return null;
// For incomplete periods, compare projected revenue to previous period // If period is complete, use actual revenue
// For complete periods, compare actual revenue to previous period // If period is incomplete, use smart projection when available, fallback to simple projection
const currentRevenue = const currentRevenue = stats.periodProgress < 100
stats.periodProgress < 100 ? stats.projectedRevenue : stats.revenue; ? (projection?.projectedRevenue || stats.projectedRevenue)
const prevRevenue = stats.prevPeriodRevenue; : stats.revenue;
const prevRevenue = stats.prevPeriodRevenue; // Previous period's total revenue
console.log('[RevenueTrend Debug]', {
periodProgress: stats.periodProgress,
currentRevenue,
smartProjection: projection?.projectedRevenue,
simpleProjection: stats.projectedRevenue,
actualRevenue: stats.revenue,
prevRevenue,
isProjected: stats.periodProgress < 100
});
if (!currentRevenue || !prevRevenue) return null; if (!currentRevenue || !prevRevenue) return null;
// Calculate absolute difference percentage
const trend = currentRevenue >= prevRevenue ? "up" : "down"; const trend = currentRevenue >= prevRevenue ? "up" : "down";
const diff = Math.abs(currentRevenue - prevRevenue); const diff = Math.abs(currentRevenue - prevRevenue);
const percentage = (diff / prevRevenue) * 100; const percentage = (diff / prevRevenue) * 100;
console.log('[RevenueTrend Result]', {
trend,
percentage,
calculation: `(|${currentRevenue} - ${prevRevenue}| / ${prevRevenue}) * 100 = ${percentage}%`
});
return { return {
trend, trend,
value: percentage, value: percentage,
current: currentRevenue, current: currentRevenue,
previous: prevRevenue, previous: prevRevenue,
}; };
}, [stats]); }, [stats, projection]);
const calculateOrderTrend = useCallback(() => { const calculateOrderTrend = useCallback(() => {
if (!stats?.prevPeriodOrders) return null; if (!stats?.prevPeriodOrders) return null;