# FASE 4: Validación del Plan - ERP Construcción

**Proyecto:** erp-construccion
**Fecha:** 2026-01-04
**Estado:** Completado
**Base:** FASE-3-PLAN-IMPLEMENTACION.md

---

## 1. Checklist de Validación vs Análisis

### 1.1 Correcciones FASE-8 vs Plan

| ID | Elemento | En Análisis | En Plan | Estado |
|----|----------|-------------|---------|--------|
| COR-035 | payment_term_lines | FASE-2 §1.1 | 08-financial-ext | ✅ Cubierto |
| COR-036 | incoterms | FASE-2 §1.1 | 08-financial-ext | ✅ Cubierto |
| COR-037 | payment_methods | FASE-2 §1.1 | 08-financial-ext | ✅ Cubierto |
| COR-038 | reconcile_models | FASE-2 §1.1 | 08-financial-ext | ✅ Cubierto |
| COR-039 | journal_entries fields | FASE-2 §1.1 | 08-financial-ext | ✅ Cubierto |
| COR-040 | packages | FASE-2 §1.2 | 06-inventory-ext | ✅ Cubierto |
| COR-041 | putaway_rules | FASE-2 §1.2 | 06-inventory-ext | ✅ Cubierto |
| COR-042 | storage_categories | FASE-2 §1.2 | 06-inventory-ext | ✅ Cubierto |
| COR-043 | product fields | FASE-2 §1.2 | 06-inventory-ext | ✅ Cubierto |
| COR-044 | removal_strategies | FASE-2 §1.2 | 06-inventory-ext | ✅ Cubierto |
| COR-045 | product_supplierinfo | FASE-2 §1.3 | 07-purchase-ext | ✅ Cubierto |
| COR-046 | PO fields | FASE-2 §1.3 | 07-purchase-ext | ✅ Cubierto |
| COR-047 | action_create_stock_moves | FASE-2 §1.3 | 07-purchase-ext | ✅ Cubierto |
| COR-056 | project_collaborators | FASE-2 §1.4 | 09-projects-ext | ✅ Cubierto |
| COR-057 | project fields | FASE-2 §1.4 | 09-projects-ext | ✅ Cubierto |
| COR-058 | task_count trigger | FASE-2 §1.4 | 09-projects-ext | ✅ Cubierto |
| COR-059 | project_ratings | FASE-2 §1.4 | 09-projects-ext | ✅ Cubierto |
| COR-060 | burndown_chart_data | FASE-2 §1.4 | 09-projects-ext | ✅ Cubierto |
| COR-061 | employee fields | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |
| COR-062 | work_locations | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |
| COR-063 | skills system | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |
| COR-064 | expense system | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |
| COR-065 | resume_lines | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |
| COR-066 | payslip basics | FASE-2 §1.5 | 02-hr-schema | ✅ Cubierto |

**Resultado:** 24/24 correcciones cubiertas (100%)

---

### 1.2 Correcciones No Aplicables (Confirmación)

| ID | Elemento | Razón | Confirmado |
|----|----------|-------|------------|
| COR-048 | SO fields | No hay módulo de ventas en construcción | ✅ |
| COR-049 | action_confirm | No aplica a construcción | ✅ |
| COR-050 | get_pricelist_price | No hay listas de precio de venta | ✅ |
| COR-051 | convert_lead_to_opportunity | No hay CRM de ventas | ✅ |
| COR-052 | Lead/Opp fields | No aplica | ✅ |
| COR-053 | action_set_lost | No aplica | ✅ |
| COR-054 | action_set_won | No aplica | ✅ |
| COR-055 | CRM tags | No aplica | ✅ |

**Resultado:** 8 correcciones correctamente excluidas

---

## 2. Validación de Tablas

### 2.1 Tablas Nuevas por Crear

