Анкеты¶
Описание сущностей для конструктора анкет обратной связи.
Survey (Анкета)¶
Анкета для сбора обратной связи. Настраивается в CMS. На разных терминалах могут использоваться разные анкеты — устройство подхватывает анкету по external_id.
Версионирование реализуется через копирование: администратор создаёт новую анкету на базе существующей (кнопка «Создать новую версию»), старую деактивирует. Таким образом, каждая версия — это отдельная анкета со своим ID, но с тем же external_id.
Жизненный цикл¶
- Создание — анкета в статусе черновика (
is_active = false), можно редактировать вопросы, текст, порядок - Публикация — анкета становится активной (
is_active = true), доступна для прохождения на устройствах - Изменение — если нужно изменить опубликованную анкету:
- Создать новую версию (копирование текущей активной)
- Новая версия создаётся как черновик (
is_active = false) - Редактировать новую версию
- Опубликовать новую версию (
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 — создание вопросов для анкет
- Обратная связь — показ вопросов в точках сбора