# FLOWDESK · Cómo funciona

Demo local de Laboratorio FAI. Datos sintéticos, sin conexión a sistemas reales: nada se sube ni se envía, y todo se borra al recargar.

## Flujo

1. **Recibir** — formulario, «Rellenar ejemplo» o CSV local (máx. 128 KiB, 200 filas, 500 caracteres por campo; una fila inválida cancela la importación). Una clave repetida con los mismos datos no crea otra fila; con datos distintos es un conflicto.
2. **Validar** — `normalize()` en `workflow.mjs`.
3. **Asignar** — primera regla coincidente de `workflow_rules.json` (editable en la página; afecta solo a ejecuciones futuras y reintentos).
4. **Preparar** — fila de seguimiento con equipo, prioridad, SLA objetivo, `processedAt` y `dueAt`.

Cada etapa tiene una latencia simulada (≈40–620 ms) y el lote usa 2 workers en paralelo. Las latencias p50/p95 se miden sobre esas esperas simuladas; las horas de SLA son objetivos de las reglas, no tiempos reales de resolución.

El interruptor «Simular error 504» hace fallar la siguiente ejecución para probar reintentos (máx. 20 intentos por solicitud).

## Exportaciones

- `flowdesk-seguimiento-*.csv`: `key,subject,category,impact,description,state,priority,owner,targetHours,attempts,rule,processedAt,dueAt` (BOM UTF-8, celdas protegidas contra fórmulas).
- `flowdesk-informe-*.csv`: agregados de la cola actual.

## Ejecutar en local

`fetch` de las reglas requiere servidor estático: `python -m http.server 8000 --directory public` y abre `/demos/automation/`. Atajo: <kbd>/</kbd> enfoca la búsqueda.

## Licencias

Código bajo licencia MIT, citando a FAI ([detalle](../LICENSE.txt)). Fuentes del kit compartido (`/fonts`) bajo SIL OFL 1.1: [Archivo](/demos/licenses/fai-archivo-OFL.txt) · [Big Shoulders](/demos/licenses/fai-bigshoulders-OFL.txt) · [JetBrains Mono](/demos/licenses/fai-jetbrainsmono-OFL.txt).

[Volver a FLOWDESK](/demos/automation/) · [Todas las demos](/demos/) · [Contacto](https://fjmn.vercel.app/#deploy)
