# FASE 3: Plan de Implementación - ERP Clínicas **Proyecto:** erp-clinicas **Fecha:** 2026-01-04 **Estado:** Completado **Base:** FASE-2-ANALISIS-DETALLADO.md --- ## 1. Estructura de Archivos ### 1.1 DDL Schemas | # | Archivo | Contenido | |---|---------|-----------| | 1 | `04-financial-ext-schema-ddl.sql` | Extensiones financieras | | 2 | `05-hr-ext-fase8-schema-ddl.sql` | Extensiones HR | | 3 | `06-inventory-ext-fase8-schema-ddl.sql` | Extensiones inventario | | 4 | `07-purchase-ext-fase8-schema-ddl.sql` | Extensiones compras | | 5 | `08-clinica-ext-fase8-schema-ddl.sql` | Extensiones clínica | ### 1.2 Seed Data | # | Archivo | Contenido | |---|---------|-----------| | 1 | `seeds/fase8/00-removal-strategies.sql` | Estrategias de remoción | | 2 | `seeds/fase8/01-clinica-skills.sql` | Especialidades médicas | | 3 | `seeds/fase8/02-clinica-catalogos.sql` | Catálogos clínicos | --- ## 2. Plan de Implementación ### 2.1 Fase A: Financial Extensions **Archivo:** `04-financial-ext-schema-ddl.sql` ``` 1. CREATE SCHEMA IF NOT EXISTS financial 2. CREATE TYPE payment_method_type 3. CREATE TYPE reconcile_model_type 4. CREATE TABLE payment_term_lines 5. CREATE TABLE payment_methods 6. CREATE TABLE reconcile_models 7. CREATE TABLE reconcile_model_lines 8. CREATE INDEXES 9. ENABLE RLS 10. CREATE POLICIES ``` **Tablas:** | Tabla | Campos | RLS | |-------|--------|-----| | payment_term_lines | 10 | ✅ | | payment_methods | 11 | ✅ | | reconcile_models | 9 | ✅ | | reconcile_model_lines | 9 | ❌ | ### 2.2 Fase B: HR Extensions **Archivo:** `05-hr-ext-fase8-schema-ddl.sql` ``` 1. CREATE SCHEMA IF NOT EXISTS hr 2. CREATE TYPES (expense_status, resume_line_type, payslip_status) 3. CREATE TABLE work_locations 4. CREATE TABLE skill_types 5. CREATE TABLE skills 6. CREATE TABLE skill_levels 7. CREATE TABLE employee_skills 8. CREATE TABLE expense_sheets 9. CREATE TABLE expenses 10. CREATE TABLE employee_resume_lines 11. CREATE TABLE payslip_structures 12. CREATE TABLE payslips 13. CREATE TABLE payslip_lines 14. ALTER TABLE employees ADD COLUMNS (si existe) 15. CREATE INDEXES 16. ENABLE RLS 17. CREATE POLICIES ``` **Tablas:** | Tabla | Campos | RLS | |-------|--------|-----| | work_locations | 12 | ✅ | | skill_types | 4 | ✅ | | skills | 7 | ✅ | | skill_levels | 6 | ✅ | | employee_skills | 7 | ❌ | | expense_sheets | 12 | ✅ | | expenses | 15 | ✅ | | employee_resume_lines | 10 | ❌ | | payslip_structures | 7 | ✅ | | payslips | 15 | ✅ | | payslip_lines | 10 | ❌ | ### 2.3 Fase C: Inventory Extensions **Archivo:** `06-inventory-ext-fase8-schema-ddl.sql` ``` 1. CREATE SCHEMA IF NOT EXISTS inventory 2. CREATE TABLE package_types 3. CREATE TABLE packages 4. CREATE TABLE storage_categories 5. CREATE TABLE putaway_rules 6. CREATE TABLE removal_strategies 7. ALTER TABLE products ADD COLUMNS (si existe) 8. CREATE INDEXES 9. ENABLE RLS 10. CREATE POLICIES ``` **Tablas:** | Tabla | Campos | RLS | |-------|--------|-----| | package_types | 10 | ✅ | | packages | 12 | ✅ | | storage_categories | 12 | ✅ | | putaway_rules | 10 | ✅ | | removal_strategies | 5 | ❌ | ### 2.4 Fase D: Purchase Extensions **Archivo:** `07-purchase-ext-fase8-schema-ddl.sql` ``` 1. CREATE SCHEMA IF NOT EXISTS purchase 2. CREATE TABLE product_supplierinfo 3. CREATE FUNCTION action_create_stock_moves 4. ALTER TABLE purchase_orders ADD COLUMNS (si existe) 5. CREATE INDEXES 6. ENABLE RLS 7. CREATE POLICIES ``` **Tablas:** | Tabla | Campos | RLS | |-------|--------|-----| | product_supplierinfo | 14 | ✅ | ### 2.5 Fase E: Clínica Extensions **Archivo:** `08-clinica-ext-fase8-schema-ddl.sql` ``` 1. CREATE TABLE personal_clinica 2. CREATE TABLE ratings 3. CREATE INDEXES 4. ENABLE RLS 5. CREATE POLICIES ``` **Tablas:** | Tabla | Campos | RLS | |-------|--------|-----| | personal_clinica | 10 | ✅ | | ratings | 10 | ✅ | --- ## 3. Orden de Ejecución ### 3.1 Secuencia DDL ```bash # 1. Base schemas (si no existen) psql -f database/init/01-extensions.sql psql -f database/init/02-core-schema.sql # 2. Clínica base psql -f database/init/03-clinical-tables.sql # 3. Extensiones FASE-8 (orden importante) psql -f database/schemas/04-financial-ext-schema-ddl.sql psql -f database/schemas/05-hr-ext-fase8-schema-ddl.sql psql -f database/schemas/06-inventory-ext-fase8-schema-ddl.sql psql -f database/schemas/07-purchase-ext-fase8-schema-ddl.sql psql -f database/schemas/08-clinica-ext-fase8-schema-ddl.sql # 4. Seeds (globales) psql -f database/seeds/fase8/00-removal-strategies.sql # 5. Seeds (requieren tenant_id) # SET app.current_tenant_id = 'UUID'; psql -f database/seeds/fase8/01-clinica-skills.sql psql -f database/seeds/fase8/02-clinica-catalogos.sql ``` ### 3.2 Dependencias ``` 04-financial-ext └── (independiente) 05-hr-ext └── (independiente) 06-inventory-ext └── (independiente) 07-purchase-ext ├── inventory.products (opcional) └── inventory.warehouses (opcional) 08-clinica-ext ├── clinica.consultations ├── clinica.patients ├── clinica.doctors └── hr.work_locations ``` --- ## 4. Estimación de Objetos ### 4.1 Por Archivo | Archivo | Tablas | ENUMs | Funciones | Índices | |---------|--------|-------|-----------|---------| | 04-financial-ext | 4 | 2 | 0 | 6 | | 05-hr-ext | 11 | 3 | 0 | 18 | | 06-inventory-ext | 5 | 0 | 0 | 8 | | 07-purchase-ext | 1 | 0 | 1 | 4 | | 08-clinica-ext | 2 | 0 | 0 | 5 | | **Total** | **23** | **5** | **1** | **41** | ### 4.2 Líneas Estimadas | Archivo | Líneas | |---------|--------| | 04-financial-ext | ~130 | | 05-hr-ext | ~320 | | 06-inventory-ext | ~160 | | 07-purchase-ext | ~120 | | 08-clinica-ext | ~80 | | Seeds | ~100 | | **Total** | **~910** | --- ## 5. Consideraciones ### 5.1 Idempotencia - Usar `IF NOT EXISTS` para tablas - Usar `CREATE OR REPLACE` para funciones - Usar bloques de excepción para ENUMs - Usar `DROP POLICY IF EXISTS` antes de crear ### 5.2 Rollback ```sql -- En orden inverso DROP TABLE IF EXISTS clinica.ratings CASCADE; DROP TABLE IF EXISTS clinica.personal_clinica CASCADE; DROP TABLE IF EXISTS purchase.product_supplierinfo CASCADE; -- ... etc ``` ### 5.3 Validación - Verificar sintaxis con `\i` en psql - Verificar RLS con tests de tenant isolation - Verificar FKs con datos de prueba --- ## 6. Próximos Pasos 1. ✅ Plan de implementación completado 2. ⏳ FASE 4: Validación del plan 3. ⏳ FASE 5: Análisis de dependencias 4. ⏳ FASE 6: Plan refinado 5. ⏳ FASE 7: Ejecución 6. ⏳ FASE 8: Validación final --- **Estado:** FASE 3 COMPLETADA **Siguiente:** FASE 4 - Validación del Plan **Fecha:** 2026-01-04