# Календарь событий и прогноз будущих выплат брокерского счёта — задачи Статус: реализовано (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. - [x] Обновить generated frontend API types, если меняется опубликованный Swagger-контракт. (Done: quality-gate фича исправила OpenAPI, types.ts сгенерирован через 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`. - [x] Разделить денежные и неденежные события на уровне представления. (Done: cashflow events grouped под заголовком, corporate events — в отдельной muted-секции.) ## 8. Frontend tests - [x] Покрыть hook событий тестами query lifecycle. - [x] Покрыть overview-виджет сценариями loading, empty, error и success. - [x] Покрыть страницу `События` сменой диапазона, отображением summary и пустым состоянием. - [x] Проверить наличие новой вкладки в навигации счёта. ## 9. Документация и quality gates - [x] Обновить опубликованную backend documentation по broker endpoints. (Done: `caching.md` обновлён — добавлен CACHE_TBANK_EVENTS_TTL в таблицу и key prefixes.) - [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). - [x] Прогнать docs build, если менялась опубликованная документация. (Done: `caching.md` обновлён, docs build проверен.) - [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 пакетов.