| Schema | Tabla | En FASE-2 | En FASE-3 | RLS | Índices |
|--------|-------|-----------|-----------|-----|---------|
| financial | payment_term_lines | ✅ | ✅ | ✅ | ✅ |
| financial | incoterms | ✅ | ✅ | N/A | ✅ |
| financial | payment_methods | ✅ | ✅ | ✅ | ✅ |
| financial | reconcile_models | ✅ | ✅ | ✅ | ✅ |
| financial | reconcile_model_lines | ✅ | ✅ | N/A | ✅ |
| inventory | package_types | ✅ | ✅ | ✅ | N/A |
| inventory | packages | ✅ | ✅ | ✅ | N/A |
| inventory | storage_categories | ✅ | ✅ | ✅ | N/A |
| inventory | putaway_rules | ✅ | ✅ | ✅ | N/A |
| inventory | removal_strategies | ✅ | ✅ | N/A | N/A |
| purchase | product_supplierinfo | ✅ | ✅ | ✅ | ✅ |
| projects | collaborators | ✅ | ✅ | ✅ | ✅ |
| projects | ratings | ✅ | ✅ | ✅ | ✅ |
| construction | avance_programado | ✅ | ✅ | ✅ | ✅ |
| construction | ubicaciones_obra | ✅ | ✅ | ✅ | N/A |
| hr | work_locations | ✅ | ✅ | ✅ | N/A |
| hr | skill_types | ✅ | ✅ | ✅ | N/A |
| hr | skills | ✅ | ✅ | ✅ | N/A |
| hr | skill_levels | ✅ | ✅ | ✅ | N/A |
| hr | employee_skills | ✅ | ✅ | N/A | N/A |
| hr | expense_sheets | ✅ | ✅ | ✅ | N/A |
| hr | expenses | ✅ | ✅ | ✅ | N/A |
| hr | employee_resume_lines | ✅ | ✅ | N/A | N/A |
| hr | payslip_structures | ✅ | ✅ | ✅ | N/A |
| hr | payslips | ✅ | ✅ | ✅ | N/A |
| hr | payslip_lines | ✅ | ✅ | N/A | N/A |

**Resultado:** 26 tablas planificadas (24 del análisis + 2 extensiones construcción)

---

### 2.2 Campos Adicionales en Tablas Existentes

| Tabla | Campo | En FASE-2 | En FASE-3 |
|-------|-------|-----------|-----------|
| financial.journal_entries | payment_state | ✅ | ✅ |
| financial.journal_entries | amount_residual | ✅ | ✅ |
| financial.journal_entries | invoice_date_due | ✅ | ✅ |
| financial.journal_entries | incoterm_id | ✅ | ✅ |
| financial.payments | is_matched | ✅ | ✅ |
| financial.payments | partner_bank_id | ✅ | ✅ |
| inventory.products | tracking | ✅ | ✅ |
| inventory.products | sale_ok | ✅ | ✅ |
| inventory.products | purchase_ok | ✅ | ✅ |
| inventory.products | volume | ✅ | ✅ |
| inventory.products | weight | ✅ | ✅ |
| inventory.products | hs_code | ✅ | ✅ |
| inventory.products | origin_country_id | ✅ | ✅ |
| inventory.products | removal_strategy_id | ✅ | ✅ |
| purchase.orders | origin | ✅ | ✅ |
| purchase.orders | partner_ref | ✅ | ✅ |
| purchase.orders | date_approve | ✅ | ✅ |
| purchase.orders | receipt_status | ✅ | ✅ |
| purchase.orders | incoterm_id | ✅ | ✅ |
| construction.proyectos | sequence | ✅ | ✅ |
| construction.proyectos | is_favorite | ✅ | ✅ |
| construction.proyectos | partida_count | ✅ | ✅ |
| construction.proyectos | partida_pendiente_count | ✅ | ✅ |
| construction.proyectos | partida_completada_count | ✅ | ✅ |
| construction.proyectos | status_avance | ✅ | ✅ |
| hr.employees | work_location_id | ✅ | ✅ |
| hr.employees | badge_id | ✅ | ✅ |
| hr.employees | pin | ✅ | ✅ |
| hr.employees | barcode | ✅ | ✅ |
| hr.employees | vehicle | ✅ | ✅ |
| hr.employees | vehicle_license_plate | ✅ | ✅ |
| hr.employees | certificate | ✅ | ✅ |

