39 lines
2.6 KiB
Plaintext
39 lines
2.6 KiB
Plaintext
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: По каждому счёту: причины недоступности<br/>(HISTORY_START_UNKNOWN, OPERATIONS_HISTORY_INCOMPLETE,<br/>NON_RUB_ACTIVITY, UNVALUED_SECURITIES_TRANSFER,<br/>PORTFOLIO_VALUATION_INCOMPLETE, UNCONFIRMED_TRANSFER)<br/>all: ACCOUNT_VALUATION_DATES_DIFFER<br/>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
|