# Modelo de Datos: Analytic **Modulo:** analytic **Total Modelos:** 5 **Modelos Documentados:** 5 --- ## 1. Indice de Modelos | Modelo | Descripcion | Archivo | |--------|-------------|---------| | account.analytic.account | Cuentas analiticas | analytic_account.py | | account.analytic.line | Lineas analiticas | analytic_line.py | | account.analytic.plan | Planes analiticos | analytic_plan.py | | account.analytic.applicability | Reglas aplicabilidad | analytic_plan.py | | account.analytic.distribution.model | Modelos distribucion | analytic_distribution_model.py | --- ## 2. Detalle por Modelo ### 2.1 account.analytic.account (Cuentas Analiticas) **Archivo:** `models/analytic_account.py` **Descripcion:** Analytic Account **Hereda de:** mail.thread #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre cuenta | | code | Char | No | Codigo referencia | | active | Boolean | No | Activa (default=True) | | plan_id | Many2one | Si | Plan analitico | | root_plan_id | Many2one | No | Plan raiz (related) | | company_id | Many2one | No | Empresa | | partner_id | Many2one | No | Socio asociado | #### Campos Monetarios (Computed) | Campo | Tipo | Descripcion | |-------|------|-------------| | balance | Monetary | Saldo (credit - debit) | | debit | Monetary | Total debitos | | credit | Monetary | Total creditos | | currency_id | Many2one | Moneda empresa | #### Campos de Relacion | Campo | Tipo | Descripcion | |-------|------|-------------| | line_ids | One2many | Lineas analiticas | --- ### 2.2 account.analytic.line (Lineas Analiticas) **Archivo:** `models/analytic_line.py` **Descripcion:** Analytic Line **Hereda de:** analytic.plan.fields.mixin #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Descripcion | | date | Date | Si | Fecha | | account_id | Many2one | No | Cuenta principal | | auto_account_id | Many2one | No | Cuenta auto (computed) | | partner_id | Many2one | No | Socio | | user_id | Many2one | No | Usuario | | company_id | Many2one | Si | Empresa | #### Campos Monetarios | Campo | Tipo | Descripcion | |-------|------|-------------| | amount | Monetary | Monto (requerido, default=0) | | currency_id | Many2one | Moneda empresa (related) | | unit_amount | Float | Cantidad (default=0) | | product_uom_id | Many2one | Unidad de medida | #### Campos de Distribucion | Campo | Tipo | Descripcion | |-------|------|-------------| | analytic_distribution | Json | Distribucion {account_ids: %} | --- ### 2.3 account.analytic.plan (Planes Analiticos) **Archivo:** `models/analytic_plan.py` **Descripcion:** Analytic Plan **Estructura:** Jerarquica (_parent_store=True) #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre plan | | description | Text | No | Descripcion | | sequence | Integer | No | Orden (default=10) | | color | Integer | No | Color (1-11) | | company_id | Many2one | No | Empresa | #### Campos Jerarquicos | Campo | Tipo | Descripcion | |-------|------|-------------| | parent_id | Many2one | Plan padre | | children_ids | One2many | Planes hijo | | root_id | Many2one | Plan raiz (computed) | | complete_name | Char | Nombre completo jerarquico | | parent_path | Char | Ruta jerarquica | #### Campos de Configuracion | Campo | Tipo | Descripcion | |-------|------|-------------| | default_applicability | Selection | Aplicabilidad default | | applicability_ids | One2many | Reglas aplicabilidad | | account_ids | One2many | Cuentas del plan | | account_count | Integer | Cuentas directas | | all_account_count | Integer | Cuentas incluyendo hijos | --- ### 2.4 account.analytic.applicability (Aplicabilidad) **Archivo:** `models/analytic_plan.py` **Descripcion:** Analytic Plan Applicability | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | analytic_plan_id | Many2one | Si | Plan aplicable | | business_domain | Selection | No | Dominio (general) | | applicability | Selection | Si | Tipo aplicabilidad | | company_id | Many2one | No | Empresa especifica | #### Valores de Aplicabilidad | Valor | Descripcion | |-------|-------------| | optional | Opcional | | mandatory | Obligatorio (debe sumar 100%) | | unavailable | No disponible | --- ### 2.5 account.analytic.distribution.model **Archivo:** `models/analytic_distribution_model.py` **Descripcion:** Analytic Distribution Model **Hereda de:** analytic.mixin | Campo | Tipo | Descripcion | |-------|------|-------------| | sequence | Integer | Orden prioridad | | partner_id | Many2one | Socio especifico | | partner_category_id | Many2one | Categoria socio | | company_id | Many2one | Empresa | | analytic_distribution | Json | Distribucion pre-configurada | --- ## 3. Mixins ### 3.1 analytic.mixin **Archivo:** `models/analytic_mixin.py` **Proposito:** Agregar distribucion analitica a cualquier modelo | Campo | Tipo | Descripcion | |-------|------|-------------| | analytic_distribution | Json | Distribucion {ids: %} | | distribution_analytic_account_ids | Many2many | Cuentas en distribucion | #### Metodos Clave | Metodo | Descripcion | |--------|-------------| | _compute_analytic_distribution | Calcula desde cuentas | | _search_analytic_distribution | Busqueda por nombre cuenta | | _merge_distribution | Fusiona distribuciones | | _validate_distribution | Valida 100% para obligatorios | | _sanitize_values | Redondea porcentajes | ### 3.2 analytic.plan.fields.mixin **Archivo:** `models/analytic_line.py` **Proposito:** Campos dinamicos por cada plan | Campo | Tipo | Descripcion | |-------|------|-------------| | account_id | Many2one | Cuenta principal (Project) | | auto_account_id | Many2one | Cuenta auto-detectada | #### Campos Dinamicos Generados ``` Plan "Project" → account_id Otros planes → x_plan{id}_id Planes hijo → x_account_id_{depth}_id ``` --- ## 4. Diagrama Entidad-Relacion ``` ┌───────────────────────┐ account_ids ┌───────────────────────┐ │ account.analytic.plan │──────────────────►│account.analytic.account│ │ │ │ │ │ - name │ plan_id │ - name │ │ - parent_id │◄───────────────────│ - balance │ │ - default_applicability│ │ - debit, credit │ └───────────┬───────────┘ └───────────┬───────────┘ │ │ children_ids line_ids ▼ ▼ ┌───────────────────────┐ ┌───────────────────────┐ │ account.analytic.plan │ │ account.analytic.line │ │ (hijo) │ │ │ └───────────────────────┘ │ - amount │ │ - account_id │ ┌───────────────────────┐ │ - analytic_distribution│ │account.analytic. │ └───────────────────────┘ │applicability │ │ │ │ - applicability │ │ - business_domain │ └───────────────────────┘ ┌───────────────────────┐ │account.analytic. │ │distribution.model │ │ │ │ - partner_id │ │ - analytic_distribution│ └───────────────────────┘ ``` --- ## 5. Formato JSON de Distribucion ```json // Ejemplo: 50% a cuentas 1+2, 50% a cuenta 3 { "1,2": 50.0, "3": 50.0 } // Las claves son IDs de cuentas separados por coma // Los valores son porcentajes (Float) // Total debe ser 100% para planes obligatorios ``` --- ## 6. Indice GIN para Busqueda JSON PostgreSQL GIN index en `analytic_distribution` para busquedas rapidas en campos JSON. --- **Referencias:** - Carpeta models: `addons/analytic/models/`