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