diff --git a/TODO.md b/TODO.md index 2dde6e0..e598626 100644 --- a/TODO.md +++ b/TODO.md @@ -52,6 +52,30 @@ previously selected one (like `cd -` in bash or `Ctrl+^` in vim). Store key swaps current and last. Works on any tab — particularly useful for eyeball-comparing performance/risk data between two symbols. +## Fix `enrich` command for international funds + +`deriveMetadata` in `src/commands/enrich.zig` misclassifies international ETFs: + +1. **`geo`** uses Alpha Vantage's `Country` field, which is the *fund issuer's* + domicile (USA for all US-listed ETFs), not the fund's investment geography. + Every US-domiciled international fund gets `geo::US`. + +2. **`asset_class`** short-circuits to `"ETF"` when `asset_type == "ETF"`, or + falls through to a US-market-cap heuristic that always produces + `"US Large Cap"` / `"US Mid Cap"` / `"US Small Cap"`. + +Known misclassified tickers (all came back as `geo::US, asset_class::US Large Cap`): +- **FRDM** — Freedom 100 Emerging Markets ETF → should be `geo::Emerging Markets, asset_class::Emerging Markets` +- **HFXI** — NYLI FTSE International Equity Currency Neutral ETF → should be `geo::International Developed, asset_class::International Developed` +- **IDMO** — Invesco S&P International Developed Momentum ETF → should be `geo::International Developed, asset_class::International Developed` +- **IVLU** — iShares MSCI International Developed Value Factor ETF → should be `geo::International Developed, asset_class::International Developed` + +The Alpha Vantage OVERVIEW endpoint doesn't provide fund geography data. +Options: use the ETF_PROFILE holdings/country data to infer geography, parse +the fund name for keywords ("International", "Emerging", "ex-US"), or accept +that `enrich` is a scaffold and emit a `# TODO` comment for ETFs instead of +silently misclassifying. + ## Market-aware cache TTL for daily candles Daily candle TTL is currently 23h45m, but candle data only becomes meaningful