57 lines
4.9 KiB
Markdown
57 lines
4.9 KiB
Markdown
# 022. Хранимая классификация инструментов T-Bank
|
||
|
||
**Status:** Accepted. Дополняет [ADR
|
||
019](019-hourly-reads-and-online-instrument-reference.md) исключением из
|
||
правила «справочные сведения запрашиваются онлайн». Решение утверждено
|
||
владельцем в [Issue
|
||
WealthLedger/main#48](https://git.personal.ksv741.ru/WealthLedger/main/issues/48).
|
||
|
||
## Context
|
||
|
||
ADR 019 установил, что справочные сведения инструментов (detail, lookup,
|
||
каталоги) запрашиваются онлайн и не сохраняются как долговременный справочник:
|
||
«старые справочные строки не являются источником актуальности». Вкладка
|
||
«Концентрация» требует для каждой позиции её сектора и эмитента — бренда
|
||
актива по данным T-Bank. Сектор есть только в описаниях отдельных типов
|
||
инструментов (`share`, `bond`, `etf`), а эмитент — в описании актива по
|
||
`asset_uid` инструмента; из названия, тикера, ISIN или `logoName` его вывести
|
||
нельзя. Запрашивать эти поля онлайн при каждом открытии экрана нельзя:
|
||
ответ Portfolio не ждёт T-Bank, а разрезы должны считаться по уже сохранённому
|
||
снимку.
|
||
|
||
Существующий metadata-кэш (`TbankInstrument`) не подходит: общий ответ
|
||
`GetInstrumentBy` не содержит `sector`, а его `brand` — данные логотипа,
|
||
а не `{uid, name}` бренда актива.
|
||
|
||
## Decision
|
||
|
||
- Сектор и бренд актива позиции хранятся как последнее известное значение в
|
||
глобальной таблице `TbankInstrumentClassification` (провайдер, ключ
|
||
инструмента, сектор и время его получения, uid актива и uid/название бренда
|
||
с временем получения). Данные публичные, без привязки к пользователю или
|
||
подключению; ограждение по connection revision к ним не применяется, публикация
|
||
Snapshot ограждается как прежде.
|
||
- Каждое поле обновляется в часовом обходе при его первой попытке, начавшейся
|
||
не ранее чем через 24 часа после последнего успешного получения этого поля;
|
||
пока значение не получено, попытка повторяется в каждом обходе. Сектор и
|
||
бренд обновляются независимо.
|
||
- Неуспешное получение не мешает публикации Portfolio Snapshot и не влияет на
|
||
его свежесть; сохранённое значение остаётся доступным. Отказ token
|
||
обрабатывается как отказ token при обходе Portfolio. Ответ «инструмент не
|
||
найден» сохраняет прежнее значение и перезапускает отсчёт 24 часов.
|
||
- Классификация не входит в `meta.dependencies` Portfolio и не меняет
|
||
`isStale` и `lastSuccessfulAt`.
|
||
|
||
## Consequences
|
||
|
||
- Это первый долговременный справочник T-Bank в системе: ADR 019 теряет
|
||
характер «только онлайн» для этой области и дополняется, а не заменяется.
|
||
- Разрезы концентрации считаются по снимку без обращений к T-Bank; число
|
||
вызовов растёт ограниченно — не более одной попытки на поле в сутки на
|
||
позицию, при первом обходе после выката возможен разовый всплеск, сглаженный
|
||
общим лимитером и очередью.
|
||
- Значение может быть устаревшим до 24 часов; это приемлемо для группировки
|
||
позиций, но классификация не является источником актуальных данных брокера.
|
||
- Второй потребитель хранимой классификации — условие пересмотра решения
|
||
(выделение независимого процесса обновления, отдельные сроки).
|