# Analyze API - Полный пайплайн анализа ## Endpoints ### POST /api/v1/analyze/analyze Запустить полный анализ случая. **Пайплайн:** 1. Distance service - расчет максимальной дистанции 2. Geo service - построение зон поиска (8 направлений) 3. Scoring service - оценка и ранжирование зон 4. Psychotype service - определение психотипа (если есть данные) 5. Rules analysis - детерминированные правила (urgency, зоны, действия; без LLM) 6. Merge results - объединение результатов **Request:** ```json { "case_id": "e9b1fd0c-b05c-4084-9813-ee91e6432246" } ``` **Response:** ```json { "case_id": "uuid", "analyzed_at": "2026-05-05T07:34:11.691521", "max_distance_km": 5.1, "psychotype": "anxious", "psychotype_modifiers": { "zone_0_500": 1.4, "zone_500_1500": 1.1, "zone_1500_2500": 0.5, "zone_2500plus": 0.3, "movement_model": "stay" }, "psychotype_recommendations": { "priority_zones": "Ближняя зона (0-500м) - критически важна", "search_pattern": "Тщательный осмотр ближайшей территории", "key_locations": "Укрытия, углубления, густая растительность", "communication": "Спокойные голосовые сигналы" }, "zones": [ { "priority": 1, "name": "Сектор N", "direction": "N", "distance_km": 4.08, "score": 30.0, "reasoning": "Базовая оценка (психотип: ×0.3)" } ], "urgency": "средняя", "key_locations": ["водоёмы", "дороги", "тропы"], "immediate_actions": ["Организовать поисковые группы"], "behavioral_prediction": "Умеренное движение", "summary": "Случай классифицирован как средняя срочность", "execution_time_ms": 21197.7, "services_used": ["distance", "geo", "psychotype", "rules"] } ``` ### GET /api/v1/analyze/analyze/{case_id} Получить сохранённый результат анализа. **Response:** ```json { "case_id": "uuid", "analysis_log": { }, "created_at": "2026-05-05T07:31:56.900783" } ``` ## Статус сервисов | Сервис | Статус | Примечание | |--------|--------|------------| | Distance | ✅ Работает | Расчет дистанции по формуле | | Geo | ✅ Работает | Построение зон (21 сек) | | Scoring | ⚠️ Fallback | NoneType division error | | Psychotype | ✅ Работает | Определение + модификаторы | | Rules | ✅ | локальный расчёт | ## Fallback механизмы Если сервис недоступен, система использует fallback: - **Geo/Scoring fail** → создаются базовые 8 секторов - Правила всегда доступны: LLM в пайплайне нет (ПД не покидают контур) - **Psychotype fail** → анализ без модификаторов психотипа ## Тестирование Протестировано 2026-05-05: - ✅ Создание случая с психотипом - ✅ Запуск полного анализа - ✅ Получение сохраненного результата - ✅ Применение модификаторов психотипа к зонам ## Известные проблемы 1. **Scoring service**: Ошибка деления на None - нужно добавить проверки на None в scoring_service.py 2. **LLM не используется**: API-ключи не нужны, всё локально 3. **Geo service**: Возвращает пустые зоны (возможно, проблема с Overpass API или кешем) ## Дата создания 2026-05-05