erp-clinicas/orchestration/propagacion-fase8/FASE-5-ANALISIS-DEPENDENCIAS.md
rckrdmrd 62cfcdb9c9 feat: Add database schemas, seeds and orchestration updates
- Add database schemas and seeds directories
- Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml
- Add propagacion-fase8 directory
- Update CONTEXTO-PROYECTO.md and DEPENDENCIAS-SHARED.yml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:37:26 -06:00

271 lines
7.2 KiB
Markdown

# FASE 5: Análisis de Dependencias - ERP Clínicas
**Proyecto:** erp-clinicas
**Fecha:** 2026-01-04
**Estado:** Completado
**Base:** FASE-4-VALIDACION-PLAN.md
---
## 1. Mapa de Dependencias
### 1.1 Dependencias Core → Clínica
```
core.tenants
├── financial.* (tenant_id)
├── hr.* (tenant_id)
├── inventory.* (tenant_id)
├── purchase.* (tenant_id)
└── clinica.* (tenant_id)
core.partners
├── clinica.patients (partner_id) [opcional]
└── purchase.product_supplierinfo (partner_id)
core.users
├── hr.employees (user_id) [opcional]
└── clinica.doctors (user_id) [opcional]
```
### 1.2 Dependencias HR → Clínica
```
hr.employees
├── clinica.doctors (employee_id) [existente]
├── clinica.personal_clinica (employee_id)
├── hr.employee_skills (employee_id)
├── hr.employee_resume_lines (employee_id)
├── hr.expense_sheets (employee_id)
└── hr.payslips (employee_id)
hr.departments
└── hr.employees (department_id) [opcional]
```
### 1.3 Dependencias Inventory → Purchase
```
inventory.products
├── inventory.packages (product_id) [opcional]
├── inventory.putaway_rules (product_id) [opcional]
└── purchase.product_supplierinfo (product_id)
inventory.warehouses
├── inventory.putaway_rules (warehouse_id) [opcional]
└── purchase.purchase_orders (warehouse_id) [opcional]
```
### 1.4 Dependencias Clínica Internas
```
clinica.doctors
├── clinica.appointment_slots (doctor_id)
└── clinica.personal_clinica (employee_id vía hr.employees)
clinica.patients
├── clinica.appointments (patient_id)
├── clinica.medical_records (patient_id)
└── clinica.ratings (patient_id)
clinica.consultations
└── clinica.ratings (consultation_id)
hr.work_locations
└── clinica.personal_clinica (consultorio_id)
```
---
## 2. Análisis de Orden de Ejecución
### 2.1 Nivel 0: Schemas Base
```sql
-- Independientes, pueden ejecutarse en paralelo
CREATE SCHEMA IF NOT EXISTS financial;
CREATE SCHEMA IF NOT EXISTS hr;
CREATE SCHEMA IF NOT EXISTS inventory;
CREATE SCHEMA IF NOT EXISTS purchase;
-- clinica ya existe
```
### 2.2 Nivel 1: ENUMs
```sql
-- Deben crearse antes de las tablas que los usan
-- Financial
CREATE TYPE financial.payment_method_type
CREATE TYPE financial.reconcile_model_type
-- HR
CREATE TYPE hr.expense_status
CREATE TYPE hr.resume_line_type
CREATE TYPE hr.payslip_status
```
### 2.3 Nivel 2: Tablas Sin Dependencias
```sql
-- Pueden ejecutarse en paralelo
financial.payment_term_lines
financial.payment_methods
financial.reconcile_models
inventory.removal_strategies
inventory.package_types
inventory.storage_categories
hr.work_locations
hr.skill_types
hr.payslip_structures
```
### 2.4 Nivel 3: Tablas con Dependencias Simples
```sql
-- Dependen de tablas nivel 2
financial.reconcile_model_lines reconcile_models
inventory.packages package_types
inventory.putaway_rules storage_categories
hr.skills skill_types
hr.skill_levels skill_types
hr.expense_sheets (hr.employees opcional)
hr.payslips payslip_structures
```
### 2.5 Nivel 4: Tablas con Dependencias Múltiples
```sql
-- Dependen de varias tablas
hr.employee_skills skills, skill_levels, (employees)
hr.expenses expense_sheets
hr.employee_resume_lines (employees)
hr.payslip_lines payslips
purchase.product_supplierinfo (products, partners)
clinica.personal_clinica work_locations, (employees)
clinica.ratings (consultations, patients, doctors)
```
---
## 3. Estrategia de FKs Opcionales
### 3.1 Patrón de FK Opcional
```sql
-- Patrón usado cuando la tabla referenciada puede no existir
-- Ejemplo para personal_clinica.employee_id
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = 'hr' AND table_name = 'employees'
) THEN
ALTER TABLE clinica.personal_clinica
ADD CONSTRAINT fk_personal_employee
FOREIGN KEY (employee_id)
REFERENCES hr.employees(id) ON DELETE CASCADE;
END IF;
END $$;
```
### 3.2 Lista de FKs Opcionales
| Tabla | Campo | Referencia | Razón |
|-------|-------|------------|-------|
| personal_clinica | employee_id | hr.employees | Puede no existir |
| ratings | consultation_id | clinica.consultations | Puede no existir |
| ratings | patient_id | clinica.patients | Puede no existir |
| ratings | doctor_id | clinica.doctors | Puede no existir |
| product_supplierinfo | product_id | inventory.products | Puede no existir |
| product_supplierinfo | partner_id | core.partners | Puede no existir |
| packages | product_id | inventory.products | Puede no existir |
| putaway_rules | product_id | inventory.products | Puede no existir |
| putaway_rules | warehouse_id | inventory.warehouses | Puede no existir |
---
## 4. Matriz de Compatibilidad
### 4.1 Escenarios de Instalación
| Escenario | Core | HR | Inv | Pur | Clínica | Funciona |
|-----------|------|----|----|-----|---------|----------|
| Completo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Sin Core | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Sin HR | ✅ | ❌ | ✅ | ✅ | ⚠️ | ✅ parcial |
| Sin Inventory | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Solo Clínica | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ mínimo |
### 4.2 Funcionalidad por Escenario
| Escenario | Funcionalidad Disponible |
|-----------|-------------------------|
| Completo | 100% funcionalidad |
| Sin Core | Sin partners integrados |
| Sin HR | Sin nómina, gastos, skills |
| Sin Inventory | Sin farmacia, insumos |
| Solo Clínica | Solo citas, consultas, expedientes |
---
## 5. Validación de Orden
### 5.1 Secuencia Final
```bash
# Orden de ejecución validado
1. 04-financial-ext-schema-ddl.sql # Independiente
2. 05-hr-ext-fase8-schema-ddl.sql # Independiente
3. 06-inventory-ext-fase8-schema-ddl.sql # Independiente
4. 07-purchase-ext-fase8-schema-ddl.sql # Depende de inventory (opcional)
5. 08-clinica-ext-fase8-schema-ddl.sql # Depende de hr.work_locations
```
### 5.2 Verificación de Dependencias
| Archivo | Depende de | Verificado |
|---------|------------|------------|
| 04-financial | (ninguno) | ✅ |
| 05-hr | (ninguno) | ✅ |
| 06-inventory | (ninguno) | ✅ |
| 07-purchase | 06-inventory (opcional) | ✅ |
| 08-clinica | 05-hr (work_locations) | ✅ |
---
## 6. Riesgos y Mitigaciones
### 6.1 Riesgos Identificados
| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|--------------|---------|------------|
| Tabla Core no existe | Media | Bajo | FKs opcionales |
| ENUM ya existe | Media | Bajo | Bloque excepción |
| Tabla ya existe | Alta | Bajo | IF NOT EXISTS |
| Constraint duplicado | Media | Bajo | DROP IF EXISTS |
### 6.2 Plan de Contingencia
```sql
-- Si falla un archivo, ejecutar en orden:
-- 1. Verificar error específico
-- 2. Corregir/saltar elemento problemático
-- 3. Continuar con siguiente archivo
-- 4. No requiere rollback total
```
---
## 7. Próximos Pasos
1. ✅ Análisis de dependencias completado
2. ⏳ FASE 6: Plan refinado con orden de ejecución
3. ⏳ FASE 7: Ejecución
4. ⏳ FASE 8: Validación final
---
**Estado:** FASE 5 COMPLETADA
**Siguiente:** FASE 6 - Plan Refinado
**Fecha:** 2026-01-04