ADR-006: Backend architecture patterns
Estado
Accepted — 2026-08-23
Contexto
SaaS con varios bounded contexts (DOC-003), integraciones externas (mailbox, CSV, AI) y reglas de confianza. ADR-010 ya exige módulos + dominio aislado, sin fijar framework.
Decisión
Traducir ADR-010 a NestJS así:
- Monolito modular — un módulo Nest por bounded context.
- Hexagonal ligera en módulos con reglas (Classification, Promise, Collections, Inbox):
domain/application/infrastructure/presentation. - CRUD liviano en módulos triviales (no ceremonias DDD).
- Repository + puertos — el dominio no importa Prisma.
- Domain events in-process (+ outbox a workers, ADR-022).
- No microservicios, CQRS global ni sagas en V1.
Alternativas
| Opción | Nota |
|---|---|
| Modular monolith + hex ligera | Elegida |
| Layers anémicas (controller→prisma) | Acopla negocio a inbox/AI vendors |
| Microservicios | Prematuro; un solo equipo |
Consecuencias
- Layout concreto se fija en el scaffolding (primer change OpenSpec de fundación).
- Vendors (Gmail, OpenAI, Stripe) = adapters, nunca imports desde
domain.