erp-construccion/docs/01-analisis-referencias/odoo/ODOO-CONSTRUCCION-MAPPING.md

374 lines
11 KiB
Markdown

# Mapeo Odoo - ERP Construccion
**Version:** 1.0.0
**Fecha:** 2025-12-05
**Responsable:** Requirements-Analyst
---
## Resumen
Este documento detalla el mapeo entre los modulos de Odoo Community y los modulos del ERP Construccion, incluyendo que funcionalidades se adoptan, adaptan o crean desde cero.
---
## Matriz de Mapeo por Modulo
### MAI-001: Autenticacion y Multi-tenancy
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Login/Logout | `auth_signup`, `base` | Adaptar | JWT en lugar de sesiones |
| Multi-company | `base.res_company` | Adaptar | Schema-level RLS vs company_id |
| Roles y permisos | `base.res_groups` | Crear nuevo | RBAC con claims personalizados |
| 2FA | `auth_totp` | Adoptar patron | Implementar TOTP compatible |
| SSO | No nativo | Crear nuevo | SAML/OIDC para enterprise |
**Patrones Adoptados:**
- Concepto de `company_id` como filtro global
- Grupos de permisos jerarquicos
- Modelo de usuario con partner asociado
---
### MAI-002: Gestion de Proyectos
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Proyectos | `project.project` | Adoptar | Extender con campos construccion |
| Tareas | `project.task` | Adaptar | Convertir en actividades de obra |
| Stages | `project.task.type` | Adoptar | Personalizar para construccion |
| Milestones | `project.milestone` | Adoptar | Hitos de obra |
| Team | `project.tags` | Crear nuevo | Equipo de proyecto dedicado |
**Mapeo de Estados:**
```
Odoo: draft -> open -> pending -> done -> cancel
Ours: PLANNING -> IN_PROGRESS -> PAUSED -> COMPLETED -> CANCELLED
```
**Campos Adicionales (no en Odoo):**
- `progress_percentage` - Avance calculado
- `development_id` - Vinculo con desarrollo inmobiliario
- `infonavit_registration` - Registro INFONAVIT
- `contractor_id` - Contratista principal
---
### MAI-003: Presupuestos y APU
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Catalogo conceptos | No existe | Crear nuevo | Catalogo CMIC base |
| APU (Analisis Precios) | No existe | Crear nuevo | Formato mexicano |
| Presupuesto base | `account.budget` | Referencia | Concepto similar, diferente impl |
| Partidas | No existe | Crear nuevo | Jerarquia de costos |
| Versiones | No existe | Crear nuevo | Control de versiones |
**Estructura APU (Creacion propia):**
```
BudgetItem (Partida)
├── concept_code
├── description
├── unit
├── quantity
├── unit_price (compuesto de):
│ ├── materials[]
│ ├── labor[]
│ ├── equipment[]
│ └── indirect_costs
└── total_amount
```
---
### MAI-004: Compras e Inventario
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Ordenes de compra | `purchase.order` | Adoptar | Estados identicos |
| Lineas de compra | `purchase.order.line` | Adoptar | Con proyecto vinculado |
| Proveedores | `res.partner` (supplier) | Adoptar | Con campos adicionales |
| Almacenes | `stock.warehouse` | Adoptar | Multi-almacen por proyecto |
| Movimientos | `stock.move` | Adoptar | Trazabilidad completa |
| Inventario | `stock.quant` | Adoptar | Stock actual calculado |
| Requisiciones | `purchase.requisition` | Adoptar | Flujo de requisicion |
**Estados de Orden de Compra:**
```
Odoo: draft -> sent -> to_approve -> purchase -> done -> cancel
Ours: DRAFT -> SENT -> TO_APPROVE -> APPROVED -> RECEIVED -> CANCELLED
```
**Campos Adicionales:**
- `project_id` - Vinculo con proyecto
- `budget_item_id` - Partida de presupuesto
- `cost_center` - Centro de costos
---
### MAI-005: Avances de Obra
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Registro avances | No existe | Crear nuevo | % completado por actividad |
| Curva S | No existe | Crear nuevo | Grafico planeado vs real |
| Cronograma | `project.task` (dates) | Adaptar | Extender con Gantt |
| Evidencia fotografica | No existe | Crear nuevo | Fotos con geolocalizacion |
**Modelo de Avance (Creacion propia):**
```
ProgressEntry
├── activity_id
├── report_date
├── planned_percentage
├── actual_percentage
├── quantity_completed
├── photos[] (with GPS)
└── notes
```
---
### MAI-006: Finanzas y Contabilidad
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Plan de cuentas | `account.account` | Adaptar | Cuenta contable mexicana |
| Polizas | `account.move` | Adoptar | Journal entries |
| Lineas contables | `account.move.line` | Adoptar | Con cuenta analitica |
| Cuenta analitica | `account.analytic` | Adoptar | Por proyecto |
| Facturas | `account.move` (invoice) | Adaptar | CFDI requerido |
| Pagos | `account.payment` | Adoptar | Multiples metodos |
| Conciliacion | `account.bank.statement` | Adoptar | Conciliacion bancaria |
**Integracion CFDI (Creacion propia):**
- PAC integration
- Timbrado automatico
- Descarga masiva SAT
- Cancelacion CFDI
---
### MAI-007: Nomina
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Empleados | `hr.employee` | Adoptar | Con CURP, RFC, IMSS |
| Contratos | `hr.contract` | Adoptar | Tipos mexicanos |
| Nomina | `hr.payslip` | Referencia | Muy diferente, crear nuevo |
| Percepciones/Ded | No compatible | Crear nuevo | Ley mexicana |
| IMSS | No existe | Crear nuevo | SUA compatible |
| ISN | No existe | Crear nuevo | Impuesto estatal |
**Nota:** La nomina mexicana difiere significativamente de Odoo. Se toma como referencia la arquitectura pero se implementa logica propia para:
- Tabla ISR
- Calculo IMSS patron/trabajador
- PTU
- Aguinaldo
- Prima vacacional
---
### MAI-008: Estimaciones INFONAVIT
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Todo el modulo | No existe | Crear nuevo | 100% propietario |
**Funcionalidades propias:**
- Generacion de estimaciones por vivienda
- Calculo automatico de avances
- Formato INFONAVIT oficial
- Validacion de requisitos
- Envio electronico
---
### MAI-009: Calidad
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Puntos de control | `quality.point` | Adoptar | Checklist de calidad |
| Inspecciones | `quality.check` | Adoptar | Con evidencia |
| No conformidades | `quality.alert` | Adoptar | Workflow de correccion |
| Acciones correctivas | No nativo completo | Crear nuevo | CAPA process |
---
### MAI-010: Portal Derechohabientes
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Portal base | `portal` | Referencia | UI completamente diferente |
| Autenticacion | `auth_signup` | Referencia | Con CURP validation |
| Documentos | `documents` | Referencia | Firma electronica NOM-151 |
**Funcionalidades propias:**
- Vinculacion por NSS INFONAVIT
- Estado de vivienda
- Documentos de entrega
- Citas de entrega
- Garantias post-venta
---
### MAI-011: Cumplimiento INFONAVIT
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Todo el modulo | No existe | Crear nuevo | 100% propietario |
**Funcionalidades propias:**
- Catalogo de requisitos por programa
- Checklist de cumplimiento
- Evidencia documental
- Auditorias de verificacion
- Alertas de vencimiento
---
### MAE-014: Modulo Financiero Avanzado
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| CxP avanzado | `account` | Extender | Flujos de aprobacion |
| CxC avanzado | `account` | Extender | Cobranza automatizada |
| Flujo de caja | No nativo | Crear nuevo | Proyeccion y control |
| Presupuesto financiero | `account.budget` | Adaptar | Por proyecto |
| Reportes SAT | No existe | Crear nuevo | DIOT, Balanza, etc |
---
### MAE-015: Gestion de Activos
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Catalogo activos | `account.asset` | Adoptar | Registro de activos |
| Depreciacion | `account.asset` | Adoptar | Metodos mexicanos |
| Mantenimiento | `maintenance.request` | Adoptar | Preventivo/correctivo |
| Ordenes trabajo | `maintenance.request` | Extender | Workflow completo |
| GPS/Geofence | No existe | Crear nuevo | Tracking en tiempo real |
---
### MAE-016: Gestion Documental
| Funcionalidad | Modulo Odoo | Estrategia | Notas |
|---------------|-------------|------------|-------|
| Carpetas | `documents.folder` | Adoptar | Estructura jerarquica |
| Documentos | `documents.document` | Adoptar | Con versionado |
| Tags | `documents.tag` | Adoptar | Categorizacion |
| Workflow | `documents.workflow` | Referencia | Aprobaciones custom |
| Planos | No existe | Crear nuevo | Gestion de revisiones |
---
## Patrones Arquitectonicos de Odoo Adoptados
### 1. State Machine Pattern
Todos los documentos principales usan estados:
```python
# Odoo pattern
state = fields.Selection([
('draft', 'Draft'),
('confirm', 'Confirmed'),
('done', 'Done'),
('cancel', 'Cancelled')
])
```
```typescript
// Our adaptation
enum DocumentStatus {
DRAFT = 'draft',
CONFIRMED = 'confirmed',
DONE = 'done',
CANCELLED = 'cancelled'
}
```
### 2. Analytic Distribution
Costos distribuidos entre proyectos/centros:
```python
# Odoo
analytic_distribution = fields.Json()
# {"project_1_id": 60, "project_2_id": 40}
```
```typescript
// Our adaptation
@Column('jsonb')
analyticDistribution: Record<string, number>;
```
### 3. Mail Thread (Audit Trail)
Tracking de cambios en entidades:
```python
# Odoo
_inherit = ['mail.thread']
name = fields.Char(tracking=True)
```
```typescript
// Our adaptation
@EventSubscriber()
class AuditTrailSubscriber {
@AfterUpdate()
logChanges(event: UpdateEvent) { }
}
```
### 4. Computed Fields with Store
Campos calculados que se almacenan:
```python
# Odoo
@api.depends('line_ids.amount')
def _compute_total(self):
self.total = sum(self.line_ids.mapped('amount'))
total = fields.Float(compute='_compute_total', store=True)
```
```typescript
// Our adaptation
@BeforeInsert()
@BeforeUpdate()
computeTotal() {
this.total = this.lines.reduce((sum, l) => sum + l.amount, 0);
}
```
---
## Modulos Odoo No Utilizados
Los siguientes modulos de Odoo no aplican directamente:
| Modulo | Razon |
|--------|-------|
| `website`, `website_sale` | Frontend custom en React |
| `crm` | No requerido para construccion |
| `mrp` | Manufactura no aplica |
| `fleet` | Activos propios implementados |
| `event` | No requerido |
| `pos` | No requerido |
| `lunch` | No requerido |
| `l10n_*` | Localizacion propia para Mexico |
---
## Referencias
- [GUIA-USO-REFERENCIAS-ODOO.md](../../GUIA-USO-REFERENCIAS-ODOO.md)
- [Odoo Developer Documentation](https://www.odoo.com/documentation)
- [Backend Specifications](../../05-backend-specs/)
---
*Ultima actualizacion: 2025-12-05*