platform-marketing-content/docs/02-definicion-modulos/PMC-002-CRM.md
rckrdmrd 74b5ed7f38 feat: Complete documentation update and orchestration configuration
- 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>
2026-01-07 05:38:31 -06:00

9.5 KiB

id title type epic status project version created_date updated_date
PMC-002-CRM PMC-002: Módulo CRM Module Definition PMC-002 Draft platform_marketing_content 1.0.0 2026-01-04 2026-01-04

PMC-002: Módulo CRM

Versión: 1.0.0 Fecha: 2025-12-08 Estado: Definición Prioridad: Alta


Descripción General

El módulo CRM (Customer Relationship Management) gestiona clientes, marcas, productos y la relación entre estos elementos. Está diseñado para integrarse directamente con el motor de generación de contenido IA.


Objetivos

  1. Gestionar clientes y contactos de la agencia
  2. Organizar marcas y productos por cliente
  3. Almacenar identidad visual y lineamientos de marca
  4. Registrar oportunidades comerciales
  5. Conectar datos de CRM con generación de contenido

Entidades del Dominio

Client

Entidad: Client
Descripción: Empresa/organización cliente de la agencia
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - name: string
  - legal_name: string
  - tax_id: string (RFC/NIF)
  - industry: string
  - size: enum [micro, small, medium, large, enterprise]
  - website: string
  - status: enum [prospect, active, inactive, churned]
  - notes: text
  - metadata: JSONB
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Tenant
  - 1:N con Contact
  - 1:N con Brand
  - 1:N con Opportunity
  - 1:N con Project

Contact

Entidad: Contact
Descripción: Persona de contacto en un cliente
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - client_id: UUID (FK)
  - first_name: string
  - last_name: string
  - email: string
  - phone: string
  - position: string
  - department: string
  - is_primary: boolean
  - status: enum [active, inactive]
  - metadata: JSONB
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Client
  - N:1 con Tenant

Brand

Entidad: Brand
Descripción: Marca de un cliente con su identidad visual
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - client_id: UUID (FK)
  - name: string
  - description: text
  - status: enum [active, inactive]
  - identity: JSONB
    - logo_url: string
    - logo_variations: array
    - primary_color: string
    - secondary_colors: array
    - typography: object
    - tone_of_voice: string (formal, casual, playful, etc.)
    - keywords: array
    - forbidden_words: array
    - visual_style: string
  - lora_models: array[UUID] (referencias a modelos entrenados)
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Client
  - N:1 con Tenant
  - 1:N con Product
  - 1:N con Campaign
  - N:N con CustomModel (LoRAs)

Product

Entidad: Product
Descripción: Producto o servicio de una marca
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - brand_id: UUID (FK)
  - name: string
  - sku: string
  - description: text
  - category: string
  - status: enum [active, discontinued, coming_soon]
  - attributes: JSONB
    - price: decimal
    - features: array
    - target_audience: string
    - use_cases: array
  - reference_images: array[string] (URLs)
  - lora_model_id: UUID (modelo específico del producto)
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Brand
  - N:1 con Tenant
  - 1:N con Asset (imágenes generadas)

Opportunity

Entidad: Opportunity
Descripción: Oportunidad de negocio/deal
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - client_id: UUID (FK)
  - contact_id: UUID (FK, opcional)
  - name: string
  - description: text
  - value: decimal
  - currency: string
  - stage: enum [lead, qualified, proposal, negotiation, won, lost]
  - probability: integer (0-100)
  - expected_close_date: date
  - actual_close_date: date
  - lost_reason: string
  - notes: text
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Client
  - N:1 con Contact
  - N:1 con Tenant
  - 1:N con Project (al convertirse)

Funcionalidades

F-002.1: Gestión de Clientes

ID Funcionalidad Descripción Prioridad
F-002.1.1 CRUD Clientes Alta, edición, listado, eliminación Alta
F-002.1.2 Búsqueda y filtros Por nombre, industria, estado Alta
F-002.1.3 Vista de cliente Dashboard con marcas, contactos, proyectos Alta
F-002.1.4 Historial Timeline de actividades y cambios Media

F-002.2: Gestión de Contactos

ID Funcionalidad Descripción Prioridad
F-002.2.1 CRUD Contactos Gestión de personas de contacto Alta
F-002.2.2 Contacto primario Marcar contacto principal por cliente Media
F-002.2.3 Directorio Vista consolidada de todos los contactos Media

F-002.3: Gestión de Marcas

ID Funcionalidad Descripción Prioridad
F-002.3.1 CRUD Marcas Alta y gestión de marcas Alta
F-002.3.2 Identidad visual Definir colores, tipografía, tono Alta
F-002.3.3 Brand guidelines Subir y almacenar guías de marca Media
F-002.3.4 Asociar LoRAs Vincular modelos entrenados a marca Alta

