- Update vision, architecture and technical documentation - Update module definitions (PMC-001 to PMC-008) - Update requirements documentation - Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml - Add orchestration guidelines and references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
429 lines
8.6 KiB
Markdown
429 lines
8.6 KiB
Markdown
---
|
|
id: "RF-PMC-005"
|
|
title: "Automation Module"
|
|
type: "Requirement"
|
|
status: "Done"
|
|
priority: "Media"
|
|
module: "automation"
|
|
project: "platform_marketing_content"
|
|
version: "1.0"
|
|
rf_count: 10
|
|
created_date: "2025-12-08"
|
|
updated_date: "2026-01-04"
|
|
---
|
|
|
|
# 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
|