# Modelo de Datos: HR (Recursos Humanos) **Modulo:** hr **Total Modelos:** 10+ **Modelos Documentados:** 6 (principales) --- ## 1. Indice de Modelos Principales | Modelo | Descripcion | Campos | Archivo | |--------|-------------|--------|---------| | hr.employee | Empleados | 100+ | hr_employee.py | | hr.department | Departamentos | 15+ | hr_department.py | | hr.job | Puestos trabajo | 15+ | hr_job.py | | hr.version | Versiones empleado | 40+ | hr_version.py | | hr.work.location | Ubicaciones | 6 | hr_work_location.py | | hr.employee.category | Categorias | 3 | hr_employee_category.py | --- ## 2. Detalle por Modelo ### 2.1 hr.employee (Empleados) **Archivo:** `models/hr_employee.py` **Descripcion:** Employee **Hereda de:** mail.thread.main.attachment, mail.activity.mixin, resource.mixin, avatar.mixin #### Campos de Identificacion | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre (related resource_id.name) | | barcode | Char | No | Badge ID (unico) | | pin | Char | No | PIN seguridad | | active | Boolean | No | Activo (default=True) | | resource_id | Many2one | Si | Recurso asociado | #### Campos Organizacionales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | user_id | Many2one | No | Usuario Odoo | | company_id | Many2one | Si | Empresa | | department_id | Many2one | No | Departamento | | job_id | Many2one | No | Puesto de trabajo | | parent_id | Many2one | No | Gerente directo | | coach_id | Many2one | No | Coach/Mentor | | child_ids | One2many | No | Subordinados directos | #### Campos de Contacto Laboral | Campo | Tipo | Descripcion | |-------|------|-------------| | work_phone | Char | Telefono laboral | | mobile_phone | Char | Movil laboral | | work_email | Char | Email laboral | | work_contact_id | Many2one | Contacto res.partner | | work_location_id | Many2one | Ubicacion de trabajo | #### Campos Personales (groups="hr.group_hr_user") | Campo | Tipo | Descripcion | |-------|------|-------------| | legal_name | Char | Nombre legal | | birthday | Date | Fecha nacimiento | | place_of_birth | Char | Lugar nacimiento | | country_of_birth | Many2one | Pais nacimiento | | private_phone | Char | Telefono privado | | private_email | Char | Email privado | | identification_id | Char | ID nacional | | passport_id | Char | Numero pasaporte | | permit_no | Char | Permiso de trabajo | #### Campos de Versionamiento | Campo | Tipo | Descripcion | |-------|------|-------------| | version_ids | One2many | Historico versiones | | current_version_id | Many2one | Version actual (stored) | | version_id | Many2one | Version actual (computed) | #### Restricciones | Constraint | Descripcion | |------------|-------------| | barcode UNIQUE | Badge ID unico | | user_company UNIQUE | Un usuario, una empresa | --- ### 2.2 hr.department (Departamentos) **Archivo:** `models/hr_department.py` **Descripcion:** HR Department **Hereda de:** mail.thread, mail.activity.mixin **Estructura:** Jerarquica (_parent_store=True) #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre departamento | | complete_name | Char | No | Nombre completo jerarquico | | active | Boolean | No | Activo (default=True) | | company_id | Many2one | No | Empresa | | parent_id | Many2one | No | Departamento padre | | child_ids | One2many | No | Subdepartamentos | | manager_id | Many2one | No | Gerente | | member_ids | One2many | No | Empleados | | jobs_ids | One2many | No | Puestos | | total_employee | Integer | No | Total empleados (computed) | | parent_path | Char | No | Ruta jerarquica | | master_department_id | Many2one | No | Departamento raiz | --- ### 2.3 hr.job (Puestos de Trabajo) **Archivo:** `models/hr_job.py` **Descripcion:** Job Position **Hereda de:** mail.thread #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre del puesto | | active | Boolean | No | Activo | | sequence | Integer | No | Orden (default=10) | | department_id | Many2one | No | Departamento | | company_id | Many2one | No | Empresa | | employee_ids | One2many | No | Empleados en puesto | | no_of_employee | Integer | No | Empleados actuales | | expected_employees | Integer | No | Empleados esperados | | no_of_recruitment | Integer | No | Vacantes (default=1) | | description | Html | No | Descripcion | | requirements | Text | No | Requisitos | | contract_type_id | Many2one | No | Tipo contrato | #### Restriccion ``` name + company_id + department_id UNIQUE ``` --- ### 2.4 hr.version (Versiones de Empleado) **Archivo:** `models/hr_version.py` **Descripcion:** Employee Version History #### Campos de Contrato | Campo | Tipo | Descripcion | |-------|------|-------------| | employee_id | Many2one | Empleado (requerido) | | date_version | Date | Fecha efectiva (requerido) | | contract_date_start | Date | Inicio contrato | | contract_date_end | Date | Fin contrato | | trial_date_end | Date | Fin periodo prueba | | wage | Monetary | Salario bruto mensual | | contract_type_id | Many2one | Tipo contrato | | structure_type_id | Many2one | Estructura salarial | #### Campos Personales | Campo | Tipo | Descripcion | |-------|------|-------------| | country_id | Many2one | Nacionalidad | | sex | Selection | Genero (male/female/other) | | marital | Selection | Estado civil | | children | Integer | Hijos dependientes | | identification_id | Char | ID nacional | | ssnid | Char | Seguro social | | passport_id | Char | Pasaporte | #### Estados de Version | Campo | Tipo | Descripcion | |-------|------|-------------| | is_current | Boolean | Version actual | | is_past | Boolean | Version pasada | | is_future | Boolean | Version futura | --- ### 2.5 hr.work.location (Ubicaciones) **Archivo:** `models/hr_work_location.py` **Descripcion:** Work Location | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre ubicacion | | active | Boolean | No | Activo | | company_id | Many2one | Si | Empresa | | location_type | Selection | No | Tipo (home/office/other) | | address_id | Many2one | Si | Direccion | | location_number | Char | No | Numero ubicacion | --- ### 2.6 hr.employee.category (Categorias) **Archivo:** `models/hr_employee_category.py` **Descripcion:** Employee Category (Tags) | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre (unico) | | color | Integer | No | Color (1-11) | | employee_ids | Many2many | No | Empleados | --- ## 3. Diagrama Entidad-Relacion ``` ┌───────────────────────┐ child_ids ┌───────────────────────┐ │ hr.department │◄─────────────────────│ hr.department │ │ │ │ │ │ - name │ parent_id │ (Subdepartamento) │ │ - complete_name │─────────────────────►│ │ │ - manager_id ──────┐ │ └───────────────────────┘ └───────────┬─────────┘ │ │ │ member_ids │ ▼ │ ┌───────────────────────┐ ┌───────────────────────┐ │ hr.employee │◄──────────────────────│ hr.employee │ │ │ parent_id │ (Subordinado) │ │ - name │ └───────────────────────┘ │ - department_id │ │ - job_id ──────────┐ │ version_ids ┌───────────────────────┐ │ - parent_id ───────┘ │─────────────────────►│ hr.version │ │ - user_id │ │ │ └───────────┬───────────┘ │ - date_version │ │ │ - wage │ │ job_id │ - contract_type_id │ ▼ └───────────────────────┘ ┌───────────────────────┐ │ hr.job │ │ │ │ - name │ │ - department_id │ │ - employee_ids │ │ - no_of_recruitment │ └───────────────────────┘ ``` --- ## 4. Modelos de Configuracion ### hr.contract.type | Campo | Tipo | Descripcion | |-------|------|-------------| | name | Char | Nombre (traducible) | | code | Char | Codigo | | sequence | Integer | Orden | | country_id | Many2one | Pais | ### hr.departure.reason | Campo | Tipo | Descripcion | |-------|------|-------------| | name | Char | Razon (traducible) | | sequence | Integer | Orden | | country_id | Many2one | Pais | --- **Referencias:** - Carpeta models: `addons/hr/models/`