# ALFRED ![Estado](https://img.shields.io/badge/Estado-IMPLEMENTADO-brightgreen) **Flujos predefinidos lite - Sistema TZZR** ## Rol Flujos predefinidos para DECK (servidor personal). Cadenas de pasos conocidos donde el usuario solo completa datos variables. ## Posicion en el Flujo ``` ALFRED | Salida esperada? | +------+------+ | | SI NO | (incidencia) | | | v | MASON | | v v FELDMAN ``` ## Endpoints | Metodo | Ruta | Descripcion | |--------|------|-------------| | GET | `/health` | Estado del servicio | | GET | `/flujos` | Listar flujos predefinidos | | POST | `/flujos` | Crear nuevo flujo | | GET | `/flujos/` | Detalle de un flujo | | PUT | `/flujos/` | Actualizar flujo | | DELETE | `/flujos/` | Desactivar flujo (soft delete) | | POST | `/ejecutar/` | Ejecutar un flujo | | GET | `/ejecuciones` | Listar ejecuciones | | GET | `/ejecuciones/` | Detalle de ejecucion | | GET | `/stats` | Estadisticas | ## Autenticacion Todas las rutas (excepto `/health`) requieren: ``` X-Auth-Key: {h_instancia} ``` ## Crear un Flujo ```bash curl -X POST http://localhost:5052/flujos \ -H "Content-Type: application/json" \ -H "X-Auth-Key: {h_instancia}" \ -d '{ "nombre": "Rutina Pecho", "descripcion": "Entrenamiento de pecho - Martes", "pasos": [ {"ejercicio": "Press banca", "series": 4}, {"ejercicio": "Press inclinado", "series": 3} ], "campos_variables": ["kg", "reps", "notas"] }' ``` ## Ejecutar un Flujo ```bash # Ejecucion OK -> destino FELDMAN curl -X POST http://localhost:5052/ejecutar/{flujo_id} \ -H "Content-Type: application/json" \ -H "X-Auth-Key: {h_instancia}" \ -d '{ "datos": {"press_banca": {"kg": 80, "reps": 10}} }' # Ejecucion con incidencia -> destino MASON curl -X POST http://localhost:5052/ejecutar/{flujo_id} \ -H "Content-Type: application/json" \ -H "X-Auth-Key: {h_instancia}" \ -d '{ "datos": {"press_banca": {"kg": 0, "reps": 0}}, "incidencia": true, "notas": "Lesion en hombro" }' ``` ## Estados de Salida | Estado | Descripcion | Destino | |--------|-------------|---------| | ok | Todo segun lo previsto | FELDMAN | | incidencia | Algo no coincide | MASON | ## Despliegue ```bash cd /opt/alfred cp .env.example .env # Editar .env con credenciales docker compose up -d ``` ## Configuracion Ver `.env.example` para variables requeridas: - `H_INSTANCIA`: Hash unico de DECK - `DB_*`: Credenciales PostgreSQL ## Base de Datos Ejecutar `init.sql` en PostgreSQL o las tablas se crean automaticamente: - `flujos_predefinidos`: Definicion de flujos - `flujo_ejecuciones`: Historial de ejecuciones ## Comparacion | Componente | Servidor | Tipo | Destino si OK | |------------|----------|------|---------------| | CLARA | DECK | Input suelto | MASON | | MARGARET | CORP | Input suelto | MASON | | **ALFRED** | DECK | Flujo predefinido | FELDMAN (directo) | | JARED | CORP | Flujo predefinido | FELDMAN (directo) | --- *Componente del sistema TZZR - Implementado 2025-12-24*