orquestador/specs/ARCHITECTURE.md

32 lines
2.2 KiB
Markdown

# Arquitectura
Un único módulo Maven, paquete raíz `com.organizacion.orchestrator`. La implementación sigue la especificación; esta entrega establece sus fronteras, no implementa todavía el motor.
| Capacidad | Responsabilidad |
|---|---|
| flow | Borradores, validación, publicación, activación y caché inmutable |
| request | Instancias, acceso por recurso y eventos disponibles |
| execution | Comandos idempotentes, cola PostgreSQL, leases, fencing y recuperación |
| decision | AST tipado y decisiones puras con BigDecimal |
| action | Registro de handlers y mappings permitidos |
| integration | Catálogo confiable, HTTP y normalización de contratos |
| document | Referencias verificadas; sin almacenamiento binario |
| audit | Historial inmutable y auditoría administrativa |
| shared | Errores, identidad, reloj y configuración transversal |
Cada capacidad crecerá en `domain`, `application`, `infrastructure` y `api` cuando la tarea lo requiera. Dominio no depende de HTTP/JPA. API usa DTOs separados. Infraestructura implementa puertos. No crear entidades o interfaces ficticias para aparentar completar T04.
## Fronteras transaccionales
1. Aceptar un evento en transacción corta: acceso, bloqueo de solicitud, idempotencia, revisión, guardia, ejecución PENDING y auditoría.
2. Worker reclama con SKIP LOCKED y confirma antes de HTTP. Cada acción guarda checkpoint y clave externa estable.
3. Finalizar en transacción: validar lease/token/revisión, aplicar datos/estado y guardar resultado y auditoría atómicamente.
Una sola ejecución activa por solicitud. La incertidumbre de un efecto externo exige conciliación. No prometer exactly-once. Estados de ejecución y negocio son independientes.
## Configuración y acceso
Publicación inmutable; instancias fijan flow_id. Activo se resuelve coherentemente en PostgreSQL. JSONB extiende datos; no permite scripts, clases, URLs o credenciales arbitrarios. Cambios de licencia con capacidades existentes no requieren columnas ni condiciones Java específicas.
JWT se valida por firma, expiración, issuer y audiencia. Actualmente sólo se expone salud mínima. Roles, scope y propiedad se implementarán antes de los endpoints de negocio. Sin entidades abiertas durante llamadas HTTP (`open-in-view=false`).