Skip to main content

Тренинги

Функциональные требования: Модуль «Тренинги»

Версия: 1.0 Статус: Draft Аудитория: Команда разработки (backend, frontend, QA, PM) Референс: GetCourse (getcourse.ru)


1. Назначение документа

Документ описывает функциональные требования к модулю «Тренинги» — ядру обучающей платформы. Модуль отвечает за:

  • создание и управление учебным контентом (тренинги, подтренинги, уроки);
  • выдачу и разграничение доступов к контенту;
  • управление порядком прохождения (последовательное открытие и расписание).

Документ не описывает технический стек, архитектуру и схему БД — только бизнес-логику и поведение системы.


2. Глоссарий

ТерминОпределение
ТренингКорневой образовательный контейнер (курс). Содержит уроки и/или подтренинги.
ПодтренингВложенный тренинг внутри родительского тренинга. Используется для разбиения курса на модули/темы. По функционалу идентичен тренингу.
УрокАтомарная единица обучения с контентом (текст, видео, задания и т.д.).
УченикПользователь, получивший доступ к тренингу и проходящий обучение.
ПреподавательПользователь, который ведёт тренинг и проверяет задания.
АдминистраторПользователь с полными правами на управление контентом и доступами.
ГруппаСегмент пользователей, используемый для группового управления доступами.
РасписаниеПравила открытия уроков во времени (по датам или с задержками).
Стоп-урокУрок, блокирующий переход к следующим урокам до его выполнения.

3. Роли пользователей

В контексте модуля «Тренинги» предусмотрены следующие роли:

Администратор — имеет полный доступ ко всем тренингам, их настройкам и доступам пользователей. Может создавать, редактировать, удалять и архивировать любые тренинги.

Преподаватель — имеет доступ к назначенным ему тренингам. Может редактировать контент уроков (при наличии прав), проверять задания учеников и управлять расписанием.

Ученик — имеет доступ к тренингам, в которых состоит. Может просматривать уроки (с учётом правил открытия) и отправлять ответы на задания.

Один пользователь может одновременно иметь разные роли в разных тренингах.


4. Иерархия контента

4.1. Модель

Принята двухуровневая модель вложенности:

Тренинг
├── Урок 1
├── Урок 2
├── Подтренинг A
│   ├── Урок A.1
│   ├── Урок A.2
│   └── Урок A.3
├── Подтренинг B
│   ├── Урок B.1
│   └── Урок B.2
└── Урок 3

4.2. Правила

  • Тренинг может содержать уроки и/или подтренинги в любом сочетании.
  • Подтренинг может содержать только уроки (дальнейшая вложенность не поддерживается).
  • Порядок элементов внутри контейнера задаётся вручную и сохраняется.
  • Урок принадлежит ровно одному родителю (тренинг или подтренинг).
  • Подтренинг принадлежит ровно одному родительскому тренингу.

4.3. Почему двухуровневая модель

Ограничение вложенности упрощает логику доступов, расписания и UI навигации. Для разделения контента на темы достаточно одного уровня подтренингов. Это осознанное сокращение относительно GetCourse, который поддерживает до 10 уровней вложенности.


5. Сущность «Тренинг»

5.1. Основные атрибуты

  • Название — отображается в списках и заголовках.
  • Описание — краткое описание курса, видно ученикам.
  • Обложка — изображение для карточки тренинга.
  • Статус — черновик / опубликован / архивный.
  • Преподаватель — основной ответственный за тренинг.
  • Дата создания, дата публикации.

5.2. Статусы

  • Черновик — тренинг создан, но недоступен ученикам. Виден только администраторам и преподавателям.
  • Опубликован — тренинг активен и может выдаваться ученикам согласно правилам доступа.
  • Архивный — тренинг скрыт из активных списков, но доступы сохраняются для исторических данных (опционально — с возможностью полного отзыва доступов).

