workspace-v1/shared/knowledge-base/reference/odoo/docs/03-modelado-datos/MODELO-base.md
rckrdmrd cb4c0681d3 feat(workspace): Add new projects and update architecture
New projects created:
- michangarrito (marketplace mobile)
- template-saas (SaaS template)
- clinica-dental (dental ERP)
- clinica-veterinaria (veterinary ERP)

Architecture updates:
- Move catalog from core/ to shared/
- Add MCP servers structure and templates
- Add git management scripts
- Update SUBREPOSITORIOS.md with 15 new repos
- Update .gitignore for new projects

Repository infrastructure:
- 4 main repositories
- 11 subrepositorios
- Gitea remotes configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:43:28 -06:00

17 KiB

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