lms → crm
Зачем нужно
LMS сообщает CRM о фактах потребления entitlement (списания за занятие, активацию доступа, использование слота) и о фактах, влияющих на расчёт выплат преподавателям.
CRM product/product run может ссылаться на LMS roadmap program/module/topic/pathway, course version, group, session или track как на способ прохождения. Эти refs не передают CRM владение progress, completion или scheduled educational facts.
Стороны
- источник: lms
- потребитель: crm
- вид: event-driven
События
| messageType | Когда |
|---|---|
lms.entitlement.consumed | списано право доступа |
lms.entitlement.consumption_reverted | списание отменено (отработка, исправление) |
lms.attendance.recorded | зафиксирована посещаемость, влияет на payout |
lms.session.completed | занятие завершено |
lms.teacher_session.completed | данные для расчёта выплаты преподавателю |
Payload lms.entitlement.consumed
{
"entitlementId": "uuid",
"consumedBy": {
"userId": "uuid",
"actorContext": "personal|child_delegated|admin"
},
"consumedAt": "ISO 8601",
"amount": 1,
"reason": "session_attendance|content_unlock|booking",
"context": {
"sessionId": "uuid?",
"groupId": "uuid?",
"courseRef": "string?",
"lessonId": "uuid?"
},
"idempotencyKey": "string"
}
Payload lms.teacher_session.completed
{
"sessionId": "uuid",
"teacherUserId": "uuid",
"groupId": "uuid?",
"studentsCount": 5,
"attendanceCount": 4,
"durationMin": 60,
"format": "format_key",
"completedAt": "ISO 8601"
}
Поведение CRM
- Получив
lms.entitlement.consumed, CRM пишетcrm_entitlement_consumption_logи обновляет балансы entitlement. - Получив
lms.teacher_session.completed, CRM запускает расчётcrm_teacher_payoutпо правилам. - Reverted потребление компенсируется отдельной строкой в логе.
- Entitlement открывает доступ или enrollment, но не создаёт
topic_completion. - Бесплатный product может открыть enrollment или pathway access; completion создаётся только LMS rule или audited manual override.
Идемпотентность
- по
idempotencyKeyпотребления; lms.teacher_session.completed— поsessionId+messageVersion.
Ошибки
| Сценарий | Поведение |
|---|---|
| entitlementId не найден | DLQ + операционный алерт |
| дублирующее списание | игнор по idempotencyKey |
| баланс ушёл в минус | пишется, но генерируется алерт crm.entitlement_balance.overdrawn |
Retention
- события 7 лет (финансовые);
- payout-связанные события — 7 лет.