# US-MGN-008-005-002: Alertas de Desviación Presupuestaria **RF Asociado:** [RF-MGN-008-001](../../02-modelado/requerimientos-funcionales/mgn-008/RF-MGN-008-001-gestión-de-cuentas-analíticas.md) **Módulo:** MGN-008 - Contabilidad Analítica **Epic:** Presupuestos Analíticos **Prioridad:** P2 **Story Points:** 2 **Sprint:** Sprint 19 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** gerente, **Quiero** recibir alertas automáticas cuando el gasto real exceda el presupuesto, **Para** tomar acciones correctivas a tiempo. ## Descripción Detallada Sistema monitorea continuamente: - Presupuesto vs Real por cuenta analítica - Threshold configurable (ej: alertar al 80%, 100%, 120%) - Notificaciones vía email y in-app Ejemplo: - Proyecto A: Presupuesto $60K, Real $54K (90%) - Alerta: "Proyecto A ha alcanzado el 90% del presupuesto" ## Criterios de Aceptación ### Escenario 1: Alerta al 80% **Dado que** Proyecto A tiene presupuesto $60K, threshold=80%, **Cuando** gasto real alcanza $48K (80%), **Entonces** sistema envía alerta al gerente del proyecto. ### Escenario 2: Alerta al exceder 100% **Dado que** presupuesto es $60K, **Cuando** gasto real alcanza $61K (101.7%), **Entonces** sistema envía alerta crítica "Presupuesto excedido". ### Escenario 3: Configurar thresholds **Dado que** soy gerente, **Cuando** configuro thresholds: 80%, 100%, 120%, **Entonces** sistema envía alertas en cada umbral. ### Escenario 4: Dashboard de desviaciones **Dado que** múltiples proyectos tienen desviaciones, **Cuando** accedo a dashboard, **Entonces** veo widget "Proyectos en riesgo" con % de ejecución. ## Reglas de Negocio - **RN-1:** Alertas se envían solo una vez por umbral. - **RN-2:** Thresholds configurables por cuenta analítica. - **RN-3:** Alertas vía email + notificación in-app. ## Tareas Técnicas ### Backend - [ ] Service: `BudgetAlertService.checkBudgets()` (cron job) - [ ] Service: `BudgetAlertService.calculateVariance(account)` - [ ] Service: `BudgetAlertService.sendAlert(user, account, variance)` - [ ] Cron: Ejecutar cada hora - [ ] Unit tests ### Frontend - [ ] Componente: `BudgetAlertsWidget.tsx` (dashboard) - [ ] Página: `BudgetThresholdsConfigPage.tsx` - [ ] Notificaciones in-app ### Database - [ ] Tabla: `analytics.budget_alerts` (account_id, threshold, triggered_at) - [ ] Tabla: `analytics.budget_thresholds` (account_id, thresholds[]) ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 1 | | Frontend | 0.5 | | Testing | 0.5 | | **TOTAL** | **2 horas = 2 SP** | ## Definition of Done - [ ] Alertas funcionan automáticamente - [ ] Thresholds configurables - [ ] Notificaciones se envían - [ ] Tests >80% - [ ] QA/PO aprobado ## Referencias - [RF-MGN-008-001](../../02-modelado/requerimientos-funcionales/mgn-008/RF-MGN-008-001-gestión-de-cuentas-analíticas.md)