import { Asset } from './Asset'; import type { EtfData, EtfMetrics } from '../types/models.model'; export class Etf extends Asset { metrics: EtfMetrics; constructor(data: EtfData) { super(data); // Preserve null for missing fields — coercing to 0 would auto-fail gates // in EtfScorer for data Yahoo simply didn't return. const num = (v: unknown): number | null => { if (v == null) return null; const f = parseFloat(String(v)); return Number.isFinite(f) ? f : null; }; this.metrics = { expenseRatio: num(data.expenseRatio), totalAssets: num(data.totalAssets), yield: num(data.yield), volume: num(data.volume), fiveYearReturn: num(data.fiveYearReturn), }; } getDisplayMetrics(): Record { const m = this.metrics; const fmt = (v: number | null, dec: number, suffix = '') => v != null ? `${v.toFixed(dec)}${suffix}` : '—'; return { Ticker: this.ticker, Type: 'ETF', Price: this.formatCurrency(this.currentPrice), 'Exp Ratio%': fmt(m.expenseRatio, 2, '%'), 'Yield%': fmt(m.yield, 2, '%'), AUM: m.totalAssets != null ? this.formatLargeNumber(m.totalAssets) : '—', '5Y Return%': fmt(m.fiveYearReturn, 1, '%'), }; } }