erp-construccion/docs/02-definicion-modulos/MAI-008-estimaciones-facturacion/requerimientos/RF-EST-001-estimaciones-cliente.md

9.1 KiB
Raw Permalink Blame History

RF-EST-001: Estimaciones hacia Cliente

ID: RF-EST-001
Módulo: MAI-008
Prioridad: Alta
Story Points: 13 SP


📋 Descripción

Sistema para generar estimaciones de obra ejecutada hacia clientes institucionales (INFONAVIT, fideicomisos, Gobierno) basadas en avances físicos verificados, con cálculo automático de amortizaciones de anticipo y retenciones.


🎯 Objetivos

  1. Generar estimaciones desde avances de obra validados
  2. Calcular automáticamente anticipos, amortizaciones y retenciones según contrato
  3. Mantener trazabilidad completa entre avances físicos y cobros
  4. Workflow de autorización multinivel
  5. Generación de documentos oficiales para cliente

📐 Reglas de Negocio

RN-EST-001: Cálculo de Monto Bruto

montoBruto = Σ (conceptos_ejecutados × precio_unitario)

// Ejemplo para viviendas:
montoBruto = viviendas_terminadas × precio_por_vivienda

Validaciones:

  • Solo conceptos con avance >= umbral_estimacion (default 100%)
  • Precios del catálogo vigente del contrato
  • Validar que no exceda monto contratado

RN-EST-002: Amortización de Anticipo

// Si hay anticipo pendiente:
porcentaje_amortizacion = configurado_en_contrato  // Ejemplo: 25%
saldo_anticipo = anticipo_inicial - Σ(amortizaciones_previas)

amortizacion_actual = min(
  saldo_anticipo,
  (monto_bruto - acumulado_estimaciones_anteriores) × (porcentaje_amortizacion / 100)
)

Ejemplo:

  • Contrato: $50M, Anticipo 20% = $10M
  • Amortización: 25% por estimación
  • Estimación 1: $12.5M bruto → Amortiza $2.5M (25% × $10M)
  • Estimación 2: $10M bruto → Amortiza $2.5M
  • Etc hasta agotar $10M

RN-EST-003: Retenciones

base_retenciones = monto_bruto - amortizacion

retenciones = {
  fondo_garantia: base_retenciones × 0.05,  // 5% típico
  isr: base_retenciones × (tasa_isr / 100) || 0,
  iva_retenido: base_retenciones × (tasa_iva_ret / 100) || 0,
  otras: monto_fijo || 0
}

total_retenciones = Σ(retenciones)

Reglas:

  • Fondo de garantía: Configurable por contrato (típico 5-10%)
  • ISR retenido: Solo si aplica según contrato
  • IVA retenido: Casos específicos
  • Se acumulan hasta finiquito/liberación

RN-EST-004: Cálculo de Monto Neto

monto_neto = monto_bruto - amortizacion_anticipo - total_retenciones

Validaciones:

  • monto_neto >= 0
  • Si monto_neto < 0 → Alerta, revisar cálculos

RN-EST-005: Numeración Consecutiva

EST-[PROYECTO]-[TIPO]-[AÑO]-[CONSECUTIVO]

Ejemplos:
- EST-PRJ001-CLI-2025-001  (Primera estimación a cliente)
- EST-PRJ001-CLI-2025-002  (Segunda estimación a cliente)

Reglas:

  • Consecutivo reinicia cada año
  • No se saltan números
  • Único por proyecto

RN-EST-006: Validaciones de Negocio

  1. No duplicar conceptos:

    • Un concepto/vivienda no puede estimarse 2 veces al mismo cliente
    • Validar vs estimaciones anteriores
  2. Límite del contrato:

    acumulado_estimaciones + monto_actual <= monto_contrato_total
    
  3. Avances verificados:

    • Solo incluir conceptos con avance validado por residente/supervisor
    • Estado del avance: "verificado" o "autorizado"
  4. Periodo de estimación:

    • Típico: Mensual, Quincenal
    • No solapar periodos
    • No generar 2 estimaciones del mismo periodo

🏛️ Estructura de Datos

Estimación hacia Cliente

interface EstimacionCliente {
  id: string;
  numero: string;  // EST-PRJ001-CLI-2025-001
  
  // Relaciones
  proyectoId: string;
  contratoId: string;
  clienteId: string;
  
  // Periodo
  periodoInicio: Date;
  periodoFin: Date;
  numeroEstimacion: number;  // 1, 2, 3...
  
  // Montos
  montoBruto: number;
  amortizacionAnticipo: number;
  totalRetenciones: number;
  montoNeto: number;
  
  // Desglose retenciones
  retencionFondoGarantia: number;
  retencionISR: number;
  retencionIVA: number;
  otrasRetenciones: number;
  
  // Estado
  status: EstimationStatus;  // draft, submitted, authorized, paid
  
  // Fechas
  fechaCreacion: Date;
  fechaEnvio: Date;
  fechaAutorizacion: Date;
  fechaCobro: Date;
  fechaCobroEstimada: Date;
  
  // Workflow
  creadoPor: string;
  autorizadoPor: string;
  observaciones: string;
  
  // Metadata
  documentosPDF: string[];  // URLs
  documentosExcel: string[];
}

Detalle de Partidas

