197 lines
5.3 KiB
Markdown
197 lines
5.3 KiB
Markdown
# 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
|