# FASE 6: Plan Refinado - ERP Clínicas **Proyecto:** erp-clinicas **Fecha:** 2026-01-04 **Estado:** Completado **Base:** FASE-5-ANALISIS-DEPENDENCIAS.md --- ## 1. Estructura Final de Archivos ### 1.1 DDL Schemas | # | Archivo | Líneas | Tablas | ENUMs | |---|---------|--------|--------|-------| | 1 | `04-financial-ext-schema-ddl.sql` | ~130 | 4 | 2 | | 2 | `05-hr-ext-fase8-schema-ddl.sql` | ~320 | 11 | 3 | | 3 | `06-inventory-ext-fase8-schema-ddl.sql` | ~160 | 5 | 0 | | 4 | `07-purchase-ext-fase8-schema-ddl.sql` | ~120 | 1 | 0 | | 5 | `08-clinica-ext-fase8-schema-ddl.sql` | ~80 | 2 | 0 | | **Total** | | **~810** | **23** | **5** | ### 1.2 Seed Data | # | Archivo | Registros | Tipo | |---|---------|-----------|------| | 1 | `00-removal-strategies.sql` | 4 | Global | | 2 | `01-clinica-skills.sql` | ~40 | Tenant | | 3 | `02-clinica-catalogos.sql` | ~25 | Tenant | | **Total** | | **~69** | | --- ## 2. Contenido Detallado por Archivo ### 2.1 04-financial-ext-schema-ddl.sql ``` Schemas: financial ENUMs: - payment_method_type (inbound, outbound) - reconcile_model_type (writeoff_button, writeoff_suggestion, invoice_matching) Tablas: 1. payment_term_lines - id, tenant_id, payment_term_id, value_type, value, days - day_of_month, applies_to, sequence, created_at 2. payment_methods - id, tenant_id, name, code, payment_type - aplica_seguro, requiere_factura, porcentaje_seguro - active, created_at 3. reconcile_models - id, tenant_id, name, rule_type, auto_reconcile - match_partner, match_amount, tolerance - created_at 4. reconcile_model_lines - id, tenant_id, model_id, sequence, account_id - amount_type, amount_value, label - created_at RLS: payment_methods, payment_term_lines, reconcile_models Índices: 6 ``` ### 2.2 05-hr-ext-fase8-schema-ddl.sql ``` Schemas: hr ENUMs: - expense_status (draft, submitted, approved, posted, paid, rejected) - resume_line_type (experience, education, certification, internal) - payslip_status (draft, verify, done, cancel) Tablas: 1. work_locations (12 campos) 2. skill_types (4 campos) 3. skills (7 campos) + codigo_ssa, requiere_cedula 4. skill_levels (6 campos) 5. employee_skills (7 campos) 6. expense_sheets (12 campos) + paciente_id, cita_id 7. expenses (15 campos) 8. employee_resume_lines (10 campos) 9. payslip_structures (7 campos) + tipo_pago 10. payslips (15 campos) + consultorio_id 11. payslip_lines (10 campos) RLS: work_locations, skill_types, skills, skill_levels, expense_sheets, expenses, payslip_structures, payslips Índices: 18 ``` ### 2.3 06-inventory-ext-fase8-schema-ddl.sql ``` Schemas: inventory ENUMs: (ninguno) Tablas: 1. package_types (10 campos) 2. packages (12 campos) + lote, fecha_caducidad, laboratorio, registro_sanitario 3. storage_categories (12 campos) + requiere_refrigeracion, temperatura, es_controlado 4. putaway_rules (10 campos) 5. removal_strategies (5 campos) RLS: package_types, packages, storage_categories, putaway_rules Índices: 8 ``` ### 2.4 07-purchase-ext-fase8-schema-ddl.sql ``` Schemas: purchase ENUMs: (ninguno) Tablas: 1. product_supplierinfo (14 campos) - Extensiones: aplica_iva, requiere_receta, tiempo_entrega_dias Funciones: 1. action_create_stock_moves(UUID) RLS: product_supplierinfo Índices: 4 ``` ### 2.5 08-clinica-ext-fase8-schema-ddl.sql ``` Schemas: clinica (extensión) ENUMs: (ninguno) Tablas: 1. personal_clinica - id, tenant_id, employee_id, consultorio_id - rol, vigencia_desde, vigencia_hasta - es_titular, horario, created_at 2. ratings - id, tenant_id, consultation_id, patient_id, doctor_id - rating, feedback, rated_at - created_at RLS: personal_clinica, ratings Índices: 5 ``` --- ## 3. Seeds Detallados ### 3.1 00-removal-strategies.sql ```sql INSERT INTO inventory.removal_strategies (code, name, description) VALUES ('fifo', 'First In First Out', 'Por fecha de entrada'), ('lifo', 'Last In First Out', 'Por fecha más reciente'), ('fefo', 'First Expired First Out', 'Por fecha de caducidad'), ('closest', 'Closest Location', 'Por ubicación más cercana') ON CONFLICT (code) DO NOTHING; ``` ### 3.2 01-clinica-skills.sql ```sql -- Tipos de habilidad médica skill_types: Especialidad, Certificación, Subespecialidad, Curso, Idioma -- Niveles skill_levels: Residente, Especialista, Subespecialista, Fellow (4 x 5 tipos) -- Skills específicos por tipo Especialidad: Medicina General, Pediatría, Ginecología, Cardiología, etc. Certificación: COFEPRIS, SSA, Consejo de Especialidad ``` ### 3.3 02-clinica-catalogos.sql ```sql -- Categorías de almacén storage_categories: Farmacia General, Refrigerados, Controlados, Material Quirúrgico -- Tipos de paquete package_types: Caja Medicamentos, Blister, Frasco, Ampolleta, Bolsa Suero -- Métodos de pago payment_methods: Efectivo, Tarjeta, Transferencia, Seguro GMM, Seguro GMA -- Estructuras de nómina payslip_structures: Nómina Quincenal, Honorarios, Guardia ``` --- ## 4. Orden de Ejecución Refinado ### 4.1 Script de Ejecución ```bash #!/bin/bash # ejecutar-fase8-clinicas.sh DB_NAME="erp_clinicas" SCRIPTS_DIR="database/schemas" SEEDS_DIR="database/seeds/fase8" echo "=== FASE 8: ERP Clínicas ===" # DDL Schemas echo "1. Financial extensions..." psql -d $DB_NAME -f $SCRIPTS_DIR/04-financial-ext-schema-ddl.sql echo "2. HR extensions..." psql -d $DB_NAME -f $SCRIPTS_DIR/05-hr-ext-fase8-schema-ddl.sql echo "3. Inventory extensions..." psql -d $DB_NAME -f $SCRIPTS_DIR/06-inventory-ext-fase8-schema-ddl.sql echo "4. Purchase extensions..." psql -d $DB_NAME -f $SCRIPTS_DIR/07-purchase-ext-fase8-schema-ddl.sql echo "5. Clinica extensions..." psql -d $DB_NAME -f $SCRIPTS_DIR/08-clinica-ext-fase8-schema-ddl.sql # Seeds globales echo "6. Seeds globales..." psql -d $DB_NAME -f $SEEDS_DIR/00-removal-strategies.sql echo "=== Seeds por tenant (requiere tenant_id) ===" # SET app.current_tenant_id = 'UUID'; # psql -d $DB_NAME -f $SEEDS_DIR/01-clinica-skills.sql # psql -d $DB_NAME -f $SEEDS_DIR/02-clinica-catalogos.sql echo "=== COMPLETADO ===" ``` --- ## 5. Validación Pre-Ejecución ### 5.1 Checklist - [x] Schemas base existen - [x] Tablas core existen (opcional) - [x] Tablas clinica base existen - [x] Usuario tiene permisos DDL - [x] Conexión a base de datos - [x] Backups realizados ### 5.2 Comandos de Verificación ```sql -- Verificar schemas SELECT schema_name FROM information_schema.schemata WHERE schema_name IN ('financial', 'hr', 'inventory', 'purchase', 'clinica'); -- Verificar tablas clinica existentes SELECT table_name FROM information_schema.tables WHERE table_schema = 'clinica'; -- Verificar tenant_id SELECT current_setting('app.current_tenant_id', true); ``` --- ## 6. Métricas Finales | Métrica | Valor | |---------|-------| | Archivos DDL | 5 | | Archivos seed | 3 | | Tablas nuevas | 23 | | ENUMs nuevos | 5 | | Funciones nuevas | 1 | | Índices nuevos | 41 | | RLS policies | 18 | | Líneas SQL totales | ~900 | --- ## 7. Próximos Pasos 1. ✅ Plan refinado completado 2. ⏳ FASE 7: Crear archivos DDL y seed 3. ⏳ FASE 8: Validación final --- **Estado:** FASE 6 COMPLETADA **Siguiente:** FASE 7 - Ejecución **Fecha:** 2026-01-04