from dataclasses import dataclass from typing import Dict, List, Optional from datetime import datetime @dataclass class NavErosionConfig: max_erosion_level: int = 9 max_monthly_erosion: float = 1 - (0.1)**(1/12) # ~17.54% monthly for 90% annual erosion use_per_ticker: bool = False global_nav_rate: float = 0 per_ticker_rates: Dict[str, float] = None @dataclass class NavErosionResult: ticker: str nav_erosion_rate: float monthly_erosion_rate: float annual_erosion_rate: float risk_level: int # 0-9 scale risk_explanation: str max_drawdown: float volatility: float is_new_etf: bool etf_age_years: Optional[float] @dataclass class NavErosionAnalysis: results: List[NavErosionResult] portfolio_nav_risk: float # Average risk level portfolio_erosion_rate: float # Weighted average erosion rate risk_summary: str