# Requerimientos Funcionales - PMC-005 Automation

**Módulo:** Automation
**Versión:** 1.0.0
**Fecha:** 2025-12-08

---

## Gestión de Flujos

### RF-PMC-005-001: Listar Flujos de Automatización

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-001 |
| **Nombre** | Listar Flujos de Automatización |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de salida:**
- Lista de flujos disponibles
- Estado (activo/inactivo)
- Tipo (trigger_based, scheduled, manual)
- Última ejecución
- Conteo de ejecuciones

**Criterios de aceptación:**
- [ ] Flujos de sistema y custom listados
- [ ] Filtro por tipo y estado
- [ ] Ordenamiento por nombre/última ejecución

---

### RF-PMC-005-002: Ver Detalle de Flujo

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-002 |
| **Nombre** | Ver Detalle de Flujo |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de salida:**
- Descripción completa
- Evento trigger
- Configuración
- Historial de ejecuciones recientes

**Criterios de aceptación:**
- [ ] Toda la información visible
- [ ] Link a workflow en n8n (admin)

---

### RF-PMC-005-003: Activar Flujo

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-003 |
| **Nombre** | Activar Flujo |
| **Prioridad** | P1 |
| **Actor** | Tenant Admin |

**Descripción:**
Habilitar un flujo para que procese eventos.

**Criterios de aceptación:**
- [ ] is_active cambia a true
- [ ] Flujo comienza a procesar eventos
- [ ] Registro en audit log

---

### RF-PMC-005-004: Desactivar Flujo

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-004 |
| **Nombre** | Desactivar Flujo |
| **Prioridad** | P1 |
| **Actor** | Tenant Admin |

**Descripción:**
Deshabilitar un flujo sin eliminarlo.

**Criterios de aceptación:**
- [ ] is_active cambia a false
- [ ] Eventos son ignorados
- [ ] Configuración preservada

---

### RF-PMC-005-005: Configurar Flujo

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-005 |
| **Nombre** | Configurar Flujo |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Datos de entrada:**
- config: object
  - retry_on_failure: boolean
  - max_retries: number
  - timeout_seconds: number
  - custom_params: object

**Criterios de aceptación:**
- [ ] Configuración se guarda
- [ ] Valores aplicados en ejecuciones
- [ ] Validación de rangos

---

### RF-PMC-005-006: Ejecutar Flujo Manualmente

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-006 |
| **Nombre** | Ejecutar Flujo Manualmente |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Descripción:**
Disparar ejecución manual de un flujo con datos de prueba.

**Datos de entrada:**
- flow_id: UUID
- test_data: object (opcional)

**Criterios de aceptación:**
- [ ] Ejecución inicia inmediatamente
- [ ] Datos de prueba inyectados
- [ ] Resultado visible al completar

---

## Ejecuciones

### RF-PMC-005-007: Ver Historial de Ejecuciones

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-007 |
| **Nombre** | Ver Historial de Ejecuciones |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Datos de salida:**
- Lista de ejecuciones con:
  - Timestamp
  - Status
  - Duración
  - Trigger data (resumen)

**Criterios de aceptación:**
- [ ] Paginación implementada
- [ ] Filtro por status y fecha
- [ ] Click para ver detalle

---

### RF-PMC-005-008: Ver Detalle de Ejecución

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-008 |
| **Nombre** | Ver Detalle de Ejecución |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Datos de salida:**
- Datos del trigger completos
- Output data
- Error message (si falló)
- Duración
- Timestamps

**Criterios de aceptación:**
- [ ] JSON viewer para datos complejos
- [ ] Error stack visible en fallos

---

### RF-PMC-005-009: Cancelar Ejecución en Curso

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-009 |
| **Nombre** | Cancelar Ejecución en Curso |
| **Prioridad** | P3 |
| **Actor** | Tenant Admin |

**Precondiciones:**
- Ejecución en status "running"

**Criterios de aceptación:**
- [ ] Ejecución marcada como "cancelled"
- [ ] n8n notificado para cancelar

---

## Webhooks

### RF-PMC-005-010: Crear Endpoint de Webhook

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-010 |
| **Nombre** | Crear Endpoint de Webhook |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Datos de entrada:**
- name: string
- target_flow_id: UUID

**Datos de salida:**
- slug generado
- URL completa
- secret_key generado

