---
title: "HR"
description: "Pracownicy i urlopy. Każda aplikacja jest modułem na jednym modelu danych."
canonical: "https://obop.dev/pl/apps/hr/"
lang: "pl"
---

# HR

## Do czego służy

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.

## Co pakiet robi, a czego nie robi

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.

## Modele

### `hr_department`

A team or department of the company

Grupa odczytu: `hr.user`. Grupa zapisu: `hr.manager`.

| Pole | Rodzaj | Klasa danych | Dane osobowe | Grupa | Agenci widzą | Opis |
|---|---|---|---|---|---|---|
| `name` | text | `none` | nie | `hr.user` | jawnie | Department name |
| `head` | text | `public_directory` | tak | `hr.user` | zamaskowane | Name of the department head |
| `cost_centre` | text | `none` | nie | `hr.user` | jawnie | Cost centre code used by finance |

### `hr_employee`

A person employed by the company

Grupa odczytu: `hr.user`. Grupa zapisu: `hr.manager`.

| Pole | Rodzaj | Klasa danych | Dane osobowe | Grupa | Agenci widzą | Opis |
|---|---|---|---|---|---|---|
| `name` | text | `public_directory` | tak | `hr.user` | zamaskowane | Full name |
| `job_title` | text | `public_directory` | tak | `hr.user` | zamaskowane | Job title |
| `work_email` | text | `public_directory` | tak | `hr.user` | zamaskowane | Work email address |
| `work_phone` | text | `public_directory` | tak | `hr.user` | zamaskowane | Work phone number |
| `department_id` | ref → hr_department | `none` | nie | `hr.user` | jawnie | The department the person belongs to |
| `reports_to_id` | ref → hr_employee | `none` | nie | `hr.user` | jawnie | The person's line manager |
| `hired_on` | date | `internal` | tak | `hr.user` | zamaskowane | First day of employment (YYYY-MM-DD) |
| `contract_type` | select (permanent, fixed_term, contractor, intern) | `confidential_hr` | tak | `hr.manager` | wstrzymane | Type of employment contract: permanent, fixed_term, contractor, intern |
| `private_email` | text | `confidential_hr` | tak | `hr.manager` | wstrzymane | Private email address |
| `private_phone` | text | `confidential_hr` | tak | `hr.manager` | wstrzymane | Private phone number |
| `home_address` | longtext | `confidential_hr` | tak | `hr.manager` | wstrzymane | Private home address |
| `birth_date` | date | `confidential_hr` | tak | `hr.manager` | wstrzymane | Date of birth (YYYY-MM-DD) |
| `national_id` | text | `confidential_hr` | tak | `hr.manager` | wstrzymane | National identity or social security number |
| `emergency_contact` | text | `confidential_hr` | tak | `hr.manager` | wstrzymane | Name and phone of the person to call in an emergency |
| `salary` | money | `financial` | tak | `hr.manager` | wstrzymane | Gross annual salary (minor currency units, e.g. cents) |
| `bank_iban` | text | `financial` | tak | `hr.manager` | wstrzymane | Bank account salary is paid into |
| `union_member` | bool | `special_category` | tak | `hr.special_reader` | wstrzymane | Whether the person is a trade union member |
| `work_permit_expiry` | date | `special_category` | tak | `hr.special_reader` | wstrzymane | Date the work permit expires, for non-citizens (YYYY-MM-DD) |
| `health_note` | longtext | `special_category` | tak | `hr.special_reader` | wstrzymane | Health condition or disability relevant to the workplace |
| `state` | select (onboarding, active, offboarded) | `none` | nie | `hr.user` | jawnie | Employment status: onboarding, active, offboarded |

### `hr_leave_request`

A request for time off

Grupa odczytu: `hr.user`. Grupa zapisu: `hr.user`.

| Pole | Rodzaj | Klasa danych | Dane osobowe | Grupa | Agenci widzą | Opis |
|---|---|---|---|---|---|---|
| `employee_id` | ref → hr_employee | `none` | nie | `hr.user` | jawnie | The employee asking for time off |
| `leave_kind` | select (paid, unpaid, parental, study, other) | `confidential_hr` | tak | `hr.user` | wstrzymane | Kind of leave: paid, unpaid, parental, study, other |
| `start_on` | date | `internal` | tak | `hr.user` | zamaskowane | First day of absence (YYYY-MM-DD) |
| `end_on` | date | `internal` | tak | `hr.user` | zamaskowane | Last day of absence (YYYY-MM-DD) |
| `days` | number | `none` | nie | `hr.user` | jawnie | Working days requested |
| `reason` | longtext | `confidential_hr` | tak | `hr.manager` | wstrzymane | Why the leave is requested |
| `is_sick_leave` | bool | `special_category` | tak | `hr.special_reader` | wstrzymane | Whether the absence is due to illness |
| `medical_note` | longtext | `special_category` | tak | `hr.special_reader` | wstrzymane | Reference to the medical certificate, if any |
| `state` | select (draft, requested, approved, refused) | `none` | nie | `hr.user` | jawnie | Request status: draft, requested, approved, refused |

## Przepływy pracy

### `hr_employee`

| Akcja | Przenosi | Kto może uruchomić | Zatwierdzenie |
|---|---|---|---|
| `hr_employee.activate` | state: onboarding → active | `hr.manager` | nie |
| `hr_employee.offboard` | state: active → offboarded | `hr.manager` | tak |

### `hr_leave_request`

| Akcja | Przenosi | Kto może uruchomić | Zatwierdzenie |
|---|---|---|---|
| `hr_leave_request.request` | state: draft → requested | `hr.user` | nie |
| `hr_leave_request.approve` | state: requested → approved | `hr.manager` | tak |
| `hr_leave_request.refuse` | state: requested → refused | `hr.manager` | tak |

## Grupy uprawnień

Grupy używane przez tę aplikację:

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

## Kroki zatwierdzania

Kroki, które agent może tylko zaproponować:

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

## Co agenci mogą, a czego nie mogą

Agent może odczytywać, wyszukiwać, tworzyć i aktualizować rekordy tej aplikacji oraz uruchamiać akcje niewymagające zatwierdzenia, w ramach grup uprawnień swojego tokenu.

Te kroki może tylko zaproponować, a człowiek musi je zatwierdzić: `hr_employee.offboard`, `hr_leave_request.approve`, `hr_leave_request.refuse`, `hr_department.delete`, `hr_employee.delete`, `hr_leave_request.delete`.

Dane osobowe są maskowane jako tokeny zastępcze: `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`.

Te pola są całkowicie wstrzymane i niedostępne dla agentów: `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`.

## Zależności

Brak.

## Instalacja

Zainstaluj ją w aplikacji Customize (Marketplace) lub z wiersza poleceń:

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

Wymaga bazy danych i uprawnień administratora.

## Zbuduj własną

[Przewodnik po modułach pokazuje, jak pisze się takie aplikacje](/pl/docs/reference/module-manifest/)
