---
title: "HR"
description: "Työntekijät ja poissaolot. Jokainen sovellus on moduuli samalla tietomallilla."
canonical: "https://obop.dev/fi/apps/hr/"
lang: "fi"
---

# HR

## Mihin se on tarkoitettu

A register of employees, departments and leave requests, with strict data classes: pay, bank details and national id are visible to managers only and health or union data only to a special reader group. Agents never see the sensitive classes.

## Mitä paketti tekee ja mitä ei

Employees, departments and leave requests. Personal data is classified strictly: pay, bank and national id are visible to managers only, and health and union data to the special reader group.

## Mallit

### `hr_department`

A team or department of the company

Lukuryhmä: `hr.user`. Kirjoitusryhmä: `hr.manager`.

| Kenttä | Tyyppi | Tietoluokka | Henkilötieto | Ryhmä | Agentit näkevät | Kuvaus |
|---|---|---|---|---|---|---|
| `name` | text | `none` | ei | `hr.user` | selkoisena | Department name |
| `head` | text | `public_directory` | kyllä | `hr.user` | maskattu | Name of the department head |
| `cost_centre` | text | `none` | ei | `hr.user` | selkoisena | Cost centre code used by finance |

### `hr_employee`

A person employed by the company

Lukuryhmä: `hr.user`. Kirjoitusryhmä: `hr.manager`.

| Kenttä | Tyyppi | Tietoluokka | Henkilötieto | Ryhmä | Agentit näkevät | Kuvaus |
|---|---|---|---|---|---|---|
| `name` | text | `public_directory` | kyllä | `hr.user` | maskattu | Full name |
| `job_title` | text | `public_directory` | kyllä | `hr.user` | maskattu | Job title |
| `work_email` | text | `public_directory` | kyllä | `hr.user` | maskattu | Work email address |
| `work_phone` | text | `public_directory` | kyllä | `hr.user` | maskattu | Work phone number |
| `department_id` | ref → hr_department | `none` | ei | `hr.user` | selkoisena | The department the person belongs to |
| `reports_to_id` | ref → hr_employee | `none` | ei | `hr.user` | selkoisena | The person's line manager |
| `hired_on` | date | `internal` | kyllä | `hr.user` | maskattu | First day of employment (YYYY-MM-DD) |
| `contract_type` | select (permanent, fixed_term, contractor, intern) | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Type of employment contract: permanent, fixed_term, contractor, intern |
| `private_email` | text | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Private email address |
| `private_phone` | text | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Private phone number |
| `home_address` | longtext | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Private home address |
| `birth_date` | date | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Date of birth (YYYY-MM-DD) |
| `national_id` | text | `confidential_hr` | kyllä | `hr.manager` | pidätetty | National identity or social security number |
| `emergency_contact` | text | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Name and phone of the person to call in an emergency |
| `salary` | money | `financial` | kyllä | `hr.manager` | pidätetty | Gross annual salary (minor currency units, e.g. cents) |
| `bank_iban` | text | `financial` | kyllä | `hr.manager` | pidätetty | Bank account salary is paid into |
| `union_member` | bool | `special_category` | kyllä | `hr.special_reader` | pidätetty | Whether the person is a trade union member |
| `work_permit_expiry` | date | `special_category` | kyllä | `hr.special_reader` | pidätetty | Date the work permit expires, for non-citizens (YYYY-MM-DD) |
| `health_note` | longtext | `special_category` | kyllä | `hr.special_reader` | pidätetty | Health condition or disability relevant to the workplace |
| `state` | select (onboarding, active, offboarded) | `none` | ei | `hr.user` | selkoisena | Employment status: onboarding, active, offboarded |

### `hr_leave_request`

A request for time off

Lukuryhmä: `hr.user`. Kirjoitusryhmä: `hr.user`.

