# Requerimientos Funcionales - PMC-002 CRM

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

---

## Gestión de Clientes

### RF-PMC-002-001: Crear Cliente

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-001 |
| **Nombre** | Crear Cliente |
| **Prioridad** | P1 |
| **Actor** | Creative, Analyst, Tenant Admin |

**Descripción:**
El sistema debe permitir registrar un nuevo cliente de la agencia.

**Datos de entrada:**
- name: string (requerido)
- legal_name: string (opcional)
- tax_id: string (opcional)
- industry: string (opcional)
- size: enum (opcional)
- website: string (opcional)
- notes: text (opcional)

**Criterios de aceptación:**
- [ ] Cliente se crea con status "prospect"
- [ ] tenant_id se asigna automáticamente
- [ ] Validación de datos funciona

---

### RF-PMC-002-002: Editar Cliente

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-002 |
| **Nombre** | Editar Cliente |
| **Prioridad** | P1 |
| **Actor** | Creative, Analyst, Tenant Admin |

**Descripción:**
El sistema debe permitir modificar datos de un cliente existente.

**Criterios de aceptación:**
- [ ] Todos los campos editables se actualizan
- [ ] Cambio de status registra historial
- [ ] Audit log registra modificaciones

---

### RF-PMC-002-003: Listar Clientes

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

**Descripción:**
El sistema debe mostrar lista de clientes con filtros y paginación.

**Filtros disponibles:**
- status: prospect, active, inactive, churned
- industry: string
- size: enum
- search: nombre o legal_name

**Criterios de aceptación:**
- [ ] Paginación funciona correctamente
- [ ] Filtros se combinan con AND
- [ ] Ordenamiento por nombre/fecha

---

### RF-PMC-002-004: Ver Ficha de Cliente

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-004 |
| **Nombre** | Ver Ficha de Cliente |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Descripción:**
El sistema debe mostrar vista detallada del cliente con información relacionada.

**Datos mostrados:**
- Información básica
- Contactos asociados
- Marcas del cliente
- Proyectos activos
- Oportunidades abiertas
- Historial de actividad

**Criterios de aceptación:**
- [ ] Tabs organizan información
- [ ] Datos relacionados cargan correctamente
- [ ] Acciones rápidas disponibles

---

### RF-PMC-002-005: Eliminar Cliente

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

**Descripción:**
El sistema debe permitir eliminar un cliente (soft delete).

**Validaciones:**
- No tiene proyectos activos
- Confirmación requerida

**Criterios de aceptación:**
- [ ] Soft delete funciona
- [ ] Validaciones impiden eliminación si hay dependencias activas

---

## Gestión de Contactos

### RF-PMC-002-006: Crear Contacto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-006 |
| **Nombre** | Crear Contacto |
| **Prioridad** | P1 |
| **Actor** | Creative, Analyst, Tenant Admin |

**Datos de entrada:**
- client_id: UUID (requerido)
- first_name: string (requerido)
- last_name: string (requerido)
- email: string (requerido)
- phone: string (opcional)
- position: string (opcional)
- is_primary: boolean (default false)

**Criterios de aceptación:**
- [ ] Contacto se asocia al cliente
- [ ] Email validado (formato)
- [ ] Solo un contacto primario por cliente

---

### RF-PMC-002-007: Editar Contacto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-007 |
| **Nombre** | Editar Contacto |
| **Prioridad** | P2 |
| **Actor** | Creative, Analyst, Tenant Admin |

**Criterios de aceptación:**
- [ ] Campos se actualizan correctamente
- [ ] Cambio de is_primary actualiza otros contactos

---

### RF-PMC-002-008: Listar Contactos

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-008 |
| **Nombre** | Listar Contactos |
| **Prioridad** | P2 |
| **Actor** | Todos los roles |

**Descripción:**
Listar contactos del tenant o de un cliente específico.

**Criterios de aceptación:**
- [ ] Filtro por cliente funciona
- [ ] Búsqueda por nombre/email
- [ ] Paginación implementada

---

### RF-PMC-002-009: Marcar Contacto Primario

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-009 |
| **Nombre** | Marcar Contacto Primario |
| **Prioridad** | P2 |
| **Actor** | Creative, Analyst, Tenant Admin |

**Descripción:**
Designar un contacto como principal del cliente.

