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
- AuditLog append-only: actor, organizationId, action, entityRef, at. Sin update/delete de filas.
- Acciones mínimas:
MESSAGE_SENT,MESSAGE_RECEIVED,CLASSIFIED,PROMISE_*,DISPUTE_*,INVOICE_IMPORTED,USER_*,OPT_OUT. - Cuerpos de email: guardar lo necesario para clasificar/auditar; no reenviar al modelo más de lo acordado (ADR-019).
- Retención V1 (hipótesis, ajustable por Organization):
- AuditLog: 24 meses
- Message body: 24 meses
- CSV crudo: 12 meses
- Soft-delete de Customer/Invoice (no hard delete) salvo request legal documentado.
- 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.