export const reportNumber = (value: number) => Number(value).toLocaleString(); export const reportRate = (value: number, observations: number) => observations > 0 ? `${Number(value).toFixed(1)}%` : "Not available"; export function reportMoney(value: number, currency = "USD") { try { return new Intl.NumberFormat(undefined, { style: "currency", currency, }).format(Number(value)); } catch { return `${Number(value).toFixed(2)} ${currency}`; } } export function reportDate(value: string | null, short = false) { if (!value) return "Not scheduled"; // Date-only database values represent calendar dates, not UTC instants. const date = new Date( /^\d{4}-\d{2}-\d{2}$/.test(value) ? `${value}T12:00:00` : value.replace(" ", "T"), ); return Number.isNaN(date.getTime()) ? "Unavailable" : date.toLocaleDateString(undefined, { month: "short", day: "numeric", ...(short ? {} : { year: "numeric" }), }); } export function calendarSeries( rows: T[], days: number, empty: Omit, ): T[] { const records = new Map(rows.map((row) => [row.date.slice(0, 10), row])); return Array.from({ length: days }, (_, index) => { const date = new Date(); date.setDate(date.getDate() - days + 1 + index); const key = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`; return records.get(key) || ({ ...empty, date: key } as T); }); }