debug: add diagnostic strip to BSR chart to identify data mismatch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian Vidal Wolf
2026-03-09 11:33:47 +01:00
co-authored by Claude Sonnet 4.6
parent 31d1755122
commit 9bdb7a5c4a
+26 -7
View File
@@ -75,15 +75,18 @@ export const BSRUnitsCorrelationChart: React.FC<Props> = ({ bsrData, combinedSal
}, [combinedSalesData]);
// Per-market chart data: BSR avg + units sum aligned by week
const { chartData, pearsonCorrelation } = useMemo(() => {
const { chartData, pearsonCorrelation, debugInfo } = useMemo(() => {
// BSR: average detailLevelBSR per week (falls back to topLevelBSR if detail is unavailable)
// Coerce week to number to guard against string values at runtime
const bsrByWeek = new Map<number, { sum: number; count: number }>();
bsrData
.filter(r => r.market === resolvedMarket && (r.detailLevelBSR != null || r.topLevelBSR != null))
const bsrRecordsForMarket = bsrData.filter(r => r.market === resolvedMarket);
bsrRecordsForMarket
.filter(r => r.detailLevelBSR != null || r.topLevelBSR != null)
.forEach(r => {
const bsr = r.detailLevelBSR ?? r.topLevelBSR!;
const e = bsrByWeek.get(r.week) ?? { sum: 0, count: 0 };
bsrByWeek.set(r.week, { sum: e.sum + bsr, count: e.count + 1 });
const week = Number(r.week);
const e = bsrByWeek.get(week) ?? { sum: 0, count: 0 };
bsrByWeek.set(week, { sum: e.sum + bsr, count: e.count + 1 });
});
// Units: sum unitsTotal per week for current year
@@ -91,9 +94,18 @@ export const BSRUnitsCorrelationChart: React.FC<Props> = ({ bsrData, combinedSal
combinedSalesData
.filter(r => r.customer === resolvedMarket && r.year === currentYear && r.week)
.forEach(r => {
unitsByWeek.set(r.week, (unitsByWeek.get(r.week) ?? 0) + r.unitsTotal);
const week = Number(r.week);
unitsByWeek.set(week, (unitsByWeek.get(week) ?? 0) + r.unitsTotal);
});
const debugInfo = {
bsrTotal: bsrData.length,
bsrForMarket: bsrRecordsForMarket.length,
bsrWithValues: bsrByWeek.size,
unitsWeeks: unitsByWeek.size,
uniqueMarkets: Array.from(new Set(bsrData.map(r => r.market))).join(', '),
};
const allWeeks = Array.from(
new Set([...bsrByWeek.keys(), ...unitsByWeek.keys()])
).sort((a, b) => a - b);
@@ -115,7 +127,7 @@ export const BSRUnitsCorrelationChart: React.FC<Props> = ({ bsrData, combinedSal
paired.map(d => d.units as number)
);
return { chartData, pearsonCorrelation: r };
return { chartData, pearsonCorrelation: r, debugInfo };
}, [resolvedMarket, bsrData, combinedSalesData, currentYear]);
const config = MARKET_CONFIG[resolvedMarket] ?? { label: '?', color: '#94a3b8', flag: '🌍' };
@@ -324,6 +336,13 @@ export const BSRUnitsCorrelationChart: React.FC<Props> = ({ bsrData, combinedSal
</span>
</div>
{/* Temporary debug strip — remove once BSR line is confirmed working */}
<div className="px-3 py-2 rounded-lg bg-slate-900/60 border border-slate-800 text-[10px] font-mono text-slate-500 space-y-0.5">
<div>BSR records total: <span className="text-slate-300">{debugInfo.bsrTotal}</span> · for {resolvedMarket}: <span className="text-slate-300">{debugInfo.bsrForMarket}</span> · with values: <span className="text-slate-300">{debugInfo.bsrWithValues} weeks</span></div>
<div>Units weeks found: <span className="text-slate-300">{debugInfo.unitsWeeks}</span> · year: <span className="text-slate-300">{currentYear}</span></div>
<div>Markets in BSR data: <span className="text-slate-300">{debugInfo.uniqueMarkets || '(none)'}</span></div>
</div>
</div>
);
};