ADR-038 — Notifications

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-038-notifications.md

ADR-038: Notifications

Estado

Accepted — 2026-08-23

Contexto

Hay dos familias de mensajes que no se deben mezclar:

  1. Collections email (ADR-020) — send-as del dominio del cliente al Customer (deudor).
  2. Product notifications — a Users de la Organization (invite, reset password, “promise broken”, digest).

IVPrior es omnicanal (push/SMS). IVPrior V1 no.

Decisión

CanalV1Destinatario
Collections mailboxSí (ADR-020)Customer / Contact
Transactional emailSí (invite, reset, mailbox disconnected)User
In-app (Task / badge)Sí — la cola Tasks es la notificación operativaUser
Email digest “needs attention”Opcional P1User
Push / SMS / WhatsAppNo
  • Transactional email: adapter propio (Resend, SES o SMTP). From de IVPrior, no send-as del cliente.
  • Domain events (DOC-004) → job → canal. El dominio no importa el SDK de mail.
  • Opt-out de collections no silencia invite/reset (son transaccionales).
  • No hay centro de notificaciones tipo inbox de producto en V1 (IVPrior S-103). Tasks + email bastan.

Consecuencias

  • Dos puertos: MailboxPort (collections) y TransactionalMailPort (producto).
  • Copy transaccional en en-US. Sin tono de cobrador.