- 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>
271 lines
7.2 KiB
Markdown
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
|