ADR-034 — Audit log and data retention

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-034-audit-retention.md

ADR-034: Audit log and data retention

Estado

Accepted — 2026-08-23

Contexto

Cada Message y cambio de promise/dispute debe poder explicarse a un Controller. Email es PII + dato financiero operacional. US, CAN-SPAM, no FDCPA consumer — igual hay que no acosa y poder auditar.

Decisión

  1. AuditLog append-only: actor, organizationId, action, entityRef, at. Sin update/delete de filas.
  2. Acciones mínimas: MESSAGE_SENT, MESSAGE_RECEIVED, CLASSIFIED, PROMISE_*, DISPUTE_*, INVOICE_IMPORTED, USER_*, OPT_OUT.
  3. Cuerpos de email: guardar lo necesario para clasificar/auditar; no reenviar al modelo más de lo acordado (ADR-019).
  4. Retención V1 (hipótesis, ajustable por Organization):
    • AuditLog: 24 meses
    • Message body: 24 meses
    • CSV crudo: 12 meses
  5. Soft-delete de Customer/Invoice (no hard delete) salvo request legal documentado.
  6. Export por Organization (piloto): CSV/JSON de invoices + promises — brief futuro.

Consecuencias

  • Inbox no existe sin AuditLog (misma story).
  • Jobs de purge se agendan cuando haya volumen; no son gate de scaffold.