# US-MGN-008-005-001: CRUD Presupuestos Analíticos **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:** P1 **Story Points:** 3 **Sprint:** Sprint 19 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** gerente, **Quiero** crear presupuestos para cuentas analíticas, **Para** controlar gastos/ingresos proyectados vs reales. ## Descripción Detallada Presupuesto analítico define montos proyectados por: - Cuenta analítica (ej: Proyecto A) - Período (mensual, trimestral, anual) - Tipo (ingresos, gastos) Ejemplo: - Proyecto A, Q1-2024: Presupuesto Ingresos $100K, Gastos $60K ## Criterios de Aceptación ### Escenario 1: Crear presupuesto **Dado que** Proyecto A existe, **Cuando** creo presupuesto: account_id=Proyecto-A, period=Q1-2024, budget_revenue=100K, budget_expense=60K, **Entonces** sistema crea presupuesto exitosamente. ### Escenario 2: Presupuesto único por cuenta/período **Dado que** ya existe presupuesto para Proyecto-A Q1-2024, **Cuando** intento crear otro, **Entonces** error 400 "Ya existe presupuesto para esta cuenta y período". ### Escenario 3: Actualizar presupuesto **Dado que** presupuesto existe, **Cuando** actualizo budget_expense=70K, **Entonces** sistema actualiza y registra en audit_log. ## Reglas de Negocio - **RN-1:** Presupuesto único por cuenta + período. - **RN-2:** Puede ser por mes, trimestre o año. - **RN-3:** budget_revenue y budget_expense son opcionales (pueden ser 0). ## Tareas Técnicas ### Backend - [ ] Endpoint: POST/GET/PUT/DELETE `/api/v1/analytics/budgets` - [ ] Service: `AnalyticalBudgetService` (CRUD) - [ ] Validar unicidad cuenta+período - [ ] Unit tests ### Frontend - [ ] Página: `AnalyticalBudgetsPage.tsx` - [ ] Formulario CRUD - [ ] Selector de período - [ ] Component tests ### Database - [ ] Tabla: `analytics.budgets` (account_id, period_start, period_end, budget_revenue, budget_expense) - [ ] Constraint: unique(account_id, period_start, period_end) ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 1.5 | | Frontend | 1.5 | | Testing | 1 | | **TOTAL** | **4 horas = 3 SP** | ## Definition of Done - [ ] CRUD completo - [ ] Validaciones aplicadas - [ ] 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)