11 KiB
Информативный обзор брокерских счетов
Дата: 2026-06-19 Статус: согласовано к планированию Эпик: Портфель брокера
Контекст
Страница /broker показывает открытые брокерские счета и ИИС карточками, но полезная информация в
них ограничена названием, типом, техническим статусом и идентификатором. Пользователь не может на
одном экране оценить совокупный капитал, сравнить счета и понять структуру активов.
Страница предназначена преимущественно для одного–трёх счетов.
Цель
Превратить список брокерских счетов в компактный финансовый обзор, который с первого взгляда отвечает на вопросы:
- сколько средств находится на всех доступных счетах;
- как изменилась их стоимость за день;
- сколько свободных денег доступно;
- как капитал распределён между счетами и основными классами активов;
- какой счёт нужно открыть для подробного анализа.
Область изменений
Фича изменяет страницу списка брокерских счетов и включает:
- общую сводку по успешно загруженным счетам;
- информативные карточки отдельных счетов;
- независимую загрузку данных каждого счёта;
- состояния загрузки, частичной ошибки и отсутствия счетов;
- адаптивное отображение на широких и узких экранах.
Детальные страницы счёта, позиции, операции, торговые действия и правила расчёта показателей, приходящих от T-Bank, не изменяются.
Требования
1. Общая сводка
Над списком счетов отображается сводка по портфелям, данные которых успешно загружены:
- количество доступных счетов;
- совокупная стоимость портфелей;
- совокупный дневной результат в деньгах и процентах;
- свободные деньги;
- распределение стоимости по акциям, облигациям, фондам, деньгам и прочим активам.
Денежные значения разных валют не складываются и показываются отдельными суммами. Процентный дневной результат и единое распределение активов показываются только для сопоставимых денежных значений одной валюты. Интерфейс не выполняет неявную конвертацию валют.
Для каждой валюты совокупный дневной процент рассчитывается как отношение суммы дневных изменений к суммарной стоимости портфелей на начало дня:
sum(daily) / (sum(portfolio) - sum(daily)) * 100
Процент не показывается, если хотя бы у одного включённого в валютную группу счёта отсутствует стоимость или дневное изменение либо если стоимость на начало дня неположительна.
Если загружены не все счета, сводка явно сообщает, по скольким счетам рассчитаны показатели. Недоступный счёт не включается в агрегированные значения.
2. Карточка счёта
Для каждого счёта показываются:
- название;
- понятный тип:
Брокерский счётилиИИС; - дата открытия, если она доступна;
- текущая стоимость;
- дневной результат в деньгах и процентах;
- ожидаемая доходность;
- распределение стоимости по основным классам активов.
Технический идентификатор, сырой enum статуса и сырой enum уровня доступа в карточке не отображаются.
Вся карточка является доступной с клавиатуры ссылкой на обзор выбранного счёта. Цвет доходности используется только как дополнительный признак: знак и числовое значение остаются видимыми.
3. Загрузка
После получения списка счетов данные их портфелей загружаются независимо. До появления значений общая сводка и карточки показывают skeleton-состояние с устойчивыми размерами, чтобы содержимое не скакало при загрузке.
Появление данных одного счёта не должно ждать завершения остальных запросов.
4. Ошибки
Ошибка загрузки списка счетов показывает ошибку всей страницы.
Ошибка загрузки портфеля отдельного счёта:
- не скрывает другие счета;
- не блокирует переход в доступные счета;
- показывает локальное сообщение в карточке проблемного счёта;
- позволяет повторить загрузку этого счёта;
- исключает этот счёт из общей сводки и маркирует сводку как частичную.
5. Пустое состояние
Если открытых брокерских счетов и ИИС нет, страница показывает отдельное пустое состояние вместо пустой сетки карточек. Текст объясняет, какие счета появятся на странице после подключения T-Bank.
6. Адаптивность
При одном–трёх счетах карточки располагаются вертикально и сохраняют единый порядок показателей для быстрого сравнения.
На узком экране показатели переносятся на несколько строк, диаграмма распределения остаётся читаемой, а интерактивные области не требуют горизонтальной прокрутки.
Ограничения
- Страница остаётся read-only.
- Frontend не обращается к T-Bank напрямую.
- Агрегация не пересчитывает показатели отдельного счёта: исходные стоимости и доходность берутся из существующих ответов портфеля. Единственный новый производный показатель — совокупный дневной процент по явно заданной в этой спецификации формуле.
- Данные разных счетов могут иметь разные моменты
asOf; интерфейс не представляет сводку как транзакционно согласованный снимок. - Решение рассчитано на один–три счёта. Расширение этого предположения требует пересмотра ADR-012.
Acceptance Criteria
- Над счетами показана общая стоимость, дневной результат, свободные деньги, число счетов и распределение активов.
- Значения разных валют не складываются без курса конвертации.
- Каждая успешно загруженная карточка показывает стоимость, доходность, тип и распределение активов.
- Название и дата открытия показываются, когда доступны.
- Технический ID и сырые T-Bank enum-значения не отображаются.
- Вся карточка ведёт на обзор соответствующего счёта и доступна с клавиатуры.
- Во время загрузки отображаются skeleton-состояния без заметного изменения геометрии страницы.
- Ошибка одного портфеля не скрывает остальные счета и не включает недоступные данные в сводку.
- Пользователь может повторить запрос проблемного счёта.
- При отсутствии счетов отображается объясняющее пустое состояние.
- Страница не требует горизонтальной прокрутки на поддерживаемых мобильных ширинах.
- Unit-тесты покрывают агрегацию, валютные ограничения и расчёт распределения.
- Component-тесты покрывают успешную загрузку, skeleton, пустое состояние, частичную ошибку, повторный запрос и переход в счёт.
Не цели
- Добавление aggregate endpoint на backend.
- Конвертация валют и получение валютных курсов.
- Поддержка более трёх счетов как отдельного плотного режима.
- Изменение детальной страницы брокерского счёта.
- Изменение T-Bank DTO, OpenAPI-контракта или сгенерированных frontend-типов.