sequenceDiagram actor User participant UI as WealthLedger frontend participant API as WealthLedger backend participant Store as Saved investment data participant Idx as Saved index history participant MOEX as MOEX ISS User->>UI: Открывает вкладку «Результат» (accountId | all) UI->>API: GET /brokerage-accounts/{accountId|all}/performance API->>Store: Сессия, connection, доступ к счёту(ам) alt Нет сессии / нет подключения / счёт недоступен API-->>UI: Problem Details 401 / 503 TBANK_NOT_CONNECTED / 404 UI-->>User: Существующие состояния ошибки счёта else Доступ подтверждён API->>Store: Граница истории, покрытие операций, последняя полная оценка Portfolio Note over API: По каждому счёту: причины недоступности
(HISTORY_START_UNKNOWN, OPERATIONS_HISTORY_INCOMPLETE,
NON_RUB_ACTIVITY, UNVALUED_SECURITIES_TRANSFER,
PORTFOLIO_VALUATION_INCOMPLETE, UNCONFIRMED_TRANSFER)
all: ACCOUNT_VALUATION_DATES_DIFFER
XIRR: NO_SOLUTION / AMBIGUOUS_RETURN alt Не осталось счетов для расчёта API-->>UI: 200 {data: null, meta.unavailable: [...]} UI-->>User: «Доходность недоступна» + причина else Есть счета для расчёта API->>API: Внешние потоки по дате, чистые вложения, прибыль, XIRR API->>Idx: Закрытия MCFTRR, IMOEX за [from, to] opt История не покрывает период (см. index-refresh.mmd) Idx->>MOEX: Догрузка недостающих торговых дней end alt MCFTRR покрывает период API->>API: Теневой портфель, XIRR индекса, опережение, series else MCFTRR недоступен API->>API: benchmark/outperformance недоступны (INDEX_HISTORY_UNAVAILABLE), series = [] end API-->>UI: 200 {data: Performance, meta.dependencies} UI-->>User: Показатели, график, «Как считали», предупреждение о неполноте end end alt Технический сбой backend API-->>UI: Problem Details 5xx UI-->>User: Ошибка только во вкладке «Результат», с повтором end