Перейти к основному содержимому

Learning Workspace

Зачем нужно

Learning Workspace — преподавательский рабочий контур для общих списков “мои ученики” и “мои группы”.

Он нужен, чтобы преподаватель в одном режиме работы:

  • выбрал организацию, в которой действует сейчас;
  • видел только разрешённые подслои этой организации;
  • собирал рабочие группы учеников;
  • приглашал учеников и родителей;
  • назначал курсы, уроки, тренажёры и task-bank assignments;
  • смотрел учебный progress группы, если на эти учебные данные есть отдельные права.

Learning Workspace не является отдельной организацией, не создаёт канонический список учеников и не заменяет LMS enrollment/progress. Он хранит рабочий контекст преподавателя и ссылки на учебных субъектов из identity.

Границы

Входит

  • Learning Group как общий список “мои ученики/мои группы” преподавателя.
  • Участники Learning Group как ссылки на student_profile_id.
  • Приглашения ученика или родителя в рабочую группу.
  • Назначения группе или подмножеству участников.
  • Общие teacher-facing сценарии для LMS, олимпиадных тренировок, task-bank assignments и разборов.

Не входит

  • Канонический ученик, аккаунт, семья, организация и membership — это identity.
  • LMS enrollment, progress, attempts, submissions и feedback — это LMS.
  • Соревновательная регистрация, submission, check, result и publication — это competitions.
  • Каноническая задача, version, answer key и checker — это task-bank.
  • Оплаты и entitlement — это CRM.

Learning Group можно использовать как аудиторию для соседних доменов, но она не становится источником истины для их результатов.

Сущности

Learning Group

learning_group — рабочая группа преподавателя в выбранном organization context.

Поля:

ПолеОписание
idстабильный идентификатор группы
organization_idорганизация из identity context
owner_teacher_user_idпреподаватель-владелец
titleназвание группы
descriptionнеобязательное описание
statusdraft, active, archived
created_by_user_idкто создал
archived_atкогда скрыта из активного списка

Правила:

  • Learning Group — это “моя группа” в преподавательском режиме, а не live course group.
  • Одна Learning Group может использоваться для LMS-курса, олимпийского тренажёра, разбора и task-bank assignment.
  • Группа ссылается на organization, но не является организацией и не редактирует organization membership.
  • Архивация группы не удаляет участников, назначения, attempts, progress или competition results.

Learning Group Participant

learning_group_participant — участник рабочей группы.

Поля:

ПолеОписание
group_idLearning Group
student_profile_idучебный субъект из identity
statusinvited, active, paused, removed
sourcemanual, invite, organization_import, competition_import
added_by_user_idкто добавил
joined_atкогда стал активным
removed_atкогда убран из группы

Правила:

  • Participant не хранит отдельную карточку ученика и не дублирует ФИО как source of truth.
  • Добавление участника в группу не создаёт LMS enrollment.
  • Участие в Learning Group само по себе не даёт доступ к progress, attempts или competition results.
  • Один student_profile_id может состоять в нескольких Learning Groups.

Learning Group Invite

learning_group_invite — приглашение ученика, родителя или семьи присоединиться к рабочей группе.

Поля:

ПолеОписание
group_idLearning Group
target_typestudent, parent, family_adult
student_profile_idребёнок, если уже известен
identity_invite_refссылка на identity invite/claim flow
statuscreated, sent, accepted, expired, cancelled, revoked
expires_atсрок действия
accepted_atкогда принято

Правила:

  • Токены приглашений и контактные данные остаются в identity/notification layer; Learning Workspace хранит только безопасную ссылку.
  • Accept invite создаёт или активирует participant только после проверки identity/family context.
  • Parent invite не даёт родителю права читать все данные группы.

Learning Group Assignment

learning_group_assignment — назначение учебного действия группе или её части.

Поля:

ПолеОписание
group_idLearning Group
created_by_user_idпреподаватель или координатор
target_domainlms, task-bank, competitions
target_typelms_course, lms_lesson, trainer, competition_training, competition_debrief, task_bank_set
target_refстабильная ссылка на целевой объект
participant_filterall или фильтр по participant ids
statusdraft, assigned, in_progress, completed, cancelled, expired
due_atдедлайн, если есть

Правила:

  • Assignment не является progress и не хранит итоговые баллы.
  • Назначение LMS-курса не подменяет lms_enrollment; если нужен доступ к курсу, LMS создаёт или требует enrollment по своим правилам.
  • Назначение task-bank set не переносит задачу в LMS; task-bank остаётся владельцем задачи и checker.
  • Назначение олимпийского тренажёра или разбора создаёт учебный контекст LMS/training, а не competition submission/result.

Статусы

СущностьСтатусы
Learning Groupdraft, active, archived
Participantinvited, active, paused, removed
Invitecreated, sent, accepted, expired, cancelled, revoked
Assignmentdraft, assigned, in_progress, completed, cancelled, expired

