sequenceDiagram actor U as Пользователь participant F as WealthLedger frontend participant B as WealthLedger backend participant T as T-Invest API U->>F: Выбирает условия и нажимает «Найти» F->>B: POST /api/v1/stocks/screener/search (условия) B->>B: Проверка сессии и подключения alt Нет доступа или неверные условия B-->>F: 400 / 401 / ошибка подключения F-->>U: Объяснение ошибки без нового результата else Доступ подтверждён B->>T: Shares (INSTRUMENT_STATUS_ALL) alt Каталог получен полностью T-->>B: Share[] B->>B: Проверить доступность, фильтры, выпуски, сортировку и зафиксировать asOf B-->>F: 200, items (до 30), searchId, asOf, hasNext F-->>U: Первая страница или подтверждённый пустой результат opt Есть следующая страница U->>F: Далее F->>B: GET /api/v1/stocks/screener/search/{searchId}?page=2 alt Результат доступен тому же пользователю и подключению B-->>F: 200, следующие items, тот же asOf F-->>U: Следующая страница без пропусков и повторов else Результат недоступен или сменилось подключение B-->>F: Ошибка без пересчёта по новому каталогу F-->>U: Результат недоступен, предложить новый поиск end end else Каталог недоступен или неполон T-->>B: Ошибка / неполные сведения B-->>F: Ошибка поиска, не пустая выборка F-->>U: Поиск недоступен, можно повторить end end opt Условия изменены или нажат повторный поиск U->>F: Нажимает «Найти» F->>B: Новый POST с текущими условиями Note over B,T: Новый список и новая первая страница без подмены прежнего searchId end