Files
docs/domains/portfolio/flows/portfolio-loading.md
T
ksv741 07de062ebb
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
docs: explain persisted T-Bank reads and synchronization
Document local data ownership, coverage and freshness, refresh behavior, failure
recovery and additive migration rollback. Record ADR 017.
2026-09-26 21:22:50 +03:00

3.7 KiB

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

Экран /accounts/:accountId читает последний полный snapshot из SQLite после проверки сессии, подключения и локального membership. Если список счетов ещё неизвестен, сервер сообщает о загрузке доступа без выдачи личных данных неизвестного ID. Известный недоступный счёт возвращает 404.

Основной обмен

Обычный GET возвращает локальный envelope. Missing/stale зависимости запрашиваются в фоне; чтение не ждёт T-Bank. Для нового полного snapshot нужны оба финансовых ответа GetPortfolio и GetPositions. Суммы и позиции публикуются вместе; metadata дополняет представление независимо, с доступным UID/FIGI вместо имени до её загрузки.

Свежесть portfolio — 60 секунд. Истечение срока не удаляет snapshot и не создаёт таймер. «Обновить» на обзоре перечитывает зависимости текущего экрана: membership, portfolio, показанные операции, доход и будущие события. Секции могут быть готовы независимо. Подробнее — свежесть.

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

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

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