- 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
109 lines
7.3 KiB
Markdown
109 lines
7.3 KiB
Markdown
# Календарь событий и прогноз будущих выплат брокерского счёта — задачи
|
||
|
||
Статус: реализовано (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 для валидации, форматирования и дефолтов (today–today+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 пакетов.
|