# PMC-008: Módulo de Analytics

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

---

## Descripción General

El módulo de Analytics proporciona dashboards, reportes y métricas sobre el uso de la plataforma, rendimiento de campañas, y consumo de recursos. Permite tomar decisiones basadas en datos.

---

## Objetivos

1. Visualizar métricas clave de operación
2. Analizar rendimiento de campañas
3. Monitorear uso de recursos (generaciones, storage)
4. Generar reportes exportables
5. Identificar tendencias y oportunidades

---

## Dashboards

### Dashboard Principal (Home)

```yaml
Widgets:
  - quick_stats:
      - Campañas activas
      - Assets generados (mes)
      - Tasa de aprobación
      - Jobs en cola

  - recent_activity:
      - Últimos assets generados
      - Campañas recién creadas
      - Jobs completados

  - pending_actions:
      - Assets pendientes de revisión
      - Campañas esperando aprobación
```

### Dashboard de Producción

```yaml
Widgets:
  - generation_volume:
      Tipo: Line chart
      Datos: Generaciones por día/semana/mes
      Filtros: Tipo (imagen/texto), workflow

  - queue_status:
      Tipo: Real-time gauge
      Datos: Jobs en cola, procesando, completados

  - model_usage:
      Tipo: Pie chart
      Datos: Distribución de uso de workflows/LoRAs

  - error_rate:
      Tipo: Line chart
      Datos: % de jobs fallidos por período

  - processing_time:
      Tipo: Bar chart
      Datos: Tiempo promedio por tipo de workflow
```

### Dashboard de Campañas

```yaml
Widgets:
  - campaign_funnel:
      Tipo: Funnel chart
      Datos: Campañas por estado

  - approval_metrics:
      Tipo: Stats cards
      Datos:
        - Tasa de aprobación primera iteración
        - Promedio de revisiones por campaña
        - Tiempo desde brief hasta aprobación

  - assets_per_campaign:
      Tipo: Bar chart
      Datos: Promedio de assets por campaña

  - top_clients:
      Tipo: Table
      Datos: Clientes con más campañas/assets
```

### Dashboard de Recursos

```yaml
Widgets:
  - storage_usage:
      Tipo: Progress bar + breakdown
      Datos: GB usados vs cuota, por tipo de archivo

  - generation_quota:
      Tipo: Progress bar
      Datos: Generaciones usadas vs límite mensual

  - gpu_utilization:
      Tipo: Real-time gauge (si aplica)
      Datos: % de uso de GPU

  - cost_estimate:
      Tipo: Stats card
      Datos: Costo estimado de APIs externas (LLM, etc.)
```

---

## Reportes

### Reporte de Actividad Mensual

```yaml
Nombre: monthly_activity_report
Período: Mes natural
Contenido:
  - Resumen ejecutivo
  - Campañas creadas/completadas
  - Assets generados por tipo
  - Clientes más activos
  - Uso de recursos
  - Comparativa con mes anterior

Formatos: PDF, Excel
Programación: Automático primer día del mes
```

### Reporte de Campaña

```yaml
Nombre: campaign_report
Período: Duración de la campaña
Contenido:
  - Datos de la campaña y brief
  - Assets generados
  - Historial de revisiones
  - Tiempo total de producción
  - Participantes (usuarios)

Formatos: PDF
Generación: Manual o al cerrar campaña
```

### Reporte de Cliente

```yaml
Nombre: client_report
Período: Configurable
Contenido:
  - Proyectos y campañas del cliente
  - Assets entregados
  - Histórico de actividad
  - Métricas de satisfacción (si aplica)

Formatos: PDF, Excel
Generación: Manual
```

### Reporte de Uso (Admin)

```yaml
Nombre: usage_report
Período: Configurable
Contenido:
  - Generaciones por usuario
  - Storage consumido
  - Costo de APIs externas
  - Comparativa por período

Formatos: Excel, CSV
Audiencia: Admin/Finance
```

---

## Entidades del Dominio

### Metric

```yaml
Entidad: Metric (tabla de hechos)
Descripción: Registro agregado de métricas
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - metric_type: string (generation_count, storage_used, etc.)
  - dimension_1: string (ej: workflow_type)
  - dimension_2: string (ej: user_id)
  - value: decimal
  - period_type: enum [hour, day, week, month]
  - period_start: timestamp
  - created_at: timestamp

Índices:
  - tenant_id + metric_type + period_start
  - tenant_id + period_type + period_start
```

### Report

```yaml
Entidad: Report
Descripción: Reporte generado
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - name: string
  - type: string (monthly_activity, campaign, client, usage)
  - parameters: JSONB (filtros aplicados)
  - file_path: string
  - file_format: enum [pdf, xlsx, csv]
  - generated_by: UUID (FK a User)
  - created_at: timestamp

Relaciones:
  - N:1 con Tenant
  - N:1 con User
```

### SavedView

```yaml
Entidad: SavedView
Descripción: Vista personalizada guardada
Atributos:
  - id: UUID (PK)
  - tenant_id: UUID (FK)
  - user_id: UUID (FK)
  - name: string
  - dashboard: string (production, campaigns, resources)
  - config: JSONB (filtros, widgets visibles, layout)
  - is_default: boolean
  - created_at: timestamp
  - updated_at: timestamp

Relaciones:
  - N:1 con Tenant
  - N:1 con User
```

---

## Funcionalidades

