# Брокерские счета На странице `/accounts` пользователь выбирает открытый поддерживаемый инвестиционный счёт T-Bank и переходит к его портфелю. Для этого нужны действующая сессия и сохранённое [подключение T-Bank](../../integrations/tbank.md). Frontend обращается только к backend. Счёт не хранится как долговременное локальное владение независимо от брокерского подключения. Экран читает локальный список и сохранённые сводки. Обычный запрос запускает недостающие или устаревшие зависимости в фоне. Список и сводка каждого счёта имеют независимые timestamps и состояния. Неподтверждённый список показывает загрузку доступа, а не отсутствие счетов. Поток и границы описаны в [модели свежести](../../architecture/cross-cutting/data-freshness.md). ## Счёт и его сводка Брокерский счёт принадлежит системе брокера. WealthLedger получает его идентификатор, имя, тип и доступную дату открытия через текущее подключение; локальная сессия пользователя сама по себе не подтверждает доступ к счёту. Закрытый, неподдерживаемый или недоступный через подключение счёт не входит в текущий список. Порядок списка сохраняет порядок источника. Поддерживаются брокерский счёт (`BROKERAGE`), ИИС (`INDIVIDUAL_INVESTMENT`), Инвесткопилка (`INVEST_BOX`) и фонд денежного рынка (`MONEY_MARKET_FUND`). Банковские и неизвестные типы исключаются. Имя очищается от внешних пробелов; пустое имя заменяется названием типа. Отсутствующая дата открытия остаётся неизвестной, а известная передаётся календарной датой без времени. `GET /api/v1/brokerage-accounts` требует Bearer token и возвращает список с необязательной финансовой сводкой каждого счёта. Точная форма ответа принадлежит [HTTP API](../../architecture/http-api.md). | Состояние `portfolioSummary` | Что оно означает | | --- | --- | | Доступные валютные итоги | Текущие стоимости позиций и деньги сложены точно в исходной валюте | | Доступная сводка с пустыми итогами | Портфель получен, но валютных итогов нет; это не ошибка загрузки | | `null` | Финансовая сводка этого счёта временно недоступна; метаданные и переход на счёт сохраняются | Валюты не конвертируются и не объединяются в общую сумму. Деньги уже входят в валютный итог; они не образуют второй самостоятельный итог. Правила неизвестных стоимостей совпадают со [справочником портфеля](../portfolio/data-reference.md). Сводка также сообщает число ненулевых обычных позиций акций и облигаций (`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 source имеют часовую свежесть. Время списка не подменяет время каждой сводки. Список не заменяет полный [портфель](../portfolio/overview.md), [журнал](../operations/overview.md) или историю закрытых счетов. Для общего результата доступен [режим «Все счета»](../portfolio/all-accounts.md). Согласованное поведение описывает [спецификация счетов](https://git.personal.ksv741.ru/WealthLedger/specs/src/commit/9e227a563dda67620f0ad78228aa8a4c18bf35a0/openspec/specs/brokerage-accounts/spec.md).