docs(events): describe date range filtering

This commit is contained in:
2026-09-12 11:57:42 +03:00
parent 35711a52ec
commit aa9afc15e4
@@ -14,13 +14,15 @@ sequenceDiagram
B->>T: GetAccounts и GetPortfolio B->>T: GetAccounts и GetPortfolio
B->>T: GetDividends (дивиденты по акциям) B->>T: GetDividends (дивиденты по акциям)
B->>M: Получает события облигаций B->>M: Получает события облигаций
B-->>F: Прогноз на 30 дней B-->>F: Прогноз за выбранный период (по умолчанию 30 дней)
F-->>U: Компактный список событий F-->>U: Компактный список событий
``` ```
## API ## API
`GET /api/v1/brokerage-accounts/:accountId/events` требует Bearer access token. Ответ содержит `accountId`, `calculatedAt` и отсортированный по календарной дате список `events`. `GET /api/v1/brokerage-accounts/:accountId/events` требует Bearer access token. Необязательные query-параметры `from` и `to` принимают календарные даты `YYYY-MM-DD`, обе границы включены. Без `from` начало — сегодня в UTC; без `to` конец — через 30 дней после начала. Неверный формат или несуществующая дата возвращают `400`; обратный диапазон — `400` / `INVALID_EVENTS_PERIOD`. Эти же параметры поддерживает `/api/v1/brokerage-accounts/all/events`.
Ответ содержит `accountId`, `calculatedAt` и отсортированный по календарной дате список `events`.
Событие содержит `type` (`coupon`, `dividend`, `maturity`, `offer`), `date`, `dateKind`, идентификаторы и название Instrument, а также nullable `projectedAmount` как Money `{ currency, value }`. Для `offer` и неизвестных денежных условий сумма не создаётся искусственно и передаётся `null`. Дивиденд передаёт `dateKind: registry`: это дата закрытия реестра, а не гарантированная дата зачисления. Событие содержит `type` (`coupon`, `dividend`, `maturity`, `offer`), `date`, `dateKind`, идентификаторы и название Instrument, а также nullable `projectedAmount` как Money `{ currency, value }`. Для `offer` и неизвестных денежных условий сумма не создаётся искусственно и передаётся `null`. Дивиденд передаёт `dateKind: registry`: это дата закрытия реестра, а не гарантированная дата зачисления.
@@ -28,16 +30,15 @@ sequenceDiagram
При первом открытии полного списка frontend показывает structural skeleton При первом открытии полного списка frontend показывает structural skeleton
заголовка и event rows вместо отдельного spinner. Placeholder не представляет заголовка и event rows вместо отдельного spinner. Placeholder не представляет
данные и не является интерактивным; error и empty outcomes остаются отдельными данные и не является интерактивным; при пустом результате фильтр остаётся доступным для изменения периода.
состояниями после завершения запроса.
Page VM владеет account route input, authenticated entity query, выбором Page VM владеет account route input, authenticated entity query, выбором
loading/error/empty/loaded и retry. Container вызывает один VM и передаёт loading/error/loaded, пустого результата и retry. Container вызывает один VM и передаёт
данные существующим state views. Query без account ID остаётся отключённым; данные существующим state views. Query без account ID остаётся отключённым;
выделение VM не меняет порядок выбора состояний или поведение фонового refetch. выделение VM не меняет порядок выбора состояний или поведение фонового refetch.
- Период включает текущую календарную дату и следующие 30 дней. - По умолчанию период включает текущую календарную дату и следующие 30 дней. Полный список позволяет выбрать другой период полями «С» и «По», как в операциях: «Применить» сохраняет даты в URL и запрашивает события, «Сбросить» возвращает период по умолчанию. Обзор счёта сохраняет прогноз на 30 дней.
- Суммы до налогов рассчитываются по текущему количеству бумаг на `calculatedAt`; они не учитывают будущие сделки или владение на дату реестра. - Суммы до налогов рассчитываются по текущему количеству бумаг на `calculatedAt`; они не учитывают будущие сделки или владение на дату реестра.
- Список не имеет фильтров, пагинации, конвертации валют и общего итога. - Фильтр дат применяется на сервере до сортировки и подсчёта `incomeTotalsByCurrency` (купоны и дивиденды). Запрос дивидендов и ключ его кэша учитывают выбранный период. Список не имеет пагинации и конвертации валют.
- Поддерживаются только известные события по доступным позициям: дивиденды по акциям из T-Bank `GetDividends` (дата фиксации реестра `record_date`, сумма `dividend_net` на бумагу; отменённые выплаты `Cancelled` не попадают в прогноз), а также купоны, полное погашение и оферты облигаций из MOEX `bondization`. Будущее частичное погашение и амортизация не синтезируются без надёжного расписания. - Поддерживаются только известные события по доступным позициям: дивиденды по акциям из T-Bank `GetDividends` (дата фиксации реестра `record_date`, сумма `dividend_net` на бумагу; отменённые выплаты `Cancelled` не попадают в прогноз), а также купоны, полное погашение и оферты облигаций из MOEX `bondization`. Будущее частичное погашение и амортизация не синтезируются без надёжного расписания.
- Ошибка T-Bank или MOEX возвращает `503` без частичного списка. Инструмент без поддерживаемых данных не создаёт строку «нет данных». - Ошибка T-Bank или MOEX возвращает `503` без частичного списка. Инструмент без поддерживаемых данных не создаёт строку «нет данных».