Arquitectura del sistema

Principios, componentes y límites

La arquitectura se plantea como un backend modular donde PostgreSQL protege la integridad y Go orquesta los casos de uso del negocio.

Principios no negociables

Un comando = una transacción

La operación de negocio debe confirmar o fallar como unidad.

PostgreSQL valida invariantes

Constraints, FKs compuestas y triggers protegen el estado incluso ante errores de aplicación.

SQL-first

El backend trabaja con SQL explícito y repositorios tipados, no con un ORM como modelo dominante.

Ledgers inmutables

Pagos e inventario se compensan con nuevos movimientos, no con ediciones destructivas.

Componentes

ComponenteResponsabilidad
APIAutenticación, autorización, contexto operativo, contratos HTTP y transacciones de negocio.
WorkerProcesamiento de outbox, proyecciones, sync saliente y tareas diferidas.
PostgreSQLFuente de verdad, integridad, snapshots y validaciones duras.
Control-planePosterior. Provisioning, DSN por cliente y gobierno global.

Topología lógica

Cliente / Terminal / API Consumer
            |
            v
          API (Go)
            |
            +---- PostgreSQL
            |      - truth
            |      - triggers
            |      - ledgers
            |      - idempotencia
            |      - outbox
            |
            +---- Worker (Go)
                   - projections
                   - sync events
                   - deferred jobs

Límites transaccionales

Invariantes críticas

La parte asíncrona no decide el estado del negocio. Solo distribuye y proyecta efectos ya confirmados transaccionalmente.

Estructura sugerida del código

cmd/
  api/
  worker/
  control-plane/

internal/
  platform/
    auth/
    config/
    db/
    http/
    observability/
    tenant/
  modules/
    iam/
    catalog/
    pos/
    orders/
    payments/
    inventory/
    purchasing/
    ap/
    sync/
    reporting/
    hospitality/

db/
  migrations/
  queries/