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. Доступы к подтренингам

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

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

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

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

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

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

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


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

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

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

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

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

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

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

                                  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. Последовательное открытие подтренингов

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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