Tính ngày phép năm API
Tính ngày nghỉ hằng năm theo BLLĐ: 12/14/16 ngày, cứ 5 năm thêm 1 ngày, tính theo tháng khi chưa đủ năm, và tiền những ngày phép chưa nghỉ khi nghỉ việc.
Gửi ngày bắt đầu làm việc (start_date), loại công việc (work_type: normal 12 ngày; heavy 14 ngày cho người chưa thành niên, người khuyết tật, công việc nặng nhọc, độc hại, nguy hiểm; very_heavy 16 ngày) và năm cần tính (year), hoặc ngày nghỉ việc (end_date). API cộng 1 ngày cho mỗi 5 năm làm việc đủ (Bộ luật Lao động 2019 Điều 114) và tính theo tỷ lệ khi làm chưa đủ 12 tháng: (số ngày phép năm + ngày thâm niên) / 12 × số tháng làm việc, tháng làm chưa trọn được tính đủ tháng khi làm từ một nửa số ngày trở lên (Nghị định 145/2020/NĐ-CP Điều 66).
Gửi thêm days_taken và monthly_salary để có số ngày còn lại và tiền lương những ngày chưa nghỉ khi thôi việc: tiền lương theo hợp đồng của tháng liền trước tháng thôi việc ÷ số ngày làm việc bình thường × số ngày (Điều 67 khoản 3), kèm cho biết khoản này có được miễn thuế TNCN không (từ kỳ tính thuế 2026, Nghị định 253/2026/NĐ-CP).
Nghị định không quy định cách làm tròn số ngày phép tính theo tỷ lệ, nên API trả cả giá trị chính xác và giá trị làm tròn (0,5 làm tròn lên). Các khoảng thời gian được tính là thời gian làm việc (thử việc nếu được nhận tiếp, ốm đau đến 2 tháng/năm, nghỉ không lương đến 1 tháng…) được liệt kê tại Nghị định 145/2020 Điều 65; gửi non_counted_days để trừ các khoảng vắng mặt khác.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
start_date | query|body | string | có | Ngày bắt đầu làm việc tại đơn vị. | |
end_date | query|body | string | không | Ngày nghỉ việc (để tính tiền phép chưa nghỉ). | |
year | query|body | number | không | Năm cần tính (mặc định năm của end_date hoặc năm nay). | |
work_type | query|body | string | không | normal | normal, heavy hoặc very_heavy. |
days_taken | query|body | number | không | Số ngày phép đã nghỉ trong năm. | |
carried_over_days | query|body | number | không | Số ngày phép chuyển từ năm trước. | |
monthly_salary | query|body | number | không | Tiền lương theo hợp đồng của tháng liền trước khi nghỉ việc. | |
working_days_per_month | query|body | number | không | 26 | Số ngày làm việc bình thường của tháng đó. |
months_worked | query|body | number | không | Ghi đè số tháng được tính trong năm. | |
non_counted_days | query|body | number | không | Số ngày không được tính là thời gian làm việc (ví dụ nghỉ không lương dài). |
Ví dụ
curl "https://apibox.io.vn/v1/vn-annual-leave?start_date=2020-01-01&end_date=2026-06-15&days_taken=2&monthly_salary=13000000" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vn-annual-leave?start_date=2020-01-01&end_date=2026-06-15&days_taken=2&monthly_salary=13000000', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/vn-annual-leave?start_date=2020-01-01&end_date=2026-06-15&days_taken=2&monthly_salary=13000000",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-annual-leave?start_date=2020-01-01&end_date=2026-06-15&days_taken=2&monthly_salary=13000000');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"year": 2026,
"work_type": "normal",
"work_type_vi": "Làm công việc trong điều kiện bình thường",
"work_type_en": "Normal working conditions",
"start_date": "2020-01-01",
"end_date": "2026-06-15",
"service_years": 6.46,
"full_years": 6,
"base_days": 12,
"seniority_days": 1,
"entitlement_full_year": 13,
"months_worked": 6,
"partial_months": [
{
"month": 6,
"counted": true,
"days_in_service": 15
}
],
"days": 6.5,
"days_rounded": 7,
"days_taken": 2,
"carried_over_days": 0,
"days_remaining": 5,
"untaken_leave_payment": {
"applies": true,
"monthly_salary": 13000000,
"working_days_per_month": 26,
"daily_wage": 500000,
"days": 5,
"amount": 2500000,
"pit_exempt": true,
"basis": "Contract salary of the month before termination ÷ normal working days (NĐ 145/2020 Điều 67.3)"
},
"legal": [
"Bộ luật Lao động 45/2019/QH14 Điều 113, 114",
"Nghị định 145/2020/NĐ-CP Điều 65, 66, 67"
],
"reviewed": "2026-11-11"
}
Ứng dụng
- Tính số ngày phép còn lại trong phần mềm nhân sự
- Thanh toán tiền phép chưa nghỉ khi quyết toán nghỉ việc
- Cho nhân viên mới biết số ngày phép theo tỷ lệ
- Kiểm tra ngày phép thâm niên của nhân viên lâu năm
Hỏi đáp
Vào làm từ tháng 4 thì năm đó được mấy ngày phép?
Công việc bình thường: 12 / 12 × 9 tháng = 9 ngày trong năm đó; từ tháng thứ 13 được đủ 12 ngày.
Phép chưa nghỉ có được trả tiền hằng năm không?
Luật chỉ bắt buộc trả khi thôi việc, bị mất việc làm. Khi đang làm việc, việc cộng dồn hay trả tiền theo quy chế công ty hoặc thỏa thuận.
Tiền phép chưa nghỉ có chịu thuế TNCN không?
Từ kỳ tính thuế 2026, tiền lương trả cho những ngày phép chưa nghỉ theo quy định được miễn thuế TNCN (Nghị định 253/2026/NĐ-CP); trước năm 2026 vẫn chịu thuế.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.