# 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