Files
docs/domains/accounts/overview.md
T
ksv741 07de062ebb
Conventional commits / commits (pull_request) Successful in 14s
Docs security / security (pull_request) Successful in 8s
Docs verify / verify (pull_request) Successful in 13s
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 12s
docs: explain persisted T-Bank reads and synchronization
Document local data ownership, coverage and freshness, refresh behavior, failure
recovery and additive migration rollback. Record ADR 017.
2026-09-26 21:22:50 +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 Что оно означает
Доступные валютные итоги Текущие стоимости позиций и деньги сложены точно в исходной валюте
Доступная сводка с пустыми итогами Портфель получен, но валютных итогов нет; это не ошибка загрузки
null Финансовая сводка этого счёта временно недоступна; метаданные и переход на счёт сохраняются

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

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

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

Состояния

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

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

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

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

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

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