> ## Documentation Index
> Fetch the complete documentation index at: https://internal.softcrum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Estándar — Eventos de dominio (v2)

> Envelope: id uuidv7, name, tenant_id, occurred_at, correlation_id, causation_id, actor tipado (user, member, api_key o system), version entero y payload.

> Traducción. Autoritativo: [`../../standards/events.md`](/standards/events).

## Envelope (todo evento, sin excepciones)

`{ id: uuidv7, name, tenant_id, occurred_at, correlation_id, causation_id, actor: {type: user|member|api_key|system, id}, version: int, payload }`

* El `correlation_id` nace en el punto de entrada (llamada a track, comando de consola, job de cron)
  y se propaga por: evento de dominio → efecto de regla → job de notificación → envío → historial de
  estados → webhook saliente. Toda línea de log en BetterStack incluye `tenant_id` + `correlation_id`.
* `causation_id` = id del evento o comando que causó directamente este (reconstrucción de la cadena).

## Nombres

`{context}.{entity}.{verbo_pasado}` — por ejemplo `core.contact.created`, `loyalty.points.earned`,
`messaging.message.delivered`. Verbos en pasado. Solo inglés.

## Catálogo v1 (emitidos → outbox → 6 consumidores; todos disponibles como webhooks salientes)

* core: contact.created|updated|merged · consent.granted|revoked · event.tracked ·
  segment.entered|exited
* loyalty: points.earned|redeemed|expired|adjusted|revoked · points.expiring\_soon ·
  coupon.issued|redeemed|expired · referral.link\_created|converted · tier.upgraded|downgraded
* messaging: campaign.triggered · message.sent|delivered|opened|clicked|bounced|complained
* crm: note.created · activity.completed · list.membership\_changed

## Reglas

* Los eventos se emiten ÚNICAMENTE por el outbox transaccional, dentro de la transacción del
  comando. La publicación directa está prohibida.
* Los payloads son delgados: ids más los campos desnormalizados mínimos que los consumidores
  necesitan; el resto lo consultan ellos. Sin PII más allá de `contact_id` salvo que el contrato del
  consumidor lo exija (webhooks: inclusión de PII configurable, apagada por defecto).
* Los cambios de esquema de evento son solo aditivos dentro de una versión; un cambio que rompe
  implica `version+1` y ambas versiones emitidas durante la ventana de deprecación.
