- 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>
284 lines
6.5 KiB
Markdown
284 lines
6.5 KiB
Markdown
# 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
|