ADR-003: Primary database
Estado
Accepted — 2026-08-23
Contexto
Datos transaccionales: organizations, users, customers, invoices, threads, promises, disputes, audit. Se requiere ACID, relaciones, reportes de AR y aislamiento multi-tenant.
Decisión
PostgreSQL como base principal.
Estrategia V1:
- Una sola base.
- Multi-tenant por columna
organizationId(ADR-018). - UUID como id.
- Migraciones versionadas (Prisma, ADR-008).
- JSONB solo para snapshots/config (p. ej. payload de clasificación), no para reemplazar Invoice/Customer.
- Índices compuestos
(organizationId, …)en tablas calientes.
Complementarios (no reemplazan Postgres):
- Redis — colas, rate limit, cache corto (ADR-022).
- Object storage (S3/R2) — adjuntos de invoice / .eml si hace falta.
Alternativas
| Opción | Por qué no |
|---|---|
| PostgreSQL | Elegida |
| MySQL | Menos JSONB/RLS/expresividad para AR |
| MongoDB | Mal encaje para invoices, promesas y reportes |
| DynamoDB | Acceso rígido; MVP de dominio aún evoluciona |
Consecuencias
- Fuente de verdad operativa de IVPrior = Postgres.
- Fuente de verdad financiera = accounting system cuando exista (ADR-021); Invoice es proyección.