2.6 KiB
US-MGN-008-002-001: CRUD Cuentas Analíticas por Plan
RF Asociado: RF-MGN-008-001 Módulo: MGN-008 - Contabilidad Analítica Epic: Cuentas Analíticas Prioridad: P0 Story Points: 3 Sprint: Sprint 18 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como contador, Quiero crear cuentas analíticas dentro de cada plan, Para registrar transacciones en dimensiones específicas.
Descripción Detallada
Cuenta analítica representa un elemento dentro de un plan:
- Plan "Proyectos" → Cuentas: "Proyecto A", "Proyecto B"
- Plan "Departamentos" → Cuentas: "IT", "Ventas", "Marketing"
Cada cuenta tiene: código, nombre, plan_id, activo, parent_id (jerarquía opcional).
Criterios de Aceptación
Escenario 1: Crear cuenta analítica
Dado que plan id=1 existe, Cuando creo cuenta con code="PROJ-A", name="Proyecto A", plan_id=1, Entonces sistema crea cuenta exitosamente.
Escenario 2: Código único por plan
Dado que cuenta "PROJ-A" existe en plan_id=1, Cuando intento crear otra con mismo código en plan_id=1, Entonces error 400 "Código ya existe en este plan".
Escenario 3: Mismo código en diferente plan (permitido)
Dado que cuenta "IT" existe en plan="Departamentos", Cuando creo cuenta "IT" en plan="Categorías", Entonces sistema permite (códigos independientes por plan).
Reglas de Negocio
- RN-1: Código único por plan.
- RN-2: Cuenta pertenece a un solo plan.
- RN-3: Cuenta puede tener parent_id (jerarquía).
Tareas Técnicas
Backend
- Endpoint: POST/GET/PUT/DELETE
/api/v1/analytics/accounts - Service:
AnalyticalAccountService(CRUD) - Validar code único por plan
- Unit/Integration tests
Frontend
- Página:
AnalyticalAccountsPage.tsx - Formulario CRUD
- Filtro por plan
- Component tests
Database
- Tabla:
analytics.accounts(id, plan_id, code, name, parent_id, active) - Constraint: unique(plan_id, code)
- FK: plan_id, parent_id
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 1.5 |
| Frontend | 1.5 |
| Testing | 1 |
| TOTAL | 4 horas = 3 SP |
Definition of Done
- CRUD completo
- Tests >80%
- Validaciones aplicadas
- QA/PO aprobado