861 lines
30 KiB
Markdown
861 lines
30 KiB
Markdown
# _MAP: MAI-003 - Presupuestos y Control de Costos
|
||
|
||
**Epica:** MAI-003
|
||
**Nombre:** Presupuestos y Control de Costos
|
||
**Fase:** 1 - Alcance Inicial
|
||
**Presupuesto:** $30,000 MXN
|
||
**Story Points:** 46 SP
|
||
**Estado:** Completo
|
||
**Sprint:** Sprint 7-10 (Semanas 13-20)
|
||
**Ultima actualizacion:** 2025-11-17
|
||
**Prioridad:** P1
|
||
|
||
---
|
||
|
||
## Proposito
|
||
|
||
Sistema integral de presupuestos y control de costos para construccion que permite:
|
||
- Catalogo centralizado de 10,000+ conceptos reutilizables con APU (Analisis de Precios Unitarios)
|
||
- Presupuestos en 3 niveles (obra, etapa, prototipo) con generadores automaticos
|
||
- Control en tiempo real de costos con alertas proactivas
|
||
- Analisis de rentabilidad con simulaciones y proyecciones
|
||
- Explosion de insumos para optimizacion de compras
|
||
- Control presupuestal con desviaciones y planes de accion
|
||
|
||
**Problema que resuelve:** Las constructoras pierden entre 5-15% de margen por presupuestos imprecisos, falta de control sobre costos reales y desconocimiento de rentabilidad real por prototipo.
|
||
|
||
**Beneficios esperados:**
|
||
- Eficiencia: -80% tiempo elaboracion presupuestos (2h vs 10h)
|
||
- Precision: <3% desviacion presupuesto vs real
|
||
- Rentabilidad: +2 puntos de margen por mejor control
|
||
- Visibilidad: Dashboard actualizado en tiempo real
|
||
|
||
---
|
||
|
||
## Contenido
|
||
|
||
### Requerimientos Funcionales (4)
|
||
|
||
| ID | Archivo | Titulo | Estado |
|
||
|----|---------|--------|--------|
|
||
| RF-COST-001 | [RF-COST-001-catalogo-conceptos-precios.md](./requerimientos/RF-COST-001-catalogo-conceptos-precios.md) | Catalogo de Conceptos y Precios Unitarios | Completo |
|
||
| RF-COST-002 | [RF-COST-002-presupuestos-maestros.md](./requerimientos/RF-COST-002-presupuestos-maestros.md) | Presupuestos Maestros (Obra, Etapa, Prototipo) | Completo |
|
||
| RF-COST-003 | [RF-COST-003-control-costos-reales.md](./requerimientos/RF-COST-003-control-costos-reales.md) | Control de Costos Reales y Desviaciones | Completo |
|
||
| RF-COST-004 | [RF-COST-004-analisis-rentabilidad.md](./requerimientos/RF-COST-004-analisis-rentabilidad.md) | Analisis de Rentabilidad y Margenes | Completo |
|
||
|
||
### Especificaciones Tecnicas (4)
|
||
|
||
| ID | Archivo | Titulo | RF | Estado |
|
||
|----|---------|--------|-------|--------|
|
||
| ET-COST-001 | [ET-COST-001-implementacion-catalogo-conceptos.md](./especificaciones/ET-COST-001-implementacion-catalogo-conceptos.md) | Implementacion del Catalogo de Conceptos | RF-COST-001 | Completo |
|
||
| ET-COST-002 | [ET-COST-002-implementacion-presupuestos.md](./especificaciones/ET-COST-002-implementacion-presupuestos.md) | Implementacion de Presupuestos | RF-COST-002 | Completo |
|
||
| ET-COST-003 | [ET-COST-003-implementacion-control-costos.md](./especificaciones/ET-COST-003-implementacion-control-costos.md) | Implementacion de Control de Costos | RF-COST-003 | Completo |
|
||
| ET-COST-004 | [ET-COST-004-implementacion-analisis-rentabilidad.md](./especificaciones/ET-COST-004-implementacion-analisis-rentabilidad.md) | Implementacion de Analisis de Rentabilidad | RF-COST-004 | Completo |
|
||
|
||
### Historias de Usuario (8)
|
||
|
||
| ID | Archivo | Titulo | SP | Estado |
|
||
|----|---------|--------|----|--------|
|
||
| US-COST-001 | [US-COST-001-catalogo-conceptos.md](./historias-usuario/US-COST-001-catalogo-conceptos.md) | Catalogo de Conceptos y Busqueda | 5 | Completo |
|
||
| US-COST-002 | [US-COST-002-precios-compuestos.md](./historias-usuario/US-COST-002-precios-compuestos.md) | Precios Unitarios Compuestos | 5 | Completo |
|
||
| US-COST-003 | [US-COST-003-actualizacion-precios.md](./historias-usuario/US-COST-003-actualizacion-precios.md) | Actualizacion Masiva de Precios | 3 | Completo |
|
||
| US-COST-004 | [US-COST-004-presupuesto-obra.md](./historias-usuario/US-COST-004-presupuesto-obra.md) | Presupuesto de Obra Completo | 8 | Completo |
|
||
| US-COST-005 | [US-COST-005-presupuesto-prototipo.md](./historias-usuario/US-COST-005-presupuesto-prototipo.md) | Presupuesto de Prototipo con Generadores | 5 | Completo |
|
||
| US-COST-006 | [US-COST-006-dashboard-control-costos.md](./historias-usuario/US-COST-006-dashboard-control-costos.md) | Dashboard de Control de Costos Reales | 5 | Completo |
|
||
| US-COST-007 | [US-COST-007-analisis-desviaciones.md](./historias-usuario/US-COST-007-analisis-desviaciones.md) | Analisis de Desviaciones y Plan de Accion | 5 | Completo |
|
||
| US-COST-008 | [US-COST-008-analisis-rentabilidad.md](./historias-usuario/US-COST-008-analisis-rentabilidad.md) | Analisis de Rentabilidad y Simulaciones | 5 | Completo |
|
||
|
||
**Total Story Points:** 46 SP
|
||
|
||
### Implementacion
|
||
|
||
Inventarios de trazabilidad:
|
||
- [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz completa de trazabilidad
|
||
- [DATABASE.yml](./implementacion/DATABASE.yml) - Objetos de base de datos
|
||
- [BACKEND.yml](./implementacion/BACKEND.yml) - Modulos backend
|
||
- [FRONTEND.yml](./implementacion/FRONTEND.yml) - Componentes frontend
|
||
|
||
### Pruebas
|
||
|
||
Documentacion de testing:
|
||
- [TEST-PLAN.md](./pruebas/TEST-PLAN.md) - Plan de pruebas
|
||
- [TEST-CASES.md](./pruebas/TEST-CASES.md) - Casos de prueba
|
||
|
||
---
|
||
|
||
## Referencias
|
||
|
||
- **README:** [README.md](./README.md) - Descripcion detallada de la epica
|
||
- **RESUMEN:** [RESUMEN-EPICA-MAI-003.md](./RESUMEN-EPICA-MAI-003.md) - Resumen ejecutivo completo
|
||
- **Fase 1:** [../README.md](../README.md) - Informacion de la fase completa
|
||
- **Modulo relacionado MVP:** Modulo 3 - Presupuestos y Costos (MVP-APP.md)
|
||
|
||
---
|
||
|
||
## Metricas
|
||
|
||
| Metrica | Valor |
|
||
|---------|-------|
|
||
| **Presupuesto estimado** | $30,000 MXN |
|
||
| **Story Points estimados** | 46 SP |
|
||
| **Duracion estimada** | 16 dias (4 sprints x 2 semanas) |
|
||
| **Reutilizacion GAMILIT** | 5% (funcionalidad nueva) |
|
||
| **RF a implementar** | 4/4 |
|
||
| **ET a implementar** | 4/4 |
|
||
| **US a completar** | 8/8 |
|
||
| **Reduccion tiempo presupuestos** | 80% (2h vs 10h) |
|
||
| **Precision objetivo** | <3% desviacion presupuesto vs real |
|
||
|
||
---
|
||
|
||
## Modulos Afectados
|
||
|
||
### Base de Datos
|
||
|
||
- **Schema:** `budgets`
|
||
- **Tablas principales:**
|
||
* `concept_catalog` - Catalogo de conceptos (materiales, mano de obra, maquinaria, compuestos)
|
||
* `concept_components` - Componentes de conceptos compuestos (APU)
|
||
* `concept_price_history` - Historial de precios
|
||
* `regions` - Regiones para ajustes de precios
|
||
* `budgets` - Presupuestos maestros (obra, etapa, prototipo)
|
||
* `budget_items` - Partidas jerarquicas de presupuestos
|
||
* `budget_versions` - Versionado de presupuestos
|
||
* `actual_costs` - Costos reales registrados
|
||
* `cost_variances` - Analisis de desviaciones
|
||
* `cost_projections` - Proyecciones EAC
|
||
* `profitability_analysis` - Analisis de rentabilidad por proyecto
|
||
* `prototype_profitability` - Rentabilidad comparativa por prototipo
|
||
- **ENUMs:**
|
||
* `concept_type` (material, labor, machinery, composite)
|
||
* `budget_scope` (project, stage, prototype)
|
||
* `budget_status` (draft, in_review, approved, baseline, closed)
|
||
* `variance_type` (price, quantity, mixed)
|
||
* `cost_classification` (direct, indirect, financing, overhead)
|
||
- **Funciones SQL:**
|
||
* `calculate_composite_price()` - Calculo de PU compuestos
|
||
* `calculate_variances()` - Analisis de desviaciones
|
||
* `calculate_eac()` - Proyeccion de costo final (3 metodos)
|
||
* `calculate_profitability()` - Analisis de rentabilidad
|
||
|
||
### Backend
|
||
|
||
- **Modulo:** `budgets`
|
||
- **Path:** `apps/backend/src/modules/budgets/`
|
||
- **Services:**
|
||
* `ConceptCatalogService` - Gestion de catalogo de conceptos
|
||
* `BudgetService` - Creacion y gestion de presupuestos
|
||
* `CostControlService` - Control de costos reales
|
||
* `ProfitabilityService` - Analisis de rentabilidad
|
||
* `BudgetGeneratorService` - Generadores automaticos de volumetrias
|
||
* `PriceUpdateService` - Actualizacion masiva de precios
|
||
- **Controllers:**
|
||
* `ConceptCatalogController` (9 endpoints)
|
||
* `BudgetController` (12 endpoints)
|
||
* `CostControlController` (8 endpoints)
|
||
* `ProfitabilityController` (6 endpoints)
|
||
- **Cron Jobs:**
|
||
* `CostAnalysisTask.analyzeDailyCosts()` - Analisis diario 6:00 AM
|
||
* `PriceIndexTask.updateNationalPrices()` - Actualizacion semestral INPC/CMIC
|
||
- **Middlewares:** BudgetAuthGuard, ProjectAccessGuard
|
||
|
||
### Frontend
|
||
|
||
- **Features:** `budgets`, `cost-control`, `profitability`
|
||
- **Path:** `apps/frontend/src/features/budgets/`
|
||
- **Componentes principales:**
|
||
* `ConceptCatalogList` - Lista con busqueda y filtros
|
||
* `ConceptForm` - Formulario de conceptos (simple/compuesto)
|
||
* `APUEditor` - Editor de analisis de precios unitarios
|
||
* `BudgetItemsTree` - Arbol jerarquico de partidas
|
||
* `BudgetWizard` - Asistente de creacion de presupuestos
|
||
* `VolumetryGenerator` - Generador automatico de volumetrias
|
||
* `CurveSChart` - Grafica de curva S (Chart.js)
|
||
* `CostDashboard` - Dashboard de control de costos
|
||
* `VarianceAnalysis` - Analisis de desviaciones
|
||
* `SensitivityMatrix` - Matriz de sensibilidad precio/costo
|
||
* `ScenarioSimulator` - Simulador de escenarios
|
||
* `PrototypeComparison` - Comparativa de rentabilidad por prototipo
|
||
- **Stores (Zustand):**
|
||
* `useConceptCatalogStore`
|
||
* `useBudgetStore`
|
||
* `useCostControlStore`
|
||
* `useProfitabilityStore`
|
||
|
||
---
|
||
|
||
## Flujo de Documentacion RF → ET → US → Codigo
|
||
|
||
### RF-COST-001: Catalogo de Conceptos y Precios Unitarios
|
||
|
||
```
|
||
RF-COST-001 (Requerimiento Funcional)
|
||
↓
|
||
ET-COST-001 (Especificacion Tecnica)
|
||
↓
|
||
├── US-COST-001: Catalogo de Conceptos y Busqueda (5 SP)
|
||
│ └── Codigo:
|
||
│ ├── DB: budgets.concept_catalog, budgets.regions
|
||
│ ├── Backend: ConceptCatalogService, ConceptCatalogController
|
||
│ └── Frontend: ConceptCatalogList, ConceptForm
|
||
│
|
||
├── US-COST-002: Precios Unitarios Compuestos (5 SP)
|
||
│ └── Codigo:
|
||
│ ├── DB: budgets.concept_components, calculate_composite_price()
|
||
│ ├── Backend: ConceptCatalogService.createComposite()
|
||
│ └── Frontend: APUEditor, ConceptForm
|
||
│
|
||
└── US-COST-003: Actualizacion Masiva de Precios (3 SP)
|
||
└── Codigo:
|
||
├── DB: budgets.concept_price_history
|
||
├── Backend: PriceUpdateService, PriceIndexTask (cron)
|
||
└── Frontend: PriceUpdateModal, PriceHistoryTimeline
|
||
```
|
||
|
||
### RF-COST-002: Presupuestos Maestros
|
||
|
||
```
|
||
RF-COST-002 (Requerimiento Funcional)
|
||
↓
|
||
ET-COST-002 (Especificacion Tecnica)
|
||
↓
|
||
├── US-COST-004: Presupuesto de Obra Completo (8 SP)
|
||
│ └── Codigo:
|
||
│ ├── DB: budgets.budgets, budgets.budget_items, budgets.budget_versions
|
||
│ ├── Backend: BudgetService, BudgetController
|
||
│ └── Frontend: BudgetWizard, BudgetItemsTree, BudgetDetail
|
||
│
|
||
└── US-COST-005: Presupuesto de Prototipo con Generadores (5 SP)
|
||
└── Codigo:
|
||
├── DB: budgets.budget_items (con formulas)
|
||
├── Backend: BudgetGeneratorService
|
||
└── Frontend: VolumetryGenerator, PrototypeBudgetForm
|
||
```
|
||
|
||
### RF-COST-003: Control de Costos Reales
|
||
|
||
```
|
||
RF-COST-003 (Requerimiento Funcional)
|
||
↓
|
||
ET-COST-003 (Especificacion Tecnica)
|
||
↓
|
||
├── US-COST-006: Dashboard de Control de Costos Reales (5 SP)
|
||
│ └── Codigo:
|
||
│ ├── DB: budgets.actual_costs, calculate_variances()
|
||
│ ├── Backend: CostControlService, CostAnalysisTask (cron)
|
||
│ └── Frontend: CostDashboard, CurveSChart
|
||
│
|
||
└── US-COST-007: Analisis de Desviaciones y Plan de Accion (5 SP)
|
||
└── Codigo:
|
||
├── DB: budgets.cost_variances, budgets.cost_projections
|
||
├── Backend: CostControlService.analyzeVariances()
|
||
└── Frontend: VarianceAnalysis, ActionPlanForm
|
||
```
|
||
|
||
### RF-COST-004: Analisis de Rentabilidad
|
||
|
||
```
|
||
RF-COST-004 (Requerimiento Funcional)
|
||
↓
|
||
ET-COST-004 (Especificacion Tecnica)
|
||
↓
|
||
└── US-COST-008: Analisis de Rentabilidad y Simulaciones (5 SP)
|
||
└── Codigo:
|
||
├── DB: budgets.profitability_analysis, budgets.prototype_profitability
|
||
├── Backend: ProfitabilityService, ProfitabilityController
|
||
└── Frontend: SensitivityMatrix, ScenarioSimulator, PrototypeComparison
|
||
```
|
||
|
||
---
|
||
|
||
## Quick Links
|
||
|
||
### Catalogo de Conceptos
|
||
|
||
**Objetivo:** Catalogo centralizado de 10,000+ conceptos reutilizables
|
||
|
||
- **RF:** [RF-COST-001](./requerimientos/RF-COST-001-catalogo-conceptos-precios.md)
|
||
- **ET:** [ET-COST-001](./especificaciones/ET-COST-001-implementacion-catalogo-conceptos.md)
|
||
- **US:**
|
||
* [US-COST-001: Catalogo base](./historias-usuario/US-COST-001-catalogo-conceptos.md)
|
||
* [US-COST-002: Conceptos compuestos (APU)](./historias-usuario/US-COST-002-precios-compuestos.md)
|
||
* [US-COST-003: Actualizacion masiva](./historias-usuario/US-COST-003-actualizacion-precios.md)
|
||
- **Codigo:**
|
||
* DB: `budgets.concept_catalog`, `budgets.concept_components`
|
||
* Backend: `ConceptCatalogService`
|
||
* Frontend: `ConceptCatalogList`, `APUEditor`
|
||
|
||
**Funcionalidades clave:**
|
||
- 4 tipos de conceptos: material, mano de obra, maquinaria, compuesto
|
||
- Analisis de Precios Unitarios (APU) detallado
|
||
- Busqueda full-text por codigo/nombre/categoria (<200ms)
|
||
- Versionado y historial de precios
|
||
- Regionalizacion de precios
|
||
- Importacion/exportacion Excel, OPUS, Neodata
|
||
- Actualizacion masiva por indices INPC/CMIC
|
||
|
||
**Ejemplo APU:**
|
||
```
|
||
Concepto Compuesto "Cimentacion corrida":
|
||
├─ Materiales: $4,548 (concreto, acero, cimbra, alambre)
|
||
├─ Mano de Obra: $1,125 (oficial + ayudantes con FSR)
|
||
├─ Maquinaria: $226 (vibrador + herramienta menor)
|
||
├─ CD: $5,899
|
||
├─ Indirectos (12%): $708
|
||
├─ Financiamiento (3%): $177
|
||
├─ Utilidad (10%): $590
|
||
├─ Cargos (2%): $118
|
||
└─ PU Final: $7,492/m³ + IVA
|
||
```
|
||
|
||
### Analisis de Precios Unitarios (APU)
|
||
|
||
**Objetivo:** Desglose detallado de componentes de conceptos compuestos
|
||
|
||
- **RF:** [RF-COST-001, seccion APU](./requerimientos/RF-COST-001-catalogo-conceptos-precios.md#analisis-de-precios-unitarios-apu)
|
||
- **ET:** [ET-COST-001, seccion APU](./especificaciones/ET-COST-001-implementacion-catalogo-conceptos.md#calculo-de-precios-compuestos)
|
||
- **US:** [US-COST-002](./historias-usuario/US-COST-002-precios-compuestos.md)
|
||
- **Codigo:**
|
||
* DB: `budgets.concept_components`, funcion `calculate_composite_price()`
|
||
* Backend: `ConceptCatalogService.createComposite()`
|
||
* Frontend: `APUEditor`
|
||
|
||
**Componentes de un APU:**
|
||
1. **Costo Directo (CD):**
|
||
- Materiales
|
||
- Mano de obra (con FSR: Factor de Salario Real)
|
||
- Maquinaria y equipo
|
||
2. **Costos Indirectos:** 12% sobre CD
|
||
3. **Financiamiento:** 3% sobre (CD + Indirectos)
|
||
4. **Utilidad:** 10% sobre subtotal
|
||
5. **Cargos adicionales:** 2% sobre subtotal
|
||
6. **IVA:** 16% sobre precio final
|
||
|
||
**Formula de calculo:**
|
||
```
|
||
CD = Materiales + Mano de Obra + Maquinaria
|
||
Indirectos = CD * 0.12
|
||
Financiamiento = (CD + Indirectos) * 0.03
|
||
Subtotal = CD + Indirectos + Financiamiento
|
||
Utilidad = Subtotal * 0.10
|
||
Cargos = Subtotal * 0.02
|
||
PU sin IVA = Subtotal + Utilidad + Cargos
|
||
PU con IVA = PU sin IVA * 1.16
|
||
```
|
||
|
||
### Explosion de Insumos
|
||
|
||
**Objetivo:** Desglose de todos los insumos necesarios para el proyecto
|
||
|
||
- **RF:** [RF-COST-002, seccion Explosion](./requerimientos/RF-COST-002-presupuestos-maestros.md#explosion-de-insumos)
|
||
- **ET:** [ET-COST-002](./especificaciones/ET-COST-002-implementacion-presupuestos.md)
|
||
- **US:** [US-COST-004](./historias-usuario/US-COST-004-presupuesto-obra.md)
|
||
- **Codigo:**
|
||
* DB: Vista materializada `budgets.budget_materials_explosion`
|
||
* Backend: `BudgetService.explodeMaterials()`
|
||
* Frontend: `MaterialsExplosionTable`
|
||
|
||
**Funcionalidades:**
|
||
- Desglose automatico de materiales desde conceptos compuestos
|
||
- Agregacion por tipo de material
|
||
- Cantidad total necesaria por proyecto/etapa
|
||
- Valor total por material
|
||
- Exportacion a Excel para compras
|
||
- Optimizacion de lotes de compra
|
||
|
||
**Ejemplo:**
|
||
```
|
||
Proyecto: 150 viviendas
|
||
└─ Cimentacion (150 viviendas × 14.40 m³/viv = 2,160 m³)
|
||
├─ Concreto f'c=150: 2,160 m³ × 1.05 = 2,268 m³
|
||
├─ Acero fy=4200: 2,160 m³ × 80 kg/m³ = 172,800 kg
|
||
├─ Cimbra: 2,160 m³ × 5.2 m²/m³ = 11,232 m²
|
||
└─ Alambre recocido: 2,160 m³ × 1.5 kg/m³ = 3,240 kg
|
||
|
||
Total Materiales Cimentacion: $9,826,560
|
||
```
|
||
|
||
### Control Presupuestal
|
||
|
||
**Objetivo:** Control en tiempo real de costos vs presupuesto
|
||
|
||
- **RF:** [RF-COST-003](./requerimientos/RF-COST-003-control-costos-reales.md)
|
||
- **ET:** [ET-COST-003](./especificaciones/ET-COST-003-implementacion-control-costos.md)
|
||
- **US:**
|
||
* [US-COST-006: Dashboard control](./historias-usuario/US-COST-006-dashboard-control-costos.md)
|
||
* [US-COST-007: Analisis desviaciones](./historias-usuario/US-COST-007-analisis-desviaciones.md)
|
||
- **Codigo:**
|
||
* DB: `budgets.actual_costs`, `budgets.cost_variances`, `budgets.cost_projections`
|
||
* Backend: `CostControlService`, `CostAnalysisTask` (cron diario 6:00 AM)
|
||
* Frontend: `CostDashboard`, `CurveSChart`, `VarianceAnalysis`
|
||
|
||
**Indicadores clave:**
|
||
- **CPI (Cost Performance Index):** Valor Ganado / Costo Real
|
||
* CPI > 1.0: Bajo presupuesto
|
||
* CPI = 1.0: En presupuesto
|
||
* CPI < 1.0: Sobre presupuesto
|
||
- **SPI (Schedule Performance Index):** Valor Ganado / Valor Planificado
|
||
* SPI > 1.0: Adelantado
|
||
* SPI = 1.0: A tiempo
|
||
* SPI < 1.0: Retrasado
|
||
- **EAC (Estimate at Completion):** Proyeccion de costo final
|
||
* Metodo 1: Presupuesto / CPI
|
||
* Metodo 2: Costo Real + (Presupuesto - Valor Ganado)
|
||
* Metodo 3: Costo Real + ((Presupuesto - Valor Ganado) / (CPI × SPI))
|
||
|
||
**Tipos de desviacion:**
|
||
1. **Desviacion de precio:** (Precio Real - Precio Presupuestado) × Cantidad Real
|
||
2. **Desviacion de cantidad:** (Cantidad Real - Cantidad Presupuestada) × Precio Presupuestado
|
||
3. **Desviacion mixta:** (Precio Real - Precio Presupuestado) × (Cantidad Real - Cantidad Presupuestada)
|
||
|
||
**Alertas automaticas:**
|
||
- Alerta amarilla: Desviacion >3%
|
||
- Alerta roja: Desviacion >5%
|
||
- Plan de accion obligatorio para desviaciones >5%
|
||
|
||
### Presupuestos por Nivel
|
||
|
||
**Objetivo:** Presupuestos en 3 niveles jerarquicos
|
||
|
||
- **RF:** [RF-COST-002](./requerimientos/RF-COST-002-presupuestos-maestros.md)
|
||
- **ET:** [ET-COST-002](./especificaciones/ET-COST-002-implementacion-presupuestos.md)
|
||
- **US:**
|
||
* [US-COST-004: Presupuesto obra](./historias-usuario/US-COST-004-presupuesto-obra.md)
|
||
* [US-COST-005: Presupuesto prototipo](./historias-usuario/US-COST-005-presupuesto-prototipo.md)
|
||
- **Codigo:**
|
||
* DB: `budgets.budgets`, `budgets.budget_items`
|
||
* Backend: `BudgetService`, `BudgetGeneratorService`
|
||
* Frontend: `BudgetWizard`, `BudgetItemsTree`
|
||
|
||
**Niveles de presupuesto:**
|
||
|
||
1. **Presupuesto de Obra:**
|
||
- Presupuesto maestro completo del proyecto
|
||
- Desglose por division CMIC (16 capitulos)
|
||
- Suma de todos los prototipos × cantidades
|
||
- Curva S de distribucion temporal
|
||
- Versionado completo (baseline, ajustes)
|
||
|
||
2. **Presupuesto de Etapa:**
|
||
- Presupuesto por fase constructiva
|
||
- Ej: Cimentacion, Estructura, Albañileria, Instalaciones, Acabados
|
||
- Se vincula con cronograma de obra
|
||
- Permite control por avance fisico
|
||
|
||
3. **Presupuesto de Prototipo:**
|
||
- Costo unitario por tipo de vivienda
|
||
- Generadores automaticos de volumetrias
|
||
- Plantilla reutilizable
|
||
- Base para calculo de presupuesto de obra
|
||
|
||
**Ejemplo jerarquia:**
|
||
```
|
||
Proyecto: Conjunto 150 viviendas
|
||
├─ Prototipo A (80 viviendas): $1,105,000 c/u
|
||
│ ├─ Cimentacion: $65,472
|
||
│ ├─ Estructura: $220,500
|
||
│ ├─ Albañileria: $198,450
|
||
│ └─ ...
|
||
├─ Prototipo B (50 viviendas): $890,000 c/u
|
||
└─ Prototipo C (20 viviendas): $750,000 c/u
|
||
|
||
Presupuesto Obra Total: $165,750,000
|
||
```
|
||
|
||
### Analisis de Rentabilidad
|
||
|
||
**Objetivo:** Analisis financiero y simulaciones de escenarios
|
||
|
||
- **RF:** [RF-COST-004](./requerimientos/RF-COST-004-analisis-rentabilidad.md)
|
||
- **ET:** [ET-COST-004](./especificaciones/ET-COST-004-implementacion-analisis-rentabilidad.md)
|
||
- **US:** [US-COST-008](./historias-usuario/US-COST-008-analisis-rentabilidad.md)
|
||
- **Codigo:**
|
||
* DB: `budgets.profitability_analysis`, `budgets.prototype_profitability`
|
||
* Backend: `ProfitabilityService`
|
||
* Frontend: `SensitivityMatrix`, `ScenarioSimulator`, `PrototypeComparison`
|
||
|
||
**Analisis incluidos:**
|
||
1. **Analisis financiero por proyecto:**
|
||
- Ingresos totales
|
||
- Costos totales (directos + indirectos)
|
||
- Margen bruto y neto
|
||
- ROI (Return on Investment)
|
||
- TIR (Tasa Interna de Retorno)
|
||
|
||
2. **Punto de equilibrio:**
|
||
- Numero de unidades para cubrir costos fijos
|
||
- Margen de seguridad
|
||
- Grafica visual
|
||
|
||
3. **Rentabilidad por prototipo:**
|
||
- Comparacion de margenes entre prototipos
|
||
- Identificacion de prototipos mas rentables
|
||
- Optimizacion de mix de producto
|
||
|
||
4. **Simulador de escenarios:**
|
||
- Escenario optimista: Costos -5%, Precio +3%
|
||
- Escenario base: Valores actuales
|
||
- Escenario pesimista: Costos +8%, Precio -2%
|
||
- Impacto en margen y rentabilidad
|
||
|
||
5. **Matriz de sensibilidad:**
|
||
- Impacto de variacion de precio (±10%)
|
||
- Impacto de variacion de costos (±10%)
|
||
- Mapa de calor de rentabilidad
|
||
|
||
**Ejemplo analisis:**
|
||
```
|
||
Proyecto: 150 viviendas
|
||
Ingresos: $165.75M (150 × $1,105,000 promedio)
|
||
Costos: $153.70M
|
||
Margen: $12.05M (7.3%)
|
||
ROI: 7.8%
|
||
TIR: 12.4%
|
||
|
||
Punto de Equilibrio:
|
||
- Unidades: 110 viviendas (73%)
|
||
- Margen de seguridad: 27% ✓
|
||
|
||
Rentabilidad por prototipo:
|
||
- Prototipo A: 8.2% margen
|
||
- Prototipo B: 7.1% margen
|
||
- Prototipo C: 5.8% margen
|
||
```
|
||
|
||
---
|
||
|
||
## Flujo de Trabajo Completo
|
||
|
||
### 1. Setup Inicial (Sprint 7)
|
||
|
||
**Paso 1: Crear catalogo de conceptos**
|
||
- Importar catalogo base (OPUS/Neodata/Excel)
|
||
- Crear conceptos personalizados
|
||
- Definir APU de conceptos compuestos
|
||
- Configurar regionalizacion de precios
|
||
|
||
**Paso 2: Configurar parametros**
|
||
- Definir % indirectos (default: 12%)
|
||
- Definir % financiamiento (default: 3%)
|
||
- Definir % utilidad esperada (default: 10%)
|
||
- Definir % cargos adicionales (default: 2%)
|
||
|
||
### 2. Presupuesto de Prototipo (Sprint 8)
|
||
|
||
**Paso 1: Crear prototipo en MAI-002**
|
||
- Definir caracteristicas: area, perimetro, altura, etc.
|
||
- Asignar tipo de vivienda
|
||
|
||
**Paso 2: Generar presupuesto con generadores**
|
||
- Seleccionar plantilla de prototipo
|
||
- Ejecutar generadores automaticos de volumetrias
|
||
- Revisar y ajustar cantidades
|
||
- Aprobar presupuesto de prototipo
|
||
|
||
**Ejemplo generador:**
|
||
```javascript
|
||
// Excavacion para cimentacion
|
||
formula: "desplantDepth * buildingPerimeter * 0.60 * 0.80"
|
||
inputs: {
|
||
desplantDepth: 0.80m,
|
||
buildingPerimeter: 30m
|
||
}
|
||
result: 14.40 m³
|
||
```
|
||
|
||
### 3. Presupuesto de Obra (Sprint 8)
|
||
|
||
**Paso 1: Crear presupuesto maestro**
|
||
- Seleccionar proyecto
|
||
- Asignar prototipos y cantidades
|
||
- Generar presupuesto automaticamente
|
||
|
||
**Paso 2: Crear baseline**
|
||
- Revisar presupuesto generado
|
||
- Ajustar si es necesario
|
||
- Aprobar como baseline
|
||
|
||
**Paso 3: Gestionar versiones**
|
||
- Crear nueva version por cambios de alcance
|
||
- Comparar versiones
|
||
- Mantener historial completo
|
||
|
||
### 4. Control de Costos (Sprint 9)
|
||
|
||
**Paso 1: Registro automatico de costos reales**
|
||
- Desde ordenes de compra (MAI-004)
|
||
- Desde nomina (MAI-007)
|
||
- Desde subcontratos (MAI-012)
|
||
|
||
**Paso 2: Analisis diario (cron 6:00 AM)**
|
||
- Calcular desviaciones
|
||
- Actualizar proyecciones EAC
|
||
- Generar alertas
|
||
|
||
**Paso 3: Gestion de desviaciones**
|
||
- Revisar dashboard de control
|
||
- Analizar desviaciones >5%
|
||
- Crear plan de accion obligatorio
|
||
- Dar seguimiento
|
||
|
||
### 5. Analisis de Rentabilidad (Sprint 10)
|
||
|
||
**Paso 1: Dashboard de rentabilidad**
|
||
- Ver margen actual vs objetivo
|
||
- Comparar prototipos
|
||
- Analizar tendencias
|
||
|
||
**Paso 2: Simulaciones**
|
||
- Ejecutar escenarios optimista/base/pesimista
|
||
- Analizar matriz de sensibilidad
|
||
- Tomar decisiones informadas
|
||
|
||
**Paso 3: Reportes ejecutivos**
|
||
- Generar reporte financiero
|
||
- Exportar a Excel/PDF
|
||
- Presentar a direccion
|
||
|
||
---
|
||
|
||
## Integraciones
|
||
|
||
### Modulos que Consume (Input)
|
||
|
||
- **MAI-002 (Proyectos):**
|
||
- Estructura de proyectos/etapas
|
||
- Prototipos de vivienda y caracteristicas
|
||
- Datos para generadores de volumetrias
|
||
- **MAI-004 (Compras):**
|
||
- Ordenes de compra → Costos reales de materiales
|
||
- Precios reales de proveedores
|
||
- **MAI-007 (RR.HH.):**
|
||
- Nomina → Costos reales de mano de obra
|
||
- Factores de salario real (FSR)
|
||
- **MAI-012 (Contratos):**
|
||
- Subcontratos → Costos reales de subcontratistas
|
||
- **MGN-005 (Catalogos):**
|
||
- Unidades de medida
|
||
- Clasificaciones CMIC
|
||
|
||
### Modulos que Alimenta (Output)
|
||
|
||
- **MAI-002 (Proyectos):**
|
||
- Costo unitario por prototipo
|
||
- Presupuesto total del proyecto
|
||
- **MAI-004 (Compras):**
|
||
- Explosion de insumos
|
||
- Presupuesto de materiales
|
||
- Alertas de precios fuera de presupuesto
|
||
- **MAI-005 (Control de Obra):**
|
||
- Presupuesto por partida
|
||
- Valor ganado por avance
|
||
- **MAI-008 (Estimaciones):**
|
||
- Montos presupuestados por concepto
|
||
- Volumetrias para estimaciones
|
||
- **MAE-014 (Finanzas):**
|
||
- Datos de rentabilidad
|
||
- Proyecciones de costos
|
||
- Indicadores financieros (CPI, SPI, EAC)
|
||
- **MAI-009 (Reportes):**
|
||
- Analisis de desviaciones
|
||
- Curva S
|
||
- Reportes de rentabilidad
|
||
|
||
---
|
||
|
||
## Puntos Criticos
|
||
|
||
1. **Precision de APU:**
|
||
- APU mal calculados → Presupuestos imprecisos → Perdida de margen
|
||
- Validar todos los componentes (materiales, MO, maquinaria)
|
||
- Considerar desperdicios y factores de abundamiento
|
||
|
||
2. **Actualizacion de precios:**
|
||
- Precios desactualizados → Desviaciones no detectadas
|
||
- Actualizar catalogo cada 6 meses (minimo)
|
||
- Usar indices INPC/CMIC para ajustes
|
||
|
||
3. **Registro oportuno de costos:**
|
||
- Retrasos en registro → Dashboard no refleja realidad
|
||
- Integracion automatica desde compras/nomina/subcontratos
|
||
- Validacion diaria
|
||
|
||
4. **Gestion de desviaciones:**
|
||
- Desviaciones no atendidas → Problemas mayores
|
||
- Plan de accion obligatorio para >5%
|
||
- Seguimiento semanal
|
||
|
||
5. **Versionado de presupuestos:**
|
||
- Cambios sin control → Perdida de baseline
|
||
- Siempre crear nueva version (no editar aprobados)
|
||
- Documentar razon de cambio
|
||
|
||
---
|
||
|
||
## Casos de Uso Reales
|
||
|
||
### Caso 1: Constructora con Desarrollo de 150 Viviendas
|
||
|
||
**Contexto:**
|
||
- 3 prototipos: A (80 unidades), B (50 unidades), C (20 unidades)
|
||
- Precio venta promedio: $1,105,000
|
||
- Ingresos totales: $165.75M
|
||
|
||
**Flujo completo:**
|
||
|
||
1. **Setup inicial (Semana 1):**
|
||
- Importar catalogo OPUS con 5,000 conceptos
|
||
- Crear 150 conceptos personalizados
|
||
- Configurar 3 regiones de precios
|
||
- Tiempo: 8 horas (vs 20 horas manual)
|
||
|
||
2. **Presupuesto prototipos (Semana 2):**
|
||
- Prototipo A: 247 partidas, $1,105,000, 2 horas
|
||
- Prototipo B: 223 partidas, $890,000, 1.5 horas
|
||
- Prototipo C: 198 partidas, $750,000, 1.5 horas
|
||
- Tiempo total: 5 horas (vs 30 horas manual)
|
||
|
||
3. **Presupuesto obra (Semana 2):**
|
||
- Generacion automatica desde prototipos
|
||
- 658 partidas totales
|
||
- Presupuesto: $153.7M
|
||
- Tiempo: 30 minutos (vs 10 horas manual)
|
||
|
||
4. **Control mensual (Meses 1-18):**
|
||
- Dashboard actualizado diariamente
|
||
- 3 alertas criticas detectadas y resueltas
|
||
- Desviacion final: 2.1% (excelente)
|
||
|
||
5. **Resultado final:**
|
||
- Costo real: $155.9M
|
||
- Margen real: 6.0% (vs 7.3% objetivo)
|
||
- Razon: Cambio de alcance no presupuestado
|
||
- Sin sistema: Margen hubiera sido 3.5% (perdida $6M)
|
||
|
||
### Caso 2: Actualizacion Semestral de Precios
|
||
|
||
**Contexto:**
|
||
- Catalogo de 2,000 conceptos
|
||
- INPC semestre: +3.2%
|
||
- CMIC construccion: +4.8%
|
||
|
||
**Proceso:**
|
||
1. Seleccionar conceptos a actualizar (1,500 usan indices)
|
||
2. Aplicar incremento diferenciado:
|
||
- Materiales: +4.8%
|
||
- Mano de obra: +3.2%
|
||
- Maquinaria: +3.5%
|
||
3. Recalculo automatico de APU compuestos
|
||
4. Generar reporte de cambios
|
||
5. Tiempo total: 15 minutos (vs 8 horas manual)
|
||
|
||
### Caso 3: Deteccion y Correccion de Desviacion
|
||
|
||
**Contexto:**
|
||
- Partida "Estructura de concreto": $2.5M presupuestado
|
||
- Semana 8: Costo real $1.8M, Avance 60%
|
||
- Proyeccion EAC: $3.0M (desviacion +20%)
|
||
|
||
**Alerta generada:**
|
||
- Tipo: Critica (desviacion >5%)
|
||
- CPI: 0.83 (bajo presupuesto)
|
||
- SPI: 1.05 (adelantado en programa)
|
||
|
||
**Accion tomada:**
|
||
- Analisis: Precio de acero +15% vs presupuesto
|
||
- Plan: Negociar con proveedor, buscar alternativas
|
||
- Resultado: Descuento 8%, desviacion final +5%
|
||
|
||
**Ahorro:** $375K por deteccion temprana
|
||
|
||
---
|
||
|
||
## Criterios de Exito
|
||
|
||
### Metricas de Adopcion
|
||
- 100% de proyectos con presupuesto formal
|
||
- 90% de presupuestos usan catalogo estandar
|
||
- <5% de conceptos duplicados en catalogo
|
||
|
||
### Metricas de Eficiencia
|
||
- Reduccion 80% tiempo de elaboracion (-8h por presupuesto)
|
||
- Busqueda de conceptos <200ms
|
||
- Actualizacion masiva de precios <5 seg para 500 conceptos
|
||
- Generacion de presupuesto <2 seg para 100 partidas
|
||
|
||
### Metricas de Calidad
|
||
- Precision presupuesto vs real <3% de desviacion
|
||
- 100% de alertas criticas con plan de accion en 48h
|
||
- Proyeccion EAC vs costo final <2% de error
|
||
|
||
### Metricas de Rentabilidad
|
||
- 80% de proyectos con margen ≥ target
|
||
- Incremento de margen promedio +2 puntos anuales
|
||
- ROI portafolio ≥ 12% anual
|
||
|
||
---
|
||
|
||
## Distribucion de Sprints
|
||
|
||
### Sprint 7 (2 semanas) - 13 SP: Catalogo de Conceptos
|
||
- US-COST-001: Catalogo de Conceptos y Busqueda (5 SP)
|
||
- US-COST-002: Precios Unitarios Compuestos (5 SP)
|
||
- US-COST-003: Actualizacion Masiva de Precios (3 SP)
|
||
|
||
**Entregables:**
|
||
- Catalogo de conceptos funcionando
|
||
- CRUD completo con busqueda
|
||
- Editor de APU
|
||
- Importacion/exportacion Excel
|
||
|
||
### Sprint 8 (2 semanas) - 13 SP: Presupuestos
|
||
- US-COST-004: Presupuesto de Obra Completo (8 SP)
|
||
- US-COST-005: Presupuesto de Prototipo con Generadores (5 SP)
|
||
|
||
**Entregables:**
|
||
- Wizard de creacion de presupuestos
|
||
- Generadores automaticos de volumetrias
|
||
- Arbol jerarquico de partidas
|
||
- Versionado de presupuestos
|
||
- Explosion de insumos
|
||
|
||
### Sprint 9 (2 semanas) - 10 SP: Control de Costos
|
||
- US-COST-006: Dashboard de Control de Costos Reales (5 SP)
|
||
- US-COST-007: Analisis de Desviaciones y Plan de Accion (5 SP)
|
||
|
||
**Entregables:**
|
||
- Dashboard con curva S
|
||
- Integracion con compras/nomina/subcontratos
|
||
- Calculo automatico de desviaciones
|
||
- Sistema de alertas
|
||
- Gestion de planes de accion
|
||
|
||
### Sprint 10 (2 semanas) - 5 SP: Rentabilidad
|
||
- US-COST-008: Analisis de Rentabilidad y Simulaciones (5 SP)
|
||
|
||
**Entregables:**
|
||
- Analisis financiero por proyecto
|
||
- Comparacion de prototipos
|
||
- Simulador de escenarios
|
||
- Matriz de sensibilidad
|
||
- Punto de equilibrio visual
|
||
|
||
**Duracion total:** 8 semanas (4 sprints × 2 semanas)
|
||
|
||
---
|
||
|
||
## Siguiente Paso
|
||
|
||
Comenzar implementacion en Sprint 7 con la documentacion completa.
|
||
|
||
Equipo de desarrollo puede iniciar con:
|
||
1. Setup de schema `budgets` en base de datos
|
||
2. Implementacion de `ConceptCatalogService`
|
||
3. Componente `ConceptCatalogList` en frontend
|
||
|
||
---
|
||
|
||
**Generado:** 2025-11-17
|
||
**Mantenedores:** @tech-lead @backend-team @frontend-team @database-team
|
||
**Estado:** Completo
|