interface EstimacionItem {
  id: string;
  estimacionId: string;
  
  // Concepto
  conceptoCatalogoId: string;
  descripcion: string;
  unidad: string;
  precioUnitario: number;
  
  // Cantidades
  cantidadContratada: number;
  cantidadEstimadaAnterior: number;
  cantidadEstimadaActual: number;
  cantidadAcumulada: number;
  porcentajeAvance: number;
  
  // Importes
  importeActual: number;  // cantidad_actual × precio
  importeAcumulado: number;
  
  // Trazabilidad
  avanceObraId: string;  // Link a MAI-005
  verificadoPor: string;
  fechaVerificacion: Date;
}

🔄 Estados del Workflow

stateDiagram-v2
    [*] --> Borrador
    Borrador --> Enviada: Ingeniero envía
    Enviada --> Revisada: Finanzas revisa
    Revisada --> Autorizada: Director autoriza
    Autorizada --> Cobrada: Se registra pago
    
    Enviada --> Borrador: Rechazada (volver a editar)
    Revisada --> Enviada: Correcciones requeridas
    
    Cobrada --> [*]

Transiciones:

  • draft → submitted: Ingeniero valida y envía
  • submitted → reviewed: Finanzas valida cálculos
  • reviewed → authorized: Director autoriza (si >$100K)
  • authorized → paid: Se registra cobro de cliente

📊 Casos de Uso

CU-001: Generar Estimación Mensual de Viviendas

Actor: Ingeniero de Proyecto

Precondiciones:

  • Existe proyecto con contrato vigente
  • Hay avances de obra verificados del periodo
  • No existe estimación para el mismo periodo

Flujo:

  1. Ingeniero selecciona proyecto y periodo
  2. Sistema carga avances verificados del periodo
  3. Sistema identifica viviendas 100% terminadas en el periodo
  4. Sistema calcula monto bruto (viviendas × precio)
  5. Sistema calcula amortización de anticipo
  6. Sistema calcula retenciones
  7. Sistema muestra resumen y desglose
  8. Ingeniero revisa y confirma
  9. Sistema genera estimación en estado "Borrador"

Postcondiciones:

  • Estimación creada vinculada a avances
  • Disponible para revisión

CU-002: Estimar por Avance de Partidas

Actor: Ingeniero

Precondiciones:

  • Proyecto con catálogo de conceptos
  • Avances parciales registrados por partida

Flujo:

  1. Ingeniero selecciona partidas con avance >= 100%
  2. Sistema valida que no estén estimadas previamente
  3. Sistema multiplica cantidad × precio unitario
  4. Sistema aplica factor de amortización y retenciones
  5. Sistema genera detalle item por item
  6. Ingeniero ajusta si necesario
  7. Sistema guarda borrador

🧮 Ejemplo Completo

Contexto

  • Proyecto: Desarrollo 100 viviendas
  • Contrato: $50,000,000 MXN
  • Precio unitario: $500,000/vivienda
  • Anticipo: 20% = $10,000,000
  • Amortización: 25% por estimación
  • Retención: 5% fondo garantía

Estimación 1

Avance: 25 viviendas terminadas (25%)

Monto bruto:
  25 viviendas × $500,000 = $12,500,000

Amortización anticipo:
  25% × $10,000,000 = $2,500,000
  Saldo anticipo: $10,000,000 - $2,500,000 = $7,500,000

Base para retenciones:
  $12,500,000 - $2,500,000 = $10,000,000

Retención 5%:
  $10,000,000 × 5% = $500,000
  Acumulado retenciones: $500,000

Monto neto a cobrar:
  $12,500,000 - $2,500,000 - $500,000 = $9,500,000

Estimación 2

Avance: 20 viviendas adicionales (20% adicional, 45% acumulado)

Monto bruto:
  20 viviendas × $500,000 = $10,000,000

Amortización anticipo:
  Saldo pendiente: $7,500,000
  25% × $7,500,000 = $1,875,000
  Pero: min($1,875,000, $7,500,000) = $1,875,000
  Nuevo saldo: $7,500,000 - $1,875,000 = $5,625,000

Base retenciones:
  $10,000,000 - $1,875,000 = $8,125,000

Retención 5%:
  $8,125,000 × 5% = $406,250
  Acumulado retenciones: $500,000 + $406,250 = $906,250

Monto neto:
  $10,000,000 - $1,875,000 - $406,250 = $7,718,750

Criterios de Aceptación

  1. Cálculos precisos:

    • Monto bruto = Σ(cantidad × precio)
    • Amortización respeta % configurado
    • Retenciones calculadas sobre base correcta
    • Monto neto = bruto - amortización - retenciones
  2. No duplicidad:

    • Sistema previene estimar 2 veces el mismo concepto
    • Alerta si vivienda/concepto ya estimado
  3. Trazabilidad:

    • Cada item vinculado a avance de obra verificado
    • Auditoría completa de quién/cuándo creó/autorizó
  4. Validaciones:

    • No exceder monto contrato
    • No crear sin avances verificados
    • Numeración consecutiva sin saltos
  5. Performance:

    • Cálculo de estimación <3 segundos
    • Listar estimaciones con filtros <1 segundo

🔗 Referencias


Generado: 2025-11-20
Estado: Completo