**Criterios de aceptación:**
- [ ] URL única generada
- [ ] Secret para validación
- [ ] Endpoint activo inmediatamente

---

### RF-PMC-005-011: Listar Webhooks

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-011 |
| **Nombre** | Listar Webhooks |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Criterios de aceptación:**
- [ ] Lista de endpoints del tenant
- [ ] URL copiable
- [ ] Estado y última llamada visible

---

### RF-PMC-005-012: Eliminar Webhook

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-012 |
| **Nombre** | Eliminar Webhook |
| **Prioridad** | P3 |
| **Actor** | Tenant Admin |

**Criterios de aceptación:**
- [ ] Confirmación requerida
- [ ] Endpoint deja de funcionar
- [ ] Registro eliminado

---

### RF-PMC-005-013: Regenerar Secret de Webhook

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-013 |
| **Nombre** | Regenerar Secret de Webhook |
| **Prioridad** | P3 |
| **Actor** | Tenant Admin |

**Descripción:**
Generar nuevo secret invalidando el anterior.

**Criterios de aceptación:**
- [ ] Nuevo secret generado
- [ ] Anterior invalidado
- [ ] Integradores deben actualizar

---

### RF-PMC-005-014: Recibir Webhook Externo

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-014 |
| **Nombre** | Recibir Webhook Externo |
| **Prioridad** | P2 |
| **Actor** | Sistema Externo |

**Flujo:**
1. Sistema externo hace POST a /hooks/{tenant_slug}/{webhook_slug}
2. Sistema valida firma HMAC
3. Sistema busca flujo asociado
4. Sistema crea ejecución
5. Sistema responde 202 Accepted

**Criterios de aceptación:**
- [ ] Validación HMAC funciona
- [ ] Payload parseado correctamente
- [ ] Ejecución disparada

---

## Eventos del Sistema

### RF-PMC-005-015: Emitir Eventos Internos

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-015 |
| **Nombre** | Emitir Eventos Internos |
| **Prioridad** | P1 |
| **Actor** | Sistema |

**Descripción:**
El sistema debe emitir eventos cuando ocurren acciones relevantes.

**Eventos a emitir:**
- CRM: client.created, brand.created, product.created
- Projects: campaign.created, campaign.status_changed, campaign.approved
- Generation: job.completed, job.failed
- Assets: asset.approved, all_assets.approved

**Criterios de aceptación:**
- [ ] Eventos emitidos en cada acción
- [ ] Payload incluye datos relevantes
- [ ] Flujos suscritos son notificados

---

### RF-PMC-005-016: Suscribir Flujo a Evento

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-016 |
| **Nombre** | Suscribir Flujo a Evento |
| **Prioridad** | P1 |
| **Actor** | Sistema |

**Descripción:**
Asociar un flujo con un evento específico.

**Criterios de aceptación:**
- [ ] Flujo se activa cuando evento ocurre
- [ ] Datos del evento pasados al flujo
- [ ] Múltiples flujos pueden suscribirse al mismo evento

---

## Notificaciones

### RF-PMC-005-017: Enviar Notificación por Email

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-017 |
| **Nombre** | Enviar Notificación por Email |
| **Prioridad** | P1 |
| **Actor** | Sistema (vía n8n) |

**Descripción:**
Enviar emails como parte de flujos automatizados.

**Datos de entrada:**
- to: string (email)
- subject: string
- body: string (HTML)
- template_id: string (opcional)

**Criterios de aceptación:**
- [ ] Email enviado vía SMTP/SendGrid
- [ ] Templates soportados
- [ ] Variables interpoladas

---

### RF-PMC-005-018: Enviar Notificación a Slack

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-005-018 |
| **Nombre** | Enviar Notificación a Slack |
| **Prioridad** | P3 |
| **Actor** | Sistema (vía n8n) |

**Descripción:**
Enviar mensajes a canales de Slack.

**Datos de entrada:**
- channel: string
- message: string
- blocks: array (opcional, formato Slack)

**Criterios de aceptación:**
- [ ] Mensaje enviado al canal
- [ ] Formato Slack soportado
- [ ] Webhook configurable por tenant

---

## Resumen

| Prioridad | Cantidad |
|-----------|----------|
| P1 | 7 |
| P2 | 7 |
| P3 | 4 |
| **Total** | **18** |

---

**Documento generado por:** Requirements-Analyst
**Fecha:** 2025-12-08