**Resultado:** 32 campos adicionales cubiertos

---

## 3. Validación de Funciones

| Función | En FASE-2 | En FASE-3 | Propósito |
|---------|-----------|-----------|-----------|
| construction.update_proyecto_partida_count() | ✅ | ✅ | Trigger conteo partidas |
| construction.generate_avance_snapshot() | ✅ | ✅ | Burndown de obra |
| purchase.action_create_stock_moves() | ✅ | ✅ | Crear recepciones desde OC |

**Resultado:** 3/3 funciones cubiertas (la 4ta era opcional)

---

## 4. Validación de Seed Data

| Seed | En FASE-2 | En FASE-3 | Registros |
|------|-----------|-----------|-----------|
| Incoterms | ✅ | ✅ | 11 |
| Removal strategies | ✅ | ✅ | 4 |
| Skill types (construcción) | ✅ | ✅ | 9 |
| Skill levels | ✅ | ✅ | 4 x 9 = 36 |
| Skills específicos | ✅ | ✅ | ~25 |
| Storage categories | ✅ | ✅ | 5 |
| Package types | ✅ | ✅ | 6 |
| Payment methods | ✅ | ✅ | 7 |

**Resultado:** 8/8 seeds planificados

---

## 5. Validación de Adaptaciones para Construcción

### 5.1 Extensiones Específicas del Giro

| Elemento | Extensión | Justificación |
|----------|-----------|---------------|
| payment_term_lines.applies_to | 'anticipo', 'estimacion', 'retencion', 'finiquito' | Términos de pago de obra |
| collaborators.rol | 'supervisor', 'perito', 'representante', 'infonavit' | Roles de obra |
| collaborators.vigencia_desde/hasta | DATE | Vigencia de supervisores |
| ratings.proyecto_id | UUID | Calificación por proyecto |
| ratings.tipo_trabajo | VARCHAR | Tipo de trabajo evaluado |
| avance_programado | Nueva tabla | Burndown adaptado a obra |
| ubicaciones_obra | Nueva tabla | Geocercas de frentes |
| expense_sheets.proyecto_id | UUID | Gastos por proyecto |
| expense_sheets.centro_costo | VARCHAR | Centro de costo |
| product_supplierinfo.proyecto_id | UUID | Precio por proyecto |
| product_supplierinfo.aplica_iva | BOOLEAN | Indicador IVA |
| product_supplierinfo.flete_incluido | BOOLEAN | Indicador flete |
| payslips.proyecto_id | UUID | Nómina por proyecto |
| payslips.is_destajo | BOOLEAN | Pago a destajo |
| payslip_structures.tipo_pago | 'quincenal', 'semanal', 'destajo' | Tipos de nómina |

**Resultado:** 15 extensiones específicas para construcción

---

## 6. Validación de Arquitectura

### 6.1 RLS (Row Level Security)

| Criterio | Estado |
|----------|--------|
| Todas las tablas multi-tenant tienen RLS | ✅ |
| Policy usa `current_setting('app.current_tenant_id')` | ✅ |
| Tablas catálogo sin RLS (incoterms, removal_strategies) | ✅ Correcto |

### 6.2 Foreign Keys

| FK | Tabla Origen | Tabla Destino | Estado |
|----|--------------|---------------|--------|
| payment_term_lines.payment_term_id | payment_term_lines | financial.payment_terms | ⚠️ Verificar existencia |
| reconcile_model_lines.account_id | reconcile_model_lines | financial.accounts | ⚠️ Verificar existencia |
| collaborators.project_id | collaborators | projects.projects | ⚠️ Verificar existencia |
| avance_programado.proyecto_id | avance_programado | construction.proyectos | ✅ Existe |
| ubicaciones_obra.proyecto_id | ubicaciones_obra | construction.proyectos | ✅ Existe |
| expense_sheets.employee_id | expense_sheets | hr.employees | ⚠️ Verificar existencia |
| payslips.contract_id | payslips | hr.contracts | ⚠️ Verificar existencia |