**Criterios de aceptación:**
- [ ] Solo un contacto primario por cliente
- [ ] Al marcar uno, otros se desmarcan automáticamente

---

## Gestión de Marcas

### RF-PMC-002-010: Crear Marca

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-010 |
| **Nombre** | Crear Marca |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Datos de entrada:**
- client_id: UUID (requerido)
- name: string (requerido)
- description: text (opcional)
- identity: object (opcional)
  - logo_url
  - primary_color
  - secondary_colors
  - typography
  - tone_of_voice
  - keywords
  - forbidden_words
  - visual_style

**Criterios de aceptación:**
- [ ] Marca se asocia al cliente
- [ ] Identity se almacena como JSONB
- [ ] Logo se puede subir o referenciar URL

---

### RF-PMC-002-011: Editar Marca

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-011 |
| **Nombre** | Editar Marca |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Criterios de aceptación:**
- [ ] Todos los campos de identity editables
- [ ] Preview de colores en tiempo real
- [ ] Cambios se propagan a nuevas generaciones

---

### RF-PMC-002-012: Definir Identidad Visual

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-012 |
| **Nombre** | Definir Identidad Visual |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Descripción:**
Configurar todos los elementos de identidad visual de la marca.

**Campos de identidad:**
- Logo (principal y variaciones)
- Paleta de colores
- Tipografías
- Tono de voz
- Keywords positivas
- Palabras prohibidas
- Estilo visual preferido

**Criterios de aceptación:**
- [ ] Formulario estructurado para cada sección
- [ ] Upload de logos funciona
- [ ] Preview visual de paleta de colores

---

### RF-PMC-002-013: Asociar LoRA a Marca

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-013 |
| **Nombre** | Asociar LoRA a Marca |
| **Prioridad** | P1 |
| **Actor** | Creative, Tenant Admin |

**Descripción:**
Vincular modelos LoRA entrenados con una marca.

**Flujo:**
1. Usuario accede a configuración de marca
2. Selecciona "Modelos IA"
3. Elige LoRA(s) del catálogo del tenant
4. Sistema vincula LoRA con marca
5. LoRA se usa automáticamente en generaciones de la marca

**Criterios de aceptación:**
- [ ] Múltiples LoRAs pueden asociarse
- [ ] LoRA se aplica por defecto en generación
- [ ] Desasociación funciona

---

### RF-PMC-002-014: Listar Marcas

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-014 |
| **Nombre** | Listar Marcas |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Criterios de aceptación:**
- [ ] Filtro por cliente funciona
- [ ] Preview de logo/colores en lista
- [ ] Búsqueda por nombre

---

## Gestión de Productos

### RF-PMC-002-015: Crear Producto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-015 |
| **Nombre** | Crear Producto |
| **Prioridad** | P1 |
| **Actor** | Creative, Analyst |

**Datos de entrada:**
- brand_id: UUID (requerido)
- name: string (requerido)
- sku: string (opcional)
- description: text (opcional)
- category: string (opcional)
- attributes: object (precio, features, etc.)
- reference_images: array[file] (opcional)

**Criterios de aceptación:**
- [ ] Producto se asocia a marca
- [ ] Imágenes de referencia se almacenan
- [ ] Status inicial "active"

---

### RF-PMC-002-016: Editar Producto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-016 |
| **Nombre** | Editar Producto |
| **Prioridad** | P2 |
| **Actor** | Creative, Analyst |

**Criterios de aceptación:**
- [ ] Campos se actualizan correctamente
- [ ] Imágenes de referencia pueden agregarse/quitarse

---

### RF-PMC-002-017: Subir Imágenes de Referencia

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-017 |
| **Nombre** | Subir Imágenes de Referencia |
| **Prioridad** | P1 |
| **Actor** | Creative, Analyst |

**Descripción:**
Agregar fotos reales del producto para usar como referencia en generación.

**Criterios de aceptación:**
- [ ] Upload múltiple funciona
- [ ] Formatos: JPG, PNG, WebP
- [ ] Tamaño máximo: 10MB por imagen
- [ ] Thumbnails generados automáticamente

---

### RF-PMC-002-018: Trigger Generación desde Producto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-018 |
| **Nombre** | Trigger Generación desde Producto |
| **Prioridad** | P1 |
| **Actor** | Creative |

