# Финальный редизайн брокерского overview по HTML — задачи Дата: 2026-06-27 Статус: документация подготовлена, реализация не начата ## Документация и pre-flight - [x] Создать `docs/features/broker-account-overview-html-parity/spec.md`. - [x] Создать `docs/features/broker-account-overview-html-parity/plan.md`. - [x] Создать `docs/features/broker-account-overview-html-parity/tasks.md`. - [x] Зафиксировать canonical visual reference: `docs/research/frontend-overview-redesign/example.html`. - [x] Зафиксировать, что `docs/research/2026-06-27-broker-account-redesign.html` не является source of truth для этой итерации. - [x] Зафиксировать финальный порядок блоков: `Заголовок счёта → Стоимость портфеля за 6 месяцев → Аналитика доходности → Структура → Последние события`. - [x] Зафиксировать, что 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. - [ ] Экспортировать новый `BrokerPortfolioHistory` alias из `apps/frontend/src/shared/api/index.ts`. - [ ] Добавить `getBrokerPortfolioHistory`. - [ ] Добавить `useBrokerPortfolioHistory`. - [ ] Добавить `categories` в frontend `BrokerOperationQuery`. - [ ] Не редактировать `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 без skeleton месяцев. - [ ] 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/services/broker-operations.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` на viewport `390x844`. - [ ] Проверить, что loading/loaded высоты карточек не вызывают layout shift. - [ ] Проверить, что подписи месяцев графика не выходят за границы карточки. - [ ] Проверить, что таблица последних событий читаема на mobile. ## Definition of Done - [ ] Все acceptance criteria из `spec.md` выполнены. - [ ] Backend tests проходят. - [ ] Frontend targeted tests проходят. - [ ] `npm run test:frontend` проходит. - [ ] `npm run lint -w apps/frontend` проходит. - [ ] `npm run build:frontend` проходит. - [ ] Generated OpenAPI types обновлены через codegen. - [ ] Visual QA desktop/mobile выполнена. - [ ] Существующие detailed вкладки `Акции`, `Облигации`, `Операции`, `События`, `Аналитика` остаются доступны. - [ ] `tasks.md` обновлён по факту выполнения.