@startuml seq-prediction title Запуск прогноза траектории autonumber actor "Пользователь" as user participant "ControlPanel /\nWorkspacesPanel" as ui participant "workspacesStore" as store participant "predictionsApi" as predapi participant "client.ts" as client participant "Backend\n(Django)" as be participant "parsePrediction\n(domain)" as parse participant "WorkspaceRenderer\n(карта)" as render user -> ui : «Выполнить прогнозирование» ui -> store : run(workspaceId) activate store store -> predapi : run(params, launchDateTime) activate predapi predapi -> predapi : buildLaunchDateTime(date, time)\n→ ISO 8601 (UTC, Z) predapi -> predapi : getLatestDataset()\n→ актуальный слот GFS predapi -> client : post('/predictions/', payload) client -> be : POST /api/predictions/\n{FlightParameters, launch_datetime, dataset} be --> client : { result: PredictionStage[] } client --> predapi : PredictionResponse predapi --> store : RawPrediction deactivate predapi store -> parse : parsePrediction(stages) parse --> store : Prediction\n{flight_path[lat,lng,alt], timestamps[], launch/burst/landing} store -> store : setResult(workspaceId, prediction) deactivate store store -> render : реактивное обновление render -> render : линия трека + маркеры\n(старт, разрыв, приземление) alt ошибка сервера/сети store -> store : lastRunError = message store --> ui : toast «Ошибка прогнозирования» end @enduml