🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
445 lines
14 KiB
Markdown
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
|