export function normalizeTicker(ticker: string): string { return ticker.trim().toUpperCase(); } export function normalizeTickerOrNull(ticker: unknown): string | null { if (typeof ticker !== 'string') return null; const normalized = ticker.trim().toUpperCase(); return normalized || null; } export function normalizeTags(tags?: unknown): string[] { if (!Array.isArray(tags)) return []; const unique = new Set(); for (const entry of tags) { if (typeof entry !== 'string') continue; const tag = entry.trim(); if (tag) unique.add(tag); } return [...unique]; } export function normalizeTagsOrNull(tags?: unknown): string[] | null { const result = normalizeTags(tags); return result.length > 0 ? result : null; } export function normalizeOptionalString(value?: unknown): string | null { if (typeof value !== 'string') return null; const normalized = value.trim(); return normalized || null; } export function normalizeRecord(value?: unknown): Record | null { if (!value || typeof value !== 'object' || Array.isArray(value)) return null; return value as Record; } export function normalizePositiveInteger(value?: unknown): number | null { if (value === null || value === undefined || !Number.isFinite(value as number)) return null; const normalized = Math.trunc(value as number); return normalized > 0 ? normalized : null; } export function nowIso(): string { return new Date().toISOString(); } export function todayIso(): string { return new Date().toISOString().slice(0, 10); }