5.3. Действия над тренингом

  • Создание / редактирование / удаление.
  • Дублирование (копирование структуры с уроками или без).
  • Архивация / восстановление из архива.
  • Управление составом уроков и подтренингов (добавление, удаление, изменение порядка).
  • Настройка доступов (см. раздел 8).
  • Настройка расписания (см. раздел 9).

5.4. Условия завершения тренинга

Администратор задаёт правило, при котором тренинг считается завершённым учеником. Возможные варианты:

  • все уроки тренинга пройдены;
  • все стоп-уроки пройдены;
  • конкретный урок пройден (например, финальный тест).

Факт завершения тренинга — это доменное событие, которое может использоваться другими модулями (выдача сертификата, открытие следующего тренинга, начисление баллов и т.д.).


6. Сущность «Подтренинг»

Подтренинг — это тренинг, вложенный в родительский тренинг. С точки зрения функциональности подтренинг идентичен тренингу, за исключением следующего:

  • не может содержать других подтренингов;
  • отображается ученику только в контексте родительского тренинга;
  • имеет собственные настройки доступа и расписания, которые работают независимо от родителя (см. раздел 8.4).

Все действия, доступные для тренинга (редактирование, дублирование, архивация), применимы и к подтренингу.


7. Сущность «Урок»

7.1. Основные атрибуты

  • Название.
  • Контент — основное наполнение урока (текст, видео, изображения, файлы).
  • Порядковый номер внутри родителя.
  • Родитель — тренинг или подтренинг.
  • Флаг «Скрыт» — урок не отображается ученикам (используется для черновиков).
  • Флаг «Стоп-урок» — см. раздел 9.3.
  • Дата открытия по расписанию — см. раздел 9.

7.2. Типы уроков

Для MVP достаточно одного универсального типа урока с составным контентом (текст + медиа + файлы). В дальнейшем могут быть добавлены специализированные типы (вебинар, тест и т.д.), но это за рамками данного документа.

7.3. Задания в уроке

Урок может содержать задание, требующее ответа от ученика. Задание имеет следующие состояния ответа:

  • Не отправлен — ученик ещё не ответил.
  • Отправлен — ответ ждёт проверки.
  • Принят — ответ проверен и принят преподавателем.
  • Отклонён — ответ отклонён, требуется доработка.

Статус ответа влияет на логику стоп-уроков (см. раздел 9.3).

7.4. Статусы прохождения урока учеником

Для каждой пары «ученик ↔ урок» система хранит статус:

  • Недоступен — урок закрыт правилами доступа или расписания.
  • Доступен — урок можно открыть, но ученик ещё не заходил.
  • Начат — ученик открыл урок.
  • Выполнен — урок пройден (критерий выполнения зависит от типа урока: вход, отправка ответа, принятие ответа).

8. Доступы

8.1. Модель доступа: по группам

Доступ к тренингам и подтренингам выдаётся через механизм групп пользователей.

  • Группа — это именованный сегмент пользователей.
  • Пользователь может состоять одновременно в нескольких группах.
  • Тренинг/подтренинг привязан к одной или нескольким группам.
  • Пользователь имеет доступ к тренингу, если он состоит хотя бы в одной группе, привязанной к тренингу.

8.2. Управление членством в группе

Членство в группе может изменяться следующими способами:

  • Ручное добавление/удаление администратором через интерфейс управления группой.
  • Массовое добавление (например, импорт списка пользователей).
  • Программное добавление через внутренние события системы (покупка, регистрация на событие и т.д.) — реализуется за пределами модуля «Тренинги», но модуль должен корректно реагировать на изменение состава группы.

8.3. Последствия изменения членства

  • При добавлении пользователя в группу — он немедленно получает доступ ко всем тренингам, привязанным к этой группе.
  • При удалении пользователя из группы — доступ к тренингу сохраняется, если пользователь остаётся в хотя бы одной другой группе, привязанной к тренингу. Иначе — доступ отзывается.
  • Прогресс ученика (статусы прохождения уроков, ответы на задания) сохраняется при отзыве доступа. Если доступ будет выдан повторно, ученик продолжит с того места, где остановился.

