# Requerimientos Funcionales - PMC-003 Projects

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

---

## Gestión de Proyectos

### RF-PMC-003-001: Crear Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-001 |
| **Nombre** | Crear Proyecto |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- client_id: UUID (requerido)
- name: string (requerido)
- description: text (opcional)
- start_date: date (opcional)
- end_date: date (opcional)
- budget: decimal (opcional)

**Criterios de aceptación:**
- [ ] Proyecto se crea con status "draft"
- [ ] Código autogenerado (PRJ-YYYY-XXX)
- [ ] Owner asignado al creador

---

### RF-PMC-003-002: Editar Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-002 |
| **Nombre** | Editar Proyecto |
| **Prioridad** | P1 |
| **Actor** | Project Owner, Tenant Admin |

**Criterios de aceptación:**
- [ ] Campos básicos editables
- [ ] Cambio de cliente requiere confirmación
- [ ] Historial de cambios registrado

---

### RF-PMC-003-003: Cambiar Estado de Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-003 |
| **Nombre** | Cambiar Estado de Proyecto |
| **Prioridad** | P1 |
| **Actor** | Project Owner, Tenant Admin |

**Estados válidos:**
- draft → active
- active → on_hold, completed
- on_hold → active
- cualquiera → cancelled

**Criterios de aceptación:**
- [ ] Transiciones válidas se permiten
- [ ] Transiciones inválidas se bloquean
- [ ] Notificación al equipo en cambio de estado

---

### RF-PMC-003-004: Asignar Equipo a Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-004 |
| **Nombre** | Asignar Equipo a Proyecto |
| **Prioridad** | P2 |
| **Actor** | Project Owner, Tenant Admin |

**Descripción:**
Agregar o quitar miembros del equipo de un proyecto.

**Criterios de aceptación:**
- [ ] Usuarios del tenant pueden asignarse
- [ ] Owner siempre está en el equipo
- [ ] Notificación al agregar miembro

---

### RF-PMC-003-005: Listar Proyectos

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-005 |
| **Nombre** | Listar Proyectos |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Filtros:**
- client_id
- status
- owner_id
- date_range

**Criterios de aceptación:**
- [ ] Paginación funciona
- [ ] Filtros combinables
- [ ] Vista lista y tarjetas

---

### RF-PMC-003-006: Ver Dashboard de Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-006 |
| **Nombre** | Ver Dashboard de Proyecto |
| **Prioridad** | P1 |
| **Actor** | Miembros del proyecto |

**Información mostrada:**
- Resumen del proyecto
- Campañas con estado
- Assets recientes
- Actividad del equipo
- Métricas de progreso

**Criterios de aceptación:**
- [ ] Dashboard carga correctamente
- [ ] Métricas calculadas en tiempo real
- [ ] Acciones rápidas disponibles

---

## Gestión de Campañas

### RF-PMC-003-007: Crear Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-007 |
| **Nombre** | Crear Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Datos de entrada:**
- project_id: UUID (requerido)
- brand_id: UUID (requerido)
- name: string (requerido)
- type: enum (requerido)
- channels: array[string]
- start_date: date (opcional)
- end_date: date (opcional)

**Criterios de aceptación:**
- [ ] Campaña se crea con status "draft"
- [ ] Brand se vincula correctamente
- [ ] Brief vacío se inicializa

---

### RF-PMC-003-008: Editar Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-008 |
| **Nombre** | Editar Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Criterios de aceptación:**
- [ ] Campos básicos editables en cualquier estado
- [ ] Brief editable hasta "in_production"

---

### RF-PMC-003-009: Completar Brief de Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-009 |
| **Nombre** | Completar Brief de Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Secciones del Brief:**
- Objetivo: descripción, KPIs
- Audiencia: demographics, psychographics, pain_points
- Mensajes: main_message, tone, CTA, hashtags
- Visual: style, mood, color_palette, references
- Restricciones: forbidden_words, disclaimers
- Entregables: formatos, cantidades

**Criterios de aceptación:**
- [ ] Formulario con secciones colapsables
- [ ] Validación de campos mínimos
- [ ] Guardado automático (draft)
- [ ] Al completar: estado → "briefing"

---

### RF-PMC-003-010: Usar Plantilla de Brief

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-010 |
| **Nombre** | Usar Plantilla de Brief |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Descripción:**
Cargar brief desde una plantilla predefinida.

**Criterios de aceptación:**
- [ ] Listado de plantillas disponibles
- [ ] Preview de plantilla antes de aplicar
- [ ] Campos se pre-llenan pero son editables

---

### RF-PMC-003-011: Cambiar Estado de Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-011 |
| **Nombre** | Cambiar Estado de Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Estados y transiciones:**
```
draft → briefing → in_production → review → approved → published
                        ↑_______________|
                        (revision_requested)
```

**Validaciones:**
- briefing → in_production: brief mínimo completado
- review → approved: al menos 1 asset aprobado
- approved → published: confirmación requerida

**Criterios de aceptación:**
- [ ] Transiciones válidas funcionan
- [ ] Validaciones se aplican
- [ ] Notificaciones en cada cambio

---

### RF-PMC-003-012: Listar Campañas

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-012 |
| **Nombre** | Listar Campañas |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Vistas:**
- Lista con filtros
- Kanban por estado
- Calendario por fechas

