# Arquitectura

## Principios

1. El humano aprueba; el sistema transporta.
2. Toda generación parte de una revisión inmutable del contenido.
3. Los artefactos son derivados versionados, nunca la fuente principal.
4. Los proveedores se conectan mediante adaptadores intercambiables.
5. Los trabajos son idempotentes y pueden reintentarse sin duplicar costes.

## Flujo

`borrador -> revisión de contenido -> aprobado -> producción -> revisión de artefactos -> ensamblado -> aprobación final -> publicado`

Las slides y los vídeos avanzan en paralelo después de aprobar el contenido. Cada artefacto conserva el identificador de la revisión, proveedor, trabajo y fichero que lo originó.

## Decisiones iniciales

- PostgreSQL es la fuente operacional de verdad.
- `course.json` es un snapshot portable y versionado.
- pg-boss evita introducir Redis en el MVP.
- Los binarios viven en almacenamiento S3 compatible.
- Next.js sirve el panel; un proceso Node separado ejecuta los workers.
- SCORM 1.2 es el primer formato de salida.

## Flujo implementado

- Next.js consulta PostgreSQL directamente desde Server Components.
- Las mutaciones internas usan Server Actions y las exportaciones/webhooks usan Route Handlers.
- `pg-boss` transporta trabajos al proceso Node independiente.
- Cada trabajo se refleja en `generation_jobs`, incluyendo estado, intentos, proveedor, coste y error.
- Los resultados se registran en `artifacts`; los binarios se guardan mediante el adaptador S3-compatible.
- El empaquetador combina el player Vite, `course.json`, runtime SCORM y `imsmanifest.xml` en un ZIP seguro.

Las credenciales de proveedor nunca forman parte del snapshot del curso ni llegan al navegador.
