import { CREDIT_RATING_SCALE } from '../../config/ScoringConfig.js'; import { Asset } from './Asset.js'; interface BondData { ticker?: string; currentPrice?: number; creditRating?: string; yieldToMaturity?: string | number; duration?: string | number; [key: string]: unknown; } export interface BondMetrics { ytm: number; duration: number; creditRating: string; creditRatingNumeric: number; } export class Bond extends Asset { metrics: BondMetrics; constructor(data: BondData) { super(data); const creditRating = data.creditRating || 'BBB'; const creditRatingNumeric = CREDIT_RATING_SCALE[creditRating] ?? 7; this.metrics = { ytm: parseFloat(String(data.yieldToMaturity)) || 0, duration: parseFloat(String(data.duration)) || 0, creditRating, creditRatingNumeric, }; } getDisplayMetrics(): Record { return { Ticker: this.ticker, Type: 'BOND', Price: this.formatCurrency(this.currentPrice), 'YTM%': `${this.metrics.ytm.toFixed(2)}%`, Duration: this.metrics.duration.toFixed(1), Rating: `${this.metrics.creditRating} (${this.metrics.creditRatingNumeric})`, }; } }