> ## 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.

# Spec de módulo — messaging (schema messaging)

> Es dueño de plantillas, campañas, envíos, deliverability, supresiones Y del enrutamiento de notificaciones de toda la plataforma (standards/notifications.md).

> Traducción. Autoritativo: [`../../../modules/messaging/spec.md`](/modules/messaging/spec).

## Entidades e invariantes

| Tabla                                                                                                       | Invariantes clave                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| message\_templates                                                                                          | React Email; versionadas; variables validadas contra `attribute_definitions`                                                                                            |
| campaigns                                                                                                   | blast (segmento, una vez) \| automation (disparador permanente); categoría transactional\|marketing\|product                                                            |
| campaign\_triggers                                                                                          | evento \| propiedad de fecha (con zona horaria: cumpleaños, aniversario; tz del contacto o del tenant) \| segment\_entered \| segment\_exited \| points\_expiring\_soon |
| sends                                                                                                       | `correlation_id` + `origin_event_id` + `channel_code`; se crean solo después de que `resolveChannels` pasa TODAS las compuertas                                         |
| send\_status\_history                                                                                       | particionada; estados paramétricos queued→sent→delivered→opened→clicked / bounced / complained / failed; alimentada por adaptadores de estado del proveedor             |
| suppressions                                                                                                | global por tenant; escritura automática ante rebote duro, queja o baja; verificada en CADA envío                                                                        |
| sender\_domains                                                                                             | flujo de verificación SPF/DKIM por tenant; por defecto subdominio compartido; dominio propio = add-on (DEC-F4)                                                          |
| platform\_channel\_status / tenant\_channel\_settings / module\_channel\_settings / event\_channel\_routing | niveles 0–3 de la cascada                                                                                                                                               |

## Reglas de comportamiento

* Blasts: solo endpoints batch, carril de marketing, token bucket por tenant; un blast NUNCA degrada
  la latencia transaccional (ADR-015).
* Los disparadores por propiedad de fecha corren con fan-out de cron en la ventana de envío local del
  tenant; los duplicados son imposibles por la clave de idempotencia (campaña, contacto, fecha).
* Enlace de baja obligatorio en marketing; centro de preferencias por canal × categoría;
  transaccional sin opt-out.

## Eventos emitidos

campaign.triggered · message.sent|delivered|opened|clicked|bounced|complained
