# Especificación de flujos de usuario

Convierte una tarea y las capacidades reales de un sistema en un flujo que alguien puede construir — incluidos todos los estados que suelen quedarse sin dibujar.

## Entregable

Un documento Markdown, `user-flow-specification.md`, con la estructura fijada en **Salida** más abajo. Es la entrada de **Especificación de textos de interfaz** y la referencia que recorre **Revisión de usabilidad**.

## Entradas obligatorias

- **La tarea que debe completar la persona usuaria** — enunciada como un resultado que reconocería, no como una pantalla que debería ver.
- **Lo que el sistema puede hacer de verdad en ese camino** — las operaciones disponibles, qué exige cada una y qué rechaza.
- **Un responsable con nombre del comportamiento indefinido** — quien decide qué ocurre en un estado que nadie ha especificado.

Si falta cualquiera de las tres, detente y repórtalo. Un flujo dibujado sin las capacidades reales del sistema especifica un producto que no existe.

## Entradas opcionales

- Pantallas existentes, wireframes o una interfaz construida de la que leer el camino actual
- El modelo de permisos: quién puede hacer qué y qué ocurre cuando no puede
- Las respuestas de error y de estado que devuelve el sistema, con las condiciones que las disparan
- Registros de soporte o analítica que muestren dónde se detienen hoy los intentos
- Restricciones de contenido, legales o regulatorias sobre lo que un paso puede pedir o decir
- Los dispositivos, métodos de entrada y condiciones de conexión en los que el flujo debe funcionar

Cada entrada opcional que falte pasa a **Estados indefinidos**. Nunca se convierte en un comportamiento inventado.

## Ejecución

**1 — Fijar los límites.** Registra cada punto de entrada al flujo — de dónde llega la persona y qué sabe ya al llegar — y cada salida: finalización, abandono y expulsión por parte del sistema. Un punto de entrada que no se puede nombrar es un punto de entrada para el que nadie ha diseñado.

**2 — Recorrer el camino que funciona.** Una línea por pantalla o estado, en orden: qué ve la persona, qué puede hacer ahí, qué hace el sistema en respuesta y qué cambia como resultado. Tómalo solo del material aportado; un paso que nadie describió es un paso que va a la lista de lo que falta.

**3 — Marcar los puntos de decisión.** Por cada bifurcación: qué se decide ahí, la condición que lo determina y adónde lleva cada resultado. Una bifurcación cuya condición no se aportó se registra como `condición desconocida` y sigue adelante.

**4 — Especificar los estados de cada paso.** Vacío, en carga, error, permiso denegado y éxito parcial, paso por paso. Cada uno se especifica o se marca `no puede ocurrir` con el motivo por el que no puede. Un paso que no lleva ninguno de los cinco no se ha examinado.

**5 — Trazar los caminos de vuelta.** Volver atrás, recargar, entrar a mitad del flujo desde un enlace, retomar un intento abandonado, volver tras una expiración y ejecutar el flujo dos veces. Registra qué hace el sistema con el trabajo ya empezado.

**6 — Nombrar lo indefinido.** Cada estado alcanzado en los pasos 2 a 5 sin comportamiento definido, con quién debe decidirlo y qué bloquea. Esta lista es el valor principal del entregable; no la acortes eligiendo un comportamiento.

**7 — Registrar de qué depende el flujo.** Las operaciones del sistema, los permisos, el contenido y los datos que necesita cada paso, y cuáles de ellos se confirmaron en lugar de suponerse.

## Salida

`user-flow-specification.md`, en este orden:

- **1. Tarea y fecha** — qué tarea completa este flujo y cuándo se especificó
- **2. Puntos de entrada y salidas** — por entrada: de dónde llega la persona y qué sabe; por salida: cómo termina el flujo
- **3. Pasos** — por paso: qué se ve, qué se puede hacer, qué hace el sistema, qué cambia
- **4. Puntos de decisión** — la bifurcación, la condición que la determina y el destino de cada resultado
- **5. Estados** — por paso: vacío, en carga, error, permiso denegado, éxito parcial; cada uno especificado o marcado `no puede ocurrir` con su motivo
- **6. Vuelta y reentrada** — atrás, recarga, llegada a mitad del flujo, retoma, expiración, repetición
- **7. Estados indefinidos** — el estado, quién debe decidirlo, qué bloquea
- **8. Dependencias** — qué necesita cada paso del sistema, del contenido y de los datos, marcado `confirmado` o `supuesto`
- **9. Información que falta** — qué no se pudo especificar y quién puede aportarlo

## Validación

La especificación está lista cuando se cumple todo esto:

- Cada paso de la sección 3 tiene entrada para los cinco estados de la sección 5
- Cada estado de la sección 5 está especificado o marcado `no puede ocurrir` con un motivo
- Cada bifurcación de la sección 4 nombra su condición y un destino por resultado
- Cada camino lleva a una salida de la sección 2 o a una entrada de la sección 7
- Ningún paso especifica una operación que las capacidades aportadas no incluyen
- La sección 7 no está vacía, o declara explícitamente que no queda nada indefinido

Falla la ejecución si a un paso le falta la entrada de algún estado, o si el flujo especifica un comportamiento que nunca se reportó del sistema.

## Gestión de fallos

- **No hay tarea** — detente. Informa de que un flujo no tiene nada que secuenciar y de que una lista de pantallas no es una tarea.
- **Capacidades del sistema desconocidas** — especifica el flujo con el material aportado, marca cada paso como `sin verificar` y lista en la sección 9 qué resolvería confirmarlas. Un flujo apoyado en capacidades supuestas es una propuesta.
- **Relatos contradictorios de un paso** — registra los dos, nombra ambas fuentes y eleva la contradicción a la sección 9 como bloqueante. No la resuelvas eligiendo.
- **Sin acceso a la interfaz construida** — la sección 3 queda solo como `reportado`. Declara que no se observó nada y que cada estado de la sección 5 es por tanto una especificación y no una descripción.
- **Material parcial** — especifica cada paso que el material sostenga, marca el resto como `INCOMPLETO — pendiente de <pregunta>` y entrega. La lista de indefinidos es el objetivo del documento, no un defecto suyo.
