sequenceDiagram
participant API as WealthLedger backend
participant Idx as Saved index history
participant MOEX as MOEX ISS
API->>Idx: Последняя сохранённая дата, время последней попытки (по индексу)
alt Покрыто до дня `to` или попытка была < 1 ч назад
Idx-->>API: Сохранённые закрытия
else Нужна догрузка (одна одновременная попытка на индекс)
loop Страницы по 100 строк (start = 0, 100, …) до TOTAL
API->>MOEX: GET /iss/history/engines/stock/markets/index/securities/{SECID}.json
?from&till&start&iss.meta=off&history.columns=TRADEDATE,CLOSE
alt 200 с валидными строками
MOEX-->>API: TRADEDATE, CLOSE + history.cursor(INDEX,TOTAL,PAGESIZE)
API->>Idx: Upsert (индекс, торговый день) → точное закрытие
else Таймаут 10 с / не-2xx / невалидный ответ
MOEX-->>API: сбой
Note over API: Прервать догрузку; сохранённое не удалять;
лог integration.moex.index_history.failed
end
end
Idx-->>API: Сохранённые закрытия
end
alt Последнее закрытие ≥ to − 10 календарных дней
Note over API: Покрытие достаточно; asOf = последняя дата закрытия
else Иначе
Note over API: INDEX_HISTORY_UNAVAILABLE для этого индекса
end