Giao diện
Kỳ tính lương
Quyền truy cập: Xem cần quyền "Xem bảng lương" (PAYROLL_VIEW); tạo, sửa, xóa kỳ cần "Tạo kỳ lương" / "Sửa kỳ lương" / "Xóa kỳ lương" (PAYROLL_RUN_CREATE / EDIT / DELETE); tính lương cần "Tính lương" (PAYROLL_CALCULATE); duyệt, đánh dấu đã chi, đóng kỳ cần "Duyệt kỳ lương" / "Đánh dấu đã chi" / "Đóng kỳ lương" (PAYROLL_RUN_APPROVE / MARK_PAID / CLOSE) hoặc Admin · Điều hướng: Bảng lương > Kỳ tính lương (
/manage/payroll/payroll-runs)
Kỳ tính lương là nơi admin HR tạo và vận hành một kỳ lương theo tháng: chụp dữ liệu từ Chấm công và Cấu trúc lương, cho hệ thống tính lương gộp, bảo hiểm, thuế và thực nhận, rồi trình duyệt và chốt. Mỗi kỳ đi qua một quy trình trạng thái chặt chẽ và bị khóa hoàn toàn sau khi được duyệt, nhằm bảo đảm số liệu đã chi không bị thay đổi. Toàn bộ công thức tính do một bộ máy (engine) thuần đảm nhận, áp đúng luật lao động và thuế Việt Nam hiện hành.
Lưu ý: Màn hình này dùng để cấu hình và điều hành kỳ lương ở phía HR. Nhân viên xem và tải phiếu lương của chính mình ở app Nhân viên (noova-employee). Mọi thay đổi số liệu đều đi qua các thao tác trên máy chủ, giao diện không cho sửa trực tiếp bản ghi kỳ lương.
Tổng quan
Màn Kỳ tính lương (tiêu đề "Quản Lý Kỳ Lương") liệt kê toàn bộ các kỳ lương đã tạo và cho phép tạo kỳ mới, mở chi tiết từng kỳ hoặc xóa kỳ. Mỗi kỳ tương ứng một tháng lương và mang một loại kỳ (loại run) khác nhau: Thường, Tạm ứng, Thưởng, Lương tháng 13 hoặc Điều chỉnh. Việc tính lương, kiểm tra, trình duyệt và chốt được thực hiện bên trong trang chi tiết của từng kỳ.
Module Bảng lương thuộc nhóm HR và chỉ hiện khi đã bật tại Cài đặt hệ thống > Tính năng (cờ __payroll, kèm biến môi trường ALLOW_PAYROLL_FEATURE).
Danh sách kỳ lương
Mỗi dòng trong danh sách hiển thị các thông tin chính của một kỳ:
| Trường | Mô tả |
|---|---|
| Mã kỳ | Mã định danh kỳ lương (code) |
| Tên kỳ | Tên hiển thị của kỳ (name) |
| Tháng/Năm | Tháng và năm của kỳ lương |
| Kỳ từ ngày - đến ngày | Khoảng thời gian kỳ (periodStart / periodEnd) |
| Ngày thanh toán | Ngày dự kiến chi lương |
| Loại run | Thường, Tạm ứng, Thưởng, Lương tháng 13 hoặc Điều chỉnh |
| Số ngày công | Số ngày công chuẩn của kỳ (workingDays), mặc định 22 |
| Số giờ công chuẩn | standardHours, mặc định 176 (= 8h × 22) |
| Vùng lương | Vùng I, II, III hoặc IV (quyết định lương tối thiểu vùng, trần BHTN) |
| Cơ chế thưởng | Chỉ áp dụng cho kỳ loại Thưởng |
| Trạng thái | Vị trí hiện tại của kỳ trong quy trình |
Các thao tác
- "Tạo Kỳ Lương": mở biểu mẫu tạo kỳ mới (cần quyền "Tạo kỳ lương").
- "Mở chi tiết kỳ": vào trang vận hành của kỳ để tính lương và chuyển trạng thái.
- "Xóa kỳ": xóa một kỳ (payroll.runs.delete, cần quyền "Xóa kỳ lương").
- Kiểm tra kỳ hợp lệ (validatePeriod) khi tạo, để tránh trùng hoặc sai khoảng thời gian.
Các loại kỳ lương
Loại kỳ quyết định các nút thao tác xuất hiện trong trang chi tiết và cách engine tính toán:
| Loại kỳ | Mục đích |
|---|---|
| Thường (regular) | Kỳ lương tháng đầy đủ: lương cơ bản, phụ cấp, OT, bảo hiểm, thuế, thực nhận |
| Tạm ứng (advance) | Chi tạm ứng giữa kỳ, sẽ được trừ lại ở kỳ lương chính; chỉ có nút "Tạo tạm ứng" |
| Thưởng (bonus) | Kỳ thưởng ngoài chu kỳ, gắn với một Cơ chế thưởng để quy đổi kết quả hiệu suất thành tiền |
| Lương tháng 13 (thirteenth_month) | Trả lương tháng thứ 13, mặc định tính theo số tháng làm việc thực tế |
| Điều chỉnh (adjustment) | Bổ sung, chỉnh sửa số liệu; chỉ có nút "Nhập điều chỉnh" |
Lưu ý: Với kỳ loại Tạm ứng chỉ hiện thao tác "Tạo tạm ứng", với kỳ loại Điều chỉnh chỉ hiện thao tác "Nhập điều chỉnh". Các nút còn lại chỉ áp dụng cho kỳ Thường và các loại tính đầy đủ.
Nguồn dữ liệu của kỳ lương
Khi chụp dữ liệu, kỳ lương tự động lấy và đóng băng số liệu từ các module khác. Mỗi nguồn được gắn cờ nguồn: live (lấy trực tiếp), manual (nhập tay) hoặc off (không dùng).
| Nguồn | Vai trò | Dữ liệu lấy về |
|---|---|---|
| Chấm công (13-cham-cong) | Tùy chọn | Số ngày nghỉ không lương (nghỉ vắng + nghỉ không lương) và 4 nhóm giờ OT: ngày thường, cuối tuần, ngày lễ, ban đêm |
| Cấu trúc lương (compensation) | Bắt buộc | Lương cơ bản, lương đóng bảo hiểm, phụ cấp chịu và không chịu thuế, loại tiền, số tài khoản, chi phí phúc lợi chủ sử dụng lao động |
| Hiệu suất (performance) | Tùy chọn | Kết quả hiệu suất theo kỳ, quy đổi qua Cơ chế thưởng thành tiền thưởng (nếu bật) |
Quan trọng: Cấu trúc lương là nguồn bắt buộc. Nhân viên thiếu cấu trúc lương sẽ bị chặn khỏi kỳ (lý do
compensation-missing). Nhân viên hưởng lương ngoại tệ mà thiếu tỷ giá quy đổi cũng bị chặn (lý dofx-missing). Nếu một nhân viên không có dữ liệu chấm công, hệ thống không tự cho qua mà gắn cờmanualđể admin nhập tay, tránh tính sai theo hướng bỏ sót.
Trang chi tiết kỳ lương
Mở một kỳ để vào trung tâm vận hành (route /manage/payroll/runs/:payrollRunId). Trang này hiển thị các thẻ tổng hợp, thông tin kỳ và bảng chi tiết lương từng nhân viên, đồng thời chứa các nút chuyển trạng thái theo đúng quy trình.
Các thẻ tổng hợp gồm:
| Thẻ | Ý nghĩa |
|---|---|
| Số nhân viên | Số nhân viên trong kỳ |
| Tổng lương Gross | Tổng lương gộp toàn kỳ |
| Tổng thuế | Tổng thuế thu nhập cá nhân |
| Tổng lương Net | Tổng lương thực nhận |
| Chi phí chủ sử dụng | Tổng chi phí phía doanh nghiệp (totalEmployerCost) |
| NV thiếu hồ sơ | Số nhân viên bị chặn do thiếu dữ liệu (blockedCount) |
| Nhập tay | Số nhân viên có dữ liệu nhập tay (manualCount) |
Ngoài ra trang hiển thị thông tin kỳ lương (ngày thanh toán, số ngày công, số giờ công, người tạo, ngày tạo) và bảng chi tiết lương của từng nhân viên. Nhân viên thiếu dữ liệu chấm công được đánh dấu để admin nhập tay ngay tại đây (payrollSnapshot.setManualAttendance).
Quy trình chạy một kỳ lương
Kỳ lương đi qua một máy trạng thái gồm 11 trạng thái. Mỗi bước là một thao tác trên trang chi tiết, chỉ những nút hợp lệ với trạng thái hiện tại mới hiển thị.
| Bước | Thao tác | Trạng thái kết quả |
|---|---|---|
| 1 | "Tạo Kỳ Lương" | Nháp (draft) |
| 2 | "Chụp dữ liệu" (payrollSnapshot.build) | Đã chụp dữ liệu (snapshotted) |
| 3 | "Tính lương" / "Tính lại" | Đang tính, rồi Đã tính (calculated) |
| 4 | "Kiểm tra" | Đã kiểm tra (validated) |
| 5 | "Trình duyệt" (chọn quy trình phê duyệt) | Chờ duyệt (pending_approval) |
| 6 | Người duyệt phê duyệt | Đã duyệt (approved) |
| 7 | "Tạo phiếu lương" | Đã chốt (finalized) |
| 8 | "Đánh dấu đã chi" (markPaid) | Đã thanh toán (paid) |
| 9 | "Đóng kỳ" (close) | Đã đóng (closed) |
Ngoài chín bước trên còn hai trạng thái phụ: Trả lại (returned, khi người duyệt trả kỳ về để sửa) và Đã hủy (cancelled).
Chụp dữ liệu
Bước "Chụp dữ liệu" đóng băng toàn bộ số liệu Chấm công, Cấu trúc lương và Hiệu suất tại thời điểm chốt, đưa kỳ từ trạng thái Nháp sang Đã chụp dữ liệu. Sau bước này, danh sách nhân viên thiếu hồ sơ (bị chặn) và nhân viên cần nhập tay được xác định rõ để admin xử lý trước khi tính.
Tính lương
Bước "Tính lương" cho engine chạy toàn bộ công thức trên dữ liệu đã chụp: prorate lương theo ngày công, tính tiền OT theo 4 nhóm giờ, bảo hiểm bắt buộc, thuế thu nhập cá nhân và lương thực nhận. Có thể bấm "Tính lại" để chạy lại sau khi sửa dữ liệu nhập tay. Số liệu chi tiết cho từng nhân viên tuân theo các tham số trong Tham số luật đang áp dụng.
Kiểm tra và trình duyệt
Bước "Kiểm tra" rà soát toàn kỳ trước khi trình. Kết quả kiểm tra phân thành lỗi và cảnh báo:
- Lương thực nhận âm: lỗi, chặn trình duyệt.
- Thiếu số tài khoản ngân hàng: cảnh báo.
- Có nhân viên bị chặn do thiếu hồ sơ lương: cảnh báo.
Chỉ khi không còn lỗi, kỳ mới được "Trình duyệt". Khi trình, admin chọn một quy trình phê duyệt (workflow); kỳ được gắn với một phiên duyệt tương ứng.
Quan trọng: Từ trạng thái Đã duyệt trở đi (Đã duyệt, Đã chốt, Đã thanh toán, Đã đóng), kỳ lương bị khóa hoàn toàn và không thể sửa số liệu, nhằm bảo đảm tính toàn vẹn của số liệu đã chi. Nếu cần thay đổi, hãy dùng kỳ loại Điều chỉnh thay vì sửa kỳ đã duyệt.
Chốt, chi và đóng kỳ
Sau khi được duyệt, bấm "Tạo phiếu lương" để sinh phiếu lương cho từng nhân viên (kỳ chuyển sang Đã chốt). Khi đã chi lương thực tế, bấm "Đánh dấu đã chi" để đưa kỳ sang Đã thanh toán. Cuối cùng, "Đóng kỳ" khép lại kỳ lương ở trạng thái Đã đóng.
Công cụ hỗ trợ
Ngoài quy trình chính, kỳ lương có các công cụ giúp admin kiểm tra trước và mô phỏng:
- Kiểm tra sẵn sàng của kỳ (checkPeriodReadiness) trước khi chụp dữ liệu.
- Mô phỏng lương một nhân viên hoặc toàn kỳ (simulateEmployee / simulatePayroll) để xem trước kết quả.
- Kiểm tra sức khỏe kỳ (performHealthCheck) để phát hiện bất thường.

