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

competitions ↔ lms

Зачем нужно

Файл фиксирует границу между олимпиадным контуром и LMS/Learning Workspace. Общий список «мои ученики / мои группы» живёт в Learning Workspace; олимпиада может использовать его для регистрации или выдачи доступа, но не становится владельцем этого списка. Выполнение олимпиадного задания происходит как LMS activity или через temporary LMS-compatible adapter. Олимпиадные результаты могут стать учебным сигналом, но тренажёр, разбор, training attempts и activity runtime живут в LMS.

Источник истины

ДанныеВладелец
educator_profileidentity, анкета без прав
learning_group, learning_group_participantLMS / Learning Workspace
lms_activity, lms_activity_item, competition/review/training activity modesLMS / Learning Workspace
lms_activity_attempt, learning_training_attempt, learning_review_sessionLMS / Learning Workspace
response, file_response, checking_result, activity_scoreLMS / Learning Workspace
lms_ref на олимпиадный разбор, тренажёр или mock contestLMS / Learning Workspace
competition_participant, competition_registration, competition_submission refs/status, competition_result, score snapshotscompetitions
competition_group если используетсяcompetitions, только season/tour access snapshot

Что competitions читает

  • learning_group и learning_group_participant snapshot для prefill регистрации, приглашений или выдачи доступа;
  • user/organization refs, которые Learning Workspace получил из identity.
  • lms_ref readiness/status для опубликованного разбора, тренажёра или mock contest, если LMS является владельцем activity.
  • LMS activity readiness/status для tour activity binding.
  • Attempt/submission/checking status и score by item для competition mode.

Competitions не пишет в learning_group и не архивирует learning_group_participant. educator_profile competitions читает через identity, а не через LMS.

Что LMS читает

  • опубликованные или персонально разрешённые competition_result;
  • факты участия и award refs как learning signal;
  • ссылки на сезон/тур/трек для объяснения источника evidence.
  • competition_training_publication metadata: source season/tour/activity binding, training mode, visibility and publication status.
  • participant/tour context для competition activity launch.
  • locked activity binding constraints: tour window, participant eligibility, activity mode and score snapshot contract.

LMS не использует competition_group как каноническую группу преподавателя.

События

messageTypeНаправлениеКогда
lms.learning_group.updatedLMS → competitionsизменились metadata/status учебной группы, на которую есть активная олимпиадная регистрация
lms.learning_group_participant.removedLMS → competitionsученик удалён из учебной группы; исторические registrations не удаляются
competitions.participant.joinedcompetitions → LMSучастник принят в тур
competitions.activity_binding.lockedcompetitions → LMSтур связан с LMS activity или temporary adapter structure
lms.activity_attempt.startedLMS → competitionsучастник начал competition-mode activity
lms.activity_attempt.submittedLMS → competitionsучастник отправил activity attempt
lms.activity_score.finalizedLMS → competitionsLMS вернул score by item для competition result
competitions.score_snapshot.createdcompetitions → LMSscore snapshot сохранён в competitions
competitions.result.publishedcompetitions → LMSрезультат опубликован или стал доступен участнику
competitions.award.issuedcompetitions → LMSвыдан документ, который может стать achievement/evidence
competitions.training_publication.publishedcompetitions → LMSкарточка олимпиады/витрина может показывать LMS-разбор или тренажёр

Online read API

GET /api/v2/lms/learning-workspace/groups/{learningGroupId}/participants
POST /api/v2/lms/activities/{activityId}/competition-attempts
GET /api/v2/lms/activity-attempts/{attemptId}/status
GET /api/v2/lms/activity-attempts/{attemptId}/scores
GET /api/v2/competitions/participants/{participantId}/learning-signal
GET /api/v2/competitions/users/{userId}/published-results

Правила

  • learning_group_participant не становится competition_participant автоматически: нужна явная регистрация или accepted invite.
  • competition_group не является canonical roster и не может быть источником для экранов «мои ученики / мои группы».
  • Архивация learning group participant не удаляет historical competition submissions/results.
  • Competitions opens competition tour, but execution happens in LMS activity runtime or temporary compatible adapter.
  • LMS returns score by item; competitions stores immutable score snapshots for result calculation.
  • Raw responses, files and checking details stay LMS-owned when runtime is LMS-owned.
  • Олимпиадный результат не создаёт training attempt. LMS может создать разбор или тренажёр отдельным learning workflow.
  • Разбор, тренажёр и mock contest являются LMS-активностями. Competitions хранит lms_ref, training_mode, visibility и publication status.
  • storefront_ref может быть публичной проекцией, но не заменяет lms_ref.
  • Переход ученика из карточки олимпиады в тренажёр создаёт LMS/training attempt, а не competition attempt/submission/result.
  • Task selection для разбора идёт через task-bank--lms.md, а не через competition-owned task runtime.

Идемпотентность и retry

  • события обрабатываются по messageId;
  • handoff из learning_group в registrations идемпотентен по (competitionSeasonId, learningGroupParticipantId);
  • learning signal идемпотентен по competition_result_id + publication_version.

Ошибки и компенсации

ОшибкаПоведение
Learning Workspace недоступен при регистрации группыregistration draft остаётся pending_workspace_snapshot
participant уже зарегистрированcompetitions возвращает существующую registration projection
result ещё не опубликованLMS не создаёт learning signal, retry после publication event
lms_ref недоступенcompetitions скрывает CTA тренажёра или показывает fallback без создания competition attempt
нет privacy/consent для передачи результатаLMS получает только aggregate fact без PII

Scopes

ScopeДля чего
service:lms.learning-groups.readчитать группы и участников для регистрации
service:lms.teacher.readчитать educator/teacher workspace profile
service:competitions.results.readчитать published/personal result snapshots
service:competitions.participants.readчитать history участника

Retention

  • group snapshots в competitions хранятся вместе с registration audit;
  • learning signals в LMS хранятся по retention learning evidence;
  • raw olympiad submissions не передаются в LMS без отдельного review scope.

Безопасность

  • snapshots участников содержат минимальный набор PII;
  • персональные результаты передаются только после publication или explicit personal access;
  • групповые списки не передаются в storefront;
  • доступ преподавателя проверяется через Learning Workspace и identity actor context.

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