**Acción Requerida:** Validar existencia de tablas referenciadas en FASE-5

### 6.3 ENUMs

| ENUM | Schema | Valores |
|------|--------|---------|
| payment_method_type | financial | inbound, outbound |
| reconcile_model_type | financial | writeoff_button, writeoff_suggestion, invoice_matching |
| expense_status | hr | draft, submitted, approved, posted, paid, rejected |
| resume_line_type | hr | experience, education, certification, internal |
| payslip_status | hr | draft, verify, done, cancel |

**Resultado:** 5 ENUMs definidos correctamente

---

## 7. Matriz de Cobertura Final

| Categoría | Análisis | Plan | Cobertura |
|-----------|----------|------|-----------|
| Correcciones aplicables | 24 | 24 | 100% |
| Tablas nuevas | 24 | 26 | 108% (+2 extensiones) |
| Campos adicionales | 32 | 32 | 100% |
| Funciones | 3 | 3 | 100% |
| Seed data | 8 | 8 | 100% |
| Extensiones construcción | 15 | 15 | 100% |

---

## 8. Revisión de Conflictos Potenciales

### 8.1 Conflictos Identificados

| Conflicto | Descripción | Mitigación |
|-----------|-------------|------------|
| Schema hr vs construction | Posible confusión de tablas | Prefijo claro en nombres |
| FK a tablas core | payment_terms, accounts, projects.projects | Verificar en FASE-5 |
| ENUM duplicados | payment_method_type existe en core? | Verificar en FASE-5 |
| Trigger en partidas | Tabla puede tener estructura diferente | Usar IF EXISTS |

### 8.2 Conflictos Resueltos

| Conflicto | Solución |
|-----------|----------|
| Nombre task_count vs partida_count | Usar partida_count (más claro para construcción) |
| Burndown genérico vs avance_programado | Crear avance_programado adaptado |
| work_locations genérico | Crear ubicaciones_obra como extensión |

---

## 9. Sign-Off del Plan

### 9.1 Checklist de Aprobación

- [x] Todas las correcciones aplicables están cubiertas
- [x] Todas las tablas tienen RLS donde corresponde
- [x] Todas las FK están documentadas
- [x] Seed data específico de construcción incluido
- [x] Extensiones del giro justificadas
- [x] ENUMs definidos correctamente
- [x] Funciones tienen validaciones
- [x] Orden de ejecución definido

### 9.2 Riesgos Pendientes

| Riesgo | Impacto | Acción |
|--------|---------|--------|
| Tablas referenciadas no existen | Alto | Validar en FASE-5 |
| Conflicto con ENUMs existentes | Medio | Validar en FASE-5 |
| Estructura de partidas diferente | Medio | Adaptar trigger |

### 9.3 Aprobación

```
Estado: ✅ PLAN APROBADO CON OBSERVACIONES
Observaciones: Requiere validación de dependencias (FASE-5)
Fecha: 2026-01-04
Revisor: Claude Code (Automatizado)
```

---

## 10. Resumen Ejecutivo

El plan de implementación para ERP Construcción cubre:

- **24 correcciones** de ERP-Core FASE-8
- **26 tablas nuevas** (24 + 2 extensiones)
- **32 campos adicionales** en tablas existentes
- **3 funciones** (trigger + snapshot + create_stock_moves)
- **8 archivos seed** específicos de construcción
- **15 extensiones** específicas del giro

El plan está **APROBADO** para continuar a FASE-5 (Análisis de Dependencias).

---

**Estado:** FASE 4 COMPLETADA
**Siguiente:** FASE 5 - Análisis de Dependencias
**Fecha:** 2026-01-04
