# 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)
