- 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>
602 lines
13 KiB
Markdown
602 lines
13 KiB
Markdown
---
|
|
id: "RF-PMC-002"
|
|
title: "CRM Module"
|
|
type: "Requirement"
|
|
status: "Done"
|
|
priority: "Alta"
|
|
module: "crm"
|
|
project: "platform_marketing_content"
|
|
version: "1.0"
|
|
rf_count: 20
|
|
created_date: "2025-12-08"
|
|
updated_date: "2026-01-04"
|
|
---
|
|
|
|
# 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
|