8.4. Доступы к подтренингам

Подтренинг может иметь один из двух режимов доступа:

  1. Наследовать от родителя — подтренинг доступен всем, у кого есть доступ к родительскому тренингу. Это значение по умолчанию.
  2. Собственные группы — подтренинг доступен только пользователям из указанных групп (независимо от доступа к родителю).

Второй режим решает типовой кейс: на тренинг куплены два тарифа (обычный и премиум), премиум-тариф открывает дополнительный подтренинг с бонусами. Ученики обоих тарифов состоят в группе «Основная», но только премиум-ученики — в группе «Премиум», привязанной к бонусному подтренингу.

8.5. Видимость тренинга без доступа

Для тренингов, к которым у пользователя нет доступа, настраивается поведение отображения:

  • Не отображать — тренинг скрыт полностью.
  • Отображать как заблокированный — тренинг виден в общем списке с пометкой «нет доступа» (например, для мотивации к покупке доступа).

Настройка задаётся на уровне тренинга.


9. Управление прохождением уроков

Существует два независимых механизма ограничения доступа к урокам: расписание и стоп-уроки. Механизмы могут работать одновременно — в этом случае урок доступен ученику только при выполнении обоих условий.

9.1. Расписание: общие положения

Расписание определяет, когда урок становится доступным ученику с точки зрения времени. Расписание настраивается на уровне тренинга или подтренинга. Если тренинг содержит подтренинги, расписание для уроков внутри каждого подтренинга настраивается отдельно.

Система поддерживает два типа расписания:

  1. Общее — одинаковые даты открытия для всех учеников.
  2. Индивидуальное — даты рассчитываются для каждого ученика от момента получения доступа.

Тип расписания выбирается на уровне тренинга/подтренинга и распространяется на все его уроки.

9.2. Типы расписания

9.2.1. Общее расписание

Для каждого урока задаётся конкретная дата и время открытия (абсолютная метка времени). Все ученики получают доступ к уроку одновременно в указанный момент.

Кейс: живой поток курса, стартующий 1 сентября для всех участников.

9.2.2. Индивидуальное расписание

Для каждого урока задаётся задержка в днях (или часах) относительно точки отсчёта. Точкой отсчёта служит момент получения учеником доступа к тренингу.

  • Урок 1 — задержка 0 дней (доступен сразу).
  • Урок 2 — задержка 2 дня.
  • Урок 3 — задержка 5 дней.

Если ученик получил доступ 10 марта, то урок 3 откроется для него 15 марта.

Кейс: самостоятельное прохождение курса в индивидуальном темпе.

9.3. Стоп-уроки

Стоп-урок — это урок, блокирующий переход к последующим урокам до его выполнения.

9.3.1. Правила блокировки

Для стоп-урока задаётся критерий «выполнения»:

  • Вход в урок — достаточно открыть урок.
  • Отправка ответа — ученик должен отправить ответ на задание.
  • Принятие ответа — ответ должен быть проверен и принят преподавателем.

Пока критерий не выполнен, все уроки, расположенные после стоп-урока в порядке следования, недоступны ученику.

9.3.2. Область действия

  • Стоп-уроки работают в пределах одного контейнера (тренинга или подтренинга).
  • Стоп-урок в подтренинге не блокирует уроки родительского тренинга и наоборот.
  • Для последовательного открытия подтренингов используется механизм завершения тренинга (см. раздел 9.4).

9.4. Последовательное открытие подтренингов

Для организации поэтапного открытия модулей курса используется связка «условие завершения» ↔ «условие доступа»:

  1. У подтренинга A задаётся условие завершения (например, «все стоп-уроки выполнены»).
  2. У подтренинга B задаётся условие доступа: «доступен тем, кто завершил подтренинг A».
  3. При завершении подтренинга A для ученика — подтренинг B автоматически открывается.

