docs: document frontend audit remediation delivery

This commit is contained in:
2026-09-06 19:49:38 +03:00
parent 598dfb2bdb
commit 55d35c7f78
10 changed files with 1563 additions and 4 deletions
@@ -18,6 +18,37 @@
- Trend buckets приходят с backend: дни для 1–45 дней, недели для 46–180 и месяцы для более длинного периода. Пустые buckets остаются в response и текстовом представлении.
- Breakdown раскрывает включённые Ledger Entries из того же ответа, поэтому отображённые строки не требуют отдельного запроса и воспроизводят сумму Instrument и валюты.
## Связь breakdown с выплатами
Каждая запись `income-analytics.entries` содержит обязательный `instrumentKey`,
равный `key` соответствующей строки `instruments`. Backend вычисляет этот ключ
один раз при подготовке income entries и использует его же для группировки.
Приоритет UID, FIGI, ticker/type и operation ID с разделением по валюте остаётся
серверным правилом; клиент воспринимает ключ как непрозрачную строку.
Общий Ledger endpoint не приобретает income-specific поле.
Income VM группирует entries по полученному ключу. Отсутствующий, пустой или
нестроковый ключ, неоднозначные instrument keys, неизвестная группа, другая
валюта или несовпадение receipt count приводят к существующему локальному
error/retry состоянию аналитики. Частичный drill-down не показывается как
полный; формула идентификации в клиенте не восстанавливается. Полностью пустой
ответ допустим. Состав и порядок выплат, signed Money и сортировка breakdown
сохраняются, frontend не пересчитывает денежные итоги.
## Совместимость и локальное обновление
Сначала обновляется backend: дополнительное поле совместимо с прежним
frontend. Затем синхронизируются OpenAPI snapshot/generated types и обновляется
frontend consumer. При переключении клиент перезагружается, чтобы не переносить
старые in-memory results и незавершённые запросы. Новый frontend требует новый
backend; отсутствие membership не скрывается fallback на прежнюю формулу.
При регрессии сначала возвращается прежний frontend вместе с соответствующим
snapshot/types и перезагружается клиент; затем при необходимости возвращается
backend. Старый frontend может временно работать с новым additive response.
SQLite schema, credentials и broker-reported операции не меняются: rollback
не удаляет данные, производные результаты запрашиваются заново.
## Прогноз и ограничения
Блок прогноза переиспользует `/events`: его `incomeTotalsByCurrency` содержит только coupon/dividend с известной projected amount, а на UI отображаются не более трёх ближайших таких событий. Maturity, offer и неизвестные суммы не искажают totals. Прогноз не гарантирован, не входит в фактические итоги и не зависит от выбранного исторического периода; его loading/error/empty outcome локален для блока.
@@ -31,6 +31,11 @@ sequenceDiagram
данные и не является интерактивным; error и empty outcomes остаются отдельными
состояниями после завершения запроса.
Page VM владеет account route input, authenticated entity query, выбором
loading/error/empty/loaded и retry. Container вызывает один VM и передаёт
данные существующим state views. Query без account ID остаётся отключённым;
выделение VM не меняет порядок выбора состояний или поведение фонового refetch.
- Период включает текущую календарную дату и следующие 30 дней.
- Суммы до налогов рассчитываются по текущему количеству бумаг на `calculatedAt`; они не учитывают будущие сделки или владение на дату реестра.
- Список не имеет фильтров, пагинации, конвертации валют и общего итога.