---
url: https://docs.nemo12.com/reference/events.md
description: >-
  Danh mục domain event đi qua Queue của Nemo12, sinh từ source: tên event,
  module phát, module nghe và dữ liệu mang theo.
---

# Event Catalog

> ⚙️ **Trang này sinh tự động** từ source code bằng `scripts/gen-reference.mjs` — đừng sửa tay, sửa code rồi chạy `npm run gen:reference`.

**32 điểm publish**, **25 loại event**, tất cả vào queue `nemo12-events` — xem [queues](queues.md) để biết consumer, retry, DLQ.

Mọi event mang envelope chung (`workers/api/src/shared/events.ts`):

```ts
{ event_id, idempotency_key, type, occurred_at, producer: "api", version: 1, payload }
```

Publish **sau khi commit** và **không bao giờ làm fail nghiệp vụ chính**: lỗi `queue.send` chỉ `console.error("EVENT_PUBLISH_FAILED")` (SDD-006 §2).

| Event | Producer | Idempotency key | Payload |
| --- | --- | --- | --- |
| `community.event.registered` | `events` | `event-reg:${eventId}:${session.user_id}` | `event_id`, `user_id` |
| `community.event.unregistered` | `events` | `event-unreg:${eventId}:${session.user_id}:${Date.now()}` | `event_id`, `user_id` |
| `competition.action.recorded` | `orca` | `orca:${b.learner_id}:${b.competition_id}:${b.state}` | `learner_id`, `competition_id`, `state` |
| `content.report.filed` | `forum` | `report:${reportId}` | `report_id`, `target_type`, `target_id` |
| `forum.reply.created` | `forum` | `reply:${id}` | `topic_id` |
| `forum.topic.created` | `forum` | `topic:${id}` | `topic_id`, `scope` |
| `growth.referral.recorded` | `referral` | `referral:${session.user_id}` | `referred_user_id`, `referrer_user_id` |
| `identity.family.created` | `auth` | `family:${familyId}` | `family_id`, `owner_user_id` |
| `identity.user.created` | `auth` | `user:${userId}` | `user_id` |
| `learner.assessment.completed` | `exams` | `exam-attempt:${attemptId}` | `learner_id`, `subject_id`, `kind` |
| `learner.assessment.completed` | `knowledge` | `assessment:${sessionId}` | `learner_id`, `subject_id` |
| `learner.context.updated` | `onboarding` | `context:${learnerId}:${active}` | `learner_id` |
| `learner.evidence.recorded` | `dictation` | `crypto.randomUUID()` | `learner_id`, `subject_id`, `node_id` |
| `learner.evidence.recorded` | `exams` | `eventId` | `learner_id`, `subject_id`, `node_id` |
| `learner.evidence.recorded` | `knowledge` | `eventId` | `learner_id`, `subject_id`, `node_id`, `performance` |
| `learner.evidence.recorded` | `learning` | `eventId` | `learner_id`, `subject_id`, `node_id`, `type` |
| `learner.evidence.recorded` | `learning` | `eventId` | `learner_id`, `subject_id`, `node_id`, `performance` |
| `learner.goal.set` | `ielts` | `ielts-goal:${id}` | `learner_id`, `kind` |
| `learner.goal.set` | `ielts` | `ielts-goal:${found.goal.id}` | `learner_id`, `kind` |
| `learner.goal.set` | `onboarding` | `exam-target:${id}` | `learner_id`, `kind` |
| `learner.invitation.accepted` | `invitations` | `learner-joined:${learner.id}` | `learner_id`, `family_id`, `user_id` |
| `learner.invitation.sent` | `invitations` | `invitation:${invitationId}` | `invitation_id`, `learner_id`, `family_id` |
| `learner.model.initialized` | `onboarding` | `model-init:${learnerId}` | `learner_id`, `school_code` |
| `learner.portrait.created` | `portraits` | `portrait:${id}` | `learner_id`, `portrait_id` |
| `learner.profile.completed` | `onboarding` | `profile:${learnerId}` | `learner_id` |
| `learner.school.enrolled` | `onboarding` | `enroll:${learnerId}:${school_code}` | `learner_id` |
| `learner.slot_preferences.set` | `slots` | `learner:${learnerId}` | `learner_id`, `first`, `second` |
| `learner.slot.booked` | `slots` | `booking:${res.data.id}` | `learner_id`, `slot_id`, `session_date` |
| `learner.slot.cancelled` | `slots` | `booking:${bookingId}` | `learner_id`, `booking_id` |
| `mentor.interaction.recorded` | `mentor` | `mentor-note:${id}` | `learner_id`, `mentor_user_id` |
| `parent.belief.recorded` | `parent` | `belief:${id}` | `learner_id`, `subject_id`, `worry_level` |
| `parent.observation.recorded` | `parent` | `parent-obs:${id}` | `learner_id`, `category` |
