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

7.2 KiB

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

-- 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

-- 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

-- 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

-- 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

-- 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

-- 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

# 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

-- 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