**Criterios de aceptación:**
- [ ] Filtro por proyecto, brand, status, type
- [ ] Vista Kanban con drag & drop
- [ ] Búsqueda por nombre

---

### RF-PMC-003-013: Ver Detalle de Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-013 |
| **Nombre** | Ver Detalle de Campaña |
| **Prioridad** | P1 |
| **Actor** | Miembros del proyecto |

**Información mostrada:**
- Datos de campaña
- Brief completo
- Assets generados con estados
- Historial de actividad
- Jobs de generación

**Criterios de aceptación:**
- [ ] Todas las secciones visibles
- [ ] Assets organizados por estado
- [ ] Acciones contextuales disponibles

---

## Generación de Contenido

### RF-PMC-003-014: Lanzar Generación desde Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-014 |
| **Nombre** | Lanzar Generación desde Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Flujo:**
1. Usuario abre campaña en status "briefing" o superior
2. Selecciona "Generar contenido"
3. Elige workflows según deliverables del brief
4. Configura opciones adicionales
5. Sistema crea jobs de generación
6. Sistema cambia status a "in_production" si no lo está

**Criterios de aceptación:**
- [ ] Brief se usa para configurar generación
- [ ] Múltiples workflows ejecutables
- [ ] Progreso visible en tiempo real

---

### RF-PMC-003-015: Seleccionar Workflows de Generación

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-015 |
| **Nombre** | Seleccionar Workflows de Generación |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Descripción:**
Elegir qué workflows ejecutar basado en deliverables del brief.

**Criterios de aceptación:**
- [ ] Workflows sugeridos según tipo de campaña
- [ ] Preview de cada workflow
- [ ] Configuración de cantidad por workflow

---

### RF-PMC-003-016: Monitorear Progreso de Generación

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-016 |
| **Nombre** | Monitorear Progreso de Generación |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Información mostrada:**
- Jobs en cola
- Jobs procesando (con %)
- Jobs completados
- Jobs fallidos

**Criterios de aceptación:**
- [ ] Actualización en tiempo real (websocket)
- [ ] Posibilidad de cancelar jobs pendientes
- [ ] Reintentar jobs fallidos

---

## Flujo de Aprobación

### RF-PMC-003-017: Aprobar Asset de Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-017 |
| **Nombre** | Aprobar Asset de Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Flujo:**
1. Usuario revisa asset en vista de revisión
2. Selecciona "Aprobar"
3. Sistema marca asset como aprobado
4. Sistema registra aprobador y timestamp

**Criterios de aceptación:**
- [ ] Asset cambia a status "approved"
- [ ] Metadata de aprobación registrada
- [ ] No editable después de aprobar

---

### RF-PMC-003-018: Rechazar Asset de Campaña

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-018 |
| **Nombre** | Rechazar Asset de Campaña |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Flujo:**
1. Usuario revisa asset
2. Selecciona "Rechazar"
3. Sistema solicita feedback obligatorio
4. Sistema marca asset como rechazado

**Criterios de aceptación:**
- [ ] Feedback es requerido
- [ ] Asset puede regenerarse
- [ ] Historial de rechazos visible

---

### RF-PMC-003-019: Solicitar Revisión de Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-019 |
| **Nombre** | Solicitar Revisión de Asset |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Descripción:**
Pedir cambios específicos en un asset antes de decidir.

**Criterios de aceptación:**
- [ ] Comentario con posición en imagen
- [ ] Asset queda en "revision_requested"
- [ ] Notificación a equipo

---

### RF-PMC-003-020: Aprobar Todos los Assets

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-020 |
| **Nombre** | Aprobar Todos los Assets |
| **Prioridad** | P2 |
| **Actor** | Tenant Admin |

**Descripción:**
Acción bulk para aprobar todos los assets pendientes.

**Criterios de aceptación:**
- [ ] Confirmación requerida
- [ ] Solo assets en "pending_review"
- [ ] Registro individual por asset

---

### RF-PMC-003-021: Regenerar Asset

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-021 |
| **Nombre** | Regenerar Asset |
| **Prioridad** | P2 |
| **Actor** | Creative |

**Descripción:**
Crear nueva versión de un asset rechazado o en revisión.

**Flujo:**
1. Usuario selecciona asset rechazado
2. Selecciona "Regenerar"
3. Opcionalmente ajusta parámetros
4. Sistema crea nuevo job
5. Nuevo asset se vincula como versión

**Criterios de aceptación:**
- [ ] Parámetros originales pre-cargados
- [ ] Historial de versiones mantenido
- [ ] Original no se elimina

---

### RF-PMC-003-022: Descargar Assets Aprobados

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-003-022 |
| **Nombre** | Descargar Assets Aprobados |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Descripción:**
Descargar pack de todos los assets aprobados de la campaña.

**Criterios de aceptación:**
- [ ] ZIP generado con estructura organizada
- [ ] Solo assets aprobados incluidos
- [ ] Copys incluidos como .txt
- [ ] Opción de selección manual

---

## Resumen

| Prioridad | Cantidad |
|-----------|----------|
| P1 | 15 |
| P2 | 7 |
| **Total** | **22** |

---

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