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
- ✅ Análisis de dependencias completado
- ⏳ FASE 6: Plan refinado con orden de ejecución
- ⏳ FASE 7: Ejecución
- ⏳ FASE 8: Validación final
Estado: FASE 5 COMPLETADA
Siguiente: FASE 6 - Plan Refinado
Fecha: 2026-01-04