# Análisis del Módulo Analytic de Odoo

**Módulo:** analytic
**Prioridad:** P0
**Mapeo MGN:** MGN-008 (Contabilidad Analítica)

## Descripción

Módulo CRÍTICO para ERPs multi-proyecto. Permite tracking de costos/ingresos por:
- Proyectos
- Departamentos
- Centros de costo
- Clientes
- Campañas

## Modelos Principales

### account.analytic.account (Cuentas Analíticas)
- Nombre del proyecto/centro de costo
- Plan de cuentas analítico
- Balance de costos/ingresos

### account.analytic.line (Líneas Analíticas)
- Registro de costo o ingreso
- Vinculado a cuenta analítica
- Integrado en: compras, ventas, inventario, nómina, gastos

## Patrón Universal

**TODOS los módulos transaccionales registran en analytic:**

```python
# En purchase.order.line
analytic_account_id = fields.Many2one('account.analytic.account')

# En sale.order.line
analytic_account_id = fields.Many2one('account.analytic.account')

# En account.move.line (facturas)
analytic_account_id = fields.Many2one('account.analytic.account')

# En hr_timesheet (horas trabajadas)
analytic_account_id = fields.Many2one('account.analytic.account')
```

**Resultado:** Reportes consolidados de costos/ingresos por proyecto

## Ejemplo de Uso

```
Proyecto: "Construcción Torre A"
analytic_account_id = 101

Compras de materiales: $500,000 → analytic_account_id = 101
Ventas de departamentos: $2,000,000 → analytic_account_id = 101
Nómina de empleados: $300,000 → analytic_account_id = 101

Balance Analítico:
Ingresos: $2,000,000
Costos: $800,000
Margen: $1,200,000 (60%)
```

## Mapeo a MGN-008

- RF-ANA-001: Gestión de cuentas analíticas
- RF-ANA-002: Registro de líneas analíticas
- RF-ANA-003: Reportes por proyecto/centro de costo
- RF-ANA-004: Integración con módulos transaccionales

## Implementación Recomendada MGN-008

```sql
-- Schema analytics
CREATE TABLE analytics.accounts (
  id SERIAL PRIMARY KEY,
  tenant_id INT NOT NULL,
  code VARCHAR(20) NOT NULL,
  name VARCHAR(200) NOT NULL,
  type VARCHAR(50), -- project, department, cost_center, customer
  parent_id INT REFERENCES analytics.accounts(id),
  active BOOLEAN DEFAULT TRUE
);

CREATE TABLE analytics.lines (
  id SERIAL PRIMARY KEY,
  tenant_id INT NOT NULL,
  account_id INT NOT NULL REFERENCES analytics.accounts(id),
  date DATE NOT NULL,
  description TEXT,
  amount DECIMAL(15,2) NOT NULL,
  currency_id INT,
  source_module VARCHAR(50), -- 'purchase', 'sale', 'payroll', 'expenses'
  source_id INT, -- ID del registro fuente
  created_at TIMESTAMPTZ DEFAULT NOW()
);
```

**Aplicabilidad:** ⭐⭐⭐⭐⭐ - ESENCIAL para ERP Construcción/Proyectos

---

**Fecha:** 2025-11-23
**Estado:** ✅ Análisis completo
