# MAI-008: Estimaciones y Facturación **ID:** MAI-008 **Fase:** 1 - Alcance Inicial **Presupuesto:** $25,000 MXN **Story Points:** 45 SP **Sprint:** Sprint 5-6 (Semanas 9-12) **Prioridad:** P1 **Estado:** 📝 En documentación --- ## 📋 Resumen Ejecutivo Este módulo gestiona el ciclo completo de estimaciones de obra, tanto hacia clientes (INFONAVIT, fideicomisos) como hacia subcontratistas y proveedores. Incluye control de anticipos, amortizaciones, retenciones, workflow de autorización y generación de reportes auditables. ### Problema que Resuelve Las constructoras manejan flujos de caja complejos con: - Múltiples estimaciones simultáneas a diferentes clientes - Anticipos que deben amortizarse gradualmente - Retenciones de garantía (5-10%) que impactan liquidez - Subcontratistas esperando pagos por avances - Documentación formal requerida por INFONAVIT y auditores **Sin este módulo:** Cálculos en Excel propensos a errores, falta de trazabilidad, retrasos en pagos, problemas de flujo de caja. **Con este módulo:** Automatización de cálculos, workflow controlado, trazabilidad completa, visibilidad en tiempo real del estado de pagos. --- ## 🎯 Objetivos 1. **Automatizar cálculo** de estimaciones con anticipos, retenciones y amortizaciones 2. **Vincular avances físicos** con estimaciones económicas 3. **Workflow de autorización** multinivel (residente → ingeniero → finanzas → director) 4. **Generación de reportes** en formatos oficiales (PDF/Excel) para clientes y auditorías 5. **Visibilidad completa** del estado de cobros y pagos --- ## 📊 Alcance Funcional ### Estimaciones hacia Cliente (INFONAVIT/Fideicomiso) - Generación desde avances de obra verificados - Cálculo automático de: - Monto bruto por viviendas/conceptos terminados - Amortización de anticipo (% configurable) - Retenciones (fondo de garantía, ISR, IVA) - Monto neto a cobrar - Estados: Borrador → Enviada → Revisada → Autorizada → Cobrada - Exportación a PDF/Excel con formato oficial ### Estimaciones hacia Subcontratistas/Proveedores - Vinculación con subcontratos y avances verificados - Cálculo de: - Monto por avance físico (%) - Amortización de anticipo - Retenciones (10% típico, configurable) - Monto neto a pagar - Estados: Borrador → Revisada → Autorizada → Programada → Pagada - Control de fechas de pago comprometidas ### Control de Anticipos - Registro de anticipos recibidos/otorgados - Amortización automática por estimación - Saldo pendiente de amortizar - Alertas de desviaciones ### Control de Retenciones - Tipos: Fondo de garantía, ISR, IVA, otras - Acumulación por proyecto/subcontrato - Liberación al cumplir garantías - Reportes de retenciones acumuladas ### Reportes y Dashboard - Dashboard de estimaciones por estado - Proyección de cobros/pagos - Análisis de flujo de caja - Reportes para auditorías --- ## 🏗️ Arquitectura del Módulo ### Schema de Base de Datos: `estimations` **Tablas principales:** - `estimations` - Cabecera de estimaciones - `estimation_items` - Detalle de partidas/conceptos - `estimation_payments` - Registro de pagos - `advances` - Anticipos y amortizaciones - `retentions` - Retenciones por tipo - `estimation_workflow` - Historial de aprobaciones **ENUMs:** - `estimation_type`: to_client, to_subcontractor - `estimation_status`: draft, submitted, reviewed, authorized, paid, rejected - `retention_type`: performance_bond, warranty, tax, other ### Backend: NestJS **Services:** - `EstimationService` - CRUD de estimaciones - `EstimationCalculator` - Lógica de cálculo compleja - `AdvanceService` - Gestión de anticipos/amortizaciones - `RetentionService` - Control de retenciones - `EstimationReportService` - Generación de PDFs/Excel **Controllers:** - `EstimationController` - API REST principal - `EstimationReportController` - Endpoints de reportes - `EstimationWorkflowController` - Endpoints de workflow ### Frontend: React + TypeScript **Componentes principales:** - `EstimationList` - Lista de estimaciones con filtros - `EstimationForm` - Crear/editar estimación - `EstimationDetail` - Vista detallada con workflow - `AdvancesManager` - Gestión de anticipos - `RetentionsManager` - Gestión de retenciones - `EstimationReportViewer` - Preview de reportes - `EstimationDashboard` - Métricas y gráficos --- ## 🔄 Flujos de Trabajo ### Flujo: Estimación a Cliente (INFONAVIT) ``` 1. [Residente] Registra avance físico → MAI-005 Control de Obra 2. [Ingeniero] Genera estimación desde avances acumulados 3. [Sistema] Calcula automáticamente: - Monto bruto: Viviendas terminadas × Precio unitario - Amortización anticipo: % de amortización × Saldo anticipo - Retención 5%: (Monto bruto - Amortización) × 5% - Monto neto = Monto bruto - Amortización - Retención 4. [Ingeniero] Revisa y envía a autorización 5. [Finanzas] Valida cálculos financieros 6. [Director] Autoriza estimación final 7. [Sistema] Genera PDF/Excel con formato oficial 8. [Finanzas] Envía a cliente y registra fecha estimada de cobro 9. [Sistema] Registra cobro al recibir transferencia ``` ### Flujo: Estimación a Subcontratista ``` 1. [Residente] Verifica avance de subcontratista en obra 2. [Subcontratista] Genera estimación o [Residente] la crea 3. [Sistema] Calcula: - Monto bruto: Avance % × Monto contrato - Amortización anticipo - Retención 10% - Monto neto 4. [Residente] Revisa y autoriza avance físico 5. [Ingeniero] Valida estimación 6. [Finanzas] Autoriza pago y programa fecha 7. [Sistema] Registra pago ejecutado ``` --- ## 📐 Fórmulas de Cálculo ### Estimación hacia Cliente ```typescript // Ejemplo: 25 viviendas terminadas a $500K c/u const montoBruto = viviendas × precioUnitario; // 25 × $500K = $12.5M // Anticipo inicial: 20% del contrato = $10M const amortizacion = (porcentajeAmortizacion / 100) × saldoAnticipo; // 25% × $10M = $2.5M const baseRetenciones = montoBruto - amortizacion; // $12.5M - $2.5M = $10M const retencion = baseRetenciones × 0.05; // $10M × 5% = $0.5M const montoNeto = montoBruto - amortizacion - retencion; // $12.5M - $2.5M - $0.5M = $9.5M ``` ### Estimación a Subcontratista ```typescript // Ejemplo: Subcontrato $2M, avance 30% const montoBruto = montoContrato × (avanceFisico / 100); // $2M × 30% = $600K // Anticipo: 10% del contrato = $200K const amortizacion = (avanceFisico / 100) × anticipoTotal; // 30% × $200K = $60K const retencion = (montoBruto - amortizacion) × 0.10; // ($600K - $60K) × 10% = $54K const montoNeto = montoBruto - amortizacion - retencion; // $600K - $60K - $54K = $486K ``` --- ## 🔗 Integraciones | Módulo | Relación | Datos Compartidos | |--------|----------|-------------------| | **MAI-005** Control de Obra | ➡️ Consume avances físicos | Avances de partidas, viviendas terminadas | | **MAI-003** Presupuestos | ➡️ Lee precios unitarios | Catálogo de conceptos, precios | | **MAI-012** Contratos | ➡️ Lee contratos y subcontratos | Montos, anticipos, condiciones | | **MAE-014** Finanzas | ⬅️ Provee cuentas por cobrar/pagar | Estimaciones autorizadas, pagos | | **MAI-004** Compras | ↔️ Valida ordenes vs estimaciones | Materiales entregados | --- ## 👥 Roles y Permisos | Rol | Permisos | |-----|----------| | **Residente** | Crear estimaciones a subcontratistas, verificar avances | | **Ingeniero** | Crear estimaciones a clientes, revisar todas, autorizar a subcontratistas | | **Finanzas** | Revisar todas, autorizar pagos, registrar cobros/pagos | | **Director** | Autorizar estimaciones >$100K, ver dashboard global | | **Subcontratista** | Ver estimaciones propias, generar borradores | --- ## 📊 Indicadores Clave (KPIs) - **Tiempo promedio de autorización:** <48 horas - **Precisión de cálculos:** 100% sin errores manuales - **Estimaciones pagadas a tiempo:** >90% - **Saldo de retenciones acumulado** - **Flujo de caja proyectado** (próximos 30/60/90 días) - **Antigüedad de estimaciones por cobrar** --- ## 🚨 Puntos Críticos 1. **Errores de cálculo** → Problemas de flujo de caja críticos 2. **Workflow roto** → Pagos sin autorización → fraude 3. **Falta de trazabilidad** → Rechazos de INFONAVIT en auditorías 4. **Sincronización con avances** → Estimaciones sin respaldo físico 5. **Control de retenciones** → Pérdida de liquidez si no se liberan a tiempo --- ## 📝 Documentos Relacionados ### Requerimientos Funcionales - [RF-EST-001: Estimaciones hacia cliente](./requerimientos/RF-EST-001-estimaciones-cliente.md) - [RF-EST-002: Estimaciones hacia subcontratistas](./requerimientos/RF-EST-002-estimaciones-subcontratistas.md) - [RF-EST-003: Control de anticipos y retenciones](./requerimientos/RF-EST-003-anticipos-retenciones.md) - [RF-EST-004: Generación de documentos](./requerimientos/RF-EST-004-reportes-documentos.md) - [RF-EST-005: Workflow de autorización](./requerimientos/RF-EST-005-workflow-autorizacion.md) ### Especificaciones Técnicas - [ET-EST-001: Modelo de datos](./especificaciones/ET-EST-001-modelo-datos.md) - [ET-EST-002: Cálculo de montos](./especificaciones/ET-EST-002-calculo-montos.md) - [ET-EST-003: Sistema de anticipos/retenciones](./especificaciones/ET-EST-003-anticipos-retenciones.md) - [ET-EST-004: Generación de reportes](./especificaciones/ET-EST-004-generacion-reportes.md) - [ET-EST-005: Workflow de estados](./especificaciones/ET-EST-005-workflow-estados.md) ### Historias de Usuario - [US-EST-001: Crear estimación a cliente](./historias-usuario/US-EST-001-crear-estimacion-cliente.md) - [US-EST-002: Crear estimación a subcontratista](./historias-usuario/US-EST-002-crear-estimacion-subcontratista.md) - [US-EST-003 a US-EST-009](./historias-usuario/) --- **Generado:** 2025-11-20 **Estado:** ✅ Completo **Mantenedores:** @tech-lead @backend-team @frontend-team