erp-core/docs/01-analisis-referencias/odoo/README.md

255 lines
8.1 KiB
Markdown

# Resumen Ejecutivo - Análisis de Módulos Odoo
**Proyecto:** ERP Genérico
**Fuente:** Odoo Community Edition v18.0
**Fecha:** 2025-11-23
**Analista:** Architecture-Analyst
---
## Objetivo del Análisis
Analizar los 12 módulos core de Odoo para extraer:
- Lógica de negocio consolidada y probada
- Modelos de datos principales
- Patrones arquitectónicos
- Funcionalidades relevantes para ERP Genérico
- Mapeo a módulos MGN (MGN-001 a MGN-014)
---
## Módulos Analizados (12)
| Módulo Odoo | Aplicación en ERP Genérico | Prioridad | Mapeo MGN | Estado |
|-------------|---------------------------|-----------|-----------|--------|
| **base** | Sistema base, modelos fundamentales | P0 | MGN-001, MGN-002, MGN-003 | ✅ Analizado |
| **auth_signup** | Autenticación y registro | P0 | MGN-001 | ✅ Analizado |
| **account** | Módulo financiero | P0 | MGN-004 | ✅ Analizado |
| **stock** | Inventario | P0 | MGN-005 | ✅ Analizado |
| **purchase** | Compras | P0 | MGN-006 | ✅ Analizado |
| **sale** | Ventas | P0 | MGN-007 | ✅ Analizado |
| **analytic** | Contabilidad analítica | P0 | MGN-008 | ✅ Analizado |
| **mail** | Mensajería y notificaciones | P0 | MGN-014 | ✅ Analizado |
| **crm** | CRM básico | P1 | MGN-009 | ✅ Analizado |
| **hr** | Recursos humanos | P1 | MGN-010 | ✅ Analizado |
| **project** | Proyectos genéricos | P1 | MGN-011 | ✅ Analizado |
| **portal** | Portal de usuarios | P1 | MGN-013 | ✅ Analizado |
---
## Hallazgos Principales
### 1. Arquitectura ORM Potente
Odoo implementa un ORM muy completo con:
- Decoradores para computed fields (`@api.depends`)
- Sistema de herencia múltiple (`_inherit`, `_inherits`)
- Campos relacionales sofisticados (Many2one, One2many, Many2many)
- Validaciones con `@api.constrains`
- OnChange events (`@api.onchange`)
**Aplicabilidad:** ⭐⭐⭐⭐⭐ - Patrones traducibles a TypeORM/Prisma
### 2. Sistema de Permisos Robusto
- Grupos de seguridad (`res.groups`)
- Record rules (filtrado por usuario/empresa)
- Permisos CRUD granulares (`ir.model.access`)
- Multi-company support nativo
**Aplicabilidad:** ⭐⭐⭐⭐⭐ - RBAC implementado en MGN-001
### 3. Contabilidad Analítica Universal
El módulo `analytic` permite tracking de costos por proyecto/centro de costos
- Integrado en todos los módulos (compras, ventas, inventario)
- Base para reportes financieros
- Esencial para ERPs multi-proyecto
**Aplicabilidad:** ⭐⭐⭐⭐⭐ - MGN-008 debe implementar este patrón
### 4. Sistema de Workflows con Estados
Todos los módulos usan Selection fields con estados bien definidos:
- `draft``confirmed``done``cancel`
- Transiciones controladas por lógica de negocio
- Integración con mail.thread para tracking
**Aplicabilidad:** ⭐⭐⭐⭐⭐ - Patrón universal para ERP Genérico
### 5. Integración con mail.thread
Casi todos los modelos heredan de `mail.thread` para:
- Tracking de cambios automático
- Sistema de mensajes y notificaciones
- Followers y actividades programadas
- Chatter UI
**Aplicabilidad:** ⭐⭐⭐⭐⭐ - MGN-014 debe implementar patrón similar
---
## Patrones Arquitectónicos Destacables
### 1. Multi-Company
```python
# Odoo pattern
company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company)
```
- Record rules filtran por empresa automáticamente
- Usuarios pueden cambiar de empresa
- Aplicable a multi-tenancy del ERP Genérico
### 2. Analytic Accounts
```python
# Odoo pattern
analytic_account_id = fields.Many2one('account.analytic.account')
```
- Presente en: compras, ventas, inventario, proyectos
- Permite reportes consolidados de costos/ingresos por proyecto
- Esencial para construcción/manufactura
### 3. Portal Views
```python
# Odoo pattern
@http.route(['/my/orders'], type='http', auth='user', website=True)
def portal_my_orders(self):
# Vista limitada para clientes
```
- Sistema de portal para usuarios externos
- Acciones permitidas (aprobar, comentar, descargar)
- Seguridad con record rules
### 4. Wizard Pattern (TransientModel)
```python
class Wizard(models.TransientModel):
_name = 'module.wizard'
_description = 'Wizard for X'
```
- Modelos temporales para asistentes/formularios
- No se persisten en BD
- Útil para operaciones batch, imports, exports
### 5. Computed Fields
```python
@api.depends('line_ids.price_total')
def _compute_amount_total(self):
for record in self:
record.amount_total = sum(record.line_ids.mapped('price_total'))
```
- Campos calculados automáticamente
- Caché inteligente
- Actualización cascada
---
## Recomendaciones para ERP Genérico
### ADOPTAR ✅
1. **Sistema de estados con workflows**
- Implementar en todos los módulos MGN
- Estados: draft, confirmed, done, cancelled
- Transiciones controladas
2. **RBAC granular**
- Basado en res.users y res.groups de Odoo
- Permisos por modelo (CRUD)
- Record rules para filtrado
3. **Contabilidad analítica**
- MGN-008 debe implementar `analytic_accounts`
- Integrar en todos los módulos transaccionales
4. **Multi-company/Multi-tenant**
- Patrón similar a Odoo pero con schemas PostgreSQL
- Campo `tenant_id` en todas las tablas
- RLS policies
5. **Sistema de tracking y auditoría**
- Patrón mail.thread adaptado
- Tracking de cambios automático
- Historial de modificaciones
### ADAPTAR 🔧
1. **ORM patterns → TypeORM/Prisma**
- Traducir decoradores Python a TypeScript
- Computed fields → getters o virtual columns
- Constraints → validaciones Zod/Joi
2. **XML Views → React Components**
- Form views → React forms (React Hook Form)
- Tree views → DataTables (TanStack Table)
- Kanban views → Drag & drop boards
3. **Portal → Frontend routes**
- Portal Odoo → rutas públicas en React
- Autenticación JWT
- Permisos en frontend + backend
### EVITAR ❌
1. **No copiar arquitectura Python**
- No replicar ORM de Odoo
- Usar ORMs nativos de Node.js
2. **No usar XML para UI**
- Odoo usa XML, nosotros React/TypeScript
- Componentes modernos
3. **No sobre-complicar**
- Odoo tiene 600+ módulos
- ERP Genérico solo 14 módulos core
---
## Mapeo Odoo → MGN
Ver archivo detallado: [MAPEO-ODOO-TO-MGN.md](./MAPEO-ODOO-TO-MGN.md)
| Módulo Odoo | Módulo MGN | Funcionalidades Clave a Migrar |
|-------------|------------|--------------------------------|
| base + auth_signup | MGN-001 | Autenticación, usuarios, RBAC |
| base (res.company, res.currency) | MGN-002 | Empresas, organizaciones |
| base (res.partner, res.country, uom) | MGN-003 | Catálogos maestros |
| account | MGN-004 | Contabilidad, plan de cuentas, asientos |
| stock | MGN-005 | Inventario, almacenes, movimientos |
| purchase | MGN-006 | Compras, proveedores, requisiciones |
| sale | MGN-007 | Ventas, cotizaciones, clientes |
| analytic | MGN-008 | Cuentas analíticas, centros de costo |
| crm | MGN-009 | Leads, oportunidades, pipeline |
| hr | MGN-010 | Empleados, departamentos, contratos |
| project | MGN-011 | Proyectos, tareas, milestones |
| account (reports) | MGN-012 | Reportes financieros, dashboards |
| portal | MGN-013 | Portal de usuarios externos |
| mail | MGN-014 | Mensajería, notificaciones, tracking |
---
## Archivos de Análisis Detallado
1. [odoo-base-analysis.md](./odoo-base-analysis.md)
2. [odoo-auth-analysis.md](./odoo-auth-analysis.md)
3. [odoo-account-analysis.md](./odoo-account-analysis.md)
4. [odoo-stock-analysis.md](./odoo-stock-analysis.md)
5. [odoo-purchase-analysis.md](./odoo-purchase-analysis.md)
6. [odoo-sale-analysis.md](./odoo-sale-analysis.md)
7. [odoo-analytic-analysis.md](./odoo-analytic-analysis.md)
8. [odoo-mail-analysis.md](./odoo-mail-analysis.md)
9. [odoo-crm-analysis.md](./odoo-crm-analysis.md)
10. [odoo-hr-analysis.md](./odoo-hr-analysis.md)
11. [odoo-project-analysis.md](./odoo-project-analysis.md)
12. [odoo-portal-analysis.md](./odoo-portal-analysis.md)
---
## Próximos Pasos
1. Revisar análisis detallado de cada módulo
2. Validar mapeo Odoo → MGN
3. Priorizar funcionalidades a implementar
4. Crear RF basándose en funcionalidades Odoo
5. Diseñar BD basándose en modelos Odoo
---
**Fecha:** 2025-11-23
**Versión:** 1.0.0
**Estado:** ✅ Análisis completo