# US-MGN-008-003-001: Asignar Distribuciones Analíticas a Transacciones **RF Asociado:** [RF-MGN-008-002](../../02-modelado/requerimientos-funcionales/mgn-008/RF-MGN-008-002-registro-de-líneas-analíticas.md) **Módulo:** MGN-008 - Contabilidad Analítica **Epic:** Distribuciones Analíticas **Prioridad:** P0 **Story Points:** 5 **Sprint:** Sprint 19 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** contador, **Quiero** asignar distribuciones analíticas a líneas de asientos contables, **Para** trackear costos/ingresos por dimensiones. ## Descripción Detallada Al crear asiento contable, cada línea puede tener distribución analítica: - Línea: Cuenta 6.1.01 (Gastos), Monto $1000 - Distribución: Proyecto A (60%), Proyecto B (40%) - Resultado: $600 a Proy-A, $400 a Proy-B ## Criterios de Aceptación ### Escenario 1: Asignar distribución simple **Dado que** línea contable tiene amount=1000, **Cuando** asigno Proyecto-A (100%), **Entonces** sistema crea analytical_line con account_id=Proyecto-A, amount=1000. ### Escenario 2: Distribución múltiple **Dado que** línea tiene amount=1000, **Cuando** asigno Proyecto-A (60%), Proyecto-B (40%), **Entonces** sistema crea 2 analytical_lines: $600 y $400. ### Escenario 3: Validar suma 100% **Dado que** asigno Proyecto-A (60%), Proyecto-B (30%), **Cuando** intento guardar, **Entonces** error 400 "Distribución debe sumar 100%". ### Escenario 4: Distribución obligatoria según config **Dado que** cuenta contable tiene "analytical_required=true", **Cuando** intento guardar línea sin distribución, **Entonces** error 400 "Distribución analítica obligatoria". ## Reglas de Negocio - **RN-1:** Suma de porcentajes debe ser 100%. - **RN-2:** Puede ser obligatoria según configuración de cuenta. - **RN-3:** Se replica en cada plan configurado. ## Tareas Técnicas ### Backend - [ ] Service: `AnalyticalLineService.create(journalLine, distributions)` - [ ] Validar suma 100% - [ ] Validar obligatoriedad - [ ] Unit tests ### Frontend - [ ] Componente: `AnalyticalDistributionInput.tsx` - [ ] Selector de cuentas analíticas - [ ] Slider/input para porcentajes - [ ] Validación en tiempo real ### Database - [ ] Tabla: `analytics.lines` (journal_line_id, account_id, amount, percentage) - [ ] FK: journal_line_id, account_id ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 2 | | Frontend | 2 | | Testing | 2 | | **TOTAL** | **6 horas = 5 SP** | ## Definition of Done - [ ] Distribución funcional - [ ] Validaciones correctas - [ ] Tests >80% - [ ] QA/PO aprobado ## Referencias - [RF-MGN-008-002](../../02-modelado/requerimientos-funcionales/mgn-008/RF-MGN-008-002-registro-de-líneas-analíticas.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-008.yaml)