Залишки відпусток (Employee Absences)¶
Залишки відпусток - це механізм управління балансом доступних і використаних днів відпустки для співробітників. Кожен запис про залишки прив'язаний до конкретного типу відпустки (щорічна, навчальна, тощо) та періоду (робочий рік або календарний рік).
Різниця між Залишками (Absences) та Задачами "Відпустка" (Vacation Tasks)¶
Важливо розуміти різницю між цими двома концепціями:
| Аспект | Залишки (Absences) | Задача "Відпустка" (Vacation Task) |
|---|---|---|
| Призначення | Управління балансом доступних днів відпустки | Процес оформлення конкретної відпустки з підписанням документів |
| Що зберігає | allowed_days (надано), left_days (залишок), used_days (використано) |
Деталі конкретної відпустки: дати, підписанти, документи |
| Період | Робочий або календарний рік | Конкретні дати початку і кінця відпустки |
| API операції | POST, GET, PATCH для управління балансом | POST для створення задачі, GET для відстеження статусу підписання |
| Взаємодія | Автоматично оновлюється при створенні задачі "Відпустка" | Використовує залишки для валідації і списання днів |
Приклад взаємодії¶
-
Створюється запис про залишки: співробітнику надається 24 дні щорічної відпустки на робочий рік
{ "absence_type": "annual", "allowed_days": 24, "left_days": 24, "date_start": "2024-01-15" } -
Створюється задача "Відпустка": співробітник йде у відпустку на 10 днів
- Система автоматично зменшує
left_daysз 24 до 14 -
used_daysзбільшується з 0 до 10 -
Оновлення залишків: HR може вручну скоригувати баланс через PATCH ендпоінт, наприклад, якщо була помилка або додано додаткові дні
Типи відпусток (Absence Types)¶
Кожен запис про залишки прив'язаний до одного з наступних типів:
| Тип залишків | Опис | Період за замовчуванням |
|---|---|---|
annual |
Щорічна основна відпустка | Робочий рік |
annual_hazardous |
Щорічна додаткова за шкідливі умови праці | Робочий рік |
annual_special_work |
Щорічна додаткова за особливий характер праці | Робочий рік |
social_maternity_leave |
Декретна відпустка | Календарний рік |
social_child_care |
Відпустка для догляду за дитиною | Календарний рік |
social_parental |
Відпустка для батьків | Календарний рік |
social_child_birth |
Відпустка при народженні дитини | Календарний рік |
social_adoption |
Відпустка при усиновленні | Календарний рік |
study_educational |
Навчальна відпустка | Календарний рік |
vacation_social_pco |
Додаткова для учасників бойових дій | Календарний рік |
vacation_social_chornobyl |
Додаткова для постраждалих від Чорнобильської катастрофи | Календарний рік |
vacation_social_revolution_dignity |
Додаткова для постраждалих учасників Революції Гідності | Календарний рік |
vacation_donor_rest_day |
День відпочинку донору | Календарний рік |
study_creative |
Творча відпустка | Календарний рік |
study_athletic |
Спортивна відпустка | Календарний рік |
unpaid |
Відпустка без збереження зарплати | Календарний рік |
unpaid_agreed |
Додаткова без збереження зарплати за згодою сторін | Календарний рік |
unpaid_martial_law |
Без збереження зарплати на період воєнного стану | Календарний рік |
vacation_annual_onboarding |
Основна відпустка при онбордингу | Робочий рік |
vacation_unpaid_onboarding |
Відпустка без збереження зарплати при онбордингу | Календарний рік |
custom |
Користувацький тип відпустки | Залежить від шаблону |
Типи періодів¶
Робочий рік (Working Year)¶
- Відлік починається з дати прийому на роботу (
date_joined) - Наприклад, якщо співробітник прийнятий 15 січня 2024, робочий рік: 15.01.2024 - 14.01.2025
- Використовується для щорічних основних та додаткових відпусток
Календарний рік (Calendar Year)¶
- Відлік з 1 січня по 31 грудня
- Використовується для соціальних, навчальних та неоплачуваних відпусток
Поля запису про залишки¶
| Поле | Тип | Опис | Обов'язкове |
|---|---|---|---|
id |
UUID | Унікальний ідентифікатор запису | Автоматично |
employee_id |
UUID | ID співробітника | Так |
absence_type |
AbsenceType | Тип відпустки (див. таблицю вище) | Так |
date_start |
date | Дата початку періоду (початок робочого або календарного року) | Так |
allowed_days |
decimal | Кількість наданих днів відпустки | Так (для POST) |
left_days |
decimal | Залишок невикористаних днів | Так (для POST) |
used_days |
decimal | Кількість використаних днів | Автоматично обчислюється |
task_template_identifier |
UUID | ID шаблону відпустки для типу custom |
Так для custom |
Обчислення used_days¶
used_days = allowed_days - left_days
Наприклад:
- allowed_days: 24 (надано 24 дні)
- left_days: 14 (залишилося 14 днів)
- used_days: 10 (використано 10 днів)
API ендпоінти¶
1. Створити запис про залишки відпустки¶
POST /api/public/v1/employee/{employee_id}/absences
Створює новий запис про залишки відпустки для співробітника.
Приклад запиту:
{
"absence_type": "annual",
"date_start": "2024-01-15",
"allowed_days": 24,
"left_days": 24
}
Приклад для користувацького типу:
{
"absence_type": "custom",
"date_start": "2024-01-01",
"allowed_days": 10,
"left_days": 10,
"task_template_identifier": "123e4567-e89b-12d3-a456-426614174000"
}
Важливо:
- Для типу custom обов'язково вказувати task_template_identifier
- date_start визначає початок періоду і залежить від типу відпустки
- allowed_days та left_days можуть бути дробовими числами (наприклад, 24.5)
2. Отримати список залишків відпусток¶
GET /api/public/v1/employee/{employee_id}/absences
Повертає список всіх записів про залишки відпусток для співробітника з обчисленням used_days.
Приклад відповіді:
{
"detail": {
"items": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"employee_id": "987e6543-e21b-12d3-a456-426614174001",
"absence_type": "annual",
"date_start": "2024-01-15",
"allowed_days": 24,
"left_days": 14,
"used_days": 10
},
{
"id": "456e7890-e12b-34c5-d678-426614174003",
"employee_id": "987e6543-e21b-12d3-a456-426614174001",
"absence_type": "vacation_social_pco",
"date_start": "2024-01-01",
"allowed_days": 14,
"left_days": 14,
"used_days": 0
}
],
"total": 2,
"page_num": 1,
"page_size": 100
}
}
3. Оновити залишки відпустки¶
PATCH /api/public/v1/employee/{employee_id}/absences/{absence_id}
Оновлює кількість доступних днів відпустки. Використовується для коригування балансу, наприклад, при помилці або нарахуванні додаткових днів.
Приклад запиту:
{
"allowed_days": 26,
"left_days": 16
}
Це збільшить баланс на 2 дні (було 24, стало 26).
Сценарії використання¶
Сценарій 1: Створення залишків при прийомі на роботу¶
При прийомі співробітника необхідно створити записи про залишки для різних типів відпусток:
-
Щорічна основна відпустка (24 дні):
POST /api/public/v1/employee/{employee_id}/absences { "absence_type": "annual", "date_start": "2024-01-15", // Дата прийому на роботу "allowed_days": 24, "left_days": 24 } -
Додаткова відпустка для учасника бойових дій (14 днів), якщо застосовується:
POST /api/public/v1/employee/{employee_id}/absences { "absence_type": "vacation_social_pco", "date_start": "2024-01-01", // Початок календарного року "allowed_days": 14, "left_days": 14 }
Сценарій 2: Оформлення відпустки через задачу¶
-
Перевірити залишки перед створенням задачі:
Переконатися, щоGET /api/public/v1/employee/{employee_id}/absencesleft_days >= кількість днів відпустки -
Створити задачу "Відпустка":
Система автоматично зменшитьPOST /api/public/v1/vacationleft_daysта збільшитьused_days -
Перевірити оновлені залишки:
GET /api/public/v1/employee/{employee_id}/absences
Сценарій 3: Коригування балансу¶
Якщо потрібно додати або зменшити кількість днів (наприклад, помилка або нарахування додаткових днів):
PATCH /api/public/v1/employee/{employee_id}/absences/{absence_id}
{
"allowed_days": 28, // Було 24, додаємо 4 дні
"left_days": 18 // Було 14, додаємо 4 дні
}
Сценарій 4: Новий період (новий рік)¶
На початку нового періоду (робочого або календарного року) потрібно створити новий запис:
POST /api/public/v1/employee/{employee_id}/absences
{
"absence_type": "annual",
"date_start": "2025-01-15", // Початок нового робочого року
"allowed_days": 24,
"left_days": 24
}
Старий запис залишається в системі для історії.
Важливі моменти¶
-
Автоматичне списання - при створенні задачі "Відпустка" система автоматично зменшує
left_daysу відповідному записі залишків. Ручне оновлення через PATCH не потрібне. -
Дробові дні - кількість днів може бути дробовою (наприклад, 24.5), що дозволяє враховувати неповні дні відпустки.
-
Декілька періодів - один співробітник може мати декілька записів одного типу для різних періодів (наприклад, щорічна відпустка за 2024 та 2025 роки).
-
Валідація при створенні відпустки - система перевіряє наявність достатніх залишків перед створенням задачі "Відпустка". Якщо
left_daysменше за запитувану кількість днів, задача не буде створена. -
Користувацькі типи - для типу
customобов'язково вказуватиtask_template_identifier, який відповідає ID шаблону відпустки, створеного через веб-інтерфейс. -
Історія використання - старі записи не видаляються, що дозволяє переглядати історію використання відпусток за минулі періоди.
-
Зв'язок з шаблонами відпусток - тип залишків (
absence_type) повинен відповідати типу шаблону відпустки. Див. документацію про відпустки для повної таблиці відповідностей.
Помилки та їх вирішення¶
| Помилка | Причина | Рішення |
|---|---|---|
task_template_identifier is required |
Не вказано шаблон для типу custom |
Додати поле task_template_identifier в запит |
Not enough left days |
Недостатньо залишкових днів для створення відпустки | Оновити allowed_days та left_days через PATCH |
Absence record not found |
Не знайдено запис залишків для даного типу та періоду | Створити новий запис через POST |
Employee not found |
Неправильний employee_id |
Перевірити ID співробітника |