Sergey Krylov f7dc338719
Some checks failed
CI / ci (pull_request) Failing after 3m9s
CI / ci (push) Failing after 3m9s
feat: add actual payouts and filter-as-draft UX to broker events calendar
- Backend: actual events from T-Bank operations, types filter, split forecast/actual summary
- Frontend: draft/applied filters with multi-select types, status column (Факт/Прогноз), green actual amounts
- Docs: update spec, plan, tasks
2026-06-22 21:48:03 +03:00

109 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Календарь событий и прогноз будущих выплат брокерского счёта — задачи
Статус: реализовано (1-я версия, read-only, T-Bank); доработка UX и смешанного календаря в работе
Связанные документы:
- [Epic](../../epics/BrokerPortfolio.md)
- [Spec](spec.md)
- [Plan](plan.md)
## 1. Подготовка и gate
- [x] Получить отдельное подтверждение `spec.md`, `plan.md` и `tasks.md` перед началом кода.
- [x] Подтвердить, что первая версия ограничена T-Bank-сценарием и расчётом по текущим позициям.
- [x] Зафиксировать, что follow-up по historical entitlement, налогам и полной купонной сетке не
входят в первую реализацию.
## 2. Backend contract
- [x] Добавить новый broker endpoint событий с обязательными параметрами `from` и `to`.
- [x] Описать Swagger DTO для query, response item, summary и envelope.
- [x] Синхронизировать backend internal types для списка событий и summary.
## 3. Backend aggregation
- [x] Добавить `BrokerEventsService` в `TBankModule`.
- [x] Собрать текущие позиции счёта через существующий backend path без frontend-композиции.
- [x] Построить dividend events по MOEX dividend data.
- [x] Построить coupon, maturity и offer events по MOEX bond enrichment.
- [x] Рассчитывать `estimatedAmount` только там, где для этого достаточно данных.
- [x] Реализовать best-effort деградацию по отдельным инструментам.
- [x] Добавить кэширование результата по `accountId + from + to`.
## 4. Backend tests
- [x] Покрыть дивиденды, купоны, погашения и оферты unit-тестами.
- [x] Проверить включительные границы диапазона дат.
- [x] Проверить partial-failure сценарий, где один инструмент не ломает весь ответ.
- [x] Проверить controller response shape и валидацию query.
## 5. Frontend data layer
- [x] Добавить entity/hook для чтения broker events.
- [x] Добавить handwritten response types для событий и summary.
- [ ] Обновить generated frontend API types, если меняется опубликованный Swagger-контракт.
(Deferred: types.ts не генерируется через codegen, т.к. OpenAPI-artifacts сломан и не является
частью этой фичи. Ответственность — отдельная задача по codegen.)
## 6. Интерфейс overview
- [x] Добавить overview-виджет ближайших событий для выбранного счёта.
- [x] Показать не более 5 ближайших событий.
- [x] Добавить ссылку на полную вкладку `События`.
- [x] Реализовать loading, empty и local error state без поломки overview.
## 7. Вкладка `События`
- [x] Добавить новый раздел `События` в `BrokerAccountLayout`.
- [x] Добавить маршрут `/broker/:accountId/events`.
- [x] Реализовать выбор диапазона дат.
- [x] Добавить два TextField[type=date] из дизайн-системы на страницу событий.
- [x] Синхронизировать from/to с URL-параметрами (useSearchParams).
- [x] dayjs для валидации, форматирования и дефолтов (todaytoday+7d).
- [x] Валидация to >= from с показом ошибки под полем.
- [x] Реализовать summary по выбранному периоду.
- [x] Реализовать список событий с признаком `estimate`.
- [ ] Разделить денежные и неденежные события на уровне представления.
(Deferred: all items shown in one table. Visual separation — follow-up.)
## 8. Frontend tests
- [x] Покрыть hook событий тестами query lifecycle.
- [x] Покрыть overview-виджет сценариями loading, empty, error и success.
- [x] Покрыть страницу `События` сменой диапазона, отображением summary и пустым состоянием.
- [x] Проверить наличие новой вкладки в навигации счёта.
## 9. Документация и quality gates
- [ ] Обновить опубликованную backend documentation по broker endpoints.
(Deferred: docs site update — отдельная задача, т.к. docs build требует дополнительной настройки.)
- [x] Прогнать backend tests (100 passed, 1 pre-existing skip).
- [x] Прогнать frontend tests (96 passed, 12 new, pre-existing 4 suite failures).
- [x] Прогнать backend lint.
- [x] Прогнать frontend tsc.
- [x] Прогнать frontend lint (3 pre-existing errors, 0 new).
- [ ] Прогнать docs build, если менялась опубликованная документация.
(Deferred: docs не менялись.)
- [x] Отметить roadmap и связанные SDD-статусы.
## 10. Follow-up: UX фильтров и прошедшие события
- [x] Согласовать UX-дизайн доработки с пользователем.
- [x] Создать feature branch `codex/broker-events-calendar-ux`.
- [x] Обновить `spec.md` под смешанный календарь факта и прогноза.
- [x] Обновить `plan.md` под backend/frontend реализацию доработки.
- [x] Прогнать baseline tests перед реализацией.
- [x] Расширить backend query параметром `types`.
- [x] Расширить backend response полями `source`, `actualAmount`, nullable `estimateMode` и раздельным
summary.
- [x] Добавить фактические прошедшие события из операций T-Bank.
- [x] Добавить фильтрацию нескольких типов событий.
- [x] Покрыть backend tests для `types`, actual events, summary и controller forwarding.
- [x] Обновить frontend response/query types.
- [x] Перевести страницу `События` на applied filters + draft filters + кнопку `Показать`.
- [x] Добавить multi-select типов событий.
- [x] Отобразить `Факт`/`Прогноз`, `Поступило` и зелёное выделение фактических выплат.
- [x] Покрыть frontend tests для нового UX и actual events.
- [x] Прогнать финальные проверки затронутых backend/frontend пакетов.