Упростить систему до работы только с рублями (RUB-only) #55

Closed
opened 2026-11-08 18:25:12 +03:00 by codex-bot · 1 comment
Owner

Контекст

Мультивалютность в системе — это не конвертация (курсов/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.
Author
Owner

Done, all merged into develop:

Related fix: WealthLedger/backend#202 (#201). The hourly pass now starts operations sync after the portfolio has synced; otherwise performance returned OPERATIONS_HISTORY_INCOMPLETE.

Non-RUB cash flows are ignored in XIRR (agreed).

Done, all merged into develop: - WealthLedger/backend#204 (replaces #203, which was closed because of commitlint) - WealthLedger/frontend#168 - WealthLedger/docs#68 - WealthLedger/specs#86 Related fix: WealthLedger/backend#202 (#201). The hourly pass now starts operations sync after the portfolio has synced; otherwise performance returned OPERATIONS_HISTORY_INCOMPLETE. Non-RUB cash flows are ignored in XIRR (agreed).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/main#55