b30ce86fa9
Revert of A9 address change. The .108 value was inferred from the container VMID (108), not from its actual network config: net0 is ip=dhcp and the container currently holds 192.168.0.99. Requests to .108 fail with "No route to host", making the UI look down while all four compose services are healthy. A9 section in vector_tasks.md is kept as history and flagged stale so the .99 -> .108 replacement is not repeated. Note: the address is DHCP-assigned and may change again; a static IP would be needed to make these docs durable. Hardcoded .99 URLs remain in MobileForm.jsx:49 and HeatmapView.jsx:73 (tracked in vector_tasks.md, untouched here). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
7.5 KiB
7.5 KiB
Итоговая сводка: Функционал психотипа
Дата: 2026-05-01
Проект: SAR-MCHS (Search and Rescue Management System)
Сервер: LXC 108 (192.168.0.99)
✅ Выполненные задачи
Backend (Полностью готов)
-
Сервис психотипа -
backend/services/psychotype_service.py- 3 функции: detect_psychotype, get_psychotype_modifiers, get_search_recommendations
- 5 психотипов с модификаторами зон
- Основано на методике Рындиной О.Г., Ивановой О.Ю. (2015)
-
API Endpoint -
POST /api/v1/analyze/psychotype- ✅ Работает и протестирован
- Возвращает психотип, модификаторы, рекомендации
- Валидация входных данных
-
Тесты - Все психотипы протестированы:
- Dominant: зона 1500-2500м ×1.4, модель chaotic_far
- Anxious: зона 0-500м ×1.4, модель stay
- Harmonic: равномерное распределение, модель linear_landmark
- Introvert Passive: зона 0-500м ×1.3, модель stay_hidden
- Introvert Active: зона 500-2500м ×1.2, модель linear_landmark
Frontend (Полностью готов)
-
Компонент формы -
frontend/src/components/MobileForm.jsx- Блок психотипа с 4 вопросами
- Touch-friendly кнопки (min 52px)
- Адаптивный дизайн
- Все поля необязательные
-
Стили -
frontend/src/components/MobileForm.css- Мобильная оптимизация
- Крупные кнопки для сенсорных экранов
- Визуальная обратная связь
-
Интеграция - App.js обновлен для показа формы
Документация
- PSYCHOTYPE_API.md - полная документация API
- MOBILE_FORM_README.md - руководство по использованию формы
- SERVICES_README.md - обновлена информация о сервисах
🌐 Доступ к сервисам
- Frontend: http://192.168.0.99:3000
- Backend API: http://192.168.0.99:8000
- API Docs: http://192.168.0.99:8000/docs
- Adminer (БД): http://192.168.0.99:8080
📋 Структура данных
Вопросы в форме
-
Как ведёт себя в незнакомой обстановке?
- Активно исследует →
unfamiliar_env: 'explore' - Ждёт →
unfamiliar_env: 'wait' - Замирает →
unfamiliar_env: 'freeze' - Паникует →
unfamiliar_env: 'panic'
- Активно исследует →
-
Реакция на неудачи?
- Злится, кричит →
stress_reaction: 'active' - Плачет, замыкается →
stress_reaction: 'cry' - Спокойно ищет выход →
stress_reaction: 'calm'
- Злится, кричит →
-
Лидер или ведомый?
- Лидер →
group_role: 'leader' - Иногда →
group_role: 'sometimes' - Всегда ведомый →
group_role: 'follower'
- Лидер →
-
Любит рисковать?
- Очень →
risk_taking: 'high' - Иногда →
risk_taking: 'medium' - Нет, осторожный →
risk_taking: 'low'
- Очень →
Пример запроса
curl -X POST http://192.168.0.99:8000/api/v1/analyze/psychotype \
-H "Content-Type: application/json" \
-d '{
"stress_reaction": "cry",
"group_role": "follower",
"risk_taking": "low",
"unfamiliar_env": "freeze"
}'
Пример ответа
{
"psychotype": "anxious",
"modifiers": {
"zone_0_500": 1.4,
"zone_500_1500": 1.1,
"zone_1500_2500": 0.5,
"zone_2500plus": 0.3,
"movement_model": "stay",
"description": "Тревожный тип: минимальное движение, остается близко к точке потери"
},
"recommendations": {
"priority_zones": "Ближняя зона (0-500м) - критически важна",
"search_pattern": "Тщательный осмотр ближайшей территории",
"key_locations": "Укрытия, углубления, густая растительность рядом с точкой потери",
"communication": "Спокойные голосовые сигналы, избегать резких звуков"
}
}
🎯 Психотипы и их характеристики
| Психотип | Триггер | Зона 0-500м | Зона 1500-2500м | Модель движения |
|---|---|---|---|---|
| Dominant | active + leader + high | 0.7 (низкий) | 1.4 (высокий) | chaotic_far |
| Harmonic | calm + leader + low | 0.8 | 1.1 | linear_landmark |
| Anxious | cry + follower + low | 1.4 (высокий) | 0.5 (низкий) | stay |
| Introvert Passive | freeze + follower + low | 1.3 (высокий) | 0.6 (низкий) | stay_hidden |
| Introvert Active | active + leader + medium | 0.8 | 1.2 | linear_landmark |
🔄 Интеграция с другими модулями
Модификаторы психотипа можно использовать в:
- scoring_service.py - взвешивание зон поиска
- geo_service.py - построение приоритетных зон
- distance_service.py - корректировка максимальной дистанции
Пример интеграции
from services.psychotype_service import detect_psychotype, get_psychotype_modifiers
# Определяем психотип
psychotype = detect_psychotype(answers)
modifiers = get_psychotype_modifiers(psychotype)
# Применяем к базовым вероятностям
base_prob = 0.5
adjusted_prob = base_prob * modifiers['zone_0_500']
📝 Следующие шаги
- Интегрировать психотип в основной flow создания карточки
- Добавить визуализацию модификаторов на карте
- Сохранять психотип в БД вместе с карточкой
- Использовать модификаторы в расчете приоритетных зон
- Добавить статистику по эффективности психотипов
🧪 Тестирование
Запустить тесты:
# Backend тесты
pct exec 108 -- bash /root/test_psychotype_flow.sh
# Проверка frontend
curl http://192.168.0.99:3000
# Проверка API
curl http://192.168.0.99:8000/api/v1/analyze/psychotype \
-H "Content-Type: application/json" \
-d '{"stress_reaction":"active","group_role":"leader","risk_taking":"high","unfamiliar_env":"explore"}'
📚 Документация
PSYCHOTYPE_API.md- API документацияMOBILE_FORM_README.md- документация формыSERVICES_README.md- обзор всех сервисовbackend/services/psychotype_service.py- docstrings в коде
Статус: ✅ Полностью готово к использованию
Протестировано: Backend API, Frontend компонент, Интеграция
Источник методики: Рындина О.Г., Иванова О.Ю., Чебоксары, 2015