Files
codex-bot 7fbd4273ba
Docs security / security (push) Successful in 7s
Docs verify / verify (push) Successful in 13s
docs: describe RUB-only behavior (WealthLedger/main#55) (#68)
2026-11-11 09:19:49 +03:00

8.5 KiB

Брокерские счета

На странице /accounts пользователь выбирает открытый поддерживаемый инвестиционный счёт T-Bank и переходит к его портфелю. Для этого нужны действующая сессия и сохранённое подключение T-Bank. Frontend обращается только к backend. Счёт не хранится как долговременное локальное владение независимо от брокерского подключения.

Экран читает локальный список и сохранённые сводки. Обычный запрос запускает недостающие или устаревшие зависимости в фоне. Список и сводка каждого счёта имеют независимые timestamps и состояния. Неподтверждённый список показывает загрузку доступа, а не отсутствие счетов. Поток и границы описаны в модели свежести.

Счёт и его сводка

Брокерский счёт принадлежит системе брокера. WealthLedger получает его идентификатор, имя, тип и доступную дату открытия через текущее подключение; локальная сессия пользователя сама по себе не подтверждает доступ к счёту. Закрытый, неподдерживаемый или недоступный через подключение счёт не входит в текущий список. Порядок списка сохраняет порядок источника.

Поддерживаются брокерский счёт (BROKERAGE), ИИС (INDIVIDUAL_INVESTMENT), Инвесткопилка (INVEST_BOX) и фонд денежного рынка (MONEY_MARKET_FUND). Банковские и неизвестные типы исключаются. Имя очищается от внешних пробелов; пустое имя заменяется названием типа. Отсутствующая дата открытия остаётся неизвестной, а известная передаётся календарной датой без времени.

GET /api/v1/brokerage-accounts требует Bearer token и возвращает список с необязательной финансовой сводкой каждого счёта. Точная форма ответа принадлежит HTTP API.

Состояние portfolioSummary Что оно означает
Доступный итог Текущие стоимости позиций и деньги сложены точно в RUB
Доступная сводка без итога Портфель получен, но итоговой суммы нет; это не ошибка загрузки
null Финансовая сводка этого счёта временно недоступна; метаданные и переход на счёт сохраняются

Позиции и деньги в валютах, отличных от RUB, не участвуют в итоге. Деньги уже входят в итог; они не образуют второй самостоятельный итог. Правила неизвестных стоимостей совпадают со справочником портфеля.

Сводка также сообщает число ненулевых обычных позиций акций и облигаций (stockPositionCount, bondPositionCount). Это количество наименований, а не сумма штук или лотов. Подсчёт использует уже полученные позиции, не требует метаданных и включает дробные и короткие позиции, даже если их стоимость неизвестна. Нулевые, виртуальные и иные типы позиций в эти два счётчика не входят. Пустой портфель даёт нулевые счётчики; недоступная сводка не подменяется нулями.

Временная недоступность сводки одного счёта остаётся локальной для него. Известный отказ доступа скрывает личные данные. Transient failure сохраняет последний список и его время; отсутствие первого списка остаётся missing.

Состояния

При первом запросе /accounts frontend показывает каркас заголовка и карточек; декоративные элементы не содержат данных и не получают клавиатурный фокус. После успешного ответа либо ошибки используются обычные нижеописанные состояния.

  • 409 TBANK_NOT_CONNECTED: список не запрашивается у T-Bank, экран ведёт в настройки.
  • 400 INVALID_TBANK_TOKEN: сохранённый токен не удаляется, экран ведёт в настройки для замены или удаления.
  • 503 TBANK_UNAVAILABLE: экран показывает спокойное состояние недоступности; чтение возобновляется автоматически.
  • Неизвестная ошибка: то же состояние недоступности без действия повтора.
  • Успешный пустой ответ: штатное состояние отсутствия инвестиционных счетов.

Карточка ведёт на /accounts/:accountId по всей области и доступна с клавиатуры. Карточки расположены в одну колонку при любой ширине. Карточка показывает название, локализованный тип, крупный итог в RUB, дату открытия без времени и видимое действие открытия. Отдельные цветные блоки «Акции» и «Облигации» показывают количество наименований бумаг. Недоступная или пустая сводка отображается локально; отсутствие сумм не скрывает известные количества бумаг, а недоступная сводка не подменяет их нулями. Наведение и видимый клавиатурный фокус подчёркивают переход; настройка уменьшения движения отключает анимацию.

Свежесть и границы

Обычное открытие использует query owner и локальный server snapshot. «Обновить» перечитывает сохранённые membership и сводки доступных счетов; активная работа наблюдается без нового импорта. Истечение TTL само не запускает запрос: обновлением личных данных владеет часовой обход. Membership и portfolio source имеют часовую свежесть. Время списка не подменяет время каждой сводки. Список не заменяет полный портфель, журнал или историю закрытых счетов. Для общего результата доступен режим «Все счета».

Согласованное поведение описывает спецификация счетов.