ADR-003 — Primary database

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-003-primary-database.md

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ónPor qué no
PostgreSQLElegida
MySQLMenos JSONB/RLS/expresividad para AR
MongoDBMal encaje para invoices, promesas y reportes
DynamoDBAcceso 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.