# US-MGN-008-001-002: Configurar Dimensiones Multi-nivel

**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:** Cuentas Analíticas
**Prioridad:** P1
**Story Points:** 5
**Sprint:** Sprint 18
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story

**Como** contador,
**Quiero** configurar distribuciones analíticas con múltiples dimensiones simultáneas,
**Para** analizar transacciones por proyecto × departamento × categoría en paralelo.

---

## Descripción Detallada

Permite asignar múltiples planes analíticos a una misma transacción:
- Proyecto: "Desarrollo App Mobile"
- Departamento: "IT"
- Categoría: "Desarrollo"

Cada asiento contable puede tener distribución en N dimensiones simultáneas.

---

## Criterios de Aceptación

### Escenario 1: Asignar múltiples dimensiones a transacción
**Dado que** asiento contable tiene línea con amount=1000,
**Cuando** asigno distribución: plan_proyectos=Proj-A (100%), plan_departamentos=IT (100%),
**Entonces** sistema crea 2 líneas analíticas independientes.

### Escenario 2: Validar porcentajes suman 100% por plan
**Dado que** línea tiene plan_proyectos con Proj-A (60%), Proj-B (30%),
**Cuando** intento guardar,
**Entonces** sistema retorna error 400 "Distribución del plan Proyectos debe sumar 100% (actualmente 90%)".

### Escenario 3: Distribución automática por defecto
**Dado que** cuenta contable tiene configuración: "plan_departamentos=IT por defecto",
**Cuando** creo asiento en esa cuenta sin especificar dimensión,
**Entonces** sistema aplica IT automáticamente.

### Escenario 4: Reporte multi-dimensional
**Dado que** transacciones tienen 2 dimensiones (Proyecto × Departamento),
**Cuando** genero reporte P&L por Proyecto × Departamento,
**Entonces** veo matriz: proyectos en filas, departamentos en columnas.

---

## Reglas de Negocio

- **RN-1:** Una transacción puede tener N planes analíticos.
- **RN-2:** Cada plan debe sumar 100% de distribución.
- **RN-3:** Planes son independientes entre sí.
- **RN-4:** Configuración por defecto en cuenta contable.

---

## Tareas Técnicas

### Backend
- [ ] Service: `AnalyticalDistributionService.validate(lines, amount)`
- [ ] Service: `AnalyticalDistributionService.apply DefaultDistribution(account)`
- [ ] Validar suma 100% por plan
- [ ] Unit tests (>80%)
- [ ] Integration tests

### Frontend
- [ ] Componente: `MultiDimensionalDistributionForm.tsx`
- [ ] Tabla: Plan × Cuenta × Percentage
- [ ] Validación en tiempo real
- [ ] Component tests

### Database
- [ ] Tabla: `analytics.distribution_lines` (plan_id, account_id, percentage)
- [ ] Check constraint: percentage <= 100

---

## Estimación Detallada

| Tarea | Horas |
|-------|-------|
| Backend | 2.5 |
| Frontend | 2.5 |
| Testing | 1.5 |
| **TOTAL** | **6.5 horas = 5 SP** |

---

## Definition of Done

- [ ] Multi-dimensión funcional
- [ ] Validaciones correctas
- [ ] Tests pasando (>80%)
- [ ] QA validado
- [ ] PO aprobado

---

## Referencias

- [RF-MGN-008-001](../../02-modelado/requerimientos-funcionales/mgn-008/RF-MGN-008-001-gestión-de-cuentas-analíticas.md)
- [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-008.yaml)