### F-008.1: Dashboards

| ID | Funcionalidad | Descripción | Prioridad |
|----|---------------|-------------|-----------|
| F-008.1.1 | Dashboard home | Vista principal con KPIs | Alta |
| F-008.1.2 | Dashboard producción | Métricas de generación | Media |
| F-008.1.3 | Dashboard campañas | Métricas de campañas | Media |
| F-008.1.4 | Dashboard recursos | Uso de recursos | Media |
| F-008.1.5 | Filtros globales | Por fecha, cliente, usuario | Alta |

### F-008.2: Reportes

| ID | Funcionalidad | Descripción | Prioridad |
|----|---------------|-------------|-----------|
| F-008.2.1 | Generar reporte | Crear reporte bajo demanda | Media |
| F-008.2.2 | Programar reporte | Generación automática | Baja |
| F-008.2.3 | Descargar reporte | PDF, Excel, CSV | Media |
| F-008.2.4 | Historial reportes | Ver reportes generados | Baja |

### F-008.3: Personalización

| ID | Funcionalidad | Descripción | Prioridad |
|----|---------------|-------------|-----------|
| F-008.3.1 | Guardar vista | Guardar configuración de dashboard | Baja |
| F-008.3.2 | Vista por defecto | Establecer vista inicial | Baja |

---

## KPIs Principales

```yaml
Operación:
  - Generaciones totales (día/semana/mes)
  - Tiempo promedio de generación
  - Tasa de éxito de jobs (%)
  - Cola promedio (tiempo de espera)

Campañas:
  - Campañas activas
  - Tiempo promedio brief → aprobación
  - Tasa de aprobación primera iteración (%)
  - Assets por campaña (promedio)

Recursos:
  - Storage utilizado vs cuota (%)
  - Generaciones usadas vs límite (%)
  - Costo estimado de APIs externas

Usuarios:
  - Usuarios activos (día/semana/mes)
  - Generaciones por usuario
  - Acciones por usuario
```

---

## API Endpoints

```yaml
Base: /api/v1/analytics

# Dashboards
GET    /dashboards/:name        # Datos de dashboard
GET    /dashboards/:name/widgets/:widget # Datos de widget específico

# Metrics
GET    /metrics                 # Query de métricas
POST   /metrics/aggregate       # Agregación personalizada

# Reports
GET    /reports                 # Listar reportes generados
POST   /reports                 # Generar nuevo reporte
GET    /reports/:id             # Detalle de reporte
GET    /reports/:id/download    # Descargar archivo
DELETE /reports/:id             # Eliminar reporte

# Saved Views
GET    /views                   # Listar vistas guardadas
POST   /views                   # Crear vista
PUT    /views/:id               # Actualizar vista
DELETE /views/:id               # Eliminar vista
PATCH  /views/:id/default       # Establecer como default

# Quick stats (para widgets)
GET    /stats/overview          # Resumen general
GET    /stats/generations       # Stats de generación
GET    /stats/campaigns         # Stats de campañas
GET    /stats/storage           # Stats de storage
```

---

## Arquitectura de Datos

### Pipeline de Métricas

```yaml
Flujo:
  1. Evento ocurre (generación, campaña creada, etc.)
  2. EventEmitter emite evento
  3. MetricsService captura y procesa
  4. Se inserta en tabla metrics (agregado horario)
  5. Job nocturno consolida a día/semana/mes

Retención:
  - Métricas horarias: 7 días
  - Métricas diarias: 90 días
  - Métricas semanales: 1 año
  - Métricas mensuales: indefinido
```

### Queries Optimizadas

```yaml
Estrategias:
  - Tablas de métricas pre-agregadas
  - Índices por tenant + período
  - Cache en Redis para datos frecuentes
  - Refresh periódico de materialized views
```

---

## Dependencias

```yaml
Dependencias de Módulos:
  - PMC-001 Tenants: Contexto de datos
  - PMC-003 Projects: Datos de campañas
  - PMC-004 Generation: Datos de generación
  - PMC-006 Assets: Datos de almacenamiento

Servicios Externos:
  - Redis: Cache de métricas
  - (Opcional) Chart library frontend

Dependencias del Catálogo:
  - (ninguna directa)
```

---

## UI/UX Consideraciones

```yaml
Componentes:
  - DashboardGrid: Layout responsivo de widgets
  - ChartWidget: Wrapper para gráficos
  - FilterBar: Barra de filtros global
  - DateRangePicker: Selector de período
  - ExportButton: Descarga de datos/reportes

Interactividad:
  - Drill-down en gráficos
  - Tooltips con detalles
  - Filtros aplicables a toda la página
  - Auto-refresh configurable

Responsividad:
  - Widgets se reordenan en móvil
  - Gráficos adaptan tamaño
  - Tablas con scroll horizontal
```

---

## Criterios de Aceptación

- [ ] Dashboard home muestra KPIs correctos
- [ ] Filtros de fecha funcionan globalmente
- [ ] Gráficos cargan datos correctamente
- [ ] Reportes se generan en PDF y Excel
- [ ] Métricas se agregan correctamente
- [ ] Cache mejora tiempos de carga
- [ ] Datos se aíslan por tenant

---

## Referencias

- [VISION-GENERAL.md](../00-vision-general/VISION-GENERAL.md)
- [ARQUITECTURA-TECNICA.md](../00-vision-general/ARQUITECTURA-TECNICA.md)

---

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