# RF-MGN-015-005: Registro de Uso y Métricas **Módulo:** MGN-015 - Billing y Suscripciones **Prioridad:** P1 **Story Points:** 8 **Estado:** Definido **Fecha:** 2025-11-24 ## Descripción El sistema debe registrar y monitorear el uso de recursos por tenant para: (1) validar límites según el plan contratado, (2) facturar uso adicional cuando aplique, y (3) proporcionar métricas de consumo a los administradores. Los recursos monitoreados incluyen usuarios activos, empresas, almacenamiento, y transacciones. ## Actores - **Actor Principal:** Sistema (registro automático) - **Actores Secundarios:** - Tenant Owner (consulta de uso) - Administrador de Plataforma (análisis global) ## Precondiciones 1. Tenant con suscripción activa 2. Plan con límites definidos 3. Sistema de métricas configurado ## Flujo Principal - Registro de Uso 1. Usuario realiza acción que consume recurso 2. Sistema intercepta acción vía middleware/trigger 3. Sistema verifica límite según plan actual 4. Si dentro del límite: Permite acción, registra uso 5. Si excede límite: - Verifica si plan permite uso adicional facturable - Si permite: Registra como uso adicional - Si no permite: Bloquea acción con mensaje claro ## Flujos Alternativos ### FA-1: Validación de Usuarios 1. Admin intenta crear nuevo usuario 2. Sistema consulta `billing.can_add_user(tenant_id)` 3. Función verifica: usuarios_activos < max_users del plan 4. Si válido: Permite creación 5. Si excede: Muestra "Límite de usuarios alcanzado. Upgrade necesario." ### FA-2: Validación de Empresas 1. Admin intenta crear nueva empresa 2. Sistema consulta límite de empresas del plan 3. Si válido: Permite creación 4. Si excede: Muestra "Límite de empresas alcanzado" ### FA-3: Monitoreo de Almacenamiento 1. Sistema calcula uso de almacenamiento periódicamente 2. Si uso > 80%: Notifica al tenant owner 3. Si uso > 100%: Bloquea nuevas subidas 4. Usuario debe liberar espacio o upgrade ### FA-4: Dashboard de Uso 1. Tenant owner accede a panel de uso 2. Sistema muestra: - Usuarios: 8/10 (80%) - Empresas: 1/1 (100%) - Almacenamiento: 2.5GB/5GB (50%) 3. Sistema muestra gráfica histórica de uso 4. Sistema recomienda upgrade si uso > 80% ## Reglas de Negocio - **RN-1:** Uso se registra en tiempo real para recursos críticos - **RN-2:** Almacenamiento se calcula cada 6 horas - **RN-3:** max_users = NULL significa usuarios ilimitados - **RN-4:** Uso histórico se mantiene por 12 meses - **RN-5:** Alertas se envían al 80% y 100% de uso - **RN-6:** Bloqueo suave: advertencia pero permite continuar - **RN-7:** Bloqueo duro: impide acción completamente ## Métricas Monitoreadas | Métrica | Tipo | Límite en Plan | Uso Adicional | |---------|------|----------------|---------------| | Usuarios activos | Conteo | max_users | No | | Empresas | Conteo | max_companies | No | | Almacenamiento | GB | max_storage_gb | Sí ($X/GB) | | Transacciones/mes | Conteo | max_transactions | Sí ($X/1000) | | API calls/mes | Conteo | max_api_calls | Sí ($X/10000) | ## Criterios de Aceptación - [ ] Sistema valida límite de usuarios antes de crear - [ ] Sistema valida límite de empresas antes de crear - [ ] Sistema monitorea uso de almacenamiento - [ ] Tenant owner puede ver dashboard de uso actual - [ ] Sistema muestra alertas al acercarse a límites - [ ] Sistema bloquea acciones cuando se exceden límites - [ ] Sistema registra histórico de uso por período - [ ] Admin puede ver métricas globales de todos los tenants - [ ] Sistema calcula uso adicional para facturación ## Entidades Involucradas - **Principales:** - billing.usage_records (id, tenant_id, metric_type, quantity, period_start/end) - **Relacionadas:** - billing.subscriptions (plan con límites) - billing.subscription_plans (definición de límites) - billing.invoices (facturación de uso adicional) ## Dashboard de Uso ``` ┌─────────────────────────────────────────────────────┐ │ USO DEL PLAN: Professional │ ├─────────────────────────────────────────────────────┤ │ │ │ Usuarios ████████░░ 8/10 (80%) │ │ ⚠️ Próximo al límite │ │ │ │ Empresas ██████████ 1/1 (100%) │ │ 🚫 Límite alcanzado │ │ │ │ Almacenamiento █████░░░░░ 2.5/5 GB (50%) │ │ ✓ OK │ │ │ │ API Calls (mes) ███░░░░░░░ 3K/10K (30%) │ │ ✓ OK │ │ │ ├─────────────────────────────────────────────────────┤ │ [Upgrade Plan] para aumentar límites │ └─────────────────────────────────────────────────────┘ ``` ## Funciones de Validación ```sql -- Verificar si puede agregar usuario SELECT billing.can_add_user('tenant-uuid'); -- Returns: true/false -- Obtener uso actual SELECT billing.get_current_usage('tenant-uuid', 'users'); -- Returns: { current: 8, limit: 10, percentage: 80 } -- Verificar feature habilitada SELECT billing.has_feature('tenant-uuid', 'api_access'); -- Returns: true/false ``` ## Referencias - [RF-MGN-015-001](./RF-MGN-015-001-gestion-planes-suscripcion.md) - Planes (límites) - [RF-MGN-015-002](./RF-MGN-015-002-gestion-suscripciones-tenant.md) - Suscripciones ## Notas Técnicas - **Tabla:** `billing.usage_records` - **Trigger:** En `auth.users` para conteo de usuarios - **Trigger:** En `companies.companies` para conteo de empresas - **Job:** Cálculo de almacenamiento cada 6 horas - **Cache:** Uso actual en Redis para validaciones rápidas - **Agregación:** Métricas mensuales para histórico ## Dependencias - **RF Requeridos:** RF-MGN-015-001, RF-MGN-015-002 - **Relacionado con:** RF-MGN-015-004 (Facturación de uso adicional)