Мультивалютность в системе — это не конвертация (курсов/FX нет), а повсеместные массивы byCurrency, селекторы валют и проверки «валюты не совпадают». Карты уже RUB-only, XIRR уже отказывает при не-RUB. Ветвления усложняют код без пользы.
Решение (согласовано)
Поддерживается только RUB.
Не-RUB данные (T-Bank: остатки, операции, инструменты в USD и т.п.; MOEX) отфильтровываются на входе и не участвуют в итогах.
В API сохраняется Money {currency, value} с currency: 'RUB'; per-currency массивы/maps схлопываются в одно значение.
Acceptance Criteria
Backend: per-currency поля (totalsByCurrency, cashBalances, structure.currencies[], unrealizedReturnByCurrency, incomeTotalsByCurrency и т.п.) заменены одиночным RUB-значением; проверки mismatch валют и guard NON_RUB_ACTIVITY удалены; не-RUB отфильтрован на ingest.
Backend: TbankPortfolioValuePoint без колонки currency (миграция).
Backend: openapi.json обновлён, тесты зелёные.
Frontend: типы перегенерированы по новому OpenAPI; селекторы валют, карточки по валютам, «+N валют», список валют скринера удалены; тесты зелёные.
Docs/specs: требования приведены к RUB-only.
Затронутые repos
backend, frontend, docs, specs — отдельные PR со ссылкой на эту Issue.
## Контекст
Мультивалютность в системе — это не конвертация (курсов/FX нет), а повсеместные массивы `byCurrency`, селекторы валют и проверки «валюты не совпадают». Карты уже RUB-only, XIRR уже отказывает при не-RUB. Ветвления усложняют код без пользы.
## Решение (согласовано)
- Поддерживается только RUB.
- Не-RUB данные (T-Bank: остатки, операции, инструменты в USD и т.п.; MOEX) **отфильтровываются на входе** и не участвуют в итогах.
- В API сохраняется `Money {currency, value}` с `currency: 'RUB'`; per-currency массивы/maps схлопываются в одно значение.
## Acceptance Criteria
- [ ] Backend: per-currency поля (`totalsByCurrency`, `cashBalances`, `structure.currencies[]`, `unrealizedReturnByCurrency`, `incomeTotalsByCurrency` и т.п.) заменены одиночным RUB-значением; проверки mismatch валют и guard `NON_RUB_ACTIVITY` удалены; не-RUB отфильтрован на ingest.
- [ ] Backend: `TbankPortfolioValuePoint` без колонки `currency` (миграция).
- [ ] Backend: `openapi.json` обновлён, тесты зелёные.
- [ ] Frontend: типы перегенерированы по новому OpenAPI; селекторы валют, карточки по валютам, «+N валют», список валют скринера удалены; тесты зелёные.
- [ ] Docs/specs: требования приведены к RUB-only.
## Затронутые repos
backend, frontend, docs, specs — отдельные PR со ссылкой на эту Issue.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Контекст
Мультивалютность в системе — это не конвертация (курсов/FX нет), а повсеместные массивы
byCurrency, селекторы валют и проверки «валюты не совпадают». Карты уже RUB-only, XIRR уже отказывает при не-RUB. Ветвления усложняют код без пользы.Решение (согласовано)
Money {currency, value}сcurrency: 'RUB'; per-currency массивы/maps схлопываются в одно значение.Acceptance Criteria
totalsByCurrency,cashBalances,structure.currencies[],unrealizedReturnByCurrency,incomeTotalsByCurrencyи т.п.) заменены одиночным RUB-значением; проверки mismatch валют и guardNON_RUB_ACTIVITYудалены; не-RUB отфильтрован на ingest.TbankPortfolioValuePointбез колонкиcurrency(миграция).openapi.jsonобновлён, тесты зелёные.Затронутые repos
backend, frontend, docs, specs — отдельные PR со ссылкой на эту Issue.