Files
vector/PSYCHOTYPE_API.md
T
2026-06-06 18:31:55 +00:00

6.1 KiB

API для определения психотипа

Endpoint: POST /api/v1/analyze/psychotype

Определяет психотип пропавшего человека на основе ответов на психологические вопросы и возвращает модификаторы зон поиска с рекомендациями.

Основано на методике: Рындина О.Г., Иванова О.Ю. (Чебоксары, 2015)

Request Body

{
  "stress_reaction": "active|cry|freeze|calm",
  "group_role": "leader|follower",
  "risk_taking": "high|medium|low",
  "unfamiliar_env": "explore|wait|freeze"
}

Response

{
  "psychotype": "dominant|harmonic|anxious|introvert_passive|introvert_active",
  "modifiers": {
    "zone_0_500": 0.7,
    "zone_500_1500": 1.2,
    "zone_1500_2500": 1.4,
    "zone_2500plus": 1.1,
    "movement_model": "chaotic_far|linear_landmark|stay|stay_hidden",
    "description": "Описание психотипа"
  },
  "recommendations": {
    "priority_zones": "Приоритетные зоны поиска",
    "search_pattern": "Паттерн поиска",
    "key_locations": "Ключевые локации",
    "communication": "Способы коммуникации"
  }
}

Психотипы

1. Dominant (Доминантный)

  • Триггер: active + leader + high
  • Модификаторы: Низкая вероятность в ближней зоне (0.7), высокая в средних/дальних (1.2-1.4)
  • Модель движения: chaotic_far - хаотичное движение на большие расстояния
  • Приоритет: Средние и дальние зоны (500-2500м)

2. Harmonic (Гармоничный)

  • Триггер: calm + leader + low
  • Модификаторы: Равномерное распределение с акцентом на средние зоны
  • Модель движения: linear_landmark - движение по ориентирам
  • Приоритет: Все зоны равномерно, акцент на 500-1500м

3. Anxious (Тревожный)

  • Триггер: cry + follower + low
  • Модификаторы: Очень высокая вероятность в ближней зоне (1.4), низкая в дальних (0.3)
  • Модель движения: stay - минимальное движение
  • Приоритет: Ближняя зона (0-500м) критически важна

4. Introvert Passive (Интроверт пассивный)

  • Триггер: freeze + follower + low
  • Модификаторы: Высокая вероятность в ближней зоне (1.3), очень низкая в дальних (0.2)
  • Модель движения: stay_hidden - прячется, минимальное движение
  • Приоритет: Ближняя зона, укрытия

5. Introvert Active (Интроверт активный)

  • Триггер: active + leader + medium
  • Модификаторы: Средние значения с акцентом на зоны 500-2500м
  • Модель движения: linear_landmark - целенаправленное движение
  • Приоритет: Средние зоны вдоль линейных ориентиров

Примеры использования

Пример 1: Доминантный тип

curl -X POST 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"
  }'

Результат:

  • Психотип: dominant
  • Зона 0-500м: коэффициент 0.7 (низкий приоритет)
  • Зона 1500-2500м: коэффициент 1.4 (высокий приоритет)
  • Рекомендация: Широкий охват, проверка нелинейных маршрутов

Пример 2: Тревожный тип

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"
  }'

Результат:

  • Психотип: anxious
  • Зона 0-500м: коэффициент 1.4 (критически важна!)
  • Зона 2500+м: коэффициент 0.3 (очень низкий приоритет)
  • Рекомендация: Тщательный осмотр ближайшей территории, укрытия

Интеграция с другими сервисами

Модификаторы из психотипа можно использовать для корректировки вероятностей в:

  • 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_near = 0.5
adjusted_prob = base_prob_near * modifiers['zone_0_500']

# Для anxious: 0.5 * 1.4 = 0.7 (увеличение приоритета ближней зоны)
# Для dominant: 0.5 * 0.7 = 0.35 (снижение приоритета ближней зоны)

Валидация

API валидирует входные данные:

  • Все поля обязательны
  • Значения должны соответствовать допустимым вариантам
  • При невалидных данных возвращается HTTP 400 с описанием ошибки
{
  "detail": "Invalid stress_reaction: unknown_value"
}