Conventional commits / commits (pull_request) Successful in 14s
Docs security / security (pull_request) Successful in 8s
Docs verify / verify (pull_request) Successful in 13s
Docs security / security (push) Successful in 8s
Docs verify / verify (push) Successful in 12s
Document local data ownership, coverage and freshness, refresh behavior, failure recovery and additive migration rollback. Record ADR 017.
47 lines
3.7 KiB
Markdown
47 lines
3.7 KiB
Markdown
# Загрузка портфеля
|
||
|
||
Экран `/accounts/:accountId` читает последний полный snapshot из SQLite
|
||
после проверки сессии, подключения и локального membership. Если список
|
||
счетов ещё неизвестен, сервер сообщает о загрузке доступа без выдачи личных
|
||
данных неизвестного ID. Известный недоступный счёт возвращает `404`.
|
||
|
||
## Основной обмен
|
||
|
||
Обычный GET возвращает локальный envelope. Missing/stale зависимости
|
||
запрашиваются в фоне; чтение не ждёт T-Bank. Для нового полного snapshot
|
||
нужны оба финансовых ответа `GetPortfolio` и `GetPositions`. Суммы и позиции
|
||
публикуются вместе; metadata дополняет представление независимо, с доступным
|
||
UID/FIGI вместо имени до её загрузки.
|
||
|
||
Свежесть portfolio — 60 секунд. Истечение срока не удаляет snapshot и не
|
||
создаёт таймер. «Обновить» на обзоре перечитывает зависимости текущего экрана:
|
||
membership, portfolio, показанные операции, доход и будущие события.
|
||
Секции могут быть готовы независимо. Подробнее —
|
||
[свежесть](../../../architecture/cross-cutting/data-freshness.md).
|
||
|
||
## Границы доступа
|
||
|
||
Публикация проверяет 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-запроса, а не принятой фоновой работы.
|
||
|
||
Observer запрашивает статус известной работы, затем `sync=observe` читает
|
||
изменившийся ресурс без запуска синхронизации. При уходе и terminal outcome
|
||
наблюдение прекращается. Повторное открытие может запросить недостающее;
|
||
после рестарта сохранённый snapshot доступен сразу.
|
||
|
||
Денежные правила находятся в [справочнике](../data-reference.md),
|
||
проверка расхождения — в [диагностике](../how-to/investigate-discrepancy.md),
|
||
RPC/лимиты — в [интеграции T-Bank](../../../integrations/tbank.md).
|