Тренинги
Функциональные требования: Модуль «Тренинги»
Версия: 1.01
Статус: Draft
Аудитория: Команда разработки (backend, frontend, QA, PM)
Референс: GetCourse (getcourse.ru)
1. Назначение документа
Документ описывает функциональные требования к модулю «Тренинги» — ядру обучающей платформы. Модуль отвечает за:
- создание и управление учебным контентом (тренинги, подтренинги, уроки);
- выдачу и разграничение доступов к контенту;
- управление порядком прохождения (последовательное открытие и расписание).
Документ не описывает технический стек, архитектуру и схему БД — только бизнес-логику и поведение системы.
2. Глоссарий
| Термин | Определение |
|---|---|
| Тренинг | Корневой образовательный контейнер (курс). Содержит уроки и/или подтренинги. |
| Подтренинг | |
| Урок | Атомарная единица обучения с контентом (текст, видео, задания и т.д.). |
| Ученик | Пользователь, получивший доступ к тренингу и проходящий обучение. |
3. Роли пользователей
ВНа контекстетекущем модуляэтапе в модуле «Тренинги» предусмотреныопределена следующиеодна роли:
Администратор — имеет полный доступ ко всем тренингам, их настройкам и доступам пользователей. Может создавать, редактировать, удалять и архивировать любые тренинги.
Преподаватель — имеет доступ к назначенным ему тренингам. Может редактировать контент уроков (при наличии прав), проверять задания учеников и управлять расписанием.роль:
Ученик — имеетпользователь, имеющий доступ к тренингам,тренингам согласно членству в которых состоит.группах. Может просматривать уроки (с учётом правил открытия) и отправлять ответы на задания.
Один пользователь может одновременно иметь разныеОстальные роли (администратор, преподаватель и т.д.) будут определены отдельно в разныхпоследующих тренингах.версиях документа.
4. Иерархия контента
4.1. Модель
ПринятаПоддерживается двухуровневаянеограниченная модельвложенность вложенности:подтренингов:
Тренинг
├── Урок 1
├── Урок 2
├── Подтренинг A
│ ├── Урок A.1
│ ├── Подтренинг A.1
│ │ ├── Урок A.21.1
│ │ └── Подтренинг A.1.1
│ │ └── Урок A.31.1.1
│ └── Урок A.2
├── Подтренинг B
│ ├── Урок B.1
│ └── Урок B.2
└── Урок 3
4.2. Правила
- Тренинг
можети подтренинг могут содержать уроки и/или подтренинги в любом сочетании. ПодтренингГлубинаможетвложенностисодержать только уроки (дальнейшая вложенностьподтренингов неподдерживается).ограничена.- Порядок элементов внутри контейнера задаётся вручную и сохраняется.
- Урок принадлежит ровно одному родителю (тренинг или подтренинг).
- Подтренинг принадлежит ровно одному родительскому
тренингу.контейнеру (тренингу или подтренингу).
4.3. ПочемуТерминология: двухуровневаятренинг модельvs подтренинг
ОграничениеС вложенноститочки упрощаетзрения логикумодели доступов, расписанияданных и UIповедения навигации.системы Для«тренинг» разделенияи контента«подтренинг» на— темыэто достаточноодна одногои уровнята подтренингов.же Этосущность. осознанноеРазница сокращениетолько относительнов GetCourse,положении которыйв поддерживаетиерархии:
Один и тот же элемент может быть тренингом или подтренингом в зависимости от того, где он расположен. При переносе корневого тренинга внутрь другого тренинга он становится подтренингом, и наоборот.
5. Сущность «Тренинг»Тренинг / Подтренинг»
5.1. Основные атрибуты
- Название — отображается в списках и заголовках.
- Описание — краткое описание курса, видно ученикам.
- Обложка — изображение для карточки тренинга.
- Статус — черновик / опубликован / архивный.
ПреподавательРодитель —основнойссылкаответственныйназародительскийтренинг.тренинг/подтренинг (отсутствует для корневого тренинга).- Дата создания, дата публикации.
5.2. Статусы
- Черновик — тренинг создан, но недоступен ученикам.
Виден только администраторам и преподавателям. - Опубликован — тренинг активен и может выдаваться ученикам согласно правилам доступа.
- Архивный — тренинг скрыт из активных списков, но доступы сохраняются для исторических данных (опционально — с возможностью полного отзыва доступов).
5.3. Действия над тренингом
- Создание / редактирование / удаление.
- Дублирование (копирование структуры с уроками или без).
- Архивация / восстановление из архива.
- Управление составом уроков и подтренингов (добавление, удаление, изменение порядка).
- Перенос в другой родительский контейнер (становится подтренингом) или вынос в корень (становится тренингом).
5.4. Условия завершения тренинга
Администратор задаёт правило, при котором тренинг считается завершённым учеником. Возможные варианты:
Факт завершения тренинга — это доменное событие, которое может использоваться другими модулями (выдача сертификата, открытие следующего тренинга, начисление баллов и т.д.).
6. Сущность «Подтренинг»
Подтренинг — это тренинг, вложенный в родительский тренинг. С точки зрения функциональности подтренинг идентичен тренингу, за исключением следующего:
Все действия, доступные для тренинга (редактирование, дублирование, архивация), применимы и к подтренингу.
7. Сущность «Урок»
7.6.1. Основные атрибуты
- Название.
- Контент — основное наполнение урока (текст, видео, изображения, файлы).
- Порядковый номер внутри родителя.
- Родитель — тренинг или подтренинг.
- Флаг «Скрыт» — урок не отображается ученикам (используется для черновиков).
- Флаг «Стоп-урок» — см. раздел
9.8.3. - Дата открытия по расписанию — см. раздел
9.8.
7.6.2. Типы уроков
Для MVP достаточно одного универсального типа урока с составным контентом (текст + медиа + файлы). В дальнейшем могут быть добавлены специализированные типы (вебинар, тест и т.д.), но это за рамками данного документа.
7.6.3. Задания в уроке
Урок может содержать задание, требующее ответа от ученика. ЗаданиеВ имеетрамках следующие состояния ответа:MVP:
Неученикотправленможет отправить ответ на задание (текст, файл или комбинацию);
СтатусЛогика ответаработы влияетс напроверкой логикуответов стоп-уроковбудет (см.определена разделв 9.3).последующих версиях документа.
7.6.4. Статусы прохождения урока учеником
Для каждой пары «ученик ↔ урок» система хранит статус:
- Недоступен — урок закрыт правилами доступа или расписания.
- Доступен — урок можно открыть, но ученик ещё не заходил.
- Начат — ученик открыл урок.
- Выполнен — урок пройден (критерий
выполнениявыполнения:зависитвходотвтипаурокурока: вход,или отправкаответа,ответапринятиенаответа)задание, если задание есть).
8.7. Доступы
8.7.1. Модель доступа: по группам
Доступ к тренингам и подтренингам выдаётся через механизм групп пользователей.
- Группа — это именованный сегмент пользователей.
- Пользователь может состоять одновременно в нескольких группах.
- Тренинг/подтренинг привязан к одной или нескольким группам.
- Пользователь имеет доступ к тренингу, если он состоит хотя бы в одной группе, привязанной к тренингу.
8.7.2. Управление членством в группе
Членство в группе может изменяться следующими способами:
- Ручное добавление/удаление
администраторомчерез интерфейс управления группой. - Массовое добавление (например, импорт списка пользователей).
- Программное добавление через внутренние события системы (покупка, регистрация на событие и т.д.) — реализуется за пределами модуля «Тренинги», но модуль должен корректно реагировать на изменение состава группы.
8.7.3. Последствия изменения членства
- При добавлении пользователя в группу — он немедленно получает доступ ко всем тренингам, привязанным к этой группе.
- При удалении пользователя из группы — доступ к тренингу сохраняется, если пользователь остаётся в хотя бы одной другой группе, привязанной к тренингу. Иначе — доступ отзывается.
- Прогресс ученика (статусы прохождения уроков,
ответыотправленныена задания)ответы) сохраняется при отзыве доступа. Если доступ будет выдан повторно, ученик продолжит с того места, где остановился.
8.7.4. Доступы к подтренингам
Подтренинг может иметь один из двух режимов доступа:
- Наследовать от родителя — подтренинг доступен всем, у кого есть доступ к родительскому
тренингу.тренингу/подтренингу. Это значение по умолчанию. - Собственные группы — подтренинг доступен только пользователям из указанных групп (независимо от доступа к родителю).
Второй режим решает типовой кейс: на тренинг куплены два тарифа (обычный и премиум), премиум-тариф открывает дополнительный подтренинг с бонусами. Ученики обоих тарифов состоят в группе «Основная», но только премиум-ученики — в группе «Премиум», привязанной к бонусному подтренингу.
При наследовании доступа режим применяется транзитивно вниз по иерархии: если подтренинг A наследует доступ от родителя, а подтренинг A.1 (вложенный в A) — тоже наследует, то A.1 будет доступен всем, у кого есть доступ к корневому тренингу.
8.7.5. Видимость тренинга без доступа
Для тренингов, к которым у пользователя нет доступа, настраивается поведение отображения:
- Не отображать — тренинг скрыт полностью.
- Отображать как заблокированный — тренинг виден в общем списке с пометкой «нет доступа» (например, для мотивации к покупке доступа).
Настройка задаётся на уровне тренинга.
9.8. Управление прохождением уроков
Существует два независимых механизма ограничения доступа к урокам: расписание и стоп-уроки. Механизмы могут работать одновременно — в этом случае урок доступен ученику только при выполнении обоих условий.
9.8.1. Расписание: общие положения
Расписание определяет, когда урок становится доступным ученику с точки зрения времени. Расписание настраивается на уровне тренинга или подтренинга. Если тренингконтейнер содержит вложенные подтренинги, расписание для уроков внутри каждого подтренинга настраивается отдельно.
Система поддерживает два типа расписания:
- Общее — одинаковые даты открытия для всех учеников.
- Индивидуальное — даты рассчитываются для каждого ученика от момента получения доступа.
Тип расписания выбирается на уровне тренинга/подтренинга и распространяется на все его уроки.
9.8.2. Типы расписания
9.8.2.1. Общее расписание
Для каждого урока задаётся конкретная дата и время открытия (абсолютная метка времени). Все ученики получают доступ к уроку одновременно в указанный момент.
Кейс: живой поток курса, стартующий 1 сентября для всех участников.
9.8.2.2. Индивидуальное расписание
Для каждого урока задаётся задержка в днях (или часах) относительно точки отсчёта. Точкой отсчёта служит момент получения учеником доступа к тренингу.
- Урок 1 — задержка 0 дней (доступен сразу).
- Урок 2 — задержка 2 дня.
- Урок 3 — задержка 5 дней.
Если ученик получил доступ 10 марта, то урок 3 откроется для него 15 марта.
Кейс: самостоятельное прохождение курса в индивидуальном темпе.
9.8.3. Стоп-уроки
Стоп-урок — это урок, блокирующий переход к последующим урокам до его выполнения.
9.8.3.1. Правила блокировки
Для стоп-урока задаётся критерий «выполнения»:
- Вход в урок — достаточно открыть урок.
- Отправка ответа — ученик должен отправить ответ на задание.
Принятие ответа— ответ должен быть проверен и принят преподавателем.
Пока критерий не выполнен, все уроки, расположенные после стоп-урока в порядке следования, недоступны ученику.
9.8.3.2. Область действия
- Стоп-уроки работают в пределах одного контейнера (тренинга или подтренинга).
- Стоп-урок в подтренинге не блокирует уроки родительского тренинга и наоборот.
Для последовательного открытия подтренингов используется механизм завершения тренинга (см. раздел 9.4).
9.8.4. Последовательное открытие подтренингов
Для организации поэтапного открытия модулей курса используется связка «условие завершения» ↔ «условие доступа»:
Это позволяет строить цепочки модулей без использования расписания.
9.5. Совместное действие расписания и стоп-уроков
Когда одновременно настроены и расписание, и стоп-уроки — урок доступен ученику только если выполнены оба условия:
- дата открытия по расписанию наступила И
- все предшествующие стоп-уроки выполнены.
Более строгое ограничение имеет приоритет. Например, если по расписанию урок должен открыться, но предыдущий стоп-урок не пройден — урок остаётся закрытым.
9.6.8.5. Видимость закрытых уроков
Для каждого урока настраивается поведение отображения, когда он ещё недоступен:
- Скрыт из списка — ученик не видит урок до момента открытия.
- Виден, но заблокирован — ученик видит название урока и дату открытия, но не может в него войти.
Настройка задаётся на уровне урока и работает одинаково для ограничений по расписанию и по стоп-урокам.
10.9. Пользовательские сценарии
10.9.1. Создание курса (администратор)
10.2. Выдача доступа (администратор)
10.3. Прохождение тренинга (ученик)
- Ученик видит тренинг в своём списке.
- Открывает первый доступный урок.
- Изучает контент, отправляет ответ на задание (если есть).
- Переходит к следующему уроку — либо сразу, либо после открытия по расписанию, либо после прохождения стоп-урока.
9.2. Выдача доступа
10.4.9.3. Отзыв доступа (администратор)
АдминистраторПользовательудаляет пользователяудаляется из группы.- Если пользователь не состоит в других группах с доступом к тренингу — доступ автоматически отзывается.
- Прогресс ученика сохраняется в системе.
11.10. Требования к логированию
Для аудита и отладки модуль должен логировать следующие события:
- создание, изменение, удаление, архивация тренинга/подтренинга/урока;
- изменение состава группы доступа;
- выдача и отзыв доступа пользователю (с указанием причины: ручная / через группу);
- открытие урока учеником;
- отправка
ответа,ответасменанастатуса ответа.задание.
Детализация формата логов — за рамками данного документа.
12.11. Вне области этой документации
Следующие аспекты платформы GetCourse намеренно не включены в MVP:текущую версию:
Эти возможности могут быть добавлены в следующих итерациях.
13.12. Открытые вопросы
Вопросы, требующие обсуждения с продуктовой командой перед началом разработки:
- Какие именно форматы контента поддерживаются в уроке в MVP (только текст + видео? файлы? встраиваемые блоки?).