---
title: "HR"
description: "Anställda och ledighet. Varje app är en modul i en gemensam datamodell."
canonical: "https://obop-platform.sliplane.app/sv/apps/hr/"
lang: "sv"
---

# HR

## Vad den är till för

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.

## Vad paketet gör och inte gör

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.

## Modeller

### `hr_department`

A team or department of the company

Läsgrupp: `hr.user`. Skrivgrupp: `hr.manager`.

| Fält | Typ | Dataklass | Personuppgift | Grupp | Agenter ser | Beskrivning |
|---|---|---|---|---|---|---|
| `name` | text | `none` | nej | `hr.user` | i klartext | Department name |
| `head` | text | `public_directory` | ja | `hr.user` | maskerad | Name of the department head |
| `cost_centre` | text | `none` | nej | `hr.user` | i klartext | Cost centre code used by finance |

### `hr_employee`

A person employed by the company

Läsgrupp: `hr.user`. Skrivgrupp: `hr.manager`.

| Fält | Typ | Dataklass | Personuppgift | Grupp | Agenter ser | Beskrivning |
|---|---|---|---|---|---|---|
| `name` | text | `public_directory` | ja | `hr.user` | maskerad | Full name |
| `job_title` | text | `public_directory` | ja | `hr.user` | maskerad | Job title |
| `work_email` | text | `public_directory` | ja | `hr.user` | maskerad | Work email address |
| `work_phone` | text | `public_directory` | ja | `hr.user` | maskerad | Work phone number |
| `department_id` | ref → hr_department | `none` | nej | `hr.user` | i klartext | The department the person belongs to |
| `reports_to_id` | ref → hr_employee | `none` | nej | `hr.user` | i klartext | The person's line manager |
| `hired_on` | date | `internal` | ja | `hr.user` | maskerad | First day of employment (YYYY-MM-DD) |
| `contract_type` | select (permanent, fixed_term, contractor, intern) | `confidential_hr` | ja | `hr.manager` | undanhållen | Type of employment contract: permanent, fixed_term, contractor, intern |
| `private_email` | text | `confidential_hr` | ja | `hr.manager` | undanhållen | Private email address |
| `private_phone` | text | `confidential_hr` | ja | `hr.manager` | undanhållen | Private phone number |
| `home_address` | longtext | `confidential_hr` | ja | `hr.manager` | undanhållen | Private home address |
| `birth_date` | date | `confidential_hr` | ja | `hr.manager` | undanhållen | Date of birth (YYYY-MM-DD) |
| `national_id` | text | `confidential_hr` | ja | `hr.manager` | undanhållen | National identity or social security number |
| `emergency_contact` | text | `confidential_hr` | ja | `hr.manager` | undanhållen | Name and phone of the person to call in an emergency |
| `salary` | money | `financial` | ja | `hr.manager` | undanhållen | Gross annual salary (minor currency units, e.g. cents) |
| `bank_iban` | text | `financial` | ja | `hr.manager` | undanhållen | Bank account salary is paid into |
| `union_member` | bool | `special_category` | ja | `hr.special_reader` | undanhållen | Whether the person is a trade union member |
| `work_permit_expiry` | date | `special_category` | ja | `hr.special_reader` | undanhållen | Date the work permit expires, for non-citizens (YYYY-MM-DD) |
| `health_note` | longtext | `special_category` | ja | `hr.special_reader` | undanhållen | Health condition or disability relevant to the workplace |
| `state` | select (onboarding, active, offboarded) | `none` | nej | `hr.user` | i klartext | Employment status: onboarding, active, offboarded |

### `hr_leave_request`

A request for time off

Läsgrupp: `hr.user`. Skrivgrupp: `hr.user`.

| Fält | Typ | Dataklass | Personuppgift | Grupp | Agenter ser | Beskrivning |
|---|---|---|---|---|---|---|
| `employee_id` | ref → hr_employee | `none` | nej | `hr.user` | i klartext | The employee asking for time off |
| `leave_kind` | select (paid, unpaid, parental, study, other) | `confidential_hr` | ja | `hr.user` | undanhållen | Kind of leave: paid, unpaid, parental, study, other |
| `start_on` | date | `internal` | ja | `hr.user` | maskerad | First day of absence (YYYY-MM-DD) |
| `end_on` | date | `internal` | ja | `hr.user` | maskerad | Last day of absence (YYYY-MM-DD) |
| `days` | number | `none` | nej | `hr.user` | i klartext | Working days requested |
| `reason` | longtext | `confidential_hr` | ja | `hr.manager` | undanhållen | Why the leave is requested |
| `is_sick_leave` | bool | `special_category` | ja | `hr.special_reader` | undanhållen | Whether the absence is due to illness |
| `medical_note` | longtext | `special_category` | ja | `hr.special_reader` | undanhållen | Reference to the medical certificate, if any |
| `state` | select (draft, requested, approved, refused) | `none` | nej | `hr.user` | i klartext | Request status: draft, requested, approved, refused |

## Arbetsflöden

### `hr_employee`

| Åtgärd | Flyttar | Vem får köra den | Godkännande |
|---|---|---|---|
| `hr_employee.activate` | state: onboarding → active | `hr.manager` | nej |
| `hr_employee.offboard` | state: active → offboarded | `hr.manager` | ja |

### `hr_leave_request`

| Åtgärd | Flyttar | Vem får köra den | Godkännande |
|---|---|---|---|
| `hr_leave_request.request` | state: draft → requested | `hr.user` | nej |
| `hr_leave_request.approve` | state: requested → approved | `hr.manager` | ja |
| `hr_leave_request.refuse` | state: requested → refused | `hr.manager` | ja |

## Behörighetsgrupper

Grupper som den här appen använder:

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

## Steg som kräver godkännande

Steg som en agent bara kan föreslå:

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

## Vad agenter kan och inte kan göra

En agent kan läsa, söka, skapa och uppdatera poster i den här appen, och köra de åtgärder som inte kräver godkännande, inom behörighetsgrupperna för sin token.

Den kan bara föreslå de här stegen, och en person måste godkänna dem: `hr_employee.offboard`, `hr_leave_request.approve`, `hr_leave_request.refuse`, `hr_department.delete`, `hr_employee.delete`, `hr_leave_request.delete`.

Personuppgifter maskeras som platshållare: `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`.

De här fälten undanhålls helt från agenter: `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`.

## Beroenden

Inga.

## Installera

Installera den från appen Customize (Marknadsplats), eller från kommandoraden:

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

Kräver en databas och administratörsbehörighet.

## Bygg din egen

[Modulguiden visar hur appar som den här skrivs](/sv/docs/reference/module-manifest/)