| Kenttä | Tyyppi | Tietoluokka | Henkilötieto | Ryhmä | Agentit näkevät | Kuvaus |
|---|---|---|---|---|---|---|
| `employee_id` | ref → hr_employee | `none` | ei | `hr.user` | selkoisena | The employee asking for time off |
| `leave_kind` | select (paid, unpaid, parental, study, other) | `confidential_hr` | kyllä | `hr.user` | pidätetty | Kind of leave: paid, unpaid, parental, study, other |
| `start_on` | date | `internal` | kyllä | `hr.user` | maskattu | First day of absence (YYYY-MM-DD) |
| `end_on` | date | `internal` | kyllä | `hr.user` | maskattu | Last day of absence (YYYY-MM-DD) |
| `days` | number | `none` | ei | `hr.user` | selkoisena | Working days requested |
| `reason` | longtext | `confidential_hr` | kyllä | `hr.manager` | pidätetty | Why the leave is requested |
| `is_sick_leave` | bool | `special_category` | kyllä | `hr.special_reader` | pidätetty | Whether the absence is due to illness |
| `medical_note` | longtext | `special_category` | kyllä | `hr.special_reader` | pidätetty | Reference to the medical certificate, if any |
| `state` | select (draft, requested, approved, refused) | `none` | ei | `hr.user` | selkoisena | Request status: draft, requested, approved, refused |

## Työnkulut

### `hr_employee`

| Toiminto | Siirtää | Kuka voi suorittaa | Hyväksyntä |
|---|---|---|---|
| `hr_employee.activate` | state: onboarding → active | `hr.manager` | ei |
| `hr_employee.offboard` | state: active → offboarded | `hr.manager` | kyllä |

### `hr_leave_request`

| Toiminto | Siirtää | Kuka voi suorittaa | Hyväksyntä |
|---|---|---|---|
| `hr_leave_request.request` | state: draft → requested | `hr.user` | ei |
| `hr_leave_request.approve` | state: requested → approved | `hr.manager` | kyllä |
| `hr_leave_request.refuse` | state: requested → refused | `hr.manager` | kyllä |

## Käyttöoikeusryhmät

Tämän sovelluksen käyttämät ryhmät:

- `hr.manager`
- `hr.special_reader`
- `hr.user`

## Hyväksyntävaiheet

Vaiheet, joita agentti voi vain ehdottaa:

- `hr_employee.offboard`
- `hr_leave_request.approve`
- `hr_leave_request.refuse`

## Mitä agentit voivat ja eivät voi tehdä

Agentti voi lukea, hakea, luoda ja päivittää tämän sovelluksen tietueita sekä suorittaa toiminnot, jotka eivät vaadi hyväksyntää, tunnisteensa käyttöoikeusryhmien rajoissa.

Se voi vain ehdottaa näitä vaiheita, ja ihmisen on hyväksyttävä ne: `hr_employee.offboard`, `hr_leave_request.approve`, `hr_leave_request.refuse`, `hr_department.delete`, `hr_employee.delete`, `hr_leave_request.delete`.

Henkilötiedot maskataan paikkamerkeiksi: `hr_department.head`, `hr_employee.name`, `hr_employee.job_title`, `hr_employee.work_email`, `hr_employee.work_phone`, `hr_employee.hired_on`, `hr_leave_request.start_on`, `hr_leave_request.end_on`.

Nämä kentät pidätetään agenteilta kokonaan: `hr_employee.contract_type`, `hr_employee.private_email`, `hr_employee.private_phone`, `hr_employee.home_address`, `hr_employee.birth_date`, `hr_employee.national_id`, `hr_employee.emergency_contact`, `hr_employee.salary`, `hr_employee.bank_iban`, `hr_employee.union_member`, `hr_employee.work_permit_expiry`, `hr_employee.health_note`, `hr_leave_request.leave_kind`, `hr_leave_request.reason`, `hr_leave_request.is_sick_leave`, `hr_leave_request.medical_note`.

## Riippuvuudet

Ei ole.

## Asennus

Asenna se Customize-sovelluksesta (Marketplace) tai komentoriviltä:

```bash
obop modules install-from hr
```

Vaatii tietokannan ja ylläpitäjän oikeudet.

## Tee oma

[Moduulioppaassa näytetään, miten tällaiset sovellukset kirjoitetaan](/fi/docs/reference/module-manifest/)
