16 KiB
_MAP: MAI-012 - Contratos y Subcontratos
Épica: MAI-012 Nombre: Contratos y Subcontratos Fase: 1 - Alcance Inicial Presupuesto: $25,000 MXN Story Points: 45 SP Estado: 📝 A crear Sprint: Sprint 4-5 (Semanas 7-10) Última actualización: 2025-11-17 Prioridad: P1
📋 Propósito
Gestión completa de contratos de obra, subcontratos y proveedores:
- Registro de contratos de obra (clientes) y subcontratos (proveedores/subcontratistas)
- Control de volúmenes contratados, precios unitarios y alcances
- Órdenes de cambio (obra adicional/modificada)
- Retenciones, garantías y penalizaciones
- Seguimiento de cumplimiento contractual
Integración clave: Se vincula con Proyectos (MAI-002), Presupuestos (MAI-003), Compras (MAI-004), Estimaciones (MAI-008) y Preconstrucción (MAI-018).
📁 Contenido
Requerimientos Funcionales (Estimados: 5)
| ID | Título | Estado |
|---|---|---|
| RF-CTR-001 | Registro y gestión de contratos de obra | 📝 A crear |
| RF-CTR-002 | Gestión de subcontratos y proveedores | 📝 A crear |
| RF-CTR-003 | Órdenes de cambio y convenios modificatorios | 📝 A crear |
| RF-CTR-004 | Control de garantías, retenciones y fianzas | 📝 A crear |
| RF-CTR-005 | Seguimiento de cumplimiento y penalizaciones | 📝 A crear |
Especificaciones Técnicas (Estimadas: 5)
| ID | Título | RF | Estado |
|---|---|---|---|
| ET-CTR-001 | Modelo de datos de contratos y anexos | RF-CTR-001 | 📝 A crear |
| ET-CTR-002 | Sistema de control de volúmenes y alcances | RF-CTR-002 | 📝 A crear |
| ET-CTR-003 | Gestión de modificaciones contractuales | RF-CTR-003 | 📝 A crear |
| ET-CTR-004 | Sistema de garantías y fianzas | RF-CTR-004 | 📝 A crear |
| ET-CTR-005 | Motor de penalizaciones y cumplimiento | RF-CTR-005 | 📝 A crear |
Historias de Usuario (Estimadas: 9)
| ID | Título | SP | Estado |
|---|---|---|---|
| US-CTR-001 | Registrar contrato de obra con cliente | 5 | 📝 A crear |
| US-CTR-002 | Crear subcontrato de proveedor/subcontratista | 5 | 📝 A crear |
| US-CTR-003 | Generar orden de cambio por obra adicional | 5 | 📝 A crear |
| US-CTR-004 | Gestionar garantías y fianzas de cumplimiento | 5 | 📝 A crear |
| US-CTR-005 | Registrar retenciones por contrato | 5 | 📝 A crear |
| US-CTR-006 | Aplicar penalizaciones por incumplimiento | 5 | 📝 A crear |
| US-CTR-007 | Comparar avance vs volumen contratado | 5 | 📝 A crear |
| US-CTR-008 | Dashboard de contratos y subcontratos activos | 5 | 📝 A crear |
| US-CTR-009 | Generar anexos y documentos contractuales | 5 | 📝 A crear |
Total Story Points: 45 SP
Implementación
📊 Inventarios de trazabilidad:
- TRACEABILITY.yml - Matriz completa de trazabilidad
- DATABASE.yml - Objetos de base de datos
- BACKEND.yml - Módulos backend
- FRONTEND.yml - Componentes frontend
Pruebas
📋 Documentación de testing:
- TEST-PLAN.md - Plan de pruebas
- TEST-CASES.md - Casos de prueba
🔗 Referencias
- README: README.md - Descripción detallada de la épica
- Fase 1: ../README.md - Información de la fase completa
- Módulo relacionado MVP: Módulo 5 - Contratos y Subcontratos (MVP-APP.md)
📊 Métricas
| Métrica | Valor |
|---|---|
| Presupuesto estimado | $25,000 MXN |
| Story Points estimados | 45 SP |
| Duración estimada | 9 días |
| Reutilización GAMILIT | 10% (funcionalidad nueva) |
| RF a implementar | 5/5 |
| ET a implementar | 5/5 |
| US a completar | 9/9 |
🎯 Módulos Afectados
Base de Datos
- Schema:
contracts - Tablas principales:
contracts- Contratos de obra (hacia clientes)subcontracts- Subcontratos (hacia proveedores/subcontratistas)contract_items- Conceptos/partidas del contratochange_orders- Órdenes de cambioguarantees- Garantías y fianzasretentions- Retenciones por contratopenalties- Penalizaciones aplicadascontract_amendments- Convenios modificatorios
- ENUMs:
contract_type(main_contract, subcontract, service_contract, supply_contract)contract_status(draft, signed, active, suspended, completed, terminated)change_order_type(additional_work, modified_work, deductive_work)change_order_status(draft, submitted, approved, rejected, executed)guarantee_type(performance_bond, advance_payment, warranty, payment_bond)penalty_type(delay, quality, safety, breach_of_contract)
Backend
- Módulo:
contracts - Path:
apps/backend/src/modules/contracts/ - Services: ContractService, SubcontractService, ChangeOrderService, GuaranteeService, PenaltyService
- Controllers: ContractController, SubcontractController, ChangeOrderController
- Middlewares: ContractAccessGuard, ApprovalWorkflowGuard
Frontend
- Features:
contracts,subcontracts,change-orders - Path:
apps/frontend/src/features/contracts/ - Componentes:
- ContractList
- ContractForm (create/edit)
- ContractDetail
- SubcontractList
- SubcontractForm
- ChangeOrderManager
- GuaranteeTracker
- RetentionManager
- PenaltyCalculator
- ContractComplianceDashboard
- Stores: contractStore, subcontractStore, changeOrderStore
📝 Tipos de Contratos
1. Contrato de Obra (hacia Cliente)
Características:
- Cliente: INFONAVIT, fideicomiso, desarrollador privado, gobierno
- Objeto: Construcción de vivienda, urbanización, infraestructura
- Modalidad: Precio alzado, precios unitarios, mixto
- Garantías: Anticipo (10-30%), cumplimiento (10%), vicios ocultos (10%)
- Retenciones: Fondo de garantía (5-10%)
- Plazo: 6-24 meses típicamente
Información clave:
- Número de contrato
- Monto total contratado
- Plazo de ejecución
- Alcances y especificaciones
- Forma de pago (estimaciones)
- Penalizaciones por retraso
- Causales de rescisión
2. Subcontrato (hacia Proveedor/Subcontratista)
Tipos comunes:
| Tipo | Descripción | Modalidad típica |
|---|---|---|
| Mano de obra especializada | Plomería, electricidad, herrería | Precio unitario / Destajo |
| Suministro e instalación | Ventanas, puertas, pisos | Precio alzado por vivienda |
| Servicios | Proyecto ejecutivo, topografía, laboratorio | Precio alzado |
| Suministro | Concreto, block, acero | Precio unitario |
Información clave:
- Proveedor/subcontratista
- Alcance del subcontrato
- Monto contratado
- Precios unitarios
- Plazo de ejecución
- Forma de pago (estimaciones)
- Retenciones (10% típico)
- Garantías requeridas
🔄 Flujo de Trabajo de Contratos
Contrato de Obra (Cliente)
-
Creación desde licitación ganada:
- Se crea automáticamente al convertir licitación a proyecto
- Se arrastra presupuesto "contratado"
- Se registran datos del contrato firmado
-
Firma y activación:
- Carga de contrato escaneado
- Registro de garantías (anticipo, cumplimiento)
- Activación del contrato → habilita estimaciones
-
Ejecución:
- Control de volúmenes ejecutados vs contratados
- Generación de estimaciones
- Aplicación de retenciones
- Seguimiento de cumplimiento de plazo
-
Modificaciones:
- Órdenes de cambio por obra adicional
- Convenios modificatorios
- Ampliación de plazo
- Ajuste de precios (escalatorias)
-
Cierre:
- Finiquito de obra
- Liberación de retenciones
- Entrega de fianza de vicios ocultos
- Cierre administrativo
Subcontrato (Proveedor/Subcontratista)
-
Solicitud de cotización:
- Definición de alcances
- Solicitud a 3+ proveedores
- Comparativo de ofertas
-
Adjudicación:
- Selección de proveedor ganador
- Negociación de términos
- Creación de subcontrato
-
Formalización:
- Firma de subcontrato
- Solicitud de garantías (si aplica)
- Entrega de anticipo (si aplica)
-
Ejecución:
- Supervisión de avances
- Generación de estimaciones hacia subcontratista
- Aplicación de retenciones (10% típico)
- Control de calidad
-
Cierre:
- Finiquito de subcontrato
- Liberación de retenciones
- Evaluación de desempeño
- Actualización de catálogo de proveedores
📋 Órdenes de Cambio
Tipos de Órdenes de Cambio
-
Obra adicional:
- Conceptos nuevos no incluidos en contrato original
- Incremento de volúmenes
- Ejemplo: Construcción de caseta de vigilancia adicional
-
Obra modificada:
- Cambio en especificaciones
- Ejemplo: Cambio de piso cerámico a porcelanato
-
Obra deductiva:
- Eliminación de conceptos
- Reducción de volúmenes
- Ejemplo: Eliminación de jardinería en área común
Flujo de Orden de Cambio
graph LR
A[Detección de necesidad] --> B[Solicitud de OC]
B --> C[Cotización de proveedor]
C --> D[Revisión técnica]
D --> E{Aprobación cliente}
E -->|Aprobada| F[Modificación de contrato]
E -->|Rechazada| G[Cancelada]
F --> H[Actualización de presupuesto]
H --> I[Ejecución]
Estados:
draft- Borrador internosubmitted- Enviada a cliente para aprobaciónapproved- Aprobada por clienterejected- Rechazadaexecuted- Ejecutada e integrada al contrato
Información registrada:
- Número de OC
- Tipo (adicional/modificada/deductiva)
- Justificación técnica
- Conceptos afectados
- Monto de la OC
- Impacto en plazo
- Aprobaciones requeridas
- Documentación soporte
🛡️ Garantías y Fianzas
Tipos de Garantías
| Tipo | % Típico | Vigencia | Propósito |
|---|---|---|---|
| Anticipo | 10-30% | Hasta amortización total | Garantizar correcta aplicación del anticipo |
| Cumplimiento | 10% | Hasta término de obra | Garantizar cumplimiento de contrato |
| Vicios ocultos | 10% | 1-2 años post-entrega | Cubrir defectos constructivos |
| Pago a proveedores | Variable | Obra + finiquito | Garantizar pago a subcontratistas (obras públicas) |
Control de Garantías
Información registrada:
- Tipo de garantía
- Institución afianzadora
- Número de póliza
- Monto garantizado
- Fecha de emisión
- Vigencia
- Beneficiario
- Estado (vigente, vencida, liberada, ejecutada)
Alertas:
- Próxima a vencer (30, 15, 7 días)
- Vencida (requiere renovación)
- Pendiente de liberación (obra terminada)
💰 Retenciones
Tipos de Retenciones
-
Fondo de garantía (cliente → constructora):
- Porcentaje: 5-10%
- Base: Cada estimación
- Liberación: Al término satisfactorio de la obra o progresiva
- Propósito: Garantizar corrección de defectos
-
Retención a subcontratistas (constructora → subcontratista):
- Porcentaje: 10% típico
- Base: Cada estimación
- Liberación: Al finiquito del subcontrato
- Propósito: Garantizar cumplimiento de alcances
-
Retenciones fiscales:
- ISR (10% personas físicas sin RFC)
- IVA retenido (en ciertos casos)
Control de Retenciones
Información registrada:
retention:
contract_id: "UUID"
type: "performance_guarantee" # fondo_garantia
percentage: 5.0
amount: 50000.00 # $50K MXN
status: "withheld"
withheld_date: "2025-01-15"
release_conditions:
- "Completion of construction"
- "Approval of final inspection"
- "60 days after delivery"
release_date: null
released_amount: 0.00
notes: "5% retention per contract clause 12.3"
Dashboard de retenciones:
- Retenciones activas por contrato
- Monto total retenido
- Próximas a liberar
- Historial de liberaciones
⚠️ Penalizaciones
Tipos de Penalizaciones
-
Por retraso en entrega:
- Cálculo: % del monto del contrato por día de retraso
- Ejemplo: 0.5% por día, máximo 10% del contrato
- Aplicación: Automática al vencer plazo
-
Por calidad:
- Defectos de construcción
- Incumplimiento de especificaciones
- Aplicación: Según gravedad y recurrencia
-
Por seguridad:
- Incidentes/accidentes
- Incumplimiento de normativa HSE
- Aplicación: Según matriz de sanciones
-
Por incumplimiento contractual:
- No atender solicitudes de cliente
- No presentar reportes requeridos
- No mantener personal clave asignado
Cálculo de Penalización por Retraso
Ejemplo contractual:
Contrato: $50M MXN
Plazo: 12 meses (365 días)
Fecha inicio: 2025-01-01
Fecha compromiso: 2025-12-31
Penalización: 0.3% por día de retraso
Máximo: 10% del contrato = $5M
Escenarios:
| Fecha entrega real | Días de retraso | Penalización diaria | Total penalización |
|---|---|---|---|
| 2025-12-31 | 0 | $0 | $0 |
| 2026-01-10 | 10 | $150,000 | $1,500,000 |
| 2026-01-31 | 31 | $150,000 | $4,650,000 |
| 2026-02-10 | 41 | $150,000 | $5,000,000 (tope máximo) |
Sistema:
- Cálculo automático de penalizaciones
- Alertas preventivas (30, 15, 7 días antes de vencimiento)
- Registro de justificaciones de retraso
- Aprobación de condonación (si aplica)
💡 Casos de Uso Clave
Contrato de Obra con INFONAVIT
Contexto:
- Proyecto: 200 viviendas
- Monto: $100M MXN
- Plazo: 18 meses
- Anticipo: 20% = $20M
- Retención: 5%
Ciclo de vida:
-
Firma (Día 1):
- Registro de contrato
- Entrega de fianza de anticipo ($20M)
- Pago de anticipo
-
Estimación 1 (Mes 2):
- Avance: 10% = $10M bruto
- Amortización anticipo: 10% × $20M = $2M
- Retención 5%: $500K
- Pago neto: $7.5M
-
Orden de cambio (Mes 6):
- Cambio de acabados: +$2M
- Nuevo monto contratado: $102M
-
Penalización (Mes 18):
- Retraso: 15 días
- Penalización: 0.2% × 15 días × $102M = $306K
- Se descuenta de estimación final
-
Finiquito (Mes 19):
- Liberación de retenciones: $5.1M
- Entrega de fianza de vicios ocultos (10% × $102M = $10.2M)
- Cierre administrativo
Subcontrato de Instalaciones Eléctricas
Contexto:
- Subcontratista: Instalaciones Eléctricas SA
- Alcance: Instalación eléctrica de 200 viviendas
- Modalidad: Precio alzado por vivienda
- Precio: $8,000/vivienda = $1.6M total
- Retención: 10%
Ciclo de vida:
-
Adjudicación:
- Comparativo de 3 cotizaciones
- Subcontratista ganador: $8K/viv (vs $8.5K y $9K)
- Firma de subcontrato
-
Estimación 1 (30 viviendas):
- Avance: 30 viv × $8,000 = $240K bruto
- Retención 10%: $24K
- Pago neto: $216K
-
Orden de cambio:
- Instalación de paneles solares (no incluido)
- +$1,500/vivienda × 200 = $300K adicionales
- Nuevo monto: $1.9M
-
Finiquito (200 viviendas):
- Trabajo total: $1.9M
- Retenciones acumuladas: $190K
- Liberación de retenciones tras inspección final
🚨 Puntos Críticos
- Trazabilidad contractual: Todo cambio debe estar documentado y aprobado
- Control de volúmenes: Evitar sobreejecución sin orden de cambio
- Garantías vigentes: Sistema de alertas para renovaciones
- Retenciones claras: Condiciones de liberación explícitas
- Penalizaciones justificadas: Documentar causas de retrasos
- Integración con estimaciones: Montos contratados limitan estimaciones
- Workflow de aprobaciones: Órdenes de cambio requieren aprobación de cliente
🎯 Siguiente Paso
Crear documentación de requerimientos y especificaciones técnicas del módulo.
Generado: 2025-11-17 Mantenedores: @tech-lead @backend-team @frontend-team @legal-team Estado: 📝 A crear