F-002.4: Gestión de Productos

ID Funcionalidad Descripción Prioridad
F-002.4.1 CRUD Productos Alta y gestión de productos Alta
F-002.4.2 Imágenes referencia Subir fotos del producto real Alta
F-002.4.3 Catálogo Vista de productos por marca Media
F-002.4.4 Trigger generación Botón "Generar pack de imágenes" Alta

F-002.5: Pipeline de Ventas

ID Funcionalidad Descripción Prioridad
F-002.5.1 CRUD Oportunidades Gestión de deals Media
F-002.5.2 Kanban pipeline Vista drag & drop por etapas Media
F-002.5.3 Convertir a proyecto Crear proyecto desde oportunidad ganada Media

Reglas de Negocio

RN-002.1:
  Descripción: Cliente debe tener al menos un contacto
  Validación: Warning si no hay contactos, no bloquea

RN-002.2:
  Descripción: Marca requiere identidad visual mínima
  Validación: Al menos logo_url o primary_color definido

RN-002.3:
  Descripción: Producto hereda identidad de su marca
  Comportamiento: Si no tiene LoRA propio, usa el de la marca

RN-002.4:
  Descripción: Oportunidad ganada puede generar proyecto
  Acción: Botón "Crear proyecto" disponible en stage=won

RN-002.5:
  Descripción: Datos de marca se inyectan en generación
  Comportamiento: Al generar contenido, se cargan automáticamente colores, tono, keywords

API Endpoints

Base: /api/v1/crm

# Clients
POST   /clients
GET    /clients
GET    /clients/:id
PUT    /clients/:id
DELETE /clients/:id
GET    /clients/:id/brands
GET    /clients/:id/contacts
GET    /clients/:id/projects

# Contacts
POST   /contacts
GET    /contacts
GET    /contacts/:id
PUT    /contacts/:id
DELETE /contacts/:id

# Brands
POST   /brands
GET    /brands
GET    /brands/:id
PUT    /brands/:id
DELETE /brands/:id
GET    /brands/:id/products
POST   /brands/:id/loras          # Asociar LoRA
DELETE /brands/:id/loras/:loraId  # Desasociar LoRA

# Products
POST   /products
GET    /products
GET    /products/:id
PUT    /products/:id
DELETE /products/:id
POST   /products/:id/generate     # Trigger generación

# Opportunities
POST   /opportunities
GET    /opportunities
GET    /opportunities/:id
PUT    /opportunities/:id
DELETE /opportunities/:id
POST   /opportunities/:id/convert # Convertir a proyecto

Integraciones

Con Motor de Generación (PMC-004)

Trigger: POST /products/:id/generate
Payload:
  product_id: UUID
  brand_id: UUID
  workflow_template: string
  options:
    quantity: number
    formats: array

Comportamiento:
  1. Cargar datos de producto (nombre, descripción, referencias)
  2. Cargar identidad de marca (colores, tono, LoRAs)
  3. Encolar job de generación con parámetros combinados

Con Proyectos (PMC-003)

Trigger: POST /opportunities/:id/convert
Crea:
  - Proyecto vinculado al cliente
  - Campaña inicial (opcional)
  - Copia brief de la oportunidad

Dependencias

Dependencias de Módulos:
  - PMC-001 Tenants: Aislamiento de datos
  - PMC-003 Projects: Conversión de oportunidades
  - PMC-004 Generation: Trigger de generación
  - PMC-006 Assets: Almacenamiento de logos y referencias

Servicios Externos:
  - Storage (S3/MinIO): Logos, imágenes de referencia

UI/UX Consideraciones

Vistas principales:
  - Lista de clientes con filtros y búsqueda
  - Ficha de cliente con tabs (info, contactos, marcas, proyectos)
  - Lista de marcas con preview de identidad
  - Ficha de producto con galería de referencias
  - Pipeline kanban de oportunidades

Acciones rápidas:
  - Desde producto: "Generar contenido"
  - Desde cliente: "Nueva marca", "Nuevo proyecto"
  - Desde oportunidad: "Convertir a proyecto"

Criterios de Aceptación

  • CRUD completo para Clients, Contacts, Brands, Products, Opportunities
  • Identidad de marca se almacena y muestra correctamente
  • Trigger de generación funciona desde producto
  • Pipeline de oportunidades permite drag & drop
  • Conversión de oportunidad crea proyecto
  • Búsqueda y filtros funcionan en todas las listas
  • RLS aísla datos por tenant

Referencias


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