9.1 KiB
9.1 KiB
Финальный редизайн брокерского overview по HTML — задачи
Дата: 2026-06-27 Статус: реализация завершена
Документация и pre-flight
- Создать
docs/features/broker-account-overview-html-parity/spec.md. - Создать
docs/features/broker-account-overview-html-parity/plan.md. - Создать
docs/features/broker-account-overview-html-parity/tasks.md. - Зафиксировать canonical visual reference:
docs/research/frontend-overview-redesign/example.html. - Зафиксировать, что
docs/research/2026-06-27-broker-account-redesign.htmlне является source of truth для этой итерации. - Зафиксировать финальный порядок блоков:
Заголовок счёта → Стоимость портфеля за 6 месяцев → Аналитика доходности → Структура → Последние события. - Зафиксировать, что production UI не переносит demo-toggle
Данные / Загрузка. - Перед началом реализации убедиться, что работа идёт в feature branch.
- Перед началом реализации запустить baseline checks текущей ветки.
Backend contract
- Расширить
BrokerAnalyticsDtoполямиtotalFeesиtotalTaxesPaid. - Обновить
BrokerAnalyticsService: считать комиссии из executed операций категорииfee. - Обновить
BrokerAnalyticsService: считать уплаченные налоги из executed операций категорииtax. - Обновить
broker-analytics.service.spec.tsдля новых агрегатов и округления. - Добавить DTO для
BrokerPortfolioHistoryData. - Добавить envelope DTO для portfolio history endpoint.
- Добавить
BrokerPortfolioHistoryService. - Добавить endpoint
GET /api/v1/broker/accounts/:accountId/portfolio/history?months=6. - Покрыть portfolio history default months и response shape тестами.
- Добавить
categories?: stringвBrokerOperationQueryDto. - Обновить
BrokerOperationsService: применять category filtering для operations response. - Покрыть
categories=income,tax,feeи неизвестные категории тестами. - Обновить
TBankControllerиtbank.controller.spec.tsпод новый endpoint/DTO.
OpenAPI и frontend data layer
- Запустить backend dev server для Swagger JSON.
- Выполнить
npm run codegen -w apps/frontend. - Проверить, что generated types содержат
totalFees,totalTaxesPaidи portfolio history schemas. - Экспортировать новый
BrokerPortfolioHistoryalias изapps/frontend/src/shared/api/index.ts. - Добавить
getBrokerPortfolioHistory. - Добавить
useBrokerPortfolioHistory. - Добавить
categoriesв frontendBrokerOperationQuery. - Не редактировать
apps/frontend/src/shared/api/types.tsвручную.
Frontend composition
- Перестроить
BrokerDashboardна финальный порядок блоков. - Убрать
BrokerDashboardHeroиз overview-render path. - Перенести compact yield UI в заголовок счёта рядом с
Брокерский счёт. - Убедиться, что page title loading state не показывает skeleton-полосы.
- Создать
BrokerPortfolioHistoryCard. - Подключить
useBrokerPortfolioHistory(accountId, { months: 6 }). - Заменить overview
BrokerDashboardIncomeCardнаBrokerPortfolioHistoryCard. - Обновить
BrokerDashboardSkeletonпод финальный порядок и стабильные высоты.
Frontend visual parity
- Карточка
Стоимость портфеля за 6 месяцев: зелёный градиентный фон и зелёная рамка. - График стоимости: 6 месячных значений, 6 подписей месяцев, плавная линия без visible markers.
- График стоимости: первая точка у левого края, последняя у правого края.
- Loading графика: chart-like indicator (meta skel + dashed guide + shimmer area).
- Заголовок/yield: skeleton-полосы при загрузке портфеля (label, value, daily).
- Analytics loading: 2 summary карточки + 6 detail карточек со skel барами.
- Events loading: skeleton-table со структурой строк дата/инструмент/тип/сумма.
- Analytics summary: только
Стоимость портфеляиВсего доходов. - Analytics detail grid:
Пополнения,Выводы,Дивиденды,Купоны,Комиссия,Уплаченные налоги. - Analytics overview не показывает
НеттоиВсего получено. КомиссияиУплаченные налогиотображаются как отрицательные UI-суммы.- Карточка структуры называется
Структура. - Карточка структуры не показывает subtitle
Структура портфеля. - Карточка структуры показывает итоговую стоимость под заголовком.
- Карточка структуры показывает бары
Акции,Облигации,Деньги. - Карточка последних событий называется
Последние события. - Последние события используют executed operations, а не calendar events.
- Последние события отсортированы новые → старые.
- Последние события не показывают toolbar, count badge, footer summary и колонку
Статус. - Инструмент в последних событиях: название сверху жирным, ticker/ISIN снизу серым.
- Налоги/комиссии/списания отображаются красным и с корректным бейджем типа.
- На mobile нет page-level horizontal overflow.
Tests
- Backend targeted:
npm run test -w apps/backend -- src/modules/tbank/services/broker-analytics.service.spec.ts src/modules/tbank/tbank.controller.spec.ts - Frontend targeted:
npm run test -w apps/frontend -- --run src/widgets/broker-dashboard - Full frontend:
npm run test:frontend - Frontend lint:
npm run lint -w apps/frontend - Frontend build:
npm run build:frontend - Проверить OpenAPI/codegen после backend изменений.
Visual QA
- Проверить
/broker/:accountIdна desktop противdocs/research/frontend-overview-redesign/example.html(ручная проверка) - Проверить
/broker/:accountIdна viewport390x844(ручная проверка)
Definition of Done
- Все acceptance criteria из
spec.mdвыполнены. - Backend tests проходят (34 files, 161 passed).
- Frontend targeted tests проходят.
npm run test:frontendпроходит (32 files, 168 passed).npm run lint -w apps/frontendпроходит.npm run build:frontendпроходит.- Generated OpenAPI types обновлены через codegen.
- Visual QA desktop/mobile выполнена (ручная проверка).
- Существующие detailed вкладки
Акции,Облигации,Операции,События,Аналитикаостаются доступны. tasks.mdобновлён по факту выполнения.
Дополнительные улучшения (после основной реализации)
- Бейдж событий перевести с MUI Chip на кастомный Badge с цветами эталона.
- Пагинация событий: wire
useState+ handlers, API limit поднят до 100. - Подписи месяцев на графике: первая left-aligned, последняя right-aligned.
BrokerAnalyticsServiceпереписан на прямой вызов T-Bank API:- убран Prisma для analytics;
GetOperationsByCursorс пагинацией за всю историю (без ограничения поfrom);GetPortfolio.expectedYieldиспользуется какtotalReturnPercent.
- Структурные skeletons для chart/analytics/title-yield совпадают с эталоном.