erp-clinicas/orchestration/propagacion-fase8/FASE-2-ANALISIS-DETALLADO.md
rckrdmrd 62cfcdb9c9 feat: Add database schemas, seeds and orchestration updates
- 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>
2026-01-07 05:37:26 -06:00

328 lines
8.7 KiB
Markdown

# FASE 2: Análisis Detallado - ERP Clínicas
**Proyecto:** erp-clinicas
**Fecha:** 2026-01-04
**Estado:** Completado
**Base:** FASE-1-ANALISIS-INICIAL.md
---
## 1. Análisis de Dependencias
### 1.1 Dependencias de ERP-Core
| Schema | Tabla | Requerida | Uso |
|--------|-------|-----------|-----|
| core | tenants | ✅ | Multi-tenant |
| core | partners | ✅ | Pacientes/proveedores |
| core | users | ✅ | Usuarios sistema |
| hr | employees | ✅ | Personal médico |
| hr | departments | ✅ | Áreas de clínica |
| financial | accounts | ⚠️ | Contabilidad |
| financial | journals | ⚠️ | Diarios contables |
| financial | payment_terms | ✅ | Términos de pago |
| inventory | products | ⚠️ | Medicamentos/insumos |
| inventory | warehouses | ⚠️ | Farmacia/bodega |
### 1.2 Dependencias Internas
```
clinica.specialties
└── clinica.doctors (specialty_id)
└── clinica.appointment_slots (doctor_id)
└── clinica.appointments (slot_id)
clinica.patients
├── clinica.patient_contacts (patient_id)
├── clinica.patient_insurance (patient_id)
├── clinica.appointments (patient_id)
└── clinica.medical_records (patient_id)
└── clinica.consultations (record_id)
├── clinica.vital_signs (consultation_id)
├── clinica.diagnoses (consultation_id)
└── clinica.prescriptions (consultation_id)
└── clinica.prescription_items (prescription_id)
```
---
## 2. Detalle de Correcciones por Módulo
### 2.1 Financial - Extensiones
#### COR-035: payment_term_lines
```sql
CREATE TABLE financial.payment_term_lines (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
payment_term_id UUID REFERENCES financial.payment_terms(id),
value_type VARCHAR(20) NOT NULL, -- 'percent', 'balance', 'fixed'
value NUMERIC(10,2) DEFAULT 0,
days INTEGER DEFAULT 0,
day_of_month INTEGER,
applies_to VARCHAR(50), -- 'consulta', 'procedimiento', 'laboratorio'
sequence INTEGER DEFAULT 10,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
#### COR-037: payment_methods
```sql
CREATE TABLE financial.payment_methods (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
code VARCHAR(20) NOT NULL,
payment_type financial.payment_method_type NOT NULL,
-- Extensiones clínica
aplica_seguro BOOLEAN DEFAULT false,
requiere_factura BOOLEAN DEFAULT false,
porcentaje_seguro NUMERIC(5,2) DEFAULT 0,
active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(tenant_id, code)
);
```
### 2.2 Inventory - Extensiones
#### COR-042: storage_categories (Clínica)
```sql
CREATE TABLE inventory.storage_categories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
max_weight NUMERIC(10,2),
allow_new_product VARCHAR(20) DEFAULT 'mixed',
-- Extensiones clínica
requiere_refrigeracion BOOLEAN DEFAULT false,
temperatura_min NUMERIC(5,2),
temperatura_max NUMERIC(5,2),
es_controlado BOOLEAN DEFAULT false,
requiere_receta BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
#### COR-040: packages (Medicamentos)
```sql
CREATE TABLE inventory.packages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
package_type_id UUID REFERENCES inventory.package_types(id),
name VARCHAR(100),
-- Extensiones clínica
lote VARCHAR(50),
fecha_fabricacion DATE,
fecha_caducidad DATE,
laboratorio VARCHAR(100),
registro_sanitario VARCHAR(50),
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 2.3 HR - Extensiones
#### COR-062: work_locations (Consultorios)
```sql
CREATE TABLE hr.work_locations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
address_id UUID,
-- Extensiones clínica
tipo_consultorio VARCHAR(50), -- 'general', 'especialidad', 'urgencias', 'quirofano'
capacidad INTEGER DEFAULT 1,
equipamiento TEXT[],
horario_apertura TIME,
horario_cierre TIME,
active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
#### COR-063: skills (Especialidades Médicas)
```sql
-- Tipos de habilidad para clínicas
CREATE TABLE hr.skill_types (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL, -- 'Especialidad', 'Certificación', 'Curso', 'Idioma'
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Skills específicos
CREATE TABLE hr.skills (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
skill_type_id UUID REFERENCES hr.skill_types(id),
name VARCHAR(100) NOT NULL,
-- Extensiones clínica
codigo_ssa VARCHAR(20), -- Código SSA de especialidad
requiere_cedula BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 2.4 Projects - Adaptaciones
#### COR-056: collaborators → personal_clinica
```sql
CREATE TABLE clinica.personal_clinica (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
employee_id UUID NOT NULL,
consultorio_id UUID REFERENCES hr.work_locations(id),
rol VARCHAR(50) NOT NULL, -- 'medico', 'enfermera', 'recepcion', 'auxiliar'
vigencia_desde DATE,
vigencia_hasta DATE,
es_titular BOOLEAN DEFAULT false,
horario JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
#### COR-059: ratings (Satisfacción)
```sql
CREATE TABLE clinica.ratings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
consultation_id UUID REFERENCES clinica.consultations(id),
patient_id UUID REFERENCES clinica.patients(id),
doctor_id UUID REFERENCES clinica.doctors(id),
rating INTEGER CHECK (rating BETWEEN 1 AND 5),
feedback TEXT,
rated_at TIMESTAMPTZ DEFAULT NOW(),
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
---
## 3. ENUMs Requeridos
### 3.1 Nuevos ENUMs
```sql
-- Financial
CREATE TYPE financial.payment_method_type AS ENUM ('inbound', 'outbound');
CREATE TYPE financial.reconcile_model_type AS ENUM ('writeoff_button', 'writeoff_suggestion', 'invoice_matching');
-- HR
CREATE TYPE hr.expense_status AS ENUM ('draft', 'submitted', 'approved', 'posted', 'paid', 'rejected');
CREATE TYPE hr.resume_line_type AS ENUM ('experience', 'education', 'certification', 'internal');
CREATE TYPE hr.payslip_status AS ENUM ('draft', 'verify', 'done', 'cancel');
-- Clínica (existentes)
-- appointment_status, patient_gender, blood_type, consultation_status
```
---
## 4. Tablas a Crear
### 4.1 Resumen por Schema
| Schema | Tablas Nuevas | Extensiones |
|--------|---------------|-------------|
| financial | 4 | 0 |
| inventory | 5 | 2 campos |
| purchase | 1 | 0 |
| hr | 11 | 2 campos |
| clinica | 2 | 0 |
| **Total** | **23** | **4 campos** |
### 4.2 Lista de Tablas
**Financial (4):**
1. payment_term_lines
2. payment_methods
3. reconcile_models
4. reconcile_model_lines
**Inventory (5):**
1. package_types
2. packages
3. storage_categories
4. putaway_rules
5. removal_strategies
**Purchase (1):**
1. product_supplierinfo
**HR (11):**
1. work_locations
2. skill_types
3. skills
4. skill_levels
5. employee_skills
6. expense_sheets
7. expenses
8. employee_resume_lines
9. payslip_structures
10. payslips
11. payslip_lines
**Clínica (2):**
1. personal_clinica
2. ratings
---
## 5. Índices Requeridos
### 5.1 Por Tabla Principal
| Tabla | Índices |
|-------|---------|
| payment_methods | tenant_id, code |
| storage_categories | tenant_id, es_controlado |
| packages | tenant_id, lote, fecha_caducidad |
| work_locations | tenant_id, tipo_consultorio |
| skills | tenant_id, skill_type_id, codigo_ssa |
| expenses | tenant_id, employee_id, status |
| personal_clinica | tenant_id, employee_id, consultorio_id |
| ratings | tenant_id, consultation_id, doctor_id |
---
## 6. Validaciones NOM-024-SSA3-2012
### 6.1 Requisitos de Expediente Clínico Electrónico
| Requisito | Implementación |
|-----------|----------------|
| Identificación única | patient.id (UUID) |
| Datos de identificación | patients tabla |
| Historial clínico | medical_records |
| Notas médicas | consultations |
| Signos vitales | vital_signs |
| Diagnósticos CIE-10 | diagnoses.cie10_code |
| Prescripciones | prescriptions |
| Trazabilidad | created_at, updated_at |
| Firma electrónica | Por implementar |
| Confidencialidad | RLS + encriptación |
---
## 7. Próximos Pasos
1. ✅ Análisis detallado completado
2. ⏳ FASE 3: Plan de implementación
3. ⏳ FASE 4: Validación del plan
4. ⏳ FASE 5-8: Implementación
---
**Estado:** FASE 2 COMPLETADA
**Siguiente:** FASE 3 - Plan de Implementación
**Fecha:** 2026-01-04