docs: document hourly investment reads
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 13s
Conventional commits / commits (pull_request) Successful in 12s
Docs security / security (pull_request) Successful in 8s
Docs verify / verify (pull_request) Successful in 14s

This commit is contained in:
2026-10-09 19:56:40 +03:00
parent 3a272681c5
commit a45d3e77b9
6 changed files with 154 additions and 121 deletions
+32 -31
View File
@@ -1,46 +1,47 @@
# Загрузка портфеля
Экран `/accounts/:accountId` читает последний полный snapshot из SQLite
после проверки сессии, подключения и локального membership. Если список
счетов ещё неизвестен, сервер сообщает о загрузке доступа без выдачи личных
данных неизвестного ID. Известный недоступный счёт возвращает `404`.
Экран `/accounts/:accountId` читает последний полный snapshot из SQLite после
проверки сессии, подключения и локального membership. Если список счетов ещё
неизвестен, сервер сообщает о загрузке доступа без выдачи личных данных
неизвестного ID. Известный недоступный счёт возвращает `404`.
## Основной обмен
Обычный GET возвращает локальный envelope. Missing/stale зависимости
запрашиваются в фоне; чтение не ждёт T-Bank. Для нового полного snapshot
нужны оба финансовых ответа `GetPortfolio` и `GetPositions`. Суммы и позиции
публикуются вместе; metadata дополняет представление независимо, с доступным
UID/FIGI вместо имени до её загрузки.
Обычный GET и retry возвращают read-only локальный `{ data, meta }` envelope:
они не ждут и не вызывают T-Bank и не предлагают ручную синхронизацию. Часовой
обход текущего подключения обновляет Portfolio независимо от экрана. Для нового
полного snapshot ему нужны оба финансовых ответа `GetPortfolio` и
`GetPositions`; суммы и позиции публикуются вместе. Metadata инструмента
дополняет представление независимо, с доступным UID/FIGI вместо имени до её
онлайн-загрузки.
Свежесть portfolio — 60 секунд. Истечение срока не удаляет snapshot и не
создаёт таймер. «Обновить» на обзоре перечитывает зависимости текущего экрана:
membership, portfolio, показанные операции, доход и будущие события.
Секции могут быть готовы независимо. Подробнее —
[свежесть](../../../architecture/cross-cutting/data-freshness.md).
Открытый экран выполняет локальное перечитывание не чаще одного раза в
30 минут; retry также повторяет только HTTP GET. `data: null` означает, что
полного snapshot ещё нет, а не нулевой портфель. Пустой подтверждённый portfolio
остаётся available complete result. Секции могут быть готовы независимо.
Подробнее — [свежесть](../../../architecture/cross-cutting/data-freshness.md).
## Границы доступа
Публикация проверяет connection revision и attempt в той же транзакции.
Замена или удаление подключения не допускает позднюю запись прежней работы.
Frontend очищает недоступный personal view и отклоняет запоздалые ответы.
В режиме [«Все счета»](../all-accounts.md#полнота-свежесть-и-доступ) состав
accounts и snapshots читается согласованно, но их source times могут различаться.
Публикация проверяет connection revision и attempt в той же транзакции. Замена
или удаление подключения не допускает позднюю запись прежней работы. Frontend
очищает недоступный personal view и отклоняет запоздалые ответы. В режиме
[«Все счета»](../all-accounts.md#полнота-свежесть-и-доступ) состав accounts и
snapshots читается согласованно, но их source times могут различаться.
## Ошибки и результат для пользователя
Нет подключения — `409 TBANK_NOT_CONNECTED`, известный отказ токена —
`400 INVALID_TBANK_TOKEN`, недоступный счёт — `404`. Они не маскируются
запасным snapshot. Transient source failure оставляет прежний полный портфель
и его исходное время с безопасным предупреждением. При отсутствии snapshot
показывается missing/failed, без нулевых итогов. `503` означает ошибку
обслуживания HTTP-запроса, а не принятой фоновой работы.
запасным snapshot. Временная ошибка часового обхода оставляет прежний полный
portfolio и его исходное `lastSuccessfulAt`; `meta.lastAttempt` сообщает о
failed или partial попытке отдельно. `Portfolio.isStale` сообщает возраст
snapshot, а Client Cached Snapshot и ошибка браузерного HTTP-перечитывания
имеют независимый смысл. При отсутствии полного snapshot `data: null` и
metadata обозначает initial loading либо временную недоступность, без нулевых
итогов. `503` означает ошибку обслуживания самого HTTP-запроса, а не
завершившуюся фоновую работу.
Observer запрашивает статус известной работы, затем `sync=observe` читает
изменившийся ресурс без запуска синхронизации. При уходе и terminal outcome
наблюдение прекращается. Повторное открытие может запросить недостающее;
после рестарта сохранённый snapshot доступен сразу.
Денежные правила находятся в [справочнике](../data-reference.md),
проверка расхождения — в [диагностике](../how-to/investigate-discrepancy.md),
RPC/лимиты — в [интеграции T-Bank](../../../integrations/tbank.md).
Денежные правила находятся в [справочнике](../data-reference.md), проверка
расхождения — в [диагностике](../how-to/investigate-discrepancy.md), RPC/лимиты
— в [интеграции T-Bank](../../../integrations/tbank.md).