Tính lương làm thêm giờ API
Tính tiền lương làm thêm giờ theo BLLĐ: 150/200/300%, làm đêm +30% +20%, làm ngày lễ Tết, giới hạn giờ tháng/năm và phần được miễn thuế TNCN từ 2026.
Gửi lương tháng (monthly_salary, tiền lương của giờ làm bình thường, không gồm tiền làm thêm, thưởng và các khoản hỗ trợ không gắn với công việc) hoặc lương giờ (hourly_wage), cùng số giờ: nhập tổng (workday_ot_hours, weekly_off_ot_hours, holiday_ot_hours, các trường *_night_ot_hours và giờ làm đêm thường night_hours) hoặc từng ngày qua entries (không ghi loại ngày thì API tự xác định theo lịch nghỉ lễ). API áp dụng Bộ luật Lao động 2019 Điều 98 và Nghị định 145/2020/NĐ-CP Điều 55–57: 150% ngày thường, 200% ngày nghỉ hằng tuần, 300% ngày lễ, Tết, cộng 30% khi làm việc ban đêm (22h–6h), làm thêm ban đêm cộng thêm 20% tiền lương làm việc ban ngày của ngày đó (tức 200% / 210% / 270% / 390%). Người hưởng lương ngày (daily_paid=true) được cộng thêm tiền lương của chính ngày lễ.
API kiểm tra giới hạn làm thêm (không quá 50% số giờ bình thường trong ngày làm việc, 12 giờ vào ngày nghỉ, 40 giờ/tháng, 200 hoặc 300 giờ/năm với ytd_ot_hours) và tách phần được miễn thuế TNCN: đến năm 2025 chỉ phần trả cao hơn lương giờ bình thường được miễn; từ kỳ tính thuế 2026 toàn bộ tiền làm thêm giờ, làm đêm trong giới hạn luật định được miễn (Luật Thuế TNCN 109/2025, Nghị định 253/2026/NĐ-CP Điều 26), phần tiền của giờ vượt giới hạn phải chịu thuế.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
monthly_salary | query|body | number | không | Tiền lương của giờ làm bình thường (hoặc hourly_wage). | |
working_days_per_month | query|body | number | không | 26 | Số ngày làm việc bình thường để tính lương giờ. |
hours_per_day | query|body | number | không | 8 | Số giờ làm việc bình thường mỗi ngày. |
workday_ot_hours | query|body | number | không | Giờ làm thêm ngày thường (và weekly_off_ot_hours, holiday_ot_hours, workday_night_ot_hours, weekly_off_night_ot_hours, holiday_night_ot_hours, night_hours). | |
entries | body | array | không | Từng ngày: [{"date":"2026-09-02","ot_hours":4,"ot_night_hours":0,"night_hours":0,"type":"holiday"}]. | |
ytd_ot_hours | query|body | number | không | Số giờ làm thêm đã làm trong năm. | |
annual_cap | query|body | number | không | 200 | 200 hoặc 300. |
daily_paid | query|body | boolean | không | Người hưởng lương ngày (cộng tiền lương ngày lễ). | |
tax_year | query|body | number | không | Năm tính thuế để tách phần miễn thuế (mặc định theo ngày hoặc năm nay). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-overtime" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"monthly_salary":10400000,"workday_ot_hours":20,"weekly_off_ot_hours":8,"holiday_night_ot_hours":2,"tax_year":2026}'const res = await fetch('https://apibox.io.vn/v1/vn-overtime', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"monthly_salary": 10400000,
"workday_ot_hours": 20,
"weekly_off_ot_hours": 8,
"holiday_night_ot_hours": 2,
"tax_year": 2026
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-overtime",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"monthly_salary": 10400000, "workday_ot_hours": 20, "weekly_off_ot_hours": 8, "holiday_night_ot_hours": 2, "tax_year": 2026},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-overtime');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"monthly_salary":10400000,"workday_ot_hours":20,"weekly_off_ot_hours":8,"holiday_night_ot_hours":2,"tax_year":2026}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"hourly_wage": 50000,
"hourly_basis": "monthly_salary / (26 days × 8 h)",
"lines": [
{
"date": null,
"type": "workday",
"kind": "overtime",
"hours": 20,
"percent": 150,
"pay": 1500000,
"normal_pay": 1000000,
"premium": 500000
},
{
"date": null,
"type": "weekly_off",
"kind": "overtime",
"hours": 8,
"percent": 200,
"pay": 800000,
"normal_pay": 400000,
"premium": 400000
},
{
"date": null,
"type": "holiday",
"kind": "night_overtime",
"hours": 2,
"percent": 390,
"pay": 390000,
"normal_pay": 100000,
"premium": 290000
}
],
"totals": {
"overtime_hours": 30,
"night_hours": 0,
"pay": 2690000,
"overtime_pay": 2690000,
"night_work_pay": 0,
"premium_above_normal": 1190000
},
"caps": {
"daily_workday_hours": 4,
"daily_day_off_hours": 12,
"monthly": 40,
"annual": 200,
"ytd_before": 0,
"excess_hours": 0,
"compliant": true
},
"pit": {
"tax_year": 2026,
"rule": "whole_pay_within_limits",
"exempt": 2690000,
"taxable": 0
},
"warnings": [],
"legal": [
"Bộ luật Lao động 45/2019/QH14 Điều 98, 106, 107",
"Nghị định 145/2020/NĐ-CP Điều 55–61",
"Luật Thuế TNCN 109/2025/QH15 Điều 4 khoản 8; Nghị định 253/2026/NĐ-CP Điều 26"
],
"reviewed": "2026-11-11"
}
Ứng dụng
- Tính các dòng lương làm thêm trong phần mềm tính lương
- Cho người lao động biết tiền đi làm ngày Tết
- Cảnh báo giờ làm thêm vượt giới hạn trước khi chốt lương
- Tách phần tiền làm thêm được miễn thuế theo quy định 2026
Hỏi đáp
Mức 390% (hay 490%) khi làm đêm ngày Tết từ đâu ra?
300% làm thêm ngày lễ + 30% làm đêm + 20% × 300% lương ban ngày ngày lễ = 390%. Người hưởng lương ngày được trả thêm tiền lương của ngày lễ, báo chí thường gọi là 490%.
Năm 2026 tiền tăng ca có bị tính thuế không?
Từ kỳ tính thuế 2026, toàn bộ tiền làm thêm giờ, làm đêm được miễn thuế TNCN nếu đúng điều kiện và giới hạn của pháp luật lao động; phần tiền của giờ vượt giới hạn vẫn chịu thuế. Đến năm 2025 chỉ phần trả cao hơn được miễn.
Giới hạn giờ làm thêm là bao nhiêu?
40 giờ/tháng và 200 giờ/năm (300 giờ với một số ngành như dệt may, điện tử, điện, nước và công việc cấp bách), không quá 50% số giờ bình thường trong ngày làm việc và 12 giờ vào ngày nghỉ, ngày lễ.
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.