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
48 lines
3.9 KiB
Markdown
48 lines
3.9 KiB
Markdown
# Загрузка портфеля
|
||
|
||
Экран `/accounts/:accountId` читает последний полный snapshot из SQLite после
|
||
проверки сессии, подключения и локального membership. Если список счетов ещё
|
||
неизвестен, сервер сообщает о загрузке доступа без выдачи личных данных
|
||
неизвестного ID. Известный недоступный счёт возвращает `404`.
|
||
|
||
## Основной обмен
|
||
|
||
Обычный GET и retry возвращают read-only локальный `{ data, meta }` envelope:
|
||
они не ждут и не вызывают T-Bank и не предлагают ручную синхронизацию. Часовой
|
||
обход текущего подключения обновляет Portfolio независимо от экрана. Для нового
|
||
полного snapshot ему нужны оба финансовых ответа `GetPortfolio` и
|
||
`GetPositions`; суммы и позиции публикуются вместе. Metadata инструмента
|
||
дополняет представление независимо, с доступным UID/FIGI вместо имени до её
|
||
онлайн-загрузки.
|
||
|
||
Открытый экран выполняет локальное перечитывание не чаще одного раза в
|
||
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 могут различаться.
|
||
|
||
## Ошибки и результат для пользователя
|
||
|
||
Нет подключения — `409 TBANK_NOT_CONNECTED`, известный отказ токена —
|
||
`400 INVALID_TBANK_TOKEN`, недоступный счёт — `404`. Они не маскируются
|
||
запасным snapshot. Временная ошибка часового обхода оставляет прежний полный
|
||
portfolio и его исходное `lastSuccessfulAt`; `meta.lastAttempt` сообщает о
|
||
failed или partial попытке отдельно. `Portfolio.isStale` сообщает возраст
|
||
snapshot, а Client Cached Snapshot и ошибка браузерного HTTP-перечитывания
|
||
имеют независимый смысл. При отсутствии полного snapshot `data: null` и
|
||
metadata обозначает initial loading либо временную недоступность, без нулевых
|
||
итогов. `503` означает ошибку обслуживания самого HTTP-запроса, а не
|
||
завершившуюся фоновую работу.
|
||
|
||
Денежные правила находятся в [справочнике](../data-reference.md), проверка
|
||
расхождения — в [диагностике](../how-to/investigate-discrepancy.md), RPC/лимиты
|
||
— в [интеграции T-Bank](../../../integrations/tbank.md).
|