docs: explain persisted T-Bank reads and synchronization
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
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.
This commit was merged in pull request #22.
This commit is contained in:
@@ -111,20 +111,21 @@ HTML-источник, общий кэш и поведение при измен
|
||||
транспортного контракта задаёт [HTTP API](../../architecture/http-api.md).
|
||||
|
||||
`BondBy`, `FindInstrument` и `GetBondCoupons` используют способ
|
||||
декодирования, сохраняющий отсутствие полей. Рыночные RPC проходят
|
||||
общие TLS, очередь, ограничение частоты, deadline и повторные попытки. Кэш успешных и совместных
|
||||
незавершённых запросов ограничен LRU и сроком 30 секунд по пользователю,
|
||||
поколению подключения и параметрам. Ошибки не кэшируются; ошибки авторизации
|
||||
не подавляются при дополнительной загрузке данных поиска.
|
||||
Исходный ответ `BondBy` совместно используется поиском, карточкой, котировкой,
|
||||
графиком, купонами и сводкой показателей в пределах того же пользователя, поколения и TTL.
|
||||
Одновременная загрузка секций вызывает один `BondBy` на UID. Календарь
|
||||
и сводка совместно используют один запрос купонов; котировка переиспользуется
|
||||
при расчёте купонной доходности. MOEX и НКР загружаются только для открытого
|
||||
выпуска, независимо от поиска. Для 30 новых
|
||||
результатов поиск выполняет 32 RPC до повторных попыток: один `FindInstrument`,
|
||||
30 `BondBy` и один пакетный запрос цен. Общий ограничитель backend не заменяет
|
||||
квоты Т-Банка; при их исчерпании сохраняется `TBANK_UNAVAILABLE`.
|
||||
декодирования, сохраняющий отсутствие полей. Общие данные выпуска, quotes,
|
||||
календари, MOEX metrics и необходимые результаты НКР сохраняются в SQLite.
|
||||
Личные позиции и оценки выплат используют текущий доступ и сохранённый
|
||||
portfolio; они не попадают в общие источники.
|
||||
|
||||
BondBy переиспользуется зависимостями выпуска. Discovery принадлежит query,
|
||||
свежесть — конкретному source/range. Missing/stale зависимости запрашиваются
|
||||
в фоне через прежний limiter; обычный HTTP-ответ не ждёт брокера.
|
||||
Покрытые завершённые свечи не перечитываются после restart. Открытый хвост
|
||||
остаётся изменяемым; ручной refresh охватывает показанный период.
|
||||
|
||||
Последняя полная личная оценка сохраняется при ошибке новых обязательных
|
||||
зависимостей, вместе с исходным временем. Неполнота не означает отсутствие
|
||||
выплат. Наблюдение статуса не запускает повторный импорт. Политика источников
|
||||
и границы — в [модели свежести](../../architecture/cross-cutting/data-freshness.md).
|
||||
|
||||
Разделы загружаются независимо, показывают каркас загрузки и локальную повторную попытку.
|
||||
Ошибка фонового обновления сохраняет последние данные. Смена подключения
|
||||
|
||||
@@ -73,7 +73,8 @@ Frontend не получает брокерский токен и не обра
|
||||
|
||||
Личная история использует существующий
|
||||
`GET /api/v1/brokerage-accounts/all/operations?instrumentUid=...`.
|
||||
Фильтр UID валидируется и передаётся upstream как `instrumentId`; ответ также
|
||||
Фильтр UID валидируется и применяется к локальной истории. При ручной
|
||||
сверке бумаги он также передаётся upstream как `instrumentId`; ответ
|
||||
проверяется по UID. Без `from` такой запрос начинается с самой ранней известной
|
||||
даты открытия доступных счетов; если даты неполны, нижняя граница — Unix epoch.
|
||||
Обычный журнал без фильтра инструмента сохраняет начало текущего года.
|
||||
@@ -142,18 +143,24 @@ TTM означает последние 12 месяцев, MRQ — послед
|
||||
|
||||
## Получение данных и ограничения
|
||||
|
||||
Запросы T-Bank проходят общую серверную интеграцию с TLS, лимитом частоты,
|
||||
очередью, предельным временем ожидания и повторными попытками. Проверка доступа
|
||||
и расшифровка token выполняются только backend. Успешные ответы и совместные незавершённые запросы кэшируются
|
||||
в ограниченном кэше LRU на 30 секунд по пользователю, поколению подключения и параметрам.
|
||||
Для поиска `FindInstrument` дополняется сведениями `ShareBy` через тот же
|
||||
кэш карточки инструмента и одним пакетным `GetLastPrices` для списка. Ошибка
|
||||
дополнительной загрузки или исчезнувшая карточка не скрывает исходную запись
|
||||
каталога; недоступные логотипы и цены имеют заглушки. Ошибки авторизации
|
||||
не подавляются.
|
||||
Ошибка целого запроса не кэшируется; отсутствие дополнительного источника
|
||||
обозначается в ответе. Поддерево клиентских запросов акций сбрасывается вместе с финансовыми
|
||||
данными при изменении подключения; выход очищает кэш сессии.
|
||||
Общие metadata, discovery, company, quotes, свечи и календари сохраняются
|
||||
в SQLite. Поиск хранит подтверждённый набор UID для конкретного query;
|
||||
успешный SBER не подтверждает пустой GAZP. Отсутствующее enrichment не
|
||||
скрывает найденную бумагу. Сохранённые общие источники переиспользуются
|
||||
между пользователями, но личные позиции и выплаты всегда проверяют доступ.
|
||||
|
||||
Обычное чтение не ждёт RPC; missing/stale зависимости запрашиваются в фоне
|
||||
через существующий T-Bank limiter. Минутная свежесть применяется к quotes
|
||||
и открытому хвосту свечей, суточная — к metadata/company/календарям.
|
||||
Закрытые полные свечные интервалы, включая пустые, сохраняются после restart.
|
||||
Новый день не делает прежнюю незавершённую свечу полной.
|
||||
|
||||
«Обновить» передаёт текущий инструмент, выбранный график и personal-history
|
||||
scope. Частичные строки видны с предупреждением; неполные личные оценки
|
||||
не становятся нулями. Статус и `sync=observe` не создают новый импорт.
|
||||
Смена подключения и известный access loss очищают личное представление;
|
||||
поздние ответы не возвращают прежние данные. Детали —
|
||||
[модель свежести](../../architecture/cross-cutting/data-freshness.md).
|
||||
|
||||
Полные даты в интерфейсе имеют формат ДД.ММ.ГГГГ; ISO-формат транспорта и
|
||||
временные зоны расчётов не меняются. Личная история использует общий с портфелем формат строки операции,
|
||||
|
||||
Reference in New Issue
Block a user