Giao diện
Tham số luật
Quyền truy cập: Xem cần quyền "Xem bảng lương" (PAYROLL_VIEW); cấu hình, chỉnh sửa tham số luật cần quyền quản trị "Quản trị bảng lương" (PAYROLL_ADMIN) hoặc Admin · Điều hướng: Bảng lương > Tham số luật (
/manage/payroll/statutory-config)
Tham số luật là màn hình khai báo toàn bộ con số pháp lý mà bộ máy tính lương (engine) dùng để tính bảo hiểm bắt buộc, thuế thu nhập cá nhân, đoàn phí, tiền làm thêm giờ và lương tối thiểu vùng. Đây là "nguồn sự thật" duy nhất cho mọi kỳ lương: mọi công thức đều đọc số từ bản cấu hình đang có hiệu lực, không có con số nào bị viết cứng trong lúc tính. Vì vậy đây là trang quan trọng nhất về tuân thủ luật trong module Bảng lương.
Lưu ý: Màn hình này chỉ dùng để cấu hình. Việc chụp dữ liệu, tính lương và duyệt kỳ diễn ra ở trang chi tiết kỳ lương; nhân viên xem phiếu lương của mình ở app Nhân viên (noova-employee). Module Bảng lương chỉ hiện khi đã bật tại Cài đặt hệ thống > Tính năng (cờ
__payrollvà biến môi trường ALLOW_PAYROLL_FEATURE).
Tổng quan
Màn Tham số luật (component StatutoryConfigManager) liệt kê các phiên bản cấu hình luật theo hiệu lực và cho phép thêm, sửa, đặt bản chờ hiệu lực. Mỗi phiên bản gói trọn: biểu thuế TNCN, mức giảm trừ, tỷ lệ BHXH/BHYT/BHTN, lương cơ sở, lương tối thiểu vùng, đoàn phí, hệ số làm thêm giờ và mẫu số chia ngày công. Khi tính một kỳ lương, engine chọn đúng phiên bản đang áp dụng tại tháng của kỳ đó rồi áp mọi con số bên trong.
Hệ thống được seed sẵn một phiên bản nhãn "VN 2024-07-01 (áp dụng 2026)" ngay lúc khởi động, hiệu lực từ 01/07/2024 và dùng cho năm 2026. Toàn bộ con số dưới đây là của phiên bản seed này.
Phiên bản theo hiệu lực
Mỗi bản ghi cấu hình có các trường quản lý phiên bản sau:
| Trường | Mô tả |
|---|---|
| Nhãn phiên bản (label) | Tên gợi nhớ, ví dụ "VN 2024-07-01 (áp dụng 2026)" |
| Hiệu lực từ (effectiveFrom) | Ngày bắt đầu áp dụng phiên bản |
| Hiệu lực đến (effectiveTo) | Ngày kết thúc, để trống nghĩa là còn hiệu lực |
| Đang áp dụng (isActive) | Phiên bản đang được engine dùng để tính |
| Bản chờ hiệu lực (isStaged) | Bản chuẩn bị trước cho thay đổi luật tương lai, chưa áp dụng |
Lưu ý: Cơ chế bản "staged" cho phép admin soạn trước một phiên bản mới (ví dụ nâng giảm trừ gia cảnh, tăng lương tối thiểu vùng) mà chưa cho engine dùng ngay. Khi luật mới có hiệu lực, bản staged mới được kích hoạt, nhờ đó các kỳ lương cũ giữ nguyên con số tại thời điểm chốt.
Thuế thu nhập cá nhân
Biểu thuế TNCN là biểu lũy tiến từng phần 7 bậc, tính trên thu nhập tính thuế mỗi tháng (trường uptoMonthly + rate):
| Bậc | Thu nhập tính thuế/tháng | Thuế suất |
|---|---|---|
| 1 | Đến 5.000.000đ | 5% |
| 2 | Trên 5.000.000đ đến 10.000.000đ | 10% |
| 3 | Trên 10.000.000đ đến 18.000.000đ | 15% |
| 4 | Trên 18.000.000đ đến 32.000.000đ | 20% |
| 5 | Trên 32.000.000đ đến 52.000.000đ | 25% |
| 6 | Trên 52.000.000đ đến 80.000.000đ | 30% |
| 7 | Trên 80.000.000đ | 35% |
Mức giảm trừ (áp cho cá nhân cư trú):
| Khoản giảm trừ | Mức/tháng |
|---|---|
| Bản thân người nộp thuế | 11.000.000đ |
| Mỗi người phụ thuộc | 4.400.000đ |
Công thức thu nhập tính thuế:
Thu nhập tính thuế = thu nhập chịu thuế - bảo hiểm bắt buộc (phần nhân viên) - giảm trừ bản thân - (giảm trừ người phụ thuộc x số người phụ thuộc). Kết quả không xuống dưới 0.
Ví dụ kiểm chứng: thu nhập chịu thuế 100.000.000đ, bảo hiểm nhân viên 5.438.000đ, 2 người phụ thuộc. Thu nhập tính thuế = 100.000.000 - 5.438.000 - 11.000.000 - 8.800.000 = 74.762.000đ, thuế TNCN = 16.578.600đ.
Quan trọng: Cá nhân KHÔNG cư trú (non_resident) không áp biểu lũy tiến và không được giảm trừ. Thuế tính khoán 20% trên toàn bộ thu nhập chịu thuế. Tình trạng cư trú lấy từ hồ sơ nhân viên.
Bảo hiểm bắt buộc
Tỷ lệ trích nộp BHXH, BHYT, BHTN chia theo phần nhân viên và phần chủ sử dụng lao động:
| Khoản bảo hiểm | Phần nhân viên | Phần chủ sử dụng lao động |
|---|---|---|
| BHXH | 8% | 17,5% |
| BHYT | 1,5% | 3% |
| BHTN | 1% | 1% |
| Tổng | 10,5% | 21,5% |
Trần tiền lương làm căn cứ đóng bảo hiểm:
| Loại trần | Cách tính | Giá trị (phiên bản seed) |
|---|---|---|
| Trần BHXH + BHYT | 20 x lương cơ sở (baseReference 2.340.000đ) | 46.800.000đ |
| Trần BHTN | 20 x lương tối thiểu vùng I (4.960.000đ) | 99.200.000đ |
Ví dụ kiểm chứng với lương 100.000.000đ, vùng I:
| Khoản | Phần nhân viên | Phần chủ sử dụng lao động |
|---|---|---|
| BHXH | 46.800.000 x 8% = 3.744.000đ | 8.190.000đ |
| BHYT | 46.800.000 x 1,5% = 702.000đ | 1.404.000đ |
| BHTN | 99.200.000 x 1% = 992.000đ | 992.000đ |
| Tổng | 5.438.000đ | 10.586.000đ |
Lương tối thiểu vùng và lương cơ sở
Lương cơ sở (baseReference) của phiên bản seed là 2.340.000đ, dùng để tính trần BHXH + BHYT và trần đoàn phí. Lương tối thiểu vùng dùng làm nền cho trần BHTN và các kiểm tra sàn lương:
| Vùng | Theo tháng | Theo giờ |
|---|---|---|
| I | 4.960.000đ | 23.800đ |
| II | 4.410.000đ | 21.200đ |
| III | 3.860.000đ | 18.600đ |
| IV | 3.450.000đ | 16.600đ |
Vùng lương (I, II, III, IV) được chọn ở từng kỳ lương và ảnh hưởng trực tiếp đến trần BHTN.
Đoàn phí công đoàn
| Bên đóng | Tỷ lệ | Trần |
|---|---|---|
| Nhân viên | 1% trên nền BHXH + BHYT | 234.000đ (= 10% x lương cơ sở 2.340.000đ) |
| Chủ sử dụng lao động | 2% | (không áp trần như phần nhân viên) |
Ví dụ kiểm chứng: nền lương 20.000.000đ, đoàn phí = 200.000đ (dưới trần, giữ nguyên). Nền lương 30.000.000đ, đoàn phí tính ra 300.000đ nhưng bị giới hạn còn 234.000đ. Đoàn phí nhân viên được trừ vào lương thực nhận; đoàn phí chủ sử dụng lao động cộng vào tổng chi phí lao động trong báo cáo chi phí.
Hệ số làm thêm giờ và mẫu số chia ngày công
Hệ số tiền làm thêm giờ (OT) nhân với đơn giá tiền lương giờ chuẩn:
| Loại làm thêm | Hệ số |
|---|---|
| Ngày thường | x1,5 |
| Cuối tuần | x2,0 |
| Ngày lễ | x3,0 |
| Phụ cấp làm đêm | +0,3 (tương đương x1,3) |
Mẫu số chia ngày công quyết định lương một ngày = lương cơ bản / mẫu số, dùng để prorate khi nhân viên nghỉ không lương:
| Tùy chọn mẫu số | Ý nghĩa |
|---|---|
| 26 | Cố định 26 ngày (mặc định) |
| standard | Số ngày công chuẩn của kỳ (workingDays của kỳ lương) |
| 24 | Cố định 24 ngày |
Lưu ý: Phần tiền OT MIỄN THUẾ là phần vượt trên đơn giá giờ thường: tiền OT thực trả - (số giờ OT x lương giờ x1). Chỉ phần chênh do hệ số OT mới chịu thuế. Bốn nhóm giờ OT (ngày thường, cuối tuần, ngày lễ, ban đêm) được lấy tự động từ module Chấm công.
Thao tác
Thêm hoặc sửa cấu hình
Mở cửa sổ "Cấu hình tham số luật" (StatutoryConfigFormModal) để thêm mới hoặc chỉnh một phiên bản (statutoryConfig.upsert). Tại đây khai báo nhãn phiên bản, khoảng hiệu lực và toàn bộ con số ở các mục trên.
Đặt bản chờ hiệu lực
Dùng thao tác đặt bản staged (statutoryConfig.setStaged) để đánh dấu một phiên bản là bản chuẩn bị cho luật tương lai, chưa cho engine dùng ngay.
Xem danh sách theo hiệu lực
Danh sách phiên bản sắp theo hiệu lực (statutoryConfig.list) giúp đối chiếu phiên bản nào đang áp dụng và phiên bản nào đang chờ.
Quan trọng: Bậc thuế cao nhất dùng giá trị vô cực (Infinity) trong engine. Khi lưu xuống cơ sở dữ liệu, giá trị này được chuyển thành số canh giới (Number.MAX_SAFE_INTEGER) vì MongoDB không lưu được Infinity. Admin không cần nhập tay ngưỡng của bậc cao nhất.
Lưu ý tuân thủ
Trong mã seed có cảnh báo rằng một số con số đang chờ thay đổi luật và admin phải xác nhận trước khi dùng cho môi trường thật:
| Tham số | Trạng thái cảnh báo |
|---|---|
| Mức giảm trừ gia cảnh | Có đề xuất nâng nhưng CHƯA thành luật, nên tạo bản staged khi có hiệu lực chính thức |
| Lương tối thiểu vùng 2026 | Có đề xuất tăng khoảng 7,2% nhưng CHƯA chốt |
| Tỷ lệ BHXH chủ sử dụng lao động 17,5% | Cần xác nhận trước khi xuất báo cáo BHXH D02-TS |
Quan trọng: Vì mọi kỳ lương đều đọc con số từ phiên bản đang áp dụng, hãy rà lại toàn bộ tham số trước mỗi năm tài chính và trước khi xuất tờ khai thuế 05/KK hay báo cáo D02-TS. Không sửa trực tiếp phiên bản đã dùng tính lương của các kỳ đã chốt; thay vào đó tạo phiên bản mới với ngày hiệu lực tương ứng để giữ nguyên số liệu lịch sử.

