erp-core/orchestration/01-analisis/FASE-3-PLAN-CORRECCIONES-ODOO.md
rckrdmrd 4c4e27d9ba feat: Documentation and orchestration updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:35:20 -06:00

445 lines
14 KiB
Markdown

# FASE 3: Plan de Correcciones Basado en Analisis Odoo vs ERP-Core
**Fecha:** 2026-01-04
**Objetivo:** Plan priorizado de correcciones para alinear ERP-Core con definiciones Odoo
**Estado:** En Progreso
**Basado en:** FASE-1 (Planeacion), FASE-2 (Analisis Detallado)
---
## 1. Resumen Ejecutivo de Brechas
### 1.1 Cobertura por Modulo
| Modulo | Cobertura | Gaps Criticos | Gaps Altos | Gaps Medios |
|--------|-----------|---------------|------------|-------------|
| BASE/AUTH | 75% | 3 | 4 | 5 |
| PRODUCT/STOCK | 65% | 4 | 5 | 6 |
| SALE | 70% | 2 | 4 | 3 |
| PURCHASE | 70% | 2 | 3 | 4 |
| ACCOUNT/FINANCIAL | 65% | 4 | 5 | 4 |
| CRM | 75% | 2 | 3 | 3 |
| ANALYTIC | 65% | 2 | 2 | 2 |
| PROJECT | 80% | 2 | 2 | 3 |
| HR | 70% | 1 | 3 | 4 |
### 1.2 Total de Correcciones Identificadas
| Severidad | Cantidad | % del Total |
|-----------|----------|-------------|
| CRITICO | 22 | 18% |
| ALTO | 31 | 26% |
| MEDIO | 34 | 28% |
| BAJO | 34 | 28% |
| **TOTAL** | **121** | 100% |
---
## 2. Plan de Correcciones por Prioridad
### 2.1 PRIORIDAD CRITICA (P0) - Bloqueantes
#### COR-001: Agregar estado 'to_approve' a Purchase Orders
- **Archivo DDL:** `database/ddl/06-purchase.sql`
- **Cambio:** Modificar ENUM `purchase.order_status`
- **De:** `('draft', 'sent', 'confirmed', 'received', 'billed', 'cancelled')`
- **A:** `('draft', 'sent', 'to_approve', 'purchase', 'received', 'billed', 'cancelled')`
- **Impacto:** Functions, Triggers, Domain Models
- **Dependencias:** None
#### COR-002: Agregar estados faltantes a Stock Moves
- **Archivo DDL:** `database/ddl/05-inventory.sql`
- **Cambio:** Modificar ENUM `inventory.move_status`
- **De:** `('draft', 'confirmed', 'assigned', 'done', 'cancelled')`
- **A:** `('draft', 'waiting', 'confirmed', 'partially_available', 'assigned', 'done', 'cancelled')`
- **Impacto:** stock_moves, pickings, Functions
- **Dependencias:** None
#### COR-003: Crear tabla stock_move_lines
- **Archivo DDL:** `database/ddl/05-inventory.sql`
- **Cambio:** Nueva tabla para granularidad a nivel de lote/serie
- **Estructura:**
```sql
CREATE TABLE inventory.stock_move_lines (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
move_id UUID NOT NULL REFERENCES inventory.stock_moves(id),
product_id UUID NOT NULL,
product_uom_id UUID NOT NULL,
lot_id UUID REFERENCES inventory.lots(id),
package_id UUID,
owner_id UUID REFERENCES core.partners(id),
location_id UUID NOT NULL,
location_dest_id UUID NOT NULL,
quantity DECIMAL(12, 4) NOT NULL,
quantity_done DECIMAL(12, 4) DEFAULT 0,
state VARCHAR(20),
-- Audit fields
);
```
- **Impacto:** stock_moves, reserve_quantity(), process_stock_move()
- **Dependencias:** COR-002
#### COR-004: Agregar payment_state a Facturas
- **Archivo DDL:** `database/ddl/04-financial.sql`
- **Cambio:** Nueva columna para separar estado contable de estado de pago
- **De:** Solo `status` (draft, open, paid, cancelled)
- **A:** `status` + `payment_state` (not_paid, in_payment, paid, partial, reversed)
- **Impacto:** invoices, payment_invoice, triggers
- **Dependencias:** None
#### COR-005: Implementar Tax Groups
- **Archivo DDL:** `database/ddl/04-financial.sql`
- **Cambio:** Nueva tabla para grupos de impuestos complejos
- **Estructura:**
```sql
CREATE TABLE financial.tax_groups (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
sequence INTEGER DEFAULT 10,
country_id UUID
);
ALTER TABLE financial.taxes
ADD COLUMN tax_group_id UUID REFERENCES financial.tax_groups(id),
ADD COLUMN amount_type VARCHAR(20) DEFAULT 'percent', -- percent, fixed, group, division
ADD COLUMN include_base_amount BOOLEAN DEFAULT FALSE,
ADD COLUMN price_include BOOLEAN DEFAULT FALSE,
ADD COLUMN children_tax_ids UUID[];
```
- **Impacto:** Calculo de impuestos en invoice_lines, sales_order_lines, purchase_order_lines
- **Dependencias:** None
#### COR-006: Vincular Sale Orders con Invoices
- **Archivo DDL:** `database/ddl/07-sales.sql`
- **Cambio:** Agregar campos para vinculacion factura
- **Estructura:**
```sql
ALTER TABLE sales.sales_orders
ADD COLUMN invoice_ids UUID[] DEFAULT '{}',
ADD COLUMN invoice_count INTEGER GENERATED ALWAYS AS (array_length(invoice_ids, 1)) STORED;
```
- **Impacto:** sales_orders, invoices, workflows
- **Dependencias:** None
---
### 2.2 PRIORIDAD ALTA (P1) - Importantes
#### COR-007: Agregar picking_type_id a Pickings
- **Archivo DDL:** `database/ddl/05-inventory.sql`
- **Cambio:** Nueva tabla y campo para tipos de operacion
- **Estructura:**
```sql
CREATE TABLE inventory.picking_types (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
warehouse_id UUID REFERENCES inventory.warehouses(id),
name VARCHAR(100) NOT NULL,
code VARCHAR(20) NOT NULL, -- incoming, outgoing, internal
sequence_id UUID,
default_location_src_id UUID,
default_location_dest_id UUID,
return_picking_type_id UUID,
show_operations BOOLEAN DEFAULT FALSE,
show_reserved BOOLEAN DEFAULT TRUE,
active BOOLEAN DEFAULT TRUE
);
ALTER TABLE inventory.pickings
ADD COLUMN picking_type_id UUID REFERENCES inventory.picking_types(id);
```
- **Impacto:** pickings, workflows
- **Dependencias:** None
#### COR-008: Implementar Product Attributes System
- **Archivo DDL:** `database/ddl/05-inventory.sql`
- **Cambio:** Sistema completo de atributos y variantes
- **Estructura:**
```sql
CREATE TABLE inventory.product_attributes (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
create_variant VARCHAR(20) DEFAULT 'always', -- always, dynamic, no_variant
display_type VARCHAR(20) DEFAULT 'radio' -- radio, select, color, multi
);
CREATE TABLE inventory.product_attribute_values (
id UUID PRIMARY KEY,
attribute_id UUID NOT NULL REFERENCES inventory.product_attributes(id),
name VARCHAR(100) NOT NULL,
html_color VARCHAR(10),
sequence INTEGER DEFAULT 10
);
CREATE TABLE inventory.product_template_attribute_lines (
id UUID PRIMARY KEY,
product_tmpl_id UUID NOT NULL REFERENCES inventory.products(id),
attribute_id UUID NOT NULL REFERENCES inventory.product_attributes(id),
value_ids UUID[] NOT NULL
);
```
- **Impacto:** products, product_variants
- **Dependencias:** None
#### COR-009: Agregar Approval Workflow a Purchase
- **Archivo DDL:** `database/ddl/06-purchase.sql`
- **Cambio:** Campos y funciones para flujo de aprobacion
- **Estructura:**
```sql
ALTER TABLE purchase.purchase_orders
ADD COLUMN approved_at TIMESTAMP,
ADD COLUMN approved_by UUID REFERENCES auth.users(id),
ADD COLUMN approval_required BOOLEAN DEFAULT FALSE,
ADD COLUMN amount_threshold DECIMAL(15, 2);
CREATE OR REPLACE FUNCTION purchase.button_approve(p_order_id UUID)
RETURNS VOID AS $$...$$;
```
- **Impacto:** purchase_orders, rbac
- **Dependencias:** COR-001
#### COR-010: Implementar Address Management
- **Archivo DDL:** `database/ddl/02-core.sql`
- **Cambio:** Direcciones de facturacion y envio separadas
- **Estructura:**
```sql
ALTER TABLE sales.sales_orders
ADD COLUMN partner_invoice_id UUID REFERENCES core.partners(id),
ADD COLUMN partner_shipping_id UUID REFERENCES core.partners(id);
ALTER TABLE purchase.purchase_orders
ADD COLUMN dest_address_id UUID REFERENCES core.partners(id);
```
- **Impacto:** sales_orders, purchase_orders, partners
- **Dependencias:** None
#### COR-011: Agregar Locked State a Orders
- **Archivo DDL:** `database/ddl/06-purchase.sql`, `database/ddl/07-sales.sql`
- **Cambio:** Campo locked para bloquear modificaciones
- **Estructura:**
```sql
ALTER TABLE purchase.purchase_orders
ADD COLUMN locked BOOLEAN DEFAULT FALSE;
ALTER TABLE sales.sales_orders
ADD COLUMN locked BOOLEAN DEFAULT FALSE;
```
- **Impacto:** Triggers de validacion
- **Dependencias:** None
#### COR-012: Implementar Downpayments (Anticipos)
- **Archivo DDL:** `database/ddl/07-sales.sql`
- **Cambio:** Soporte para anticipos en ventas
- **Estructura:**
```sql
ALTER TABLE sales.sales_order_lines
ADD COLUMN is_downpayment BOOLEAN DEFAULT FALSE;
ALTER TABLE sales.sales_orders
ADD COLUMN require_payment BOOLEAN DEFAULT FALSE,
ADD COLUMN prepayment_percent DECIMAL(5, 2) DEFAULT 0;
```
- **Impacto:** sales_order_lines, invoice generation
- **Dependencias:** COR-006
#### COR-013: Agregar Reconciliation Engine
- **Archivo DDL:** `database/ddl/04-financial.sql`
- **Cambio:** Motor de conciliacion completo
- **Estructura:**
```sql
CREATE TABLE financial.account_partial_reconcile (
id UUID PRIMARY KEY,
tenant_id UUID NOT NULL,
debit_move_id UUID NOT NULL REFERENCES financial.journal_entry_lines(id),
credit_move_id UUID NOT NULL REFERENCES financial.journal_entry_lines(id),
amount DECIMAL(15, 2) NOT NULL,
amount_currency DECIMAL(15, 2),
currency_id UUID,
full_reconcile_id UUID,
max_date DATE
);
CREATE TABLE financial.account_full_reconcile (
id UUID PRIMARY KEY,
name VARCHAR(100) NOT NULL,
partial_reconcile_ids UUID[],
reconciled_line_ids UUID[]
);
```
- **Impacto:** journal_entry_lines, invoices, payments
- **Dependencias:** COR-004
---
### 2.3 PRIORIDAD MEDIA (P2) - Mejoras
#### COR-014: Implementar Predictive Lead Scoring (PLS)
- **Archivo DDL:** `database/ddl/11-crm.sql`
- **Cambio:** Sistema de scoring predictivo
- **Impacto:** leads, opportunities
- **Dependencias:** ML pipeline
#### COR-015: Agregar Multi-Plan Hierarchy (Analytics)
- **Archivo DDL:** `database/ddl/03-analytics.sql`
- **Cambio:** Jerarquia de planes analiticos
- **Impacto:** analytic_accounts, analytic_lines
- **Dependencias:** None
#### COR-016: Implementar Recurring Tasks (Projects)
- **Archivo DDL:** `database/ddl/08-projects.sql`
- **Cambio:** Tareas recurrentes
- **Impacto:** project_tasks
- **Dependencias:** None
#### COR-017: Agregar Multi-User Assignment (Tasks)
- **Archivo DDL:** `database/ddl/08-projects.sql`
- **Cambio:** Multiples usuarios asignados
- **Impacto:** project_tasks
- **Dependencias:** None
#### COR-018: Implementar Backorder Management
- **Archivo DDL:** `database/ddl/05-inventory.sql`
- **Cambio:** Gestion de backorders
- **Impacto:** pickings, stock_moves
- **Dependencias:** COR-002, COR-003
#### COR-019: Agregar Auto-Assignment Rules (CRM)
- **Archivo DDL:** `database/ddl/11-crm.sql`
- **Cambio:** Reglas de asignacion automatica
- **Impacto:** leads, teams
- **Dependencias:** None
#### COR-020: Implementar Duplicate Detection (Partners)
- **Archivo DDL:** `database/ddl/02-core.sql`
- **Cambio:** Deteccion de duplicados
- **Impacto:** partners
- **Dependencias:** None
---
### 2.4 PRIORIDAD BAJA (P3) - Nice to Have
#### COR-021 a COR-034: Mejoras menores documentadas en archivo separado
- Ver: `FASE-3-CORRECCIONES-MENORES.md`
---
## 3. Archivos Afectados por Correccion
### 3.1 Matriz de Impacto DDL
| Archivo DDL | P0 | P1 | P2 | Total |
|-------------|----|----|----| ------|
| 02-core.sql | 0 | 1 | 1 | 2 |
| 03-analytics.sql | 0 | 0 | 1 | 1 |
| 04-financial.sql | 2 | 1 | 0 | 3 |
| 05-inventory.sql | 2 | 2 | 2 | 6 |
| 06-purchase.sql | 1 | 2 | 0 | 3 |
| 07-sales.sql | 1 | 2 | 0 | 3 |
| 08-projects.sql | 0 | 0 | 2 | 2 |
| 11-crm.sql | 0 | 0 | 2 | 2 |
### 3.2 Matriz de Impacto Domain Models
| Domain Model | Correcciones | Secciones |
|--------------|--------------|-----------|
| inventory-domain.md | COR-002, COR-003, COR-007, COR-008, COR-018 | States, Relations, Constraints |
| sales-domain.md | COR-006, COR-010, COR-011, COR-012 | Relations, Fields |
| financial-domain.md | COR-004, COR-005, COR-013 | States, Tax Logic, Reconciliation |
| crm-domain.md | COR-014, COR-019 | Scoring, Assignment |
| analytics-domain.md | COR-015 | Plans, Hierarchy |
| projects-domain.md | COR-016, COR-017 | Recurrence, Assignment |
### 3.3 Matriz de Impacto Workflows
| Workflow | Correcciones | Impacto |
|----------|--------------|---------|
| (nuevo) WORKFLOW-PURCHASE-APPROVAL.md | COR-001, COR-009 | Nuevo workflow |
| (nuevo) WORKFLOW-STOCK-MOVES.md | COR-002, COR-003, COR-018 | Nuevo workflow |
| WORKFLOW-CIERRE-PERIODO-CONTABLE.md | COR-004 | Actualizacion menor |
---
## 4. Dependencias entre Correcciones
```
COR-001 (PO states)
└── COR-009 (Approval workflow)
COR-002 (Move states)
└── COR-003 (Move lines)
└── COR-018 (Backorders)
COR-004 (Payment state)
└── COR-013 (Reconciliation engine)
COR-006 (SO-Invoice link)
└── COR-012 (Downpayments)
```
---
## 5. Orden de Ejecucion Recomendado
### Fase 6.1: Foundation (Semana 1)
1. COR-001: PO states
2. COR-002: Move states
3. COR-004: Payment state
4. COR-005: Tax groups
### Fase 6.2: Inventory (Semana 2)
5. COR-003: Move lines
6. COR-007: Picking types
7. COR-008: Product attributes
### Fase 6.3: Sales/Purchase (Semana 3)
8. COR-006: SO-Invoice link
9. COR-009: Approval workflow
10. COR-010: Address management
11. COR-011: Locked states
12. COR-012: Downpayments
### Fase 6.4: Financial (Semana 4)
13. COR-013: Reconciliation engine
### Fase 6.5: Advanced Features (Semana 5)
14. COR-014 a COR-020: Prioridad Media
---
## 6. Riesgos Identificados
| Riesgo | Probabilidad | Impacto | Mitigacion |
|--------|--------------|---------|------------|
| Breaking changes en ENUM | Alta | Alto | Migracion incremental |
| Incompatibilidad de datos existentes | Media | Alto | Scripts de migracion |
| Regresiones en funciones existentes | Media | Medio | Tests unitarios |
| Performance en nuevas tablas | Baja | Medio | Indices optimizados |
---
## 7. Entregables FASE 3
- [x] Plan priorizado de correcciones (este documento)
- [ ] Lista de dependencias validada
- [ ] Estimacion de esfuerzo por correccion
- [ ] Scripts de migracion preliminares
- [ ] Tests de regresion identificados
---
## 8. Proximos Pasos (FASE 4)
1. Validar dependencias entre correcciones
2. Verificar impacto en archivos downstream (User Stories, Backend Specs)
3. Identificar tests de regresion necesarios
4. Aprobar plan con stakeholders
---
**Generado:** 2026-01-04
**Herramienta:** Claude Code