AdminCurator

Аналитика

Детальная аналитика по отдельному тесту: количество попыток, доля завершения, средний/максимальный/минимальный балл, доля сдавших, разбивка по вопросам и гистограмма распределения баллов. Требует право `view_analytics`.

GET/api/v1/t/analytics/curators

Аналитика работы кураторов

AdminCurator JWT

Возвращает долю закреплённых учеников, которые были активны, вовремя отправляли задания, завершали тесты и пробные ЕНТ. Куратор всегда получает только собственную строку, даже если умеет управлять всеми группами; администратор видит сравнение всех кураторов или выбирает одного через curator_id. Доступно всем кураторам без отдельного флага view_analytics.

from и to включительны. Проценты считаются от текущего числа закреплённых активных учеников. Область куратора объединяет личные назначения и его группы без дублей. Своевременность задания учитывает эффективную дату закрытия курса/модуля/урока, включая групповые расписания. При фильтре по учебному контенту exam_applicable=false, поскольку пробный ЕНТ не связан с курсом.

Query-параметры

ПараметрТипОписание
fromопц.RFC3339Начало периода. По умолчанию — начало текущего месяца.
toопц.RFC3339Конец периода. По умолчанию — текущий момент.
curator_idопц.uuidОдин куратор; учитывается только для администратора.
group_idопц.uuidОставить закреплённых учеников выбранной группы.
course_idопц.uuidКурс для заданий и тестов.
module_idопц.uuidМодуль для заданий и тестов.
lesson_idопц.uuidУрок для заданий и тестов.

Пример запроса

cURL
curl "https://api.edumentor.kz/api/v1/t/analytics/curators?from=2026-08-01T00%3A00%3A00Z&to=2026-08-31T23%3A59%3A59Z" \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": {
    "from": "2026-08-01T00:00:00Z",
    "to": "2026-08-31T23:59:59Z",
    "exam_applicable": true,
    "summary": {
      "curators": 4,
      "students": 82,
      "active": { "students": 71, "rate_pct": 86.59 },
      "assignments_on_time": { "students": 64, "rate_pct": 78.05 },
      "quizzes_completed": { "students": 68, "rate_pct": 82.93 },
      "exams_completed": { "students": 51, "rate_pct": 62.2 }
    },
    "curators": []
  }
}

Ошибки

КодerrorКогда
400invalid_fromНачало периода не соответствует RFC3339.
400invalid_toКонец периода не соответствует RFC3339.
400invalid_date_rangeНачало периода позже конца.
403forbiddenСтраница недоступна ученику.
GET/api/v1/t/quizzes/:id/analytics

Аналитика по тесту

AdminCurator JWT право: view_analytics

Возвращает агрегаты по одному тесту. Доступ закрыт правом view_analytics: админ и суперадмин проходят неявно, куратору нужен флаг can_view_analytics, студент получает 403. По умолчанию в подсчёт попадают только попытки студентов; флаг include_admin_attempts=true добавляет попытки админов/кураторов (например, для отладки). Кураторы без права manage_groups видят агрегаты только по своим студентам.

Поля avg_score_pct, max_score_pct, min_score_pct и pass_rate могут быть null: первые три — когда нет отправленных попыток, pass_rate — когда у теста не задан проходной балл. Гистограмма score_distribution содержит 10 корзин (0 — диапазон [0%,10%), 9 — диапазон [90%,100%]).

Параметры пути

ПараметрТипОписание
idобяз.uuidИдентификатор теста.

Query-параметры

ПараметрТипОписание
include_admin_attemptsопц.booleanВключить ли попытки админов/кураторов в агрегаты. По умолчанию false (только студенты).Пример: false

Пример запроса

cURL
curl "https://api.edumentor.kz/api/v1/t/quizzes/8f3b1c2a-1d2e-4a5b-9c6d-7e8f9a0b1c2d/analytics?include_admin_attempts=false" \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-Subdomain: acme"

Пример ответа

200 OK · application/json
{
  "success": true,
  "data": {
    "quiz_id": "8f3b1c2a-1d2e-4a5b-9c6d-7e8f9a0b1c2d",
    "attempt_count": 42,
    "submitted_count": 38,
    "completion_rate": 90.48,
    "avg_score_pct": 73.5,
    "max_score_pct": 100.0,
    "min_score_pct": 20.0,
    "pass_rate": 81.58,
    "per_question": [
      {
        "question_id": "1a2b3c4d-...",
        "answered": 38,
        "correct": 31,
        "success_rate": 0.8158
      }
    ],
    "score_distribution": [
      { "bucket": 0, "count": 1 },
      { "bucket": 9, "count": 12 }
    ]
  }
}

Ошибки

КодerrorКогда
400invalid_id_formatИдентификатор теста не является валидным UUID.
400invalid_include_admin_attemptsЗначение include_admin_attempts не является булевым.
401unauthorizedТокен отсутствует, истёк или недействителен.
403forbiddenУ пользователя нет права view_analytics (например, студент или куратор без флага).
404quiz_not_foundТест не найден в текущей школе.