- Flip BrokerDashboardAnalyticsCard + analytics component tests checkboxes for the parity iteration. - Mark verified DoD items (dashboard tests 49/49, full frontend tests 175/175, lint, build). - Add code-to-spec mapping table linking the analytics card to the HTML reference and spec §6 for the next agent / reviewer. - Be explicit that live visual + mobile-overflow checks still need manual verification with a running backend.
13 KiB
13 KiB
Редизайн обзора брокерского счёта в инвестиционный дашборд — задачи
Дата: 2026-06-26 (обновлено 2026-06-27) Статус: в реализации, итерация HTML parity
Документация и pre-flight
- Выбрать scope:
/broker/:accountIdстановится единым дашбордом. - Выбрать визуальный стиль: структура
temp.html, текущая светлая DS-тема. - Исключить график истории стоимости из первой версии.
- Добавить backlog-задачу на историю стоимости брокерского портфеля.
- Создать ветку
codex/broker-dashboard-redesign. - Запустить baseline:
rtk npm run test:backend && rtk npm run test:frontend && rtk npm run test:design-system. - Написать
spec.md. - Написать
plan.md.
Реализация
- Добавить pure helpers для фильтрации и суммирования доходных операций dashboard.
- Добавить helpers для фильтров дат, пресетов, валидации и mapping income types → operationTypes.
- Добавить dashboard presentation helpers для fallback, event labels и statuses.
- Добавить локальный
BrokerDashboardCardpattern или точечно расширить DS, если локального pattern недостаточно. - Добавить
BrokerDashboardHeroс KPI по portfolio и analytics. - Добавить
BrokerDashboardEventsCardна основеuseBrokerEvents. - Добавить
BrokerDashboardIncomeCardна основеuseBrokerOperations. - Перенести навигацию счёта из левой колонки в горизонтальные вкладки над контентом.
- Перестроить dashboard на один блок на строке для
События,Доходы,Аналитика доходности,Аллокация. - Добавить кликабельные chip-фильтры типов для
События. - Добавить
BrokerDashboardDateFilter— переиспользуемый expandable-компонент фильтра дат (пресеты 7д/30д/90д/1г/Всё, from/to поля, Сбросить/Показать). - Подключить
BrokerDashboardDateFilterвСобытияс draft/applied состоянием. - Добавить локальную пагинацию по 10 событий в
События. - Добавить кликабельные chip-фильтры типов для
Доходы. - Подключить
BrokerDashboardDateFilterвДоходыс draft/applied состоянием. - Добавить cursor-пагинацию по 10 операций в
Доходы. - Добавить
BrokerDashboardAnalyticsCardна основеuseBrokerAnalytics. - Добавить
BrokerDashboardAllocationCardна основе существующей аллокации. - Добавить
BrokerDashboardSkeleton. - Добавить
BrokerDashboardкак top-level composition widget. - Заменить текущий вертикальный обзор в
BrokerAccountOverviewPageнаBrokerDashboard. - Добавить unit/component tests для helpers и базовой dashboard composition.
- Выровнять hero KPI: все Metric одной высоты, supportingText не раздвигает "Доходность" выше соседей.
- Заменить donut-диаграмму аллокации на горизонтальные бары в
BrokerDashboardAllocationCard. - Убрать слово
Фильтриз пользовательского текста шапки периода в dashboard-карточках. - Переименовать действие
Показатьв управлении периодом и визуально улучшить шапку фильтров. - Заменить native date inputs на одно поле периода с popover и community
DateCalendarиз@mui/x-date-pickers. - Не использовать
@mui/x-date-pickers-proиDateRangePicker. - Настроить default range событий и доходов на
сегодня - 7 дней/сегодня. - Заменить текстовую загрузку
Событияна skeleton таблицы. - Заменить текстовую загрузку
Доходына skeleton таблицы. - Обновить component tests под новые тексты, единое поле периода, popover-календарь и skeleton loading states.
- Проверить desktop layout
/broker/2084014113. - Проверить mobile layout
/broker/2084014113.
Итерация HTML parity
- Согласовать статический визуальный эталон
docs/research/2026-06-27-broker-account-redesign.html. - Обновить
spec.mdпод HTML parity: компактные заголовки, единый toolbar, бейджи, цвета, подписи инструментов,₽. - Обновить
plan.mdпод перенос HTML parity в React-компоненты. - Добавить
apps/frontend/src/widgets/broker-dashboard/lib/dashboardVisual.tsс helpers для money tone, type tone, currency symbol и instrument display. - Добавить
apps/frontend/src/widgets/broker-dashboard/lib/dashboardVisual.test.ts. - Расширить income helpers так, чтобы строки доходов могли отдавать main/subtitle инструмента без дублирования текста.
- Обновить
BrokerDashboardHero: semantic colors для доходности, дневного изменения и всего полученных доходов. - Обновить
BrokerDashboardCard: компактный card heading вместо крупного page-level heading. - Обновить
BrokerDashboardDateFilter: единый toolbar-паттерн и chevron-иконка вместо текстовогоv. - Обновить
BrokerDashboardEventsCard:thead, двухстрочный инструмент, type badges, semantic amount colors, status badges. - Обновить
BrokerDashboardIncomeCard:thead, двухстрочный инструмент, type badges, semantic amount colors. - Обновить
BrokerDashboardTableSkeleton: общий skeleton-паттерн для событий и доходов с корректной геометрией колонок. - Обновить
BrokerDashboardAnalyticsCard:₽для RUB и positive/negative tone карточек. - Обновить component tests dashboard под HTML parity (analytics tones).
- Проверить, что блок
Доходыне расширяет backend/API и остаётся в рамках текущих income-типов. - Проверить desktop layout
/broker/2084014113противdocs/research/2026-06-27-broker-account-redesign.html. - Проверить mobile layout
/broker/2084014113на viewport390x844противdocs/research/2026-06-27-broker-account-redesign.html.
Definition of Done
rtk npm run test:frontendпроходит.rtk npm run test:design-systemпроходит.rtk npm run lint -w apps/frontendпроходит.rtk npm run build:frontendпроходит.- Dashboard соответствует acceptance criteria из
spec.md. - Существующие вкладки
Акции,Облигации,Операции,События,Аналитикаостаются доступны. graphify update .выполнен после code changes.
Definition of Done для HTML parity
rtk npm run test:frontend -- --run src/widgets/broker-dashboardпроходит. (49/49)rtk npm run test:frontendпроходит после HTML parity изменений. (175/175)rtk npm run lint -w apps/frontendпроходит после HTML parity изменений.rtk npm run build:frontendпроходит после HTML parity изменений.- На
/broker/2084014113заголовки карточек, toolbar таблиц, бейджи типов, подписи инструментов, цвета сумм, analytics colors и skeleton визуально соответствуютdocs/research/2026-06-27-broker-account-redesign.html. Проверено только по тестам и code-to-spec mapping внизу файла — live dev server не запускался в этой итерации (нет backend/auth в среде). Необходима ручная проверка пользователем. - Нет общего горизонтального overflow на mobile; горизонтальный scroll допускается только внутри таблиц.
Требует live dev server + ручной проверки на viewport
390x844. docs/features/broker-dashboard-redesign/tasks.mdобновлён по факту выполнения.
Code-to-spec mapping для analytics (HTML parity)
BrokerDashboardAnalyticsCard.tsx (apps/frontend/src/widgets/broker-dashboard/ui/) против
HTML-эталона (docs/research/2026-06-27-broker-account-redesign.html:1145-1158):
| HTML reference element | React-компонент / data-testid | Спецификация §6 (spec.md:165-180) |
|---|---|---|
<section aria-labelledby="analytics-title"> |
BrokerDashboardCard с ariaLabel="Аналитика доходности" |
Секция с заголовком, доступная по aria-label |
<h2>Аналитика доходности</h2> |
Заголовок карточки | Компактный card heading (§2) |
.analytics-item.positive .analytics-value |
data-testid="dashboard-analytics-totalDeposits" (tone positive) |
Пополнения — positive (§6, AC Блок Аналитика доходности) |
.analytics-item.negative .analytics-value для Выводы |
data-testid="dashboard-analytics-totalWithdrawn" (tone negative, префикс −) |
Выводы — negative, всегда со знаком − (§6) |
.analytics-item.negative .analytics-value для Нетто (если нетто<0) |
data-testid="dashboard-analytics-netInvested" (tone negative при value<0) |
Нетто — sign-based (§6) |
.analytics-item.positive .analytics-value для Дивиденды/Купоны/Всего получено |
data-testid="dashboard-analytics-totalDividends", …-totalCoupons, …-totalReceived |
Positive если value > 0, neutral если value === 0 (§6) |
113 773,03 ₽ (валюта) |
formatDashboardCurrency через shared/lib/formatters |
RUB отображается как ₽ (AC, §2) |
Тесты в BrokerDashboard.test.tsx:
renders analytics card with the ₽ symbol and no "RUB" code— подтверждает заменуRUBна₽.applies positive, negative and neutral tones to analytics values— подтверждает tone-атрибуты для каждого поля с разнообразными значениями (totalDeposits: 1000,totalWithdrawn: 250,netInvested: -150,totalDividends: 75,totalCoupons: 0,totalReceived: 90).
Что НЕ было проверено в этой итерации
- Реальный визуальный рендеринг
/broker/2084014113на desktop и390x844mobile. Требуется ручная проверка пользователем с поднятым backend (нужны реальные auth и T-Bank/MOEX прокси). Dev server не запускался. - Поведение отсутствующего/ошибочного analytics под live-нагрузкой. Логика в карточке покрыта тестами, но проверка UX-сообщений и skeleton-states в браузере не делалась.
- Реальный viewport на
390x844для подтверждения отсутствия общего горизонтального overflow. Геометрия таблиц уже переключена на внутреннийoverflowX: 'auto'(BrokerDashboardEventsCard.tsx:176,BrokerDashboardIncomeCard.tsx), но фактическая вёрстка в браузере не сверялась с эталоном.