# EPICA: EPIC-MGN-021 - Control y Facturacion de Tokens IA ## Metadata | Campo | Valor | |-------|-------| | **ID** | EPIC-MGN-021 | | **Nombre** | Control y Facturacion de Tokens IA | | **Modulo** | billing, ai | | **Fase** | Fase 5 - AI Integration | | **Prioridad** | P0 | | **Estado** | Backlog | | **Story Points** | 26 | | **Sprint(s)** | Sprint 24-26 | --- ## Descripcion Sistema de control, medicion y facturacion del uso de tokens de IA en la plataforma. Incluye tracking en tiempo real, limites por plan, alertas de consumo, y facturacion automatica por uso excedente. --- ## Objetivo de Negocio - Controlar costos de IA por tenant - Monetizar uso de IA como servicio adicional - Evitar abuso del sistema - Proporcionar transparencia en consumo --- ## Historias de Usuario | ID | Historia | Prioridad | SP | Estado | |----|----------|-----------|-----|--------| | US-MGN021-001 | Como sistema, quiero registrar tokens usados en cada llamada IA | P0 | 5 | Backlog | | US-MGN021-002 | Como tenant owner, quiero ver mi consumo de tokens | P0 | 3 | Backlog | | US-MGN021-003 | Como sistema, quiero validar limites de tokens antes de ejecutar | P0 | 5 | Backlog | | US-MGN021-004 | Como tenant owner, quiero recibir alertas de consumo alto | P0 | 3 | Backlog | | US-MGN021-005 | Como sistema, quiero calcular costo de tokens en factura | P0 | 5 | Backlog | | US-MGN021-006 | Como admin, quiero configurar precios de tokens | P0 | 3 | Backlog | | US-MGN021-007 | Como tenant owner, quiero comprar paquete de tokens adicionales | P1 | 3 | Backlog | **Total Story Points:** 27 SP --- ## Criterios de Aceptacion **Funcionales:** - [ ] Registro de cada llamada IA con tokens input/output - [ ] Dashboard de consumo por periodo - [ ] Desglose por tipo de operacion (WA, asistente, embeddings) - [ ] Validacion de limite antes de ejecutar - [ ] Bloqueo o degradacion al exceder limite - [ ] Alertas configurables (50%, 80%, 100%) - [ ] Linea en factura por tokens excedentes - [ ] Compra de paquetes adicionales **No Funcionales:** - [ ] Registro asincrono (no impactar latencia) - [ ] Precision de +/- 1% en conteo - [ ] Retencion de 12 meses de historial --- ## Tipos de Tokens | Metrica | Descripcion | Precio/1K | |---------|-------------|-----------| | ai_input_tokens | Tokens de entrada (prompts) | $0.003 USD | | ai_output_tokens | Tokens de salida (respuestas) | $0.015 USD | | ai_embeddings | Tokens de embeddings | $0.0001 USD | | whatsapp_ai_conversations | Conversaciones WA procesadas | $0.05 USD/conv | --- ## Limites por Plan | Plan | Tokens Incluidos | Overage | |------|------------------|---------| | Starter | 100,000/mes | No permitido | | Growth | 500,000/mes | A precio de lista | | Enterprise | Negociable | A precio de lista | --- ## Flujo de Tracking ``` [Llamada a AI API] | v [AI Service Wrapper] | ├── Contar tokens input ├── Llamar API externa ├── Contar tokens output | v [Token Logger (async)] | ├── Insertar en usage_records ├── Actualizar contador periodo | v [Limit Checker] | ├── Si < limite: OK ├── Si > warning: alertar └── Si > limite: bloquear/degradar ``` --- ## Alertas | Nivel | Threshold | Accion | |-------|-----------|--------| | Info | 50% | Email informativo | | Warning | 80% | Email + push + in-app | | Critical | 95% | Email + llamada (enterprise) | | Blocked | 100% | Bloqueo de nuevas llamadas | --- ## Dependencias **Depende de:** - EPIC-MGN-016 Billing (facturacion) - EPIC-MGN-017 Stripe (cobro) - EPIC-MGN-018 WhatsApp (uso de IA) **Bloquea:** - Ninguna (habilita facturacion justa) --- ## Desglose Tecnico **Database:** - [ ] Extender billing.usage_records - [ ] Vista: vw_ai_usage_summary - [ ] Tabla: ai_token_packages (paquetes adicionales) **Backend:** - [ ] Service: AITokenService - [ ] Middleware: TokenTrackingMiddleware - [ ] Job: UsageAlertJob - [ ] Job: MonthlyUsageBillingJob **Frontend:** - [ ] Dashboard de consumo IA - [ ] Configuracion de alertas - [ ] Compra de paquetes --- ## Modelo de Datos ```sql -- Paquetes de tokens adicionales CREATE TABLE billing.ai_token_packages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), tenant_id UUID NOT NULL REFERENCES core_tenants.tenants(id), tokens_purchased INT NOT NULL, price_paid DECIMAL(10,2) NOT NULL, currency VARCHAR(3) DEFAULT 'USD', tokens_remaining INT NOT NULL, expires_at TIMESTAMPTZ, purchased_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, stripe_payment_id VARCHAR(50) ); -- Vista de uso agregado CREATE VIEW billing.vw_ai_usage_current AS SELECT tenant_id, SUM(CASE WHEN metric_type = 'ai_input_tokens' THEN value ELSE 0 END) AS input_tokens, SUM(CASE WHEN metric_type = 'ai_output_tokens' THEN value ELSE 0 END) AS output_tokens, SUM(CASE WHEN metric_type = 'ai_embeddings' THEN value ELSE 0 END) AS embedding_tokens, SUM(value) AS total_tokens FROM billing.usage_records WHERE period = to_char(CURRENT_DATE, 'YYYY-MM') AND metric_type LIKE 'ai_%' GROUP BY tenant_id; ``` --- **Creado por:** Requirements-Analyst **Fecha:** 2025-12-05