# Modelo de Datos: Base (Kernel) **Modulo:** base **Total Modelos Principales:** 10 (documentados) **Total Modelos Completos:** ~50 --- ## 1. Indice de Modelos Principales | Modelo | Descripcion | Campos | Archivo | |--------|-------------|--------|---------| | res.partner | Contactos/Clientes/Proveedores | 40+ | res_partner.py | | res.users | Usuarios del sistema | 25+ | res_users.py | | res.company | Empresas | 30+ | res_company.py | | res.groups | Grupos de seguridad | 15+ | res_groups.py | | ir.model | Metamodelo ORM | 10+ | ir_model.py | | ir.rule | Reglas de acceso | 10+ | ir_rule.py | | ir.cron | Tareas programadas | 12+ | ir_cron.py | | ir.sequence | Secuencias | 12+ | ir_sequence.py | | res.currency | Monedas | 15+ | res_currency.py | | res.country | Paises | 12+ | res_country.py | --- ## 2. Detalle por Modelo ### 2.1 res.partner (Contactos) **Archivo:** `models/res_partner.py` **Descripcion:** Gestiona contactos, clientes y proveedores **Hereda de:** format.address.mixin, format.vat.label.mixin, avatar.mixin #### Campos Principales | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char | No | - | Nombre del contacto | | complete_name | Char | No | Computed | Nombre completo (con padre) | | email | Char | No | - | Correo electronico | | phone | Char | No | - | Telefono | | mobile | Char | No | - | Movil | | website | Char | No | - | Sitio web | | vat | Char | No | - | Identificacion fiscal | | ref | Char | No | - | Referencia interna | | active | Boolean | No | True | Activo | | is_company | Boolean | No | False | Es empresa | | employee | Boolean | No | False | Es empleado | | function | Char | No | - | Puesto de trabajo | | type | Selection | No | contact | Tipo: contact, invoice, delivery, other | | lang | Selection | No | - | Idioma | | tz | Selection | No | - | Zona horaria | #### Campos de Direccion | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | street | Char | No | Calle | | street2 | Char | No | Calle 2 | | city | Char | No | Ciudad | | zip | Char | No | Codigo postal | | state_id | Many2one | No | Estado/Provincia | | country_id | Many2one | No | Pais | #### Campos Relacionales | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | parent_id | Many2one | res.partner | Empresa padre | | child_ids | One2many | res.partner | Contactos hijos | | company_id | Many2one | res.company | Empresa | | user_ids | One2many | res.users | Usuarios vinculados | | bank_ids | One2many | res.partner.bank | Cuentas bancarias | | category_id | Many2many | res.partner.category | Categorias | | country_id | Many2one | res.country | Pais | | state_id | Many2one | res.country.state | Estado | #### Constraints | Nombre | Tipo | Campos | Mensaje | |--------|------|--------|---------| | check_name | Python | name, is_company | Nombre requerido si es empresa | --- ### 2.2 res.users (Usuarios) **Archivo:** `models/res_users.py` **Descripcion:** Usuarios del sistema **Hereda de:** res.partner (via _inherits) #### Campos Principales | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | login | Char | Si | - | Nombre de usuario | | password | Char | No | Computed | Contrasena (cifrada) | | active | Boolean | No | True | Usuario activo | | share | Boolean | No | Computed | Usuario compartido | | signature | Html | No | Computed | Firma de email | | role | Selection | No | Computed | Rol: group_user, group_system | #### Campos Relacionales | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | partner_id | Many2one | res.partner | Contacto (requerido) | | company_id | Many2one | res.company | Empresa default | | company_ids | Many2many | res.company | Empresas accesibles | | group_ids | Many2many | res.groups | Grupos | | all_group_ids | Many2many | res.groups | Grupos + implicados | | action_id | Many2one | ir.actions.actions | Accion inicial | | api_key_ids | One2many | res.users.apikeys | Claves API | #### Metodos Importantes | Metodo | Descripcion | |--------|-------------| | authenticate() | Autenticar usuario | | change_password() | Cambiar contrasena | | has_group() | Verificar membresia de grupo | | _is_internal() | Es usuario interno? | | _is_admin() | Es administrador? | --- ### 2.3 res.company (Empresas) **Archivo:** `models/res_company.py` **Descripcion:** Estructura de empresas **Parent Store:** Si (jerarquia) #### Campos Principales | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char | Si | Related | Nombre | | active | Boolean | No | True | Activa | | sequence | Integer | No | 10 | Orden | | currency_id | Many2one | Si | - | Moneda | | phone | Char | No | Related | Telefono | | email | Char | No | Related | Email | | website | Char | No | Related | Sitio web | | vat | Char | No | Related | NIF | #### Campos de Diseno | Campo | Tipo | Descripcion | |-------|------|-------------| | logo | Binary | Logotipo | | logo_web | Binary | Logo optimizado web | | font | Selection | Fuente corporativa | | primary_color | Char | Color primario (hex) | | secondary_color | Char | Color secundario | | paperformat_id | Many2one | Formato de papel | #### Campos Relacionales | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | partner_id | Many2one | res.partner | Contacto empresa | | parent_id | Many2one | res.company | Empresa padre | | child_ids | One2many | res.company | Sucursales | | root_id | Many2one | res.company | Empresa raiz | | user_ids | Many2many | res.users | Usuarios | | bank_ids | One2many | res.partner.bank | Cuentas bancarias | --- ### 2.4 res.groups (Grupos de Seguridad) **Archivo:** `models/res_groups.py` **Descripcion:** Control de acceso #### Campos | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre del grupo | | full_name | Char | No | Nombre completo | | comment | Text | No | Descripcion | | share | Boolean | No | Grupo compartido | | sequence | Integer | No | Orden | #### Relaciones | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | user_ids | Many2many | res.users | Usuarios | | implied_ids | Many2many | res.groups | Grupos implicados | | model_access | One2many | ir.model.access | Derechos de acceso | | rule_groups | Many2many | ir.rule | Reglas de registro | | menu_access | Many2many | ir.ui.menu | Acceso a menus | --- ### 2.5 ir.rule (Reglas de Acceso) **Archivo:** `models/ir_rule.py` **Descripcion:** Control de acceso a nivel de registro #### Campos | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char | No | - | Nombre | | active | Boolean | No | True | Activa | | domain_force | Text | No | - | Dominio/filtro | | perm_read | Boolean | No | True | Permite lectura | | perm_write | Boolean | No | True | Permite escritura | | perm_create | Boolean | No | True | Permite creacion | | perm_unlink | Boolean | No | True | Permite eliminacion | | global | Boolean | No | Computed | Regla global | #### Relaciones | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | model_id | Many2one | ir.model | Modelo (requerido) | | groups | Many2many | res.groups | Grupos afectados | --- ### 2.6 ir.cron (Tareas Programadas) **Archivo:** `models/ir_cron.py` **Descripcion:** Trabajos automaticos #### Campos | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | cron_name | Char | No | Computed | Nombre | | active | Boolean | No | True | Activo | | interval_number | Integer | Si | 1 | Repetir cada X | | interval_type | Selection | Si | months | Unidad: minutes, hours, days, weeks, months | | nextcall | Datetime | Si | - | Proxima ejecucion | | lastcall | Datetime | No | - | Ultima ejecucion | | priority | Integer | No | 5 | Prioridad (0=alta) | | failure_count | Integer | No | 0 | Fallos consecutivos | #### Relaciones | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | ir_actions_server_id | Many2one | ir.actions.server | Accion a ejecutar | | user_id | Many2one | res.users | Usuario ejecutor | --- ### 2.7 ir.sequence (Secuencias) **Archivo:** `models/ir_sequence.py` **Descripcion:** Generacion de numeros unicos #### Campos | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char | Si | - | Nombre | | code | Char | No | - | Codigo referencia | | prefix | Char | No | - | Prefijo | | suffix | Char | No | - | Sufijo | | number_next | Integer | Si | 1 | Proximo numero | | number_increment | Integer | Si | 1 | Incremento | | padding | Integer | Si | 0 | Relleno con ceros | | implementation | Selection | Si | standard | Tipo: standard, no_gap | | use_date_range | Boolean | No | False | Subsecuencias por fecha | --- ### 2.8 res.currency (Monedas) **Archivo:** `models/res_currency.py` **Descripcion:** Gestion de monedas #### Campos | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char(3) | Si | - | Codigo ISO (USD, EUR) | | iso_numeric | Integer | No | - | Codigo numerico ISO | | full_name | Char | No | - | Nombre completo | | symbol | Char | Si | - | Simbolo ($, E) | | rounding | Float | No | 0.01 | Factor redondeo | | decimal_places | Integer | No | Computed | Decimales | | position | Selection | No | after | Posicion simbolo | | active | Boolean | No | True | Activa | #### Relaciones | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | rate_ids | One2many | res.currency.rate | Historico de tasas | --- ### 2.9 res.country (Paises) **Archivo:** `models/res_country.py` **Descripcion:** Informacion de paises #### Campos | Campo | Tipo | Req | Default | Descripcion | |-------|------|-----|---------|-------------| | name | Char | Si | - | Nombre | | code | Char(2) | Si | - | Codigo ISO | | phone_code | Integer | No | - | Codigo telefonico | | address_format | Text | No | - | Formato direccion | | vat_label | Char | No | - | Etiqueta VAT | | state_required | Boolean | No | False | Requiere estado | | zip_required | Boolean | No | True | Requiere CP | #### Relaciones | Campo | Tipo | Relacion | Descripcion | |-------|------|----------|-------------| | currency_id | Many2one | res.currency | Moneda | | state_ids | One2many | res.country.state | Estados/Provincias | | country_group_ids | Many2many | res.country.group | Grupos de paises | --- ## 3. Diagrama Entidad-Relacion ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ DATOS MAESTROS │ └─────────────────────────────────────────────────────────────────────────┘ ┌───────────────┐ parent_id ┌───────────────┐ │ res.partner │◄───────────────────│ res.partner │ │ │ │ │ │ - name │ child_ids │ (jerarquia) │ │ - email │────────────────────►│ │ │ - vat │ └───────────────┘ │ - type │ └───────┬───────┘ │ partner_id (required) │ ▼ ┌───────────────┐ company_ids ┌───────────────┐ │ res.users │◄──────────────────►│ res.company │ │ │ (Many2many) │ │ │ - login │ │ - name │ │ - password │────────────────────►│ - currency_id│ │ - active │ company_id │ - logo │ └───────┬───────┘ └───────┬───────┘ │ │ │ group_ids │ parent_id ▼ ▼ ┌───────────────┐ ┌───────────────┐ │ res.groups │ │ res.company │ │ │ │ (jerarquia) │ │ - name │ └───────────────┘ │ - sequence │ └───────┬───────┘ │ │ rule_groups / model_access ▼ ┌───────────────┐ ┌───────────────┐ │ ir.rule │ │ ir.model.access│ │ │ │ │ │ - domain │ │ - perm_read │ │ - perm_* │ │ - perm_write │ └───────┬───────┘ └───────────────┘ │ model_id ▼ ┌───────────────┐ │ ir.model │ │ │ │ - model │ │ - name │ └───────────────┘ ┌─────────────────────────────────────────────────────────────────────────┐ │ AUTOMATIZACION │ └─────────────────────────────────────────────────────────────────────────┘ ┌───────────────┐ ir_actions_server_id │ ir.cron │─────────────────────────►┌───────────────────┐ │ │ │ ir.actions.server │ │ - nextcall │ │ │ │ - interval │ │ - code │ │ - priority │ │ - model_id │ └───────────────┘ └───────────────────┘ ┌───────────────┐ date_range_ids │ ir.sequence │────────────────────────►┌─────────────────────┐ │ │ │ir.sequence.date_range│ │ - prefix │ │ │ │ - number_next│ │ - date_from │ │ - padding │ │ - date_to │ └───────────────┘ └─────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────┐ │ GEOGRAFICO │ └─────────────────────────────────────────────────────────────────────────┘ ┌───────────────┐ state_ids ┌───────────────────┐ │ res.country │───────────────────►│ res.country.state │ │ │ │ │ │ - code (ES) │ │ - name │ │ - phone_code │ │ - code │ └───────┬───────┘ └───────────────────┘ │ currency_id ▼ ┌───────────────┐ rate_ids ┌───────────────────┐ │ res.currency │───────────────────►│ res.currency.rate │ │ │ │ │ │ - name (USD) │ │ - rate │ │ - symbol ($) │ │ - name (date) │ └───────────────┘ └───────────────────┘ ``` --- **Referencias:** - Carpeta models: `odoo/addons/base/models/` - Total archivos: 49