feat(vendor): switch BSR charts to daily resolution for smoother trend lines

- Add date? field to BSRRecord (ISO string YYYY-MM-DD)
- processBSRExcel now extracts and stores the Date column as an ISO date
  (handles both Excel serial numbers and string dates)
- VendorDataView groups chart data by date (daily) when dates are available,
  falling back to weekly buckets — eliminates straight-line charts caused
  by only 2 weekly data points

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
christian.vidal
2026-03-02 18:53:45 +01:00
co-authored by Claude Sonnet 4.6
parent 702bb021f8
commit 7f5aa1b812
3 changed files with 62 additions and 29 deletions
+16 -5
View File
@@ -682,15 +682,25 @@ export const processBSRExcel = async (fileOrBuffer: File | ArrayBuffer): Promise
// Week: try direct week column first, else derive from Date column
let week = 0;
let isoDate: string | undefined;
const weekRaw = getColumnValue(row, ['week', 'woche', 'semana', 'week number', 'weeknumber', 'Week', 'Week Number']);
if (weekRaw) {
week = parseInt(String(weekRaw).match(/\d+/)?.[0] || '0', 10);
}
if (!week) {
const dateRaw = getColumnValue(row, ['date', 'fecha', 'datum', 'Date']);
if (dateRaw) {
const d = new Date(dateRaw);
if (!isNaN(d.getTime())) {
const dateRaw = getColumnValue(row, ['date', 'fecha', 'datum', 'Date']);
if (dateRaw) {
// Handle Excel serial date numbers
let d: Date;
const dateNum = Number(dateRaw);
if (!isNaN(dateNum) && dateNum > 1000) {
// Excel serial date: days since 1899-12-30
d = new Date((dateNum - 25569) * 86400 * 1000);
} else {
d = new Date(dateRaw);
}
if (!isNaN(d.getTime())) {
isoDate = d.toISOString().slice(0, 10); // "YYYY-MM-DD"
if (!week) {
// ISO week number
const tmp = new Date(d);
tmp.setHours(0, 0, 0, 0);
@@ -704,6 +714,7 @@ export const processBSRExcel = async (fileOrBuffer: File | ArrayBuffer): Promise
allData.push({
week,
date: isoDate,
market: String(marketRaw).trim(),
asin: String(asinRaw).trim(),
topLevelBSR: parseIntSafe(getColumnValue(row, [