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

Анкеты

Описание сущностей для конструктора анкет обратной связи.


Survey (Анкета)

Анкета для сбора обратной связи. Настраивается в CMS. На разных терминалах могут использоваться разные анкеты — устройство подхватывает анкету по external_id.

Версионирование реализуется через копирование: администратор создаёт новую анкету на базе существующей (кнопка «Создать новую версию»), старую деактивирует. Таким образом, каждая версия — это отдельная анкета со своим ID, но с тем же external_id.

Жизненный цикл

  1. Создание — анкета в статусе черновика (is_active = false), можно редактировать вопросы, текст, порядок
  2. Публикация — анкета становится активной (is_active = true), доступна для прохождения на устройствах
  3. Изменение — если нужно изменить опубликованную анкету:
  4. Создать новую версию (копирование текущей активной)
  5. Новая версия создаётся как черновик (is_active = false)
  6. Редактировать новую версию
  7. Опубликовать новую версию (is_active = true) → старая автоматически деактивируется

Что происходит при смене версии

Если пользователь начал проходить анкету v1, но в этот момент администратор опубликовал v2: - Пользователь завершает прохождение по v1 - Ответ (SurveyResponse) привязывается к survey_id версии v1 - Новая версия v2 не затрагивает текущие прохождения

Техническая реализация: устройство при загрузке анкеты получает конкретный survey_id (не только external_id), все ответы привязываются к этому survey_id.

Ограничение: не может быть двух активных анкет с одинаковым external_id.

Атрибуты

Поле Тип Описание
id UUID Уникальный идентификатор анкеты
external_id string Символьный идентификатор (например, videoresume_feedback, event_survey)
name string Название (например, «Оценка видеорезюме», «Оценка мероприятия»)
description text, nullable Описание анкеты
is_active boolean Активна ли анкета (деактивированная не показывается в точках сбора)
copied_from_id UUID, nullable ID анкеты, от которой эта была скопирована (для отслеживания версий)
created_at timestamp Дата создания
updated_at timestamp Дата обновления

Связи

  • Survey → SurveyQuestion: анкета имеет множество вопросов
  • Survey → SurveyResponse: анкета имеет множество ответов пользователей

Где используется

  • CMS — создание, копирование, деактивация анкет
  • Обратная связь — устройство подхватывает анкету по external_id
  • Личный кабинет — прохождение анкет пользователями

SurveyQuestion (Вопрос анкеты)

Вопрос в анкете обратной связи.

Атрибуты

Поле Тип Описание
id UUID Уникальный идентификатор вопроса
survey_id UUID ID анкеты
parent_id UUID, nullable ID родительского вопроса, к которому привязан условный вопрос
type enum Тип вопроса: rating_scale, single_choice, multiple_choice, text, profession_choice
text text Текст вопроса
media_id UUID, nullable ID файла (изображение)
required boolean Обязательный ли вопрос
order integer Порядок отображения
condition json, nullable Условие показа (например, {"operator": "lte", "value": 2})
scale_min integer, nullable Минимальное значение шкалы (по умолчанию 1)
scale_max integer, nullable Максимальное значение шкалы (по умолчанию 5)

Связи

  • SurveyQuestion → Survey: вопрос принадлежит одной анкете (survey_id)
  • SurveyQuestion → File: вопрос может иметь медиа-файл (media_id)
  • SurveyQuestion → SurveyAnswer: вопрос имеет множество ответов пользователей

Где используется

  • CMS — создание вопросов для анкет
  • Обратная связь — показ вопросов в точках сбора