Права

  • Преподаватель работает в teacher mode и всегда выбирает organization_id.
  • Identity подтверждает, что actor имеет роль преподавателя/координатора в выбранной организации.
  • lms.learning-groups.read даёт чтение своих Learning Groups и участников в разрешённом organization context.
  • lms.learning-groups.manage даёт создание и архивирование групп.
  • lms.learning-group-participants.manage даёт добавление, паузу и удаление участников.
  • lms.learning-group-invites.manage даёт отправку и отзыв приглашений.
  • lms.learning-group-assignments.assign даёт назначение учебных действий.
  • Чтение progress по группе требует не только Workspace-доступа, но и lms.progress.read плюс teacher assignment на соответствующие enrollments/course/node.

Learning Group — это фильтр и рабочий список. Он не является permission grant на чужие учебные данные.

События

Outgoing events:

EventКогдаPayload
lms.learning_group.createdсоздана Learning GroupgroupId, organizationId, ownerTeacherUserId
lms.learning_group.archivedгруппа архивированаgroupId, reason
lms.learning_group_participant.addedучастник добавленgroupId, studentProfileId, source
lms.learning_group_participant.removedучастник удалёнgroupId, studentProfileId, reason
lms.learning_group_invite.sentприглашение отправленоinviteId, groupId, targetType
lms.learning_group_invite.acceptedприглашение принятоinviteId, groupId, studentProfileId
lms.learning_group_assignment.createdсоздано назначениеassignmentId, groupId, targetDomain, targetType
lms.learning_group_assignment.cancelledназначение отмененоassignmentId, reason

Incoming events:

  • identity.organization_membership.changed — пересчитать доступ преподавателя к organization context.
  • identity.family_relation.changed — пересчитать invite/parent visibility.
  • identity.invite.accepted — активировать participant, если invite относится к Learning Group.
  • identity.student_profile.merged — relink participant refs после явного merge.
  • competitions.training_publication.created — разрешить назначение опубликованного олимпиадного материала как LMS/training target.

Events не содержат ФИО, контакты, ответы ученика, тексты feedback или competition result details.

Сценарии

Преподаватель выбирает организацию

  1. Преподаватель входит в teacher mode.
  2. Frontend получает доступные организации из identity context.
  3. Преподаватель выбирает организацию.
  4. LMS проверяет organization membership и показывает только разрешённые Learning Groups, assignments и LMS teacher scopes.

Преподаватель создаёт группу

  1. Преподаватель нажимает “создать группу”.
  2. Указывает название и выбранную организацию.
  3. Создаётся learning_group в статусе active.
  4. Публикуется lms.learning_group.created.
  5. Группа появляется в списке “мои группы”.

Преподаватель приглашает учеников и родителей

  1. Преподаватель выбирает Learning Group.
  2. Добавляет известных учеников по student_profile_id или создаёт invite через identity.
  3. Родитель/ученик принимает invite.
  4. Identity подтверждает family/student context.
  5. Learning Workspace активирует participant и публикует событие.

Преподаватель назначает курс, тренажёр или урок

  1. Преподаватель выбирает Learning Group или отдельных участников.
  2. Выбирает target: LMS course, lesson, олимпиадный тренажёр, разбор или task-bank set.
  3. Создаётся learning_group_assignment.
  4. Целевой домен проверяет доступность target и права на запуск.
  5. Для LMS-курса создаётся или требуется lms_enrollment; для тренажёра создаётся LMS/training контекст.

Преподаватель смотрит progress по группе

  1. Преподаватель открывает progress Learning Group.
  2. LMS строит список participants.
  3. Для каждого участника проверяются lms.progress.read и teacher assignment на enrollment/course/node.
  4. Разрешённые snapshots показываются в агрегате группы.
  5. Запрещённые строки скрываются или маркируются как недоступные без раскрытия приватных данных.

Олимпиадный тренажёр и разбор

  1. Competitions публикует ссылку lms_ref и publication status на прошедший комплект или разбор.
  2. Преподаватель назначает его Learning Group.
  3. Ученик открывает материал в LMS/training контуре.
  4. Попытка сохраняется как учебная lms_activity_attempt или task-bank attempt с contextDomain lms.
  5. Результат тренировки может стать LMS evidence и progress, но не меняет competition_submission, competition_check, competition_result или ranking.

Разбор группе и олимпиадный тренажёр являются LMS/learning activities. Competitions показывает ссылку и статус публикации в карточке олимпиады, но не становится владельцем учебной попытки, progress или review session.

Инварианты

  • Learning Group не равна live group, а Learning Group Assignment не равен lms_enrollment.
  • LMS live course group/session описывает расписание и факт занятия; Learning Group описывает рабочую аудиторию преподавателя.
  • LMS не заводит отдельный канонический список учеников.
  • Progress, attempts и feedback остаются в LMS.
  • Competition attempt/result остаются в competitions.
  • Тренировочная попытка и разбор не смешиваются с олимпиадной работой и результатом.
  • Доступ к progress по группе нельзя получить только через membership в Learning Group.

Связанные документы