# FASE 4: Validacion de Dependencias

**ID:** EPIC-VAL-004
**Fecha:** 2026-01-04
**Estado:** Completado
**Basado en:** FASE-3 (Plan de Correcciones)

---

## 1. Objetivo

Validar que las correcciones planificadas en FASE 3:
1. No rompan dependencias existentes
2. Tengan todas sus dependencias satisfechas
3. Sean compatibles con la estructura actual
4. Identifiquen correcciones ya implementadas

---

## 2. Analisis de Estado Actual

### 2.1 Correcciones Ya Implementadas (Excluir del Plan)

| ID Plan | Descripcion | Estado Actual | Accion |
|---------|-------------|---------------|--------|
| COR-034 | core.attachments | YA EXISTE (linea 271) | EXCLUIR |
| COR-027 | hr.leaves | YA EXISTE (linea 252) | AJUSTAR |
| COR-027 | hr.leave_types | YA EXISTE (linea 231) | AJUSTAR |

**Nota:** HR ya tiene estructura de leaves. Solo falta `leave_allocations`.

### 2.2 Correcciones P1/P2 Anteriores Verificadas

| ID | Tabla/Funcion | Archivo | Linea | Verificado |
|----|---------------|---------|-------|------------|
| COR-005 | financial.tax_groups | 04-financial.sql | 285 | OK |
| COR-013 | financial.account_full_reconcile | 04-financial.sql | 593 | OK |
| COR-013 | financial.account_partial_reconcile | 04-financial.sql | 606 | OK |
| COR-020 | core.partner_duplicates | 02-core.sql | 759 | OK |

---

## 3. Validacion de Dependencias por Correccion

### 3.1 COR-021: core.states

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| core.countries | core | SI | OK |
| system.tenants | auth | SI | OK |

**Dependencias Satisfechas:** SI
**Tablas que dependeran de states:**
- core.partners (agregar state_id)
- core.addresses (agregar state_id)
- financial.fiscal_positions (state_ids array)

### 3.2 COR-022: core.banks, core.partner_banks

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| core.countries | core | SI | OK |
| core.partners | core | SI | OK |
| core.currencies | core | SI | OK |

**Dependencias Satisfechas:** SI
**Tablas que dependeran:**
- financial.bank_statements (journal_id -> partner_bank_id)
- financial.payments (partner_bank_id)

### 3.3 COR-023: financial.bank_statements, bank_statement_lines

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| financial.journals | financial | SI | OK |
| core.currencies | core | SI | OK |
| core.partners | core | SI | OK |
| core.partner_banks | core | NO | REQUIERE COR-022 |

**Dependencias Satisfechas:** NO - Requiere COR-022 primero
**Orden de ejecucion:** COR-022 -> COR-023

### 3.4 COR-024: financial.tax_repartition_lines

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| financial.taxes | financial | SI | OK |
| financial.accounts | financial | SI | OK |

**Dependencias Satisfechas:** SI

### 3.5 COR-025: inventory.routes, stock_rules

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| inventory.warehouses | inventory | SI | OK |
| inventory.locations | inventory | SI | OK |
| inventory.picking_types | inventory | SI | OK (COR-007) |
| core.partners | core | SI | OK |
| core.companies | core | SI | OK |

**Dependencias Satisfechas:** SI

### 3.6 COR-026: hr.attendances

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| auth.tenants | auth | SI | OK |
| hr.employees | hr | SI | OK |

**Dependencias Satisfechas:** SI

### 3.7 COR-027: hr.leave_allocations (AJUSTADO)

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| auth.tenants | auth | SI | OK |
| hr.employees | hr | SI | OK |
| hr.leave_types | hr | SI | YA EXISTE |

**Dependencias Satisfechas:** SI
**Nota:** Solo se requiere agregar `leave_allocations`, no recrear estructura

### 3.8 COR-028: financial.fiscal_positions

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| core.companies | core | SI | OK |
| core.countries | core | SI | OK |
| core.states | core | NO | REQUIERE COR-021 |
| financial.taxes | financial | SI | OK |
| financial.accounts | financial | SI | OK |

**Dependencias Satisfechas:** PARCIAL - Requiere COR-021 para state_ids
**Workaround:** Puede implementarse sin states, agregar despues

### 3.9 COR-029: purchase.button_cancel, button_draft

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| purchase.purchase_orders | purchase | SI | OK |
| inventory.pickings | inventory | SI | OK |

**Dependencias Satisfechas:** SI

### 3.10 COR-030: crm.merge_leads

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| crm.leads | crm | SI | OK |
| crm.lead_activities | crm | VERIFICAR | - |

**Dependencias Satisfechas:** VERIFICAR lead_activities

### 3.11 COR-031: inventory.stock_scrap

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| inventory.products | inventory | SI | OK |
| core.uom | core | SI | OK |
| inventory.lots | inventory | SI | OK |
| inventory.locations | inventory | SI | OK |
| inventory.stock_moves | inventory | SI | OK |
| inventory.pickings | inventory | SI | OK |

**Dependencias Satisfechas:** SI

### 3.12 COR-032: projects.project_updates

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| projects.projects | projects | SI | OK |
| auth.users | auth | SI | OK |

**Dependencias Satisfechas:** SI

### 3.13 COR-033: sales.order_templates

| Dependencia | Tabla/Schema | Existe | Estado |
|-------------|--------------|--------|--------|
| system.tenants | auth | SI | OK |
| inventory.products | inventory | SI | OK |
| core.uom | core | SI | OK |

