ADR-057: Soft delete and concurrency
Estado
Accepted — 2026-08-23
Decisión
Soft delete (deletedAt) en Customer, Invoice, Contact, Sequence, Template, User (desactivar). AuditLog y Message: no delete (ADR-034).
Listados default: deletedAt IS NULL. Unique de invoiceNumber / slug ignoran soft-deleted o usan unique parcial.
Concurrency: updatedAt + If-Unmodified-Since o version integer en Invoice y Promise al PATCH. Conflicto → 409 CONFLICT.
No hard delete en producción salvo job de retención (ADR-034) o request legal documentado.