Files
docs/domains/portfolio/flows/portfolio-loading.md
T
ksv741 a45d3e77b9
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
docs: document hourly investment reads
2026-10-09 19:56:40 +03:00

3.9 KiB
Raw Blame History

Загрузка портфеля

Экран /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. Секции могут быть готовы независимо. Подробнее — свежесть.

Границы доступа

Публикация проверяет connection revision и attempt в той же транзакции. Замена или удаление подключения не допускает позднюю запись прежней работы. Frontend очищает недоступный personal view и отклоняет запоздалые ответы. В режиме «Все счета» состав 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-запроса, а не завершившуюся фоновую работу.

Денежные правила находятся в справочнике, проверка расхождения — в диагностике, RPC/лимиты — в интеграции T-Bank.