**Descripción:**
Iniciar generación de contenido directamente desde la ficha de producto.

**Flujo:**
1. Usuario ve ficha de producto
2. Selecciona "Generar contenido"
3. Elige workflow template
4. Configura opciones (cantidad, estilo)
5. Sistema crea job de generación
6. Sistema redirige a monitor o muestra progreso

**Criterios de aceptación:**
- [ ] Datos del producto se cargan al job
- [ ] Identidad de marca se incluye
- [ ] LoRAs se aplican automáticamente

---

### RF-PMC-002-019: Listar Productos

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-019 |
| **Nombre** | Listar Productos |
| **Prioridad** | P1 |
| **Actor** | Todos los roles |

**Criterios de aceptación:**
- [ ] Filtro por marca funciona
- [ ] Vista de catálogo con imágenes
- [ ] Búsqueda por nombre/SKU

---

## Gestión de Oportunidades

### RF-PMC-002-020: Crear Oportunidad

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-020 |
| **Nombre** | Crear Oportunidad |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Datos de entrada:**
- client_id: UUID (requerido)
- name: string (requerido)
- description: text (opcional)
- value: decimal (opcional)
- currency: string (default: USD)
- expected_close_date: date (opcional)

**Criterios de aceptación:**
- [ ] Stage inicial "lead"
- [ ] Probability calculada por stage

---

### RF-PMC-002-021: Mover Oportunidad en Pipeline

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-021 |
| **Nombre** | Mover Oportunidad en Pipeline |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Descripción:**
Cambiar stage de una oportunidad mediante drag & drop o acción directa.

**Stages:**
- lead → qualified → proposal → negotiation → won/lost

**Criterios de aceptación:**
- [ ] Drag & drop en vista Kanban
- [ ] Probability se actualiza automáticamente
- [ ] Registro de historial de cambios

---

### RF-PMC-002-022: Cerrar Oportunidad como Ganada

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-022 |
| **Nombre** | Cerrar Oportunidad como Ganada |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Flujo:**
1. Usuario mueve a stage "won"
2. Sistema solicita valor final confirmado
3. Sistema marca como ganada
4. Sistema ofrece crear proyecto

**Criterios de aceptación:**
- [ ] actual_close_date se registra
- [ ] Opción de crear proyecto disponible

---

### RF-PMC-002-023: Cerrar Oportunidad como Perdida

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-023 |
| **Nombre** | Cerrar Oportunidad como Perdida |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Flujo:**
1. Usuario mueve a stage "lost"
2. Sistema solicita motivo de pérdida
3. Sistema registra lost_reason
4. Sistema marca como perdida

**Criterios de aceptación:**
- [ ] lost_reason es requerido
- [ ] Oportunidad no editable después de cerrar

---

### RF-PMC-002-024: Convertir Oportunidad en Proyecto

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-024 |
| **Nombre** | Convertir Oportunidad en Proyecto |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Descripción:**
Crear proyecto automáticamente desde oportunidad ganada.

**Flujo:**
1. Usuario selecciona "Convertir a proyecto"
2. Sistema muestra formulario pre-llenado
3. Usuario confirma/modifica datos
4. Sistema crea proyecto vinculado al cliente
5. Sistema vincula oportunidad con proyecto

**Criterios de aceptación:**
- [ ] Datos del cliente se heredan
- [ ] Descripción de oportunidad se copia a proyecto
- [ ] Relación bidireccional establecida

---

### RF-PMC-002-025: Vista Kanban de Oportunidades

| Campo | Valor |
|-------|-------|
| **ID** | RF-PMC-002-025 |
| **Nombre** | Vista Kanban de Oportunidades |
| **Prioridad** | P2 |
| **Actor** | Analyst, Tenant Admin |

**Descripción:**
Mostrar pipeline de oportunidades en formato Kanban.

**Características:**
- Columnas por stage
- Cards con info resumida
- Drag & drop entre columnas
- Filtros por cliente, fecha, valor
- Totales por columna

**Criterios de aceptación:**
- [ ] Drag & drop funciona
- [ ] Totales se calculan correctamente
- [ ] Filtros se aplican en tiempo real

---

## Resumen

| Prioridad | Cantidad |
|-----------|----------|
| P1 | 14 |
| P2 | 10 |
| P3 | 1 |
| **Total** | **25** |

---

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