#!/bin/bash

# US-MGN-011-001-001
cat > US-MGN-011-001-001-crud-proyectos.md << 'EOF'
# 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)
EOF

# US-MGN-011-001-002
cat > US-MGN-011-001-002-configurar-proyecto-fases-presupuesto.md << 'EOF'
# US-MGN-011-001-002: Configurar Proyecto (Fases, Presupuesto, Fechas)

**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:** P1
**Story Points:** 3
**Sprint:** Sprint 24
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** gerente de proyectos, **Quiero** configurar fases y presupuestos del proyecto, **Para** planificar ejecución.

## Criterios de Aceptación

### Escenario 1: Crear fases de proyecto
**Dado que** proyecto existe,
**Cuando** creo fases: "Análisis" (budget 20K), "Desarrollo" (budget 60K), "Testing" (budget 20K),
**Entonces** sistema crea 3 fases, suma total = 100K (presupuesto proyecto).

### Escenario 2: Validar suma de fases
**Dado que** proyecto tiene budget=100K, fases suman 110K,
**Cuando** intento guardar,
**Entonces** warning "Suma de fases (110K) excede presupuesto (100K)".

### Escenario 3: Actualizar fase
**Dado que** fase "Desarrollo" existe,
**Cuando** actualizo budget=70K,
**Entonces** sistema actualiza y recalcula totales.

## Reglas de Negocio
- **RN-1:** Fases opcionales.
- **RN-2:** Suma de fases idealmente <= budget proyecto (warning, no error).
- **RN-3:** Cada fase tiene nombre, budget, fechas.

## Tareas Técnicas
### Backend
- [ ] Service: `ProjectPhaseService` (CRUD fases)
- [ ] Validar suma fases vs budget

### Frontend
- [ ] Componente: `ProjectPhasesConfig.tsx`
- [ ] Tabla editable de fases

### Database
- [ ] Tabla: `projects.phases` (project_id, name, budget, start_date, end_date)

## Estimación Detallada
| Tarea | Horas | Backend | 1.5 | Frontend | 1.5 | Testing | 1 |
**TOTAL** | **4 horas = 3 SP** |

## Definition of Done
- [ ] Fases gestionables
- [ ] Validaciones aplicadas
- [ ] QA/PO aprobado

## Referencias
- [RF-MGN-011-001](../../02-modelado/requerimientos-funcionales/mgn-011/RF-MGN-011-001-gestión-de-proyectos.md)
EOF

echo "Creadas primeras 2 US de MGN-011"
