# US-MGN-011-001-001: CRUD Proyectos **RF Asociado:** [RF-MGN-011-001](../../02-modelado/requerimientos-funcionales/mgn-011/RF-MGN-011-001-gestión-de-proyectos.md) **Módulo:** MGN-011 - Proyectos Genéricos **Epic:** Proyectos **Prioridad:** P0 **Story Points:** 5 **Sprint:** Sprint 24 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** gerente de proyectos, **Quiero** crear y gestionar proyectos, **Para** organizar trabajo y recursos. ## Descripción Detallada Proyecto incluye: - Nombre, código, descripción - Cliente (partner_id) - Fechas inicio/fin - Presupuesto total - Gerente del proyecto - Estado (draft, in_progress, on_hold, done, cancelled) - Cuenta analítica vinculada (opcional) ## Criterios de Aceptación ### Escenario 1: Crear proyecto **Dado que** soy project_manager, **Cuando** creo proyecto: name="Desarrollo App Mobile", code="MOB-001", customer_id=1, budget=100000, start_date="2024-01-01", **Entonces** sistema crea proyecto state=draft, genera cuenta analítica automáticamente. ### Escenario 2: Código único **Dado que** ya existe proyecto con code="MOB-001", **Cuando** intento crear otro con mismo código, **Entonces** error 400 "Código ya existe". ### Escenario 3: Actualizar proyecto **Dado que** proyecto existe, **Cuando** actualizo end_date="2024-12-31", budget=120000, **Entonces** sistema actualiza y registra en audit_log. ### Escenario 4: Vincular a cuenta analítica **Dado que** proyecto se crea, **Cuando** se completa creación, **Entonces** sistema crea cuenta analítica con code=proyecto.code para trackeo de costos. ## Reglas de Negocio - **RN-1:** Código único por empresa. - **RN-2:** Budget >= 0. - **RN-3:** start_date <= end_date (si ambos existen). - **RN-4:** Crea cuenta analítica automáticamente. - **RN-5:** RLS filtra por empresa. ## Tareas Técnicas ### Backend - [ ] Endpoint: POST/GET/PUT/DELETE `/api/v1/projects` - [ ] Service: `ProjectService` (CRUD) - [ ] Crear cuenta analítica al crear proyecto - [ ] Unit tests ### Frontend - [ ] Página: `ProjectsPage.tsx` - [ ] Formulario: `ProjectForm.tsx` - [ ] Vista: Dashboard de proyecto ### Database - [ ] Tabla: `projects.projects` (code, name, customer_id, manager_id, budget, start_date, end_date, state, analytical_account_id) - [ ] Constraint: unique(company_id, code) - [ ] Enum: project_state ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 2.5 | | Frontend | 2.5 | | Testing | 2 | | **TOTAL** | **7 horas = 5 SP** | ## Definition of Done - [ ] CRUD completo - [ ] Cuenta analítica creada automáticamente - [ ] Validaciones aplicadas - [ ] Tests >80% - [ ] QA/PO aprobado ## Referencias - [RF-MGN-011-001](../../02-modelado/requerimientos-funcionales/mgn-011/RF-MGN-011-001-gestión-de-proyectos.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-011.yaml)