Это позволяет строить цепочки модулей без использования расписания.

9.5. Совместное действие расписания и стоп-уроков

Когда одновременно настроены и расписание, и стоп-уроки — урок доступен ученику только если выполнены оба условия:

  • дата открытия по расписанию наступила И
  • все предшествующие стоп-уроки выполнены.

Более строгое ограничение имеет приоритет. Например, если по расписанию урок должен открыться, но предыдущий стоп-урок не пройден — урок остаётся закрытым.

9.6. Видимость закрытых уроков

Для каждого урока настраивается поведение отображения, когда он ещё недоступен:

  • Скрыт из списка — ученик не видит урок до момента открытия.
  • Виден, но заблокирован — ученик видит название урока и дату открытия, но не может в него войти.

Настройка задаётся на уровне урока и работает одинаково для ограничений по расписанию и по стоп-урокам.


10. Пользовательские сценарии

10.1. Создание курса (администратор)

  1. Администратор создаёт новый тренинг в статусе «Черновик».
  2. Добавляет уроки и/или подтренинги, задаёт порядок.
  3. Наполняет уроки контентом.
  4. При необходимости настраивает стоп-уроки и расписание.
  5. Создаёт группу доступа и привязывает её к тренингу.
  6. Переводит тренинг в статус «Опубликован».

10.2. Выдача доступа (администратор)

  1. Администратор открывает управление группой доступа.
  2. Добавляет пользователя в группу (вручную или массово).
  3. Пользователь немедленно получает доступ ко всем тренингам группы.

10.3. Прохождение тренинга (ученик)

  1. Ученик видит тренинг в своём списке.
  2. Открывает первый доступный урок.
  3. Изучает контент, отправляет ответ на задание (если есть).
  4. Переходит к следующему уроку — либо сразу, либо после открытия по расписанию, либо после прохождения стоп-урока.
  5. По завершении всех уроков согласно условию завершения тренинг отмечается как пройденный.

10.4. Отзыв доступа (администратор)

  1. Администратор удаляет пользователя из группы.
  2. Если пользователь не состоит в других группах с доступом к тренингу — доступ автоматически отзывается.
  3. Прогресс ученика сохраняется в системе.

11. Требования к логированию

Для аудита и отладки модуль должен логировать следующие события:

  • создание, изменение, удаление, архивация тренинга/подтренинга/урока;
  • изменение состава группы доступа;
  • выдача и отзыв доступа пользователю (с указанием причины: ручная / через группу);
  • открытие урока учеником;
  • отправка ответа, смена статуса ответа.

Детализация формата логов — за рамками данного документа.


12. Вне области этой документации

Следующие аспекты платформы GetCourse намеренно не включены в MVP:

  • продукты, предложения, оплаты и связка доступов с покупками;
  • процессы и автоворонки;
  • геймификация (баллы, рейтинги, достижения);
  • сертификаты;
  • уроки типа «вебинар», «тест», «опрос» (только универсальный урок);
  • вложенность более одного уровня (подтренинги в подтренингах);
  • тест-драйв, промо-уроки;
  • сквозные чаты в уроках;
  • потоки обучения (когорты со стартом по датам).

Эти возможности могут быть добавлены в следующих итерациях.


13. Открытые вопросы

Вопросы, требующие обсуждения с продуктовой командой перед началом разработки:

  1. Какие именно форматы контента поддерживаются в уроке в MVP (только текст + видео? файлы? встраиваемые блоки?).
  2. Нужна ли роль «преподаватель» в MVP или на старте достаточно администратора?
  3. Какие уведомления отправляются ученику при открытии урока по расписанию?
  4. Как ведёт себя система при смещении расписания в тренинге, где уже есть активные ученики?
  5. Нужна ли возможность ручной индивидуальной выдачи доступа к отдельному уроку (в обход групп)?