**Dependencias Satisfechas:** SI

---

## 4. Grafo de Dependencias

```
GRUPO 0 (Sin dependencias) - Ejecutar primero
├── COR-021: core.states
├── COR-024: financial.tax_repartition_lines
├── COR-025: inventory.routes + rules
├── COR-026: hr.attendances
├── COR-027: hr.leave_allocations (ajustado)
├── COR-029: purchase.button_cancel/draft
├── COR-031: inventory.stock_scrap
├── COR-032: projects.project_updates
└── COR-033: sales.order_templates

GRUPO 1 (Depende de GRUPO 0)
├── COR-022: core.banks + partner_banks (despues de states)
├── COR-028: financial.fiscal_positions (depende de COR-021)
└── COR-030: crm.merge_leads (verificar activities)

GRUPO 2 (Depende de GRUPO 1)
└── COR-023: financial.bank_statements (depende de COR-022)

EXCLUIDOS (Ya existen)
├── COR-034: core.attachments - YA EXISTE
├── hr.leaves - YA EXISTE
└── hr.leave_types - YA EXISTE
```

---

## 5. Tabla de Referencias Cruzadas

### 5.1 Tablas que Agregan FK a Tablas Existentes

| Tabla Existente | Nuevo Campo | Referencia a | Correccion |
|-----------------|-------------|--------------|------------|
| core.partners | state_id | core.states | COR-021 |
| core.addresses | state_id | core.states | COR-021 |
| core.partners | bank_ids | core.partner_banks | COR-022 |
| financial.payments | partner_bank_id | core.partner_banks | COR-022 |

### 5.2 Tablas Nuevas con Referencias a Existentes

| Nueva Tabla | Referencia | Tabla Existente |
|-------------|------------|-----------------|
| core.states | country_id | core.countries |
| core.banks | country_id | core.countries |
| core.partner_banks | partner_id | core.partners |
| financial.bank_statements | journal_id | financial.journals |
| financial.bank_statement_lines | partner_id | core.partners |
| financial.tax_repartition_lines | tax_id | financial.taxes |
| inventory.routes | warehouse_id | inventory.warehouses |
| inventory.stock_rules | route_id | inventory.routes |
| hr.attendances | employee_id | hr.employees |
| hr.leave_allocations | employee_id | hr.employees |

---

## 6. Validacion de Schemas

### 6.1 Orden de Carga de Schemas

```
00-prerequisites.sql  (funciones utilitarias)
     ↓
01-auth.sql          (tenants, users, roles)
     ↓
02-core.sql          (countries, currencies, partners)
     ↓
03-analytics.sql     (analytic accounts)
     ↓
04-financial.sql     (accounts, journals, taxes)
     ↓
05-inventory.sql     (products, warehouses, stock)
     ↓
06-purchase.sql      (purchase orders)
     ↓
07-sales.sql         (sales orders)
     ↓
08-projects.sql      (projects, tasks)
     ↓
09-system.sql        (system config)
     ↓
10-billing.sql       (subscriptions)
     ↓
11-crm.sql           (leads, opportunities)
     ↓
12-hr.sql            (employees, contracts)
```

**Validacion:** El orden actual es correcto para las nuevas correcciones.

---

## 7. Conflictos Identificados

### 7.1 Conflicto Potencial: auth.tenants vs system.tenants

**Observacion:** Algunos archivos usan `auth.tenants`, otros `system.tenants`.
**Estado:** Necesita verificacion de cual es el estandar actual.
**Accion:** Usar el schema que corresponda segun el archivo DDL donde se implemente.

### 7.2 Conflicto Potencial: Trigger function core.update_timestamp

**Observacion:** 12-hr.sql usa `core.update_timestamp()` pero podria no existir.
**Estado:** Verificar que existe en 02-core.sql
**Accion:** Usar `update_updated_at_column()` de 00-prerequisites.sql si es necesario.

---

## 8. Resumen de Validacion

### 8.1 Correcciones Validadas

| ID | Descripcion | Dependencias OK | Listo |
|----|-------------|-----------------|-------|
| COR-021 | core.states | SI | SI |
| COR-022 | core.banks | SI | SI |
| COR-023 | bank_statements | SI (con COR-022) | SI |
| COR-024 | tax_repartition | SI | SI |
| COR-025 | routes/rules | SI | SI |
| COR-026 | hr.attendances | SI | SI |
| COR-027 | hr.leave_allocations | SI (ajustado) | SI |
| COR-028 | fiscal_positions | SI (con COR-021) | SI |
| COR-029 | purchase functions | SI | SI |
| COR-030 | merge_leads | VERIFICAR | PARCIAL |
| COR-031 | stock_scrap | SI | SI |
| COR-032 | project_updates | SI | SI |
| COR-033 | order_templates | SI | SI |

### 8.2 Correcciones Excluidas

| ID | Razon |
|----|-------|
| COR-034 | core.attachments ya existe |

### 8.3 Metricas Finales

| Metrica | Cantidad |
|---------|----------|
| Correcciones planificadas | 14 |
| Correcciones validadas | 12 |
| Correcciones excluidas | 1 |
| Correcciones a verificar | 1 |
| **Listas para ejecucion** | **12** |

---

## 9. Proximos Pasos

1. **FASE 5:** Refinar el plan con el orden exacto de ejecucion
2. Verificar existencia de `crm.lead_activities` para COR-030
3. Confirmar trigger function para timestamps

---

**Generado:** 2026-01-04
**Herramienta:** Claude Code
**Metodologia:** SCRUM/SIMCO
