Перейти к содержанию

API: Cases

Базовый URL: http://localhost:8001. Префикс: /api/cases.

Auth: Bearer JWT.
Гейт: MEDICAL_ASSISTANT_ENABLED + LEARNING_ROLES.

При первом списке вызывается ensure_seed_cases — создаются seed-кейсы EN+RU (идемпотентно по title).


GET /api/cases

Список кейсов.

Query

Параметр Описание
language en | ru — фильтр seed по языку
specialty Фильтр специальности
difficulty Фильтр сложности

Response 200

{
  "items": [
    {
      "id": "…",
      "title": "…",
      "description": "…",
      "specialty": "cardiology",
      "difficulty": "intermediate",
      "steps": [
        {"step": 1, "question": "…", "options": ["A", "B"]}
      ],
      "created_at": "…"
    }
  ]
}

Правильные ответы и пояснения в списке/GET скрыты.


GET /api/cases/{case_id}

Один кейс по UUID (public_id). 404 если нет.

Тело как элемент items выше (без correct_answer / explanation).


POST /api/cases/generate

Сгенерировать кейс (LLM / generator).

Request

{
  "specialty": "cardiology",
  "difficulty": "intermediate",
  "language": "en",
  "topic": "ACS",
  "persist": true
}
Поле По умолчанию Описание
specialty обязательно
difficulty intermediate уровень
language en язык
topic null опционально
persist true сохранить в БД

Response 200 — сериализованный кейс (если persist) или сырой payload генератора.


POST /api/cases/{case_id}/submit

Отправить ответ на шаг.

Request

{
  "step_index": 0,
  "answer": "Obtain ECG",
  "time_spent": 45
}
Поле Описание
step_index ≥ 0
answer 1–1000 символов
time_spent секунды, опционально

Response 200

{
  "correct": true,
  "correct_answer": "Obtain ECG",
  "explanation": "…",
  "score": 1.0,
  "step": 1
}

Пишет прогресс module=cases со score 0 или 100.


Пример curl

curl -s "http://localhost:8001/api/cases?language=ru" \
  -H "Authorization: Bearer $JWT"