erp-clinicas/orchestration/propagacion-fase8/FASE-3-PLAN-IMPLEMENTACION.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

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