Bỏ qua

SRS — Module Hành chính – Nhân sự (Longdo ERP web)

Phiên bản: 0.8 — Nháp  |  Người viết: trangth  |  Cập nhật: 30/07/2026  |  Nguồn màn: mockup web ui-mockups/longdo-erp/web  |  Brand: Indigo #4f46e5

Tài liệu đặc tả yêu cầu phần mềm (SRS) cho module Hành chính – Nhân sự của Longdo ERP (bản web, Modern SaaS). Dành cho Dev đọc để hiện thực hóa — mô tả màn hình theo mockup, logic nghiệp vụ trích từ code, trạng thái/enum, công thức tính lương. Nghiệp vụ trong tài liệu trích xuất trung thực từ mockup, không bịa thêm.

Điểm cần BA chốt trước khi code

Mockup còn nhiều chỗ chưa thống nhất (bộ enum trạng thái lệch nhau giữa các màn, BHXH không trừ vào thực nhận, danh mục dùng chung còn hard-code rải rác…). Xem §11 Vấn đề mở — Dev không tự quyết.

Phạm vi đợt này — CHƯA có Công nợ

Toàn bộ nghiệp vụ Công nợ (sổ cá nhân, tổng hợp, chốt kỳ, import Excel) để giai đoạn sau (§11.3). Các mục còn nhắc tới công nợ trong tài liệu này được đánh dấu "giai đoạn sau" để tiện khôi phục, không phải phạm vi nghiệm thu hiện tại.

Mockup là giao diện mẫu — dữ liệu minh hoạ

Mọi màn ghi rõ "Giao diện mẫu — dữ liệu minh hoạ, chưa kết nối hệ thống thật". Số đếm, phân trang, công thức tính đều hard-code trong JS để minh hoạ. Dev hiện thực hóa theo đặc tả này, không bê nguyên hằng số mẫu.


1. Giới thiệu

1.1 Mục đích

Module quản lý toàn bộ vòng đời hành chính – nhân sự trong một công ty xây dựng/dự án: hồ sơ nhân sự, hợp đồng lao động, quyết định nhân sự (bổ nhiệm/miễn nhiệm/tạm nghỉ/nghỉ việc), khen thưởng, kỷ luật, và bảng lương theo kỳ.

Công nợ — giai đoạn sau

Nghiệp vụ Công nợ (sổ công nợ cá nhân, công nợ tổng hợp, tạm ứng – hoàn ứng, chốt kỳ, import Excel) chưa nằm trong phạm vi SRS đợt này — để giai đoạn sau (§11.3).

1.2 Phạm vi

Trong phạm viNgoài phạm vi (đợt này)
Quản lý hồ sơ nhân sự (danh sách · chi tiết 5 tab · thêm/sửa)Đăng nhập / phân quyền chi tiết theo vai trò (mới có trường "Vai trò")
Hợp đồng lao động (danh sách · chi tiết 3 tab · thêm — động theo loại HĐ)Chấm công (chỉ tham chiếu — đặc tả ở SRS Chấm công)
Quyết định nhân sự · Khen thưởng · Kỷ luật (danh sách · chi tiết · thêm)Module Tuyển dụng đầy đủ (quy trình ứng viên) — loại "Quyết định tuyển dụng" chưa có trong mockup
Bảng lương theo kỳToàn bộ Công nợ (sổ cá nhân · tổng hợp · import Excel · chốt kỳ) — giai đoạn sau (§11.3)
Thiết lập danh mục (phòng ban · chức vụ · định mức công)Báo cáo/Dashboard tổng hợp nhân sự

1.3 Thuật ngữ

Thuật ngữÝ nghĩa
Khối Văn phòngNhân sự theo phòng ban, ca hành chính giờ vào/ra cố định 08:00–17:30, công chuẩn ~22–24. (Chi tiết mốc giờ/ân hạn: SRS Chấm công.)
Khối Công trườngNhân sự theo dự án/công trường (Linh Đàm, Yên Bái, Hà Đông…), chấm công theo khung linh hoạt 06:00–18:00 — chấm bất kỳ lúc nào trong khung đều hợp lệ (không có "đi muộn"), công chuẩn 28.
Kỳ lươngMột tháng (vd 2026-06). Mọi tính toán lương gắn theo kỳ.
P1 / P2 / P3Ba cấu phần lương: P1 Lương cơ bản · P2 Năng lực (NKNN) · P3 Hiệu quả/Quản lý (NLQL).
Trạng thái chi trả (PAY_FLOW)Trục trạng thái của Bảng lương (giai đoạn này tới bậc Đã ký và xác nhận); các bậc công nợ để giai đoạn sau (xem §3).

2. Vai trò & phân quyền

Hệ thống có 4 vai trò, gán cho từng người qua trường "Vai trò của nhân sự" ở hồ sơ (FR-NS-03). Vai trò quyết định phạm vi truy cập trong module Hành chính – Nhân sự.

Vai trò hệ thốngPhạm vi & quyền
AdminToàn quyền trên toàn hệ thống — mọi module, mọi phòng ban, cấu hình hệ thống. Không giới hạn.
Nhân sựToàn quyền trong module Hành chính – Nhân sự (hồ sơ · hợp đồng · quyết định · khen thưởng · kỷ luật · bảng lương · thiết lập danh mục) trên mọi phòng ban. Không đụng module khác.
Quản lýChỉ xem, phạm vi gồm dữ liệu của chính mình và nhân viên thuộc phòng ban của mình: hồ sơ · hợp đồng · quyết định · khen thưởng/kỷ luật. Riêng lương/bảng lương: KHÔNG xem của nhân viên phòng ban — chỉ xem lương của chính mình (như Nhân viên, ở Trang cá nhân). Không sửa, không thấy phòng ban khác.
Nhân viênKhông có quyền trong module HCNS. Chỉ tự xem hồ sơ cá nhân, chấm công & lương/tài chính của chính mình ở Trang cá nhân — thuộc mục Cá nhân, không phải màn HCNS.

Ma trận quyền theo từng màn hình. Mỗi ô liệt kê các quyền role đó có trên màn: 👁 Xem · ➕ Thêm · ✏️ Sửa · 🗑️ Xóa · ✅ Duyệt · ⬆️ Nhập Excel · ⬇️ Xuất Excel · — Không truy cập.

Màn hình Admin Nhân sự Quản lý Nhân viên
① Hồ sơ nhân sự
Danh sách nhân sự (FR-NS-01)👁➕🗑️⬇️👁➕🗑️⬇️👁—
Chi tiết hồ sơ (FR-NS-02)👁✏️👁✏️👁—
Thêm / Sửa nhân viên (FR-NS-03)➕✏️➕✏️——
② Hợp đồng lao động
Danh sách hợp đồng (FR-HD-01→07)👁➕⬆️⬇️👁➕⬆️⬇️👁—
Chi tiết hợp đồng (FR-HD-08)👁✏️👁✏️👁—
Thêm hợp đồng (FR-HD-09)➕✏️➕✏️——
Gia hạn hợp đồng (FR-HD-10)👁➕✏️👁➕✏️👁 *—
Kết thúc hợp đồng theo QĐ nghỉ việc (FR-HD-11)👁➕👁➕👁—
③ Quyết định nhân sự
Danh sách quyết định (FR-QD-01)👁➕🗑️👁➕🗑️👁—
Chi tiết quyết định (FR-QD-06)👁✏️👁✏️👁—
Thêm quyết định (FR-QD-07)➕✏️➕✏️——
Sửa quyết định (FR-QD-08)✏️ ***✏️ ***——
④ Khen thưởng
Danh sách khen thưởng (FR-KT-01)👁➕🗑️👁➕🗑️👁—
Chi tiết khen thưởng (FR-KT-02)👁✏️👁✏️👁—
Thêm / Sửa khen thưởng (FR-KT-03)➕✏️➕✏️——
⑤ Kỷ luật
Danh sách kỷ luật (FR-KL-01)👁➕🗑️👁➕🗑️👁—
Chi tiết kỷ luật (FR-KL-02)👁✏️👁✏️👁—
Thêm / Sửa kỷ luật (FR-KL-03)➕✏️➕✏️——
⑥ Lương
Bảng lương theo kỳ (FR-LU-01)👁✏️✅⬇️👁✏️✅⬇️——
⑦ Thiết lập danh mục
Thiết lập danh mục (FR-DM-01)👁➕✏️🗑️👁➕✏️🗑️——

"Phòng ban của mình" — chốt 11/08/2026

Mỗi phòng ban / công trường có ĐÚNG MỘT quản lý. Quan hệ quản lý ↔ đơn vị khai ở phía đơn vị (danh mục Phòng ban có trường Quản lý), nên "phòng ban của mình" = đơn vị mà người dùng đang đứng tên quản lý — không cần quy tắc gỡ rối cho trường hợp nhiều người cùng quản một phòng. Công trường cũng là một phòng ban (BR-KT-ADD-BS-10) nên áp cùng cách xác định. Một người được gán quản lý nhiều đơn vị thì phạm vi xem là hợp của các đơn vị đó.

Ghi chú: Quản lý chỉ 👁 các màn danh sách & chi tiết, phạm vi phòng ban của mình + dữ liệu bản thân — không mở màn Thêm/Sửa. Riêng lương: Quản lý không xem Bảng lương theo kỳ (FR-LU-01) lẫn tab Bảng lương / phiếu lương trong hồ sơ nhân viên phòng ban — chỉ xem lương của chính mình (như Nhân viên) ở Trang cá nhân. Nhân viên không truy cập màn HCNS nào; tự xem hồ sơ/lương của mình ở Trang cá nhân.

Quyết định · Khen thưởng · Kỷ luật — chốt 27/07/2026: Quản lý được xem (👁) danh sách và chi tiết của cả ba nghiệp vụ — Quyết định nhân sự (FR-QD-01 · FR-QD-06), Khen thưởng (FR-KT-01 · FR-KT-02) và Kỷ luật (FR-KL-01 · FR-KL-02) — phạm vi nhân viên thuộc phòng ban mình + của chính mình; không được thêm/sửa/xoá.

Riêng Gia hạn hợp đồng (FR-HD-10) — chốt 27/07/2026: thêm & sửa thông tin gia hạn chỉ Admin · Nhân sự. (*) Quản lý được xem lịch sử gia hạn hợp đồng của nhân viên thuộc phòng ban mình + của chính mình. Nhân viên không xem lịch sử gia hạn hợp đồng (theo đúng quy tắc "Nhân viên không truy cập màn HCNS" ở trên).

(***) Sửa quyết định (FR-QD-08) chỉ Admin · Nhân sự, và chỉ khi quyết định chưa đến ngày hiệu lực (BR-QKL-01 · BR-QD-SU-ST-01). Quản lý chỉ xem, không lưu được thay đổi (BR-QD-SU-PM-02).

Cần nhớ

  • Công nợ: giai đoạn này chưa đưa vào SRS HCNS — mọi nội dung công nợ (kể cả phân quyền) để giai đoạn sau (§11.3).
  • Duyệt giải trình công được thiết kế ở module Chấm công, không thuộc HCNS — nên không đưa vào ma trận này (dù đây là một quyền tác nghiệp của vai trò Quản lý).

3. Trạng thái Bảng lương (PAY_FLOW)

Trục trạng thái của Bảng lương. Mỗi nhân viên × mỗi kỳ có một trạng thái. Đợt này có 5 trạng thái:

# Mã Nhãn Màu Ai đổi & hành vi
1 nhap Nháp xám Người làm lương lập/sửa dòng lương
2 da-duyet Đã duyệt indigo Người làm lương Duyệt dòng (nhap → da-duyet)
3 cho-xn-luong Chờ ký và xác nhận hổ phách Người làm lương Gửi phiếu (da-duyet → cho-xn-luong); phiếu chạy qua dây chuyền 5 chữ ký (§3.2)
4 da-xn-luong Đã ký và xác nhận xanh lá Chữ ký cuối cùng (Tổng giám đốc) hoàn tất (cho-xn-luong → da-xn-luong)
5 khong-xn-luong Không ký và xác nhận đỏ Bất kỳ người ký nào từ chối; người làm lương Trả về → nhap để sửa lại

Bậc 3 không phải một người, mà là một dây chuyền

Chờ ký và xác nhận là bậc phiếu chạy qua 5 chữ ký nối tiếp — nhân viên → kế toán → (ban kiểm soát + giám đốc tài chính, ký song song) → tổng giám đốc. Phiếu ở nguyên bậc 3 trong suốt quá trình; chỉ khi chữ ký cuối cùng xong mới sang Đã ký và xác nhận. Chi tiết từng bước, người ký, ai đang giữ lượt: §3.2 Luồng ký & xác nhận. Nhân viên vẫn ký phiếu của mình ở Trang cá nhân.

Chuyển tiếp phụ: Tính lại lương hạ phiếu về Nháp

Ngoài các chuyển tiếp trong bảng trên, Tính lại lương có thể đưa phiếu từ bất kỳ bậc nào về nhap — nhưng chỉ khi phiếu đó thực sự đổi số liệu (BR-PL-RECALC-18). Phiếu tính lại ra kết quả y hệt thì giữ nguyên trạng thái. Điều kiện loại trừ duy nhất là kỳ lương đã chốt (BR-PL-RECALC-01): kỳ còn mở thì phiếu ở bậc nào cũng tính lại được, kể cả Đã ký và xác nhận — tính lại xong phiếu đổi số về nhap để nhân sự sửa nốt thông tin rồi Duyệt & gửi lại. (Sửa 11/08/2026 — trước đó còn loại thêm phiếu đã chuyển công nợ.)

3.1. Trạng thái kỳ lương (badge ngoài danh sách)

5 trạng thái ở trên là của từng bản ghi lương (mỗi NV × kỳ) — chỉ thấy khi mở chi tiết bảng lương của tháng. Ở màn danh sách bảng lương (ngoài), mỗi kỳ hiển thị một badge tổng hợp — 3 mức roll-up (tự tính từ phiếu) cộng bậc Đã chốt đứng riêng do người bấm, cuộn lên (roll-up) từ trạng thái các bản ghi bên trong:

Badge kỳ Màu Điều kiện (xét toàn bộ bản ghi NV trong kỳ)
Đang tính xám Chưa có bản ghi nào được gửi cho NV — mọi bản ghi đang ở nhap (Nháp) hoặc da-duyet (Đã duyệt)
Đang ký & xác nhận hổ phách Đã có ≥ 1 bản ghi gửi cho NV (đạt Chờ ký và xác nhận trở lên: cho-xn-luong / da-xn-luong / khong-xn-luong) nhưng chưa phải toàn bộ đã Đã ký và xác nhận
Hoàn tất ký & xác nhận xanh lá Toàn bộ bản ghi trong kỳ = da-xn-luong (Đã ký và xác nhận)
Đã chốt ✾ tím Người làm lương đã bấm Chốt kỳ lương (FR-PL-CHOT-01) — không phải roll-up

Quy tắc xác định — xét lần lượt theo thứ tự ưu tiên, gặp điều kiện đúng thì dừng:

  1. Kỳ đã chốt → badge kỳ = Đã chốt, dừng roll-up (xem ô cảnh báo dưới).
  2. Mọi bản ghi = Đã ký và xác nhận → badge kỳ = Hoàn tất ký & xác nhận.
  3. Ngược lại, có bất kỳ bản ghi ≠ Đã ký và xác nhận nhưng đã có ≥ 1 phiếu gửi cho NV → Đang ký & xác nhận.
  4. Còn lại (mọi bản ghi chỉ ở Nháp / Đã duyệt, chưa gửi phiếu nào cho NV) → Đang tính.

3 mức đầu là roll-up hai chiều — Đã chốt thì không

Ba badge đầu tự tính từ trạng thái phiếu nên tụt xuống được: Tính lại hạ một phiếu về nhap (BR-PL-RECALC-18) là kỳ đang Hoàn tất ký & xác nhận rơi lại Đang ký & xác nhận. Vì vậy "Hoàn tất ký & xác nhận" KHÔNG phải là chốt — nó chỉ nói mọi phiếu đã đi hết dây chuyền ký (Tổng giám đốc ký xong) tại thời điểm nhìn.

Đã chốt là bậc thứ 4, do người bấm, một chiều, đứng ngoài cơ chế roll-up: chốt rồi thì badge không đổi nữa. Giai đoạn này chưa có nghiệp vụ mở lại kỳ — xem khối Chưa đặc tả trong đợt này ở FR-PL-CHOT.

Mốc lật Đang tính → Đang ký & xác nhận

Kỳ giữ badge Đang tính cho tới khi người làm lương Gửi phiếu cho nhân viên đầu tiên. Chỉ cần một phiếu chuyển sang cho-xn-luong, badge kỳ lập tức thành Đang ký & xác nhận (dù các phiếu còn lại vẫn Nháp/Đã duyệt) — và giữ mức này cho tới khi tất cả phiếu đi hết dây chuyền ký (Tổng giám đốc ký xong).

Bản ghi Không ký và xác nhận

Phiếu khong-xn-luong (NV từ chối) đã từng gửi cho NV nên vẫn tính là "đã gửi" → kỳ ở mức Đang ký & xác nhận (không tụt về Đang tính), và không đạt Hoàn tất ký & xác nhận cho tới khi phiếu đó được Trả về, sửa, gửi lại và đi hết dây chuyền ký.

Bộ lọc danh sách kỳ lương — đang lệch với mockup

Panel Bảng lương (nhan-su.html#bang-luong — đặc tả ở FR-PL-LIST) nếu có bộ lọc Trạng thái thì đúng 3 lựa chọn = 3 badge kỳ ở trên: Đang tính · Đang ký & xác nhận · Hoàn tất ký & xác nhận (mặc định Tất cả trạng thái). Đây là bộ lọc riêng của kỳ lương — khác bộ lọc trạng thái nhân sự (Đang làm việc / Tạm nghỉ / Đã nghỉ) ở panel Hồ sơ, dù dùng chung ô lọc trên thanh công cụ. Lưu ý: mockup hiện ẩn toàn bộ ô tìm kiếm & bộ lọc ở panel này ("danh sách chỉ 12 kỳ/năm, xem thẳng") — chốt 11/08/2026: giữ theo mockup, không có ô tìm kiếm/bộ lọc.

Công nợ — giai đoạn sau

Các trạng thái công nợ (chờ/đã xác nhận công nợ, tổng hợp, đã chi) chưa đặc tả đợt này (§11.3).

Dev: thống nhất một enum nguồn

Mỗi màn hiện khai lại mảng PAY_FLOW riêng. Cần một enum chuẩn duy nhất + state machine + quy tắc ai được chuyển bậc nào (§11.2).


3.2. Luồng ký & xác nhận phiếu lương

Đối tượng ký là TỪNG PHIẾU LƯƠNG (mỗi nhân viên × mỗi kỳ = 1 phiếu), không phải cả bảng. Sáu bước, chạy nối tiếp — trừ bước 4 và 5 ký song song (BR-PL-KY-01); bước sau chỉ mở khi bước trước đã ký xong. (Chốt 14/09/2026.)

6 bước ký, nhưng bậc Chờ ký và xác nhận chỉ gồm 5 chữ ký

Bước 1 (Nhân sự lập & duyệt) nằm ở bậc nhap — nó chính là hành động Duyệt, xảy ra trước khi phiếu vào dây chuyền. Năm chữ ký còn lại (bước 2→6) mới là phần chạy trong bậc Chờ ký và xác nhận. Vì vậy tài liệu chỗ thì nói "6 bước" (toàn bộ luồng), chỗ thì nói "5 chữ ký" (phần thuộc bậc cho-xn-luong) — hai cách đếm cùng một luồng.

#Bước kýNgười kýMở khi
1Nhân sự lập & duyệtTrưởng phòng Hành chính – Nhân sựPhiếu ở nhap
2Nhân viênChính chủ phiếu lươngNhân sự bấm Gửi phiếu
3Kế toánKế toán trưởngNhân viên đã ký
4Ban kiểm soátTrưởng ban kiểm soátKế toán đã ký
5Giám đốc tài chínhGiám đốc tài chínhKế toán đã ký
6Tổng giám đốcTổng giám đốcCả bước 4 và 5 đã ký
Mã Yêu cầu chức năng Mô tả
FR-PL-KY-01 Xem luồng ký của một phiếu Bấm vào badge trạng thái ở cột Trạng thái (bảng lương) hoặc mở phiếu lương cá nhân → hiện sơ đồ luồng ký (5 mốc — bắt đầu từ bước Nhân viên; bước Nhân sự lập & duyệt đã xong trước khi phiếu vào luồng nên không vẽ): tên bước · người ký · thời điểm ký. ✦ Mọi chữ trong sơ đồ dùng CHUNG một màu xám (15/09/2026) — tên bước, tên người, dòng thời điểm và lý do từ chối; trạng thái của từng mốc phân biệt bằng vòng tròn (✓ xanh = đã ký · vòng indigo = đang chờ · nét đứt xám = chưa tới · ✕ đỏ = từ chối), không bằng màu chữ. ✦ Số thứ tự mốc đánh THEO NHÓM, không theo từng bước (15/09/2026): hai bước ký song song (Ban kiểm soát · Giám đốc tài chính) mang chung một số — lần lượt là 1 Nhân viên · 2 Kế toán · 3 Ban kiểm soát & Giám đốc tài chính · 4 Tổng giám đốc. ✦ Mốc đang chờ và mốc chưa tới lượt không hiện chữ nào dưới tên người — bỏ hẳn “Đang chờ ký” và “Chưa tới lượt” (15/09/2026); chỉ mốc đã ký / từ chối mới có dòng “Đã ký · <thời điểm>” / “Từ chối · <thời điểm>” (kèm lý do). ✦ Ngay dưới dòng “Đang chờ … ký” có chú thích chữ nhỏ, màu nhạt cho biết tiến độ ký của cả kỳ: người nằm trong luồng thấy “Kỳ {tháng}: bạn đã ký {x}/{tổng} phiếu của toàn công ty”, người ngoài luồng (Nhân sự) thấy “… đã ký và xác nhận xong {x}/{tổng} phiếu…”. Chỉ để biết, không phải chỉ số cần thao tác. (Thêm 14/09/2026.) ✦ Dưới sơ đồ không còn dòng chú thích “Ban kiểm soát và Giám đốc tài chính ký song song…” — sơ đồ đã thể hiện cặp song song, luật vẫn giữ ở BR-PL-KY-01 (bỏ 14/09/2026).
FR-PL-KY-02 Ký & xác nhận Một lối vào duy nhất: cột Thao tác của dòng đang tới lượt chỉ có nút Ký & xác nhận (không để nút Từ chối riêng ngoài bảng — từ chối mà chưa xem số liệu là sai quy trình); bấm vào mở hộp Luồng ký & xác nhận — cũng chính là hộp mở ra khi bấm badge trạng thái hay bộ lọc Chờ tôi ký và xác nhận. Trong hộp, xếp từ trên xuống đúng thứ tự thao tác: ✦ sơ đồ luồng ký — tiến độ ký của từng vai nằm ngay cạnh tên vai trên sơ đồ (FR-PL-KY-11), không còn khối chỉ số riêng ở đầu hộp (bỏ 15/09/2026 — FR-PL-KY-09) → đối chiếu chấm công → thẻ Chữ ký của bạn → ô cam kết → cặp nút. Thẻ chữ ký chia hai cột: bên trái là thông tin người ký (họ tên · chức danh; ✦ bỏ câu ghi chú “chữ ký lấy theo mẫu đã đăng ký với HCNS, chỉ ghi vào phiếu khi bạn bấm Ký & xác nhận” — chỗ đó để trống, ký xong mới hiện ✓ Đã ký · {thời điểm}, 15/09/2026), bên phải là ô chữ ký — để trống, hiện (Chưa ký) cho tới khi ký; ô cam kết bắt buộc tích mới mở được cặp nút Ký & xác nhận · Từ chối (nằm ngay dưới ô cam kết). Bấm Ký & xác nhận → chữ ký hiện ngay vào thẻ kèm dòng ✓ Đã ký · {thời điểm} rồi hộp mới đóng — người ký thấy chữ ký đã vào phiếu, giống luồng ký bên Trang cá nhân; lượt mở cho bước sau. Chưa tới lượt (hoặc kỳ đã chốt) thì hai nút mờ đi kèm tooltip nói rõ lý do, không ẩn nút. Góc trên bên phải hộp: badge trạng thái, icon mở phiếu lương và dấu ✕ đóng. ✦ Bỏ dòng “Đang chờ … ký” ở đầu hộp — sơ đồ mốc ký ngay dưới đã chỉ rõ lượt đang ở ai, nhắc lại bằng chữ chỉ làm nặng đầu hộp. (Sửa 14/09/2026 — đổi nhãn Duyệt → Ký & xác nhận, đưa ô cam kết xuống dưới thẻ chữ ký, chữ ký chỉ vào phiếu sau khi bấm nút; sửa 15/09/2026 — thêm chỉ số tiến độ ký, bỏ dòng “Đang chờ … ký”, bỏ ghi chú chữ ký mẫu.)
FR-PL-KY-03 Ký hàng loạt Người ký tích chọn nhiều dòng trên bảng lương → ký một lần cho mọi phiếu đang tới lượt mình; phiếu không tới lượt bị bỏ qua, không báo lỗi. (Sửa 14/09/2026 — bỏ lối ký hàng loạt từ panel cấp kỳ, panel này đã gỡ khỏi màn.)
FR-PL-KY-04 Từ chối Bấm Từ chối → ô nhập lý do mở ra ngay trong hộp Luồng ký & xác nhận (không bật thêm popup), cặp nút đổi thành Huỷ · Từ chối ký; lý do bắt buộc — chưa nhập thì Từ chối ký không bấm được. Ô lý do nói rõ hệ quả: phiếu sang Không ký và xác nhận, dừng luồng, Nhân sự trả về Nháp để sửa, sửa xong ký lại từ đầu. Lý do hiển thị trong sơ đồ luồng và gửi cho Nhân sự. ✦ Ô lý do để trống hẳn — không gợi ý câu mẫu trong placeholder (người ký tự viết, tránh copy nguyên câu mẫu thành lý do). ✦ Mở ô lý do thì ẩn khối Đối chiếu số liệu kỳ này (FR-PL-KY-08) — tới bước này người ký chỉ còn việc nêu lý do, bảng số liệu không còn tác dụng; bấm Huỷ thì khối hiện lại. (Sửa 14/09/2026 — gộp hộp Từ chối ký phiếu lương riêng vào ngay hộp luồng ký; sửa 15/09/2026 — bỏ placeholder, ẩn khối đối chiếu khi nhập lý do.)
FR-PL-KY-05 Trả về Nháp Nhân sự bấm Trả về trên phiếu Không ký và xác nhận → phiếu về nhap, xoá toàn bộ chữ ký đã có.
FR-PL-KY-06 Lọc Chờ tôi ký và xác nhận Nút Chờ tôi ký và xác nhận ở đầu bảng lương: bật/tắt để lọc đúng những phiếu đang chờ chữ ký của người đang đăng nhập (phiếu ở cho-xn-luong đúng bước của họ — BR-PL-KY-01). Bật thì xoá bộ lọc trạng thái đang chọn; không có phiếu nào thì báo “Không có phiếu nào đang chờ bạn ký và xác nhận”. Nút không kèm số đếm — lọc xong đếm ngay trên bảng. Việc tác nghiệp khác của Nhân sự (Duyệt · Gửi phiếu · Trả về) không gộp vào bộ lọc này — lọc bằng ô Lọc theo trạng thái. (Sửa 14/09/2026.)
FR-PL-KY-07 Tiến độ duyệt dưới trạng thái Phiếu ở Chờ ký và xác nhận: ngay dưới badge trạng thái có ghi chú chữ nhỏ, màu nhạt cho biết luồng đã duyệt tới ai — “Nhân viên đã duyệt” · “Kế toán đã duyệt” · … lấy theo bước đã ký gần nhất. Không kể Nhân sự lập & duyệt; chưa ai ký thì không hiện ghi chú. (Thay 14/09/2026 cho panel tiến độ cấp kỳ đã gỡ khỏi màn bảng lương.)
FR-PL-KY-08 ✦ Đối chiếu số liệu Khối Đối chiếu số liệu kỳ này chỉ nằm trong các hộp của luồng ký (xem luồng · ký · từ chối), không đưa vào phiếu lương — BR-PL-KY-09. ✦ Dựng lại 15/09/2026: bỏ dải 4 ô ngang, chuyển thành 4 mục xếp dọc theo đúng đường số liệu chạy vào phiếu lương — ① Ngày công → ② Giải trình → ③ Khen thưởng → ④ Phạt. Mỗi mục có nút xem chi tiết ở góc phải (FR-PL-KY-10); ✦ số mục nhìn thấy tuỳ theo VAI của người ký — BR-PL-KY-13; thân của ba mục ② · ③ · ④ đều là bảng có cột, dùng chung một khung để người ký đọc theo một nhịp. Nội dung từng mục: ① Ngày công — ✦ chỉ một số: ngày công đi làm / định mức công (vd 24 / 26 công), đặt ngay sau nhãn trên cùng một dòng, cỡ chữ lớn hơn nhãn 1px và tô xám, không kèm dòng phụ; thân mục tách ba loại ngày công: chính thức · thử việc · thực tập (mỗi loại tính lương một cách khác nhau nên không gộp; loại không phát sinh hiện —). ✦ Không còn ô Phạt chấm công ở mục này — đã chuyển sang mục ④. ② Giải trình — ✦ không có số chính và không có dòng phụ (bỏ “N đơn đã duyệt” · “làm đổi N ngày công” 15/09/2026 — bảng bên dưới đã liệt kê đủ từng ngày); bảng 4 cột: Ngày · Vào / ra trước duyệt · Vào / ra sau duyệt · Nội dung / lý do — mỗi dòng một ngày; ✦ hai cột giờ chỉ ghi giờ, không kèm dòng phụ trạng thái trước/sau và ✦ không gạch ngang giờ trước duyệt (bỏ 15/09/2026 — chỉ tô nhạt hơn cột sau duyệt); ✦ cột Nội dung / lý do ghi đúng nội dung giải trình, không kèm loại đơn và mã đơn (bỏ 15/09/2026); giờ trước duyệt gạch ngang khi đơn có khai bù giờ. ③ Khen thưởng — ✦ dựng bằng đúng khung khối nguồn của mục ④ (15/09/2026): đầu khối ghi tên khối + dòng nguồn (Nguồn: Quyết định khen thưởng · N quyết định) bên trái và nút mở chi tiết bên phải; tổng số tiền nằm ở DÒNG CUỐI khối (Tổng khen thưởng … ₫), không đặt trên đầu — đọc hết bảng chi tiết rồi mới tới con số cộng lại; thân khối là bảng 3 cột Lý do khen thưởng · Số tiền khen thưởng · Ngày hiệu lực (số quyết định nằm ở dòng phụ cột Lý do — BR-PL-KY-11); ✦ không có nút mở chi tiết trên từng dòng (bỏ 15/09/2026) — cả khối chỉ một lối vào là nút ở đầu khối, mở dữ liệu của tất cả bản ghi. Kỳ không có quyết định nào → thân khối hiện dòng “Kỳ này không có khoản thưởng nào.”. Nhờ dùng chung khung, ba khối Khen thưởng · Phạt kỷ luật · Phạt chấm công hiển thị y một kiểu. ④ Phạt ✦ — ~~Kỷ luật~~ đổi tên thành Phạt; ✦ không có số tổng và không có dòng phụ “kỷ luật … · chấm công …” ở đầu mục (bỏ 15/09/2026 — hai khối con bên dưới đã ghi rõ số tiền của từng nguồn, nhắc lại là thừa). Thân mục chia hai khối con, mỗi khối có tiêu đề · nguồn · nút xem chi tiết riêng ở đầu khối; ✦ hai khối con KHÔNG có dòng tổng riêng — cả mục dùng một dòng Tổng phạt duy nhất (= phạt kỷ luật + phạt chấm công) đặt ở cuối cùng (chốt 15/09/2026): (a) Phạt kỷ luật — bảng 3 cột giống mục ③: Lý do kỷ luật · Số tiền phạt · Ngày hiệu lực (số QĐ và mức độ ở dòng phụ cột Lý do, không có nút trên từng dòng); (b) Phạt chấm công — bảng 3 cột liệt kê THEO TỪNG NGÀY: Ngày · Tên khoản phạt · Số tiền phạt, tên khoản là Phạt đi muộn hoặc Phạt nghỉ không giải trình (BR-PL-KY-12); tổng các dòng = cột Phạt chấm công của phiếu lương. ✦ Bỏ hàng liên kết Đơn giải trình · Đơn nghỉ phép · Tính lại* ở chân khối — mỗi mục đã có nút mở chi tiết ở góc phải; nút Tính lại vẫn nằm ở *cột Thao tác của bảng lương (FR-PL-DETAIL-13). Không dựng lại bảng ngày công chi tiết trong hộp ký — muốn xem từng ngày thì bấm nút chi tiết của mục ① để mở màn Bảng chấm công tháng. (Gỡ bảng ngày công có biến động 14/09/2026; chốt bộ cột 15/09/2026.)
~~FR-PL-KY-09~~ ✦ ~~Chỉ số tiến độ ký~~ ĐÃ BỎ Chip N/M phiếu bạn đã ký ở góc trái trên hộp Luồng ký & xác nhận đã bỏ khỏi màn (15/09/2026): tiến độ ký nay đọc ngay cạnh tên từng vai trên sơ đồ luồng (FR-PL-KY-11), nên chip riêng cho người đang đăng nhập là thừa.
FR-PL-KY-11 ✦ Tiến độ ký của từng vai trên sơ đồ Trong hộp Luồng ký & xác nhận, ngay cạnh tên vai ở mỗi mốc của sơ đồ luồng có chỉ số N/M — vai đó đã ký N trên tổng M phiếu lương của kỳ (M = số phiếu toàn công ty). Hiện cho Kế toán · Ban kiểm soát · Giám đốc tài chính · Tổng giám đốc; ✦ không hiện cho vai Nhân viên (mỗi phiếu một người khác nhau nên N/M ở đó vô nghĩa) và không hiện cho Nhân sự lập & duyệt (bước này không vẽ ra sơ đồ — BR-PL-KY-08). Chỉ số hiện dạng thẻ tròn xám để không lấn át trạng thái ký của chính phiếu đang xem, có title giải thích. Chỉ số này thay cho chip “N/M phiếu bạn đã ký” ở đầu hộp (đã bỏ — FR-PL-KY-09): thay vì chỉ đếm cho người đang đăng nhập, nó đếm cho mọi vai, để người ký thấy cả dây chuyền đang đi tới đâu. (Thêm 15/09/2026.)
FR-PL-KY-10 ✦ Nút xem chi tiết ở mỗi mục Mỗi mục của khối Đối chiếu số liệu kỳ này có một nút biểu tượng ở góc trên bên phải (hình mở ra màn khác), cùng một hình dạng cho cả khối để người ký nhận ra ngay là bấm được; nút có title & aria-label nói rõ sẽ mở gì và có vòng focus cho người dùng bàn phím. ✦ Mục / khối không có dữ liệu trong kỳ thì KHÔNG hiện nút (15/09/2026 — bấm sang cũng không có gì để xem): khối Khen thưởng · Phạt kỷ luật · Phạt chấm công khi kỳ trống, và mục Giải trình khi kỳ không có đơn đã duyệt. Đích mở: ① Ngày công → Bảng chấm công tháng (lich-su-cham-cong.html) · ② Giải trình → Thay đổi do giải trình (thay-doi-do-giai-trinh.html) · ③ Khen thưởng → danh sách Khen thưởng của phân hệ Nhân sự (nhan-su.html?nv&amp;ten&amp;ky#khen-thuong) · ④ Phạt → mục này không có nút ở đầu mục, mà mỗi khối con một nút: Phạt kỷ luật → danh sách Kỷ luật (nhan-su.html?nv&amp;ten&amp;ky#ky-luat), Phạt chấm công → Bảng chấm công tháng (nơi phát sinh khoản phạt). ✦ Hai đích ③ · ④(a) mở danh sách của phân hệ, LỌC SẴN đúng nhân viên + đúng kỳ lương — FR-NS-KTKL-LOC-01 (15/09/2026 — trước đó mở thẳng màn chi tiết một quyết định). ✦ Mọi đích mở đều mang theo nhân viên + kỳ lương đang ký (?nv&amp;ten&amp;ky&amp;dm&amp;cong) nên màn đích lọc sẵn, người ký không phải lọc lại bằng tay. (Thêm 15/09/2026.)
Mã Business rule
BR-PL-KY-01 Tuần tự: người ký chỉ thao tác được khi phiếu đang ở đúng bước của mình. Bước 4 và 5 (Ban kiểm soát · Giám đốc tài chính) mở cùng lúc, ai ký trước cũng được; bước 6 chỉ mở khi cả hai đã ký.
BR-PL-KY-02 Chữ ký lấy theo mẫu đã đăng ký với HCNS (FR-NS-SIGN); màn ký không cho gõ tay tên người ký — chặn ký hộ / ký sai tên.
BR-PL-KY-03 Mỗi chữ ký ghi người ký · thời điểm và không gỡ được; muốn bỏ thì phải Trả về Nháp, mất toàn bộ chữ ký của phiếu.
BR-PL-KY-04 Từ chối bắt buộc có lý do; thiếu lý do thì nút Từ chối không bấm được.
BR-PL-KY-05 Phiếu Trả về Nháp (do từ chối, do Thu hồi, hoặc do Tính lại hạ bậc) → xoá sạch chữ ký, sửa xong phải ký lại từ bước 1. Lý do: chữ ký gắn với bộ số liệu tại thời điểm ký; số đã đổi thì chữ ký cũ vô nghĩa.
BR-PL-KY-06 Chỉ phiếu ở Chờ ký và xác nhận mới ký được. Phiếu nhap · da-duyet chưa vào dây chuyền; phiếu da-xn-luong đã xong.
BR-PL-KY-07 Kỳ đã chốt → luồng ký đóng băng, chỉ xem (BR-PL-CHOT).
BR-PL-KY-08 Thứ tự bước, người xử lý, có thể bỏ qua hay không và ký song song khai báo ở Thiết lập → Ký & xác nhận — không đặt hạn ký / thời gian cho từng bước (bỏ 14/09/2026); đổi quy trình chỉ áp dụng cho kỳ chưa gửi phiếu, kỳ đang ký giữ quy trình cũ.
BR-PL-KY-09 Phiếu lương không chứa chấm công. Màn phiếu lương cá nhân chỉ gồm luồng ký đang tới đâu và số liệu lương của kỳ — không có mục Chấm công kỳ này / Đối chiếu số liệu. Đối chiếu số liệu là việc của người ký trước khi ký nên nằm ở hộp luồng ký; xem đầy đủ thì sang Chấm công. (Chốt 14/09/2026.)
BR-PL-KY-10 Nhân viên ký ở Trang cá nhân, không ký ở Bảng lương. Màn Bảng lương là nơi làm việc của người làm lương và các cấp ký duyệt (Kế toán · Ban kiểm soát · GĐ tài chính · Tổng giám đốc) — nơi nhìn được phiếu của toàn công ty, nên không có thao tác ký của nhân viên ở đây. Nhân viên ký đúng phiếu của mình ở Trang cá nhân, trên tờ phiếu lương của kỳ đó: bấm Ký xác nhận để xác nhận đã nhận đủ lương, hoặc Gửi lại yêu cầu kèm lý do nếu phiếu sai — giữ nguyên giao diện Trang cá nhân đang có, hộp Luồng ký & xác nhận nhiều mốc chỉ dùng ở màn Bảng lương. Chữ ký của nhân viên vẫn là mốc đầu của luồng ký phiếu lương. (Chốt 14/09/2026.)
BR-PL-KY-11 ✦ Thưởng & Phạt kỷ luật trong hộp ký đọc thẳng từ quyết định. Số chính của mục Khen thưởng và của khối con Phạt kỷ luật (trong mục ④ Phạt) lấy nguyên từ phiếu lương (Thưởng = cột Thưởng, Kỷ luật = cột Phạt kỷ luật), còn danh sách quyết định bên dưới đọc từ phân hệ Khen thưởng – Kỷ luật: lấy các trường số tiền khen thưởng / số tiền phạt · lý do · mức độ · ngày hiệu lực của chính quyết định — hộp ký không gõ tay, không tính lại. Một quyết định chỉ đổ vào kỳ lương ghi ở trường Tháng áp dụng; quyết định hình thức Bằng khen / Khiển trách không có tiền nên không xuất hiện. ✦ Tổng tiền các quyết định ≠ số trên phiếu → khối hiện dải cảnh báo vàng nêu cả hai số và nhắc bấm Tính lại, vì đó đúng là trường hợp phiếu chưa lấy lại theo quyết định mới (FR-PL-DETAIL-13). Hai nơi không được nói hai số khác nhau; muốn sửa thì sửa ở nguồn rồi Tính lại, không sửa trong hộp ký. (Chốt 14/09/2026; mở rộng 15/09/2026 — trước đó mã ghi nhầm trùng BR-PL-KY-10.)
BR-PL-KY-12 ✦ Phạt chấm công gồm đúng hai khoản, đều sinh tự động. Mục ④ Phạt tách Phạt kỷ luật (nguồn: Quyết định kỷ luật có phạt tiền) khỏi Phạt chấm công (nguồn: phân hệ Chấm công) vì sửa sai ở hai nơi khác nhau: sai phạt kỷ luật thì huỷ / sửa quyết định, sai phạt chấm công thì xử ở chấm công / đơn giải trình. Phạt chấm công gồm đúng hai khoản: ① Phạt đi muộn — theo giờ chấm của từng ngày trong kỳ; ② Phạt nghỉ không giải trình — ngày vắng không có đơn giải trình, hoặc có đơn nhưng bị từ chối; đơn còn Chờ duyệt thì vẫn phạt cho tới khi được duyệt (xem BR-DS-01). ✦ Trong hộp ký, khoản phạt chấm công liệt kê theo TỪNG NGÀY (Ngày · Tên khoản phạt · Số tiền phạt) chứ không gộp thành một dòng tổng; cột Tên khoản phạt ghi đúng lý do phạt của ngày đó — Phạt đi muộn · Phạt nghỉ không giải trình — vẫn nằm trong đúng hai khoản trên, để người ký đối chiếu thẳng với bảng chấm công; tổng các dòng = cột Phạt chấm công của bảng lương. Cả hai khoản tự động, không ai nhập tay. ✦ Hai cách gọi tên cho CÙNG một khoản — cố ý, không phải sai lệch: hộp ký gọi theo khoản phạt (Phạt đi muộn · Phạt nghỉ không giải trình), còn bảng Các khoản giảm trừ của phiếu lương cá nhân gọi theo khoản trừ (Trừ đi muộn · Trừ nghỉ không giải trình hoặc đơn bị từ chối) cho đồng bộ với nhóm kỷ luật (Trừ vi phạm nội quy…). Cùng một trường dữ liệu, cùng một số tiền — Dev đặt tên trường theo phat_di_muon · phat_nghi_khong_giai_trinh, nhãn hiển thị lấy theo màn. (Chốt 15/09/2026.)
BR-PL-KY-13 ✦ Phạm vi xem khối Đối chiếu số liệu theo VAI của người ký. Không phải cấp ký nào cũng cần nhìn cùng một lượng dữ liệu: · ✦ Mọi cấp ký duyệt — Kế toán · Ban kiểm soát · Giám đốc tài chính · Tổng giám đốc → chỉ thấy mục ① Ngày công (kèm ba loại ngày công); ba mục ② Giải trình · ③ Khen thưởng · ④ Phạt bị ẩn hẳn — các cấp này ký để xác nhận số công và số tiền đã đúng sổ sách, không phải nơi phán xét lý do giải trình hay quyết định thưởng/phạt (mở rộng từ 2 vai lên đủ 4 cấp ký — 15/09/2026). · Nhân sự (người lập bảng lương) và Nhân viên (chủ phiếu, soi phiếu của chính mình) → thấy đủ cả bốn mục. Ẩn là ẩn hẳn khối, không phải khoá nút — vai không có quyền thì không nhìn thấy dữ liệu. ✦ Ghi chú ở góc phải khối dùng chung một câu cho mọi vai — “Bấm nút ở góc phải từng mục để xem chi tiết”; không nêu riêng phạm vi xem của từng vai (bỏ câu “Vai <tên vai> chỉ xem số ngày công của kỳ” 15/09/2026). (Chốt 15/09/2026.)
BR-PL-KY-14 ✦ Cột Sửa của bảng lương chỉ dành cho Nhân sự. Nhóm cột cuối bảng đổi tên ~~Thao tác*~~ → Hành động (15/09/2026)*, gồm hai cột con Sửa và Thao tác. ✦ Cột Sửa vẫn hiển thị với mọi vai để bố cục bảng không đổi khi đổi vai; nhưng với vai Kế toán · Ban kiểm soát · Giám đốc tài chính · Tổng giám đốc (và Nhân viên) thì ô trong cột chỉ ghi dấu “—”, không có chữ Sửa bấm được. Lý do: các vai này đọc số liệu rồi ký / từ chối, việc sửa ô số liệu thuộc người lập bảng lương. Cột Thao tác* vẫn hiện với mọi vai, nhưng nội dung trong đó đã lọc theo vai sẵn (FR-PL-KY-02). (Chốt 15/09/2026.)*

3.3. Thiết lập quy trình ký & xác nhận

Màn Thiết lập (thiet-lap-danh-muc.html, nhóm Quy trình → Ký & xác nhận) — nơi HR/quản trị khai báo dây chuyền ký, không phải sửa code.

Mã Yêu cầu chức năng Mô tả
FR-QT-01 ✦ Trình dựng luồng duyệt Khối Luồng duyệt liệt kê mỗi bước một thẻ (không còn dạng bảng), đầu khối ghi Tổng N bước. Trong thẻ: số thứ tự bước · Tên bước (bắt buộc) · Người xử lý (bắt buộc) · ô tích Ký song song với Bước n−1; bước do người dùng thêm có ✕ xoá ở góc phải. ✦ Mọi bước đều nhập được Tên bước và chọn được Người xử lý (15/09/2026) — kể cả bước của hệ thống là Nhân viên, trước đây hai ô này bị khoá. Người xử lý là ô chọn liệt kê tất cả người dùng trong phần mềm, lấy từ nguồn nhân sự dùng chung (nhan-su-data.js), hiện Tên — Chức vụ, danh sách phẳng, không chia nhóm ✦ (bỏ nhóm “Theo vai trò” 15/09/2026). Giá trị đang có của một bước mà không nằm trong danh sách — vd bước Nhân viên để Chủ phiếu lương (vai trò động, đổi theo từng phiếu) — vẫn được giữ làm mục đầu ô chọn, hệ thống không tự gán sang một nhân viên khác. Kèm sơ đồ luồng dựng theo đúng thứ tự đang khai. ✦ Đã bỏ (15/09/2026): ô tích Có thể bỏ qua bước này, nhãn bước cố định và cặp nút ▲▼ đổi thứ tự — xem FR-QT-02 · BR-QT-01. ✦ Không có trường Thời gian / Hạn ký, không có Thêm giai đoạn, không có khối Người theo dõi. (Dựng lại 14/09/2026; rút gọn & mở khoá 15/09/2026.)
FR-QT-02 ✦ Thêm / xoá bước + Thêm bước chèn một thẻ trống ở cuối rồi điền thẳng trên thẻ; ✕ xoá (có hỏi xác nhận). ✦ Bỏ cặp nút ▲▼ đổi thứ tự (15/09/2026) — thứ tự bước đọc thẳng theo số trên thẻ và sơ đồ luồng, muốn đổi thì xoá rồi thêm lại đúng chỗ. ✦ Bước Nhân viên là bước đầu tiên và là bước của hệ thống: vẫn đổi được tên và người xử lý nhưng không xoá được — thẻ của nó không hiện nút ✕; mọi bước sau đó thiết lập tự do (thêm · xoá · đổi tên · đổi người · đặt ký song song); ✦ bỏ nhãn “bước cố định” và bỏ dòng ghi chú “Bước Nhân sự lập & duyệt và Nhân viên là bắt buộc…” ở chân khối. Bấm Thêm mới mà còn thẻ thiếu Tên bước hoặc Người xử lý thì báo và không lưu (FR-QT-04).
FR-QT-03 ✦ Ký song song Tích Ký song song ở một bước = bước đó ký cùng lúc với bước ngay trước (mặc định: Giám đốc tài chính song song với Ban kiểm soát). ✦ Mọi dấu hiệu của ký song song đều tô XÁM, không dùng màu brand (15/09/2026): nền thẻ bước, nhãn “ký song song với bước n”, chữ Bước n trong ô tích, dòng giải thích “Bước n và Bước n+1 mở cùng lúc — ai ký trước cũng được…”, và cả mốc tròn + đường nối tương ứng trên sơ đồ luồng. Lý do: đây là thông tin trạng thái, không phải điểm cần gọi chú ý.
FR-QT-04 ✦ ~~Quy tắc áp dụng~~ ĐÃ BỎ Khối Quy tắc áp dụng với 4 công tắc (cho phép ký hàng loạt · bắt buộc lý do khi từ chối · từ chối thì huỷ toàn bộ chữ ký · cho phép uỷ quyền ký khi vắng) đã bỏ khỏi màn (15/09/2026): đây là luật cố định của luồng ký phiếu lương, đã đặc tả cứng ở FR-PL-KY-03 · BR-PL-KY-04 · BR-PL-KY-05, không phải thứ để HR bật/tắt. Màn Thiết lập nay chỉ khai dây chuyền ký; phần còn lại của khối là thanh thao tác ✦ Thêm mới · Huỷ (đổi tên từ “Lưu quy trình · Khôi phục mặc định” 15/09/2026) — Thêm mới ghi lại quy trình đang khai (còn thẻ thiếu Tên bước / Người xử lý thì báo và không ghi), Huỷ bỏ mọi chỉnh sửa chưa lưu và đưa quy trình về 6 bước mặc định (có hỏi xác nhận). (Trước đó: bỏ công tắc tự động nhắc khi quá hạn ký 14/09/2026 vì đã bỏ hạn ký.)
BR-QT-01 ✦ Mọi bước trong quy trình đều BẮT BUỘC ký — không có khái niệm bước tuỳ chọn. Ô tích Có thể bỏ qua bước này đã bỏ khỏi thẻ bước và dòng phụ "có thể bỏ qua" đã bỏ khỏi sơ đồ luồng (15/09/2026); trường boQua không còn trong cấu trúc bước. Phiếu chỉ sang Đã ký và xác nhận khi đủ chữ ký của tất cả các bước (BR-PL-KY-01). Muốn một cấp không phải ký thì xoá hẳn bước đó khỏi quy trình, không để bước rồi cho bỏ qua.
FR-QT-05 ✦ ~~Áp dụng cho chứng từ~~ ĐÃ BỎ Ô chọn Áp dụng cho (Phiếu lương · Đề xuất chi · Phiếu nhập kho) đã bỏ khỏi màn (15/09/2026): màn này chỉ thiết lập quy trình ký của Phiếu lương, hai loại chứng từ kia có luồng duyệt riêng ở phân hệ của chúng nên để ô chọn ở đây chỉ gây hiểu nhầm là dùng chung một quy trình. Muốn thiết lập quy trình cho chứng từ khác thì làm ở đúng phân hệ đó.

4. Quản lý nhân sự

FR-NS-01. Trung tâm module / Danh sách nhân sự

File: nhan-su.html — màn trung tâm (SPA: submenu trái đổi panel phải, không reload)

Mục đích: điểm vào module HCNS. Submenu trái gom mọi nghiệp vụ; panel mặc định là Hồ sơ nhân sự.

Submenu & số đếm (số đếm hard-code minh hoạ):

Nhóm Mục Số đếm Nút thêm →
Quản lý nhân sự Hồ sơ nhân sự 126 NV Thêm nhân viên (FR-NS-03)
Quản lý nhân sự Hợp đồng nhân sự 126 HĐ Thêm hợp đồng (FR-HD-09)
Quyết định Quyết định 16 Thêm quyết định (FR-QD-07)
Thi đua – Kỷ luật Khen thưởng 7 đợt Thêm khen thưởng (FR-KT-03)
Thi đua – Kỷ luật Kỷ luật 10 Thêm kỷ luật (FR-KL-03)
Lương Bảng lương 6 kỳ Tạo kỳ lương (FR-PL-LIST-04) → chi tiết kỳ

Chân submenu: link Thiết lập danh mục → FR-DM-01.

Nhóm 'Quản lý công nợ' — giai đoạn sau

Submenu mockup còn nhóm Quản lý công nợ (Công nợ tổng hợp · Công nợ cá nhân) nhưng chưa đặc tả đợt này — để giai đoạn sau. Giao diện công nợ hiện chỉ là nháp.

Panel Hồ sơ nhân sự (read-only + điều hướng):

Thành phần Ghi chú
Lọc Phòng ban Tất cả / Ban Giám đốc / Ban QLDA / Phòng Tài chính–Kế toán / Phòng Vật tư–Thiết bị / Phòng Kế hoạch–Kỹ thuật / Phòng Hành chính–Nhân sự
Lọc Trạng thái Tất cả / Đang làm việc / Tạm nghỉ / Đã nghỉ
Nút Xuất Excel chỉ Nhân sự & Admin (chi tiết FR-HS-10)
Bảng Họ tên (→ chi-tiet-nhan-su.html?ma=NV-xxx) · Chức vụ · Phòng ban · Mã nhân viên · Ngày vào làm · Trạng thái (có màu)

Đặc tả chi tiết phần danh sách (tìm kiếm, lọc, phân trang, phân quyền hiển thị, quy tắc trạng thái tự động, xuất Excel, log…) tách riêng ở FR-HS-01 → FR-HS-10. Danh sách điều hướng: nhấn dòng → mở chi tiết hồ sơ; không có nút Sửa/Xoá trên danh sách (sửa/xoá ở màn chi tiết).

Dev lưu ý

  • Mọi số đếm/phân trang là hard-code; cần tham số hoá theo ma nhân viên cho link chi tiết. Ô tìm kiếm/Xuất Excel chưa gắn logic.
  • Mockup nhan-su.html còn cột Thao tác (Sửa/Xoá) ở bảng Hồ sơ — cần bỏ cột Thao tác (giữ cột Trạng thái có màu theo DR-01); chưa sửa được vì file đang kẹt merge, xử lý sau.

FR-HS-01 → FR-HS-10. Danh sách hồ sơ nhân sự — đặc tả chi tiết

Panel Hồ sơ nhân sự trong nhan-su.html#ho-so — chi tiết hoá phần danh sách của FR-NS-01.

Mục đích: hiển thị toàn bộ hồ sơ nhân sự mà người dùng có quyền xem (phạm vi theo vai trò — xem §2 Vai trò & phân quyền và Business Rule dưới).

Dữ liệu hiển thị (cột bảng)

# Cột Mô tả
1 Họ tên Tên đầy đủ của nhân viên (bấm → chi tiết hồ sơ)
2 Chức vụ Chức vụ hiện tại
3 Phòng ban Phòng ban hiện tại
4 Mã nhân viên Mã định danh nhân viên (vd NV-001) — duy nhất, không trùng (BR-NS-002); dùng để đối chiếu với hợp đồng · quyết định · bảng lương · chấm công
5 Ngày vào làm Ngày bắt đầu làm việc
6 Trạng thái Đang làm việc / Tạm nghỉ / Đã nghỉ (có màu — xem DR-01)

Chức năng

Mã Chức năng Mô tả
FR-HS-01 Hiển thị danh sách Liệt kê hồ sơ theo phạm vi quyền của người dùng
FR-HS-02 Tìm kiếm nhân viên Nhập từ khoá → tìm theo Họ tên · Mã nhân viên · Số điện thoại
FR-HS-03 Lọc theo phòng ban Chọn phòng ban → chỉ hiện nhân viên thuộc phòng ban đó
FR-HS-04 Lọc theo trạng thái Tất cả / Đang làm việc / Tạm nghỉ / Đã nghỉ
FR-HS-05 Kết hợp điều kiện lọc Áp dụng đồng thời Tìm kiếm + Phòng ban + Trạng thái
FR-HS-06 Tổng số nhân viên Hiện tổng số (vd "Hồ sơ nhân sự · 126 nhân viên"); thay đổi theo điều kiện lọc (vd lọc Đang làm việc → 98 nhân viên)
FR-HS-07 Phân trang Số bản ghi/trang · tổng số trang · Previous / Next · chuyển trang
FR-HS-08 Xem hồ sơ nhân sự Bấm một nhân viên → mở Chi tiết hồ sơ
FR-HS-09 Thêm nhân viên Nút + Thêm nhân viên → mở màn Thêm mới
FR-HS-10 Xuất Excel Nút Xuất Excel → modal chọn trường gom theo 3 nhóm khớp form Thêm/Sửa (có Chọn/Bỏ chọn tất cả theo nhóm & toàn bộ, đếm số cột — mặc định 28 cột): ① Thông tin cá nhân (Mã NV · Họ tên · SĐT · Giới tính · Ngày sinh · CCCD · MST cá nhân · Mã BHXH · Dân tộc · Tôn giáo · Tình trạng hôn nhân · Tên ngân hàng · Số TK · Chủ TK · Tỉnh/TP · Xã/Phường · Địa chỉ chi tiết); ② Thông tin công việc (Ngày bắt đầu làm việc · Vai trò · Phòng ban · Chức vụ · Quản lý trực tiếp · Chức danh · Email công việc · Nơi làm việc / Địa điểm chấm công · Trạng thái); ③ Hợp đồng & lương (Loại hợp đồng · Mức lương chính thức/lương cơ bản). Tick trường cần xuất → tải file CSV/.xlsx với dữ liệu mẫu (nguồn nhan-su-data.js). Không xuất các trường tài liệu đính kèm (Kinh nghiệm làm việc · Chứng chỉ kỹ năng · Giấy khám sức khỏe/y tế) — đó là file/danh sách bản ghi, xem ở Chi tiết hồ sơ.

Business Rule (BR)

Mã Quy tắc
BR-01 ✾ Phạm vi hiển thị theo vai trò: Nhân sự & Admin → toàn bộ hồ sơ nhân viên công ty; Quản lý → chỉ nhân viên thuộc phòng ban của mình — tức đơn vị mà người đó đứng tên quản lý; mỗi phòng ban / công trường có đúng một quản lý (§2, chốt 11/08/2026); Nhân viên → không xem ở danh sách này, chỉ tự xem tại Trang cá nhân › Hồ sơ cá nhân.
BR-02 Nút + Thêm nhân viên chỉ hiển thị cho Nhân sự & Admin.
BR-03 Nút Xuất Excel chỉ hiển thị cho Nhân sự & Admin.
BR-04 Ô Tìm kiếm & bộ Lọc (phòng ban, trạng thái) hiển thị cho cả 3 vai trò Nhân sự · Quản lý · Admin.
BR-05 Tạm nghỉ lấy từ Quyết định loại Tạm nghỉ theo Từ ngày – Đến ngày: khi Từ ngày = ngày hiện tại → hệ thống tự đổi Đang làm việc → Tạm nghỉ; khi Đến ngày = ngày hiện tại → tự đổi Tạm nghỉ → Đang làm việc.
BR-06 Đã nghỉ lấy từ Quyết định loại Nghỉ việc theo Ngày nghỉ việc: khi Ngày nghỉ việc = ngày hiện tại → tự đổi Đang làm việc → Đã nghỉ.
BR-07 Bảng lương chỉ tính cho nhân viên có trạng thái Đang làm việc.

Display Rule (DR)

Mã Quy tắc
DR-01 Hiển thị màu trạng thái: Đang làm việc 🟢 xanh lá · Tạm nghỉ 🟡 hổ phách · Đã nghỉ 🔴 đỏ.
DR-02 Phòng ban đã bị xoá → hiển thị "Không xác định".
DR-03 Chưa có chức vụ → hiển thị "-".
DR-04 Không hiển thị dữ liệu đã bị Soft Delete.
DR-05 Số lượng nhân viên hiển thị đúng theo điều kiện lọc.
DR-06 Không có dữ liệu → hiển thị "Không có dữ liệu".

Validation Rule (VR)

Mã Quy tắc
VR-01 Bỏ khoảng trắng đầu/cuối từ khoá khi tìm kiếm.
VR-02 Từ khoá tối đa 100 ký tự.
VR-03 Không phân biệt hoa / thường.
VR-04 Bỏ dấu tiếng Việt khi tìm (vd "duc" khớp Đức).

Process Rule (PRO)

Mã Quy tắc
PRO-01 Thêm nhân viên thành công → danh sách tự refresh.
PRO-02 Sửa hồ sơ → danh sách cập nhật.

Exception Rule (EX)

Mã Quy tắc
EX-01 Không tìm thấy → hiển thị "Không có dữ liệu".
EX-02 Lỗi tải dữ liệu → thông báo "Không thể tải danh sách nhân viên".
EX-03 Xuất Excel lỗi → không tạo file → thông báo lỗi.

Notification Rule (NO-HS) — mọi thông báo người nhận đều là người dùng đang thao tác.

Mã Sự kiện Hình thức Nội dung thông báo
NO-HS-01 Thêm nhân viên thành công Toast Thêm nhân viên thành công.
NO-HS-02 Cập nhật hồ sơ thành công Toast Cập nhật hồ sơ thành công.
NO-HS-03 Xuất Excel thành công Toast Xuất danh sách nhân sự thành công.
NO-HS-04 Quá trình xuất file xảy ra lỗi Toast Xuất danh sách nhân sự thất bại. Vui lòng thử lại.
NO-HS-05 Danh sách hiện tại không có bản ghi nhưng người dùng vẫn nhấn Xuất Excel Toast Không có dữ liệu để xuất.
NO-HS-06 Tìm kiếm hoặc lọc không có kết quả Empty State trên màn hình (không dùng Toast) Không tìm thấy nhân viên phù hợp.
NO-HS-07 Không tải được danh sách nhân sự Banner hoặc Toast Không thể tải danh sách nhân sự. Vui lòng thử lại.

BA lưu ý

  • NO-HS-01, NO-HS-02 do mình suy ra để lấp chỗ (bạn liệt kê từ NO-HS-03). Nếu 01/02 là thông báo khác, báo mình sửa.
  • Đã bỏ thông báo "Không có quyền" theo yêu cầu (nút không có quyền được ẩn từ đầu theo BR-02/03, nên không cần thông báo chặn).

Quan hệ với module Quyết định & Chấm công

Các quy tắc trạng thái tự động (BR-05/06) không do màn Hồ sơ tự quyết mà bắt nguồn từ Quyết định nhân sự (loại Tạm nghỉ / Nghỉ việc) — khớp với tip "Tạm nghỉ — quy tắc lương & mã QĐ" ở FR-QD-07. BR-07 là cầu nối sang Bảng lương: chỉ NV Đang làm việc mới vào kỳ tính lương.

FR-NS-08. Xuất Excel hồ sơ nhân sự

Modal Xuất Excel mở từ panel Hồ sơ nhân sự (nhan-su.html#ho-so) — chi tiết hoá FR-HS-10.

Mục đích: cho người dùng có quyền chọn trường & xuất danh sách hồ sơ nhân sự ra file Excel, tôn trọng phạm vi quyền và điều kiện lọc hiện tại của màn danh sách.

Quan hệ với FR-HS-10

FR-HS-10 mô tả nút Xuất Excel + modal chọn trường ở mức tổng quan (3 nhóm trường, mặc định 28 cột). FR-NS-08 chi tiết hoá cùng chức năng đó ở mức thao tác + định dạng file — không phải chức năng mới. Bộ nhóm trường (① Cá nhân · ② Công việc · ③ Hợp đồng & lương) thống nhất với FR-HS-10.

1. Hộp thoại & chọn trường

Mã Chức năng Mô tả
FR-NS-08.01 Mở hộp thoại xuất Excel Nhấn Xuất Excel → hiện modal cấu hình gồm: Danh sách trường · Chọn tất cả · Bỏ chọn tất cả · Số trường đang chọn · nút Xuất Excel · nút Hủy.
FR-NS-08.02 Hiển thị danh sách trường Nhóm trường theo 3 nhóm nghiệp vụ: Thông tin cá nhân · Thông tin công việc · Hợp đồng & lương (khớp form Thêm/Sửa & FR-HS-10).
FR-NS-08.03 Chọn trường dữ liệu Cho phép chọn / bỏ chọn từng trường.
FR-NS-08.04 Chọn tất cả Nhấn Chọn tất cả → chọn toàn bộ trường mà người dùng có quyền xuất (BR-NS-EXP-003/004).
FR-NS-08.05 Bỏ chọn tất cả Nhấn Bỏ chọn tất cả → bỏ chọn toàn bộ trường.

2. Xuất dữ liệu

Mã Chức năng Mô tả
FR-NS-08.06 Xuất dữ liệu Sau khi nhấn Xuất Excel: lấy dữ liệu theo điều kiện lọc hiện tại → chỉ xuất các trường đã chọn → sinh file .xlsx → tải về máy.
FR-NS-08.07 Kế thừa điều kiện lọc Dữ liệu xuất đúng theo bộ lọc đang áp dụng trên danh sách: Phòng ban · Trạng thái · Từ khóa tìm kiếm (và Chức vụ · Địa điểm làm việc nếu có bộ lọc tương ứng — xem ghi chú) (BR-NS-EXP-007/020).
FR-NS-08.08 Thứ tự cột Cột trong file xếp đúng thứ tự hiển thị trên màn chọn trường (BR-NS-EXP-021).
FR-NS-08.09 Định dạng dữ liệu Xuất đúng định dạng: Ngày dd/MM/yyyy · Tiền có phân tách hàng nghìn · SĐT · CCCD · MST · BHXH · Số TK dạng Text (giữ số 0 đầu — BR-NS-EXP-014).
FR-NS-08.10 Tên file Mặc định Ho_so_nhan_su_yyyyMMdd_HHmmss.xlsx (vd Ho_so_nhan_su_20260722_101530.xlsx).

3. Tiến trình · thông báo

Mã Chức năng Mô tả
FR-NS-08.11 † Hiển thị tiến trình Dữ liệu lớn → hiển thị trạng thái "Đang xuất dữ liệu…" (BR-NS-EXP-016/017).
FR-NS-08.12 Thông báo kết quả Thành công → "Xuất Excel thành công."; lỗi → hiển thị nguyên nhân (khớp NO-HS-03/04).

4. Phân quyền

Mã Chức năng Mô tả
FR-NS-08.14 Kiểm tra quyền Chỉ vai trò Nhân sự · Admin thấy & dùng được nút Xuất Excel (BR-01/02/03, BR-NS-EXP-001/002).

Quy tắc nghiệp vụ xuất Excel (BR-NS-EXP)

A. Phân quyền

Mã Quy tắc
BR-NS-EXP-001 Chỉ người có quyền Xuất Excel hồ sơ nhân sự mới được dùng chức năng.
BR-NS-EXP-002 Không có quyền → nút Xuất Excel không hiển thị hoặc không khả dụng.
BR-NS-EXP-003 Trường Lương cơ bản chỉ hiện để chọn khi người dùng có quyền xem lương (HR · Kế toán tiền lương · vai trò được cấp).
BR-NS-EXP-004 Không có quyền xem lương → các trường lương không hiển thị hoặc bị vô hiệu hoá & không được xuất.

B. Dữ liệu

Mã Quy tắc
BR-NS-EXP-005 Chỉ xuất nhân viên thuộc phạm vi dữ liệu người dùng được truy cập.
BR-NS-EXP-006 Không xuất nhân viên ngoài phạm vi phân quyền.
BR-NS-EXP-007 Danh sách đang lọc → file chỉ chứa dữ liệu sau khi lọc.
BR-NS-EXP-008 Không có dữ liệu → không tạo file, hiển thị "Không có dữ liệu để xuất." (khớp NO-HS-05).

C. Trường dữ liệu

Mã Quy tắc
BR-NS-EXP-009 Phải chọn ít nhất một trường trước khi xuất.
BR-NS-EXP-010 Bỏ chọn toàn bộ → không cho phép xuất.
BR-NS-EXP-011 Tên cột trong Excel giống tên hiển thị trên hệ thống.
BR-NS-EXP-012 Mỗi nhân viên tương ứng đúng một dòng trong file.

D. Định dạng

Mã Quy tắc
BR-NS-EXP-013 Ngày xuất theo dd/MM/yyyy.
BR-NS-EXP-014 CCCD · MST · BHXH · Số TK · Số điện thoại xuất dạng Text để không mất số 0 đầu.
BR-NS-EXP-015 Trường tiền tệ có dấu phân cách hàng nghìn.
BR-NS-EXP-022 Trường không có giá trị → ô để trống, không hiển thị "N/A" (trừ khi có quy định khác).
BR-NS-EXP-023 Trường nhiều giá trị (vd nhiều địa điểm chấm công) → nối bằng dấu phẩy hoặc xuống dòng theo quy định hiển thị.
BR-NS-EXP-024 Nhân viên không có quản lý trực tiếp → cột Quản lý trực tiếp để trống.
BR-NS-EXP-025 File luôn dùng định dạng .xlsx, không hỗ trợ .xls/.csv nếu không có yêu cầu riêng.

E. Hiệu năng

Mã Quy tắc
BR-NS-EXP-016 † Hệ thống hỗ trợ xuất số lượng lớn nhân viên theo giới hạn cấu hình.
BR-NS-EXP-017 † Vượt ngưỡng cho phép → có thể xuất bất đồng bộ (background job) và thông báo khi hoàn thành.
BR-NS-EXP-026 † Đóng màn khi đang xuất bất đồng bộ → tiến trình vẫn tiếp tục, file tải từ lịch sử hoặc thông báo khi xong.

F. Bảo mật & phạm vi

Mã Quy tắc
BR-NS-EXP-018 Thông tin nhạy cảm (CCCD · MST · BHXH · TK ngân hàng…) chỉ xuất khi người dùng có quyền tương ứng.
BR-NS-EXP-020 File chỉ xuất nhân viên thuộc kết quả tìm kiếm & bộ lọc hiện tại — không tự xuất toàn bộ nếu đang xem danh sách đã lọc.
BR-NS-EXP-021 Cột giữ đúng thứ tự người dùng đã chọn hoặc theo cấu hình mặc định.

Mục có dấu † & điểm cần BA chốt

  • † (FR-NS-08.11; BR-NS-EXP-016/017/026): xuất bất đồng bộ, tiến trình — không quan sát được từ mockup tĩnh (export mockup hard-code JS, tải ngay). Đây là yêu cầu kỹ thuật — nhờ BA xác nhận trước khi Dev dùng.
  • Bộ lọc Chức vụ / Địa điểm làm việc (FR-NS-08.07): danh sách hiện chỉ có lọc Phòng ban · Trạng thái · Từ khóa (FR-HS-03/04) — chưa có bộ lọc Chức vụ/Địa điểm. Cần thống nhất bộ lọc trước, xuất Excel kế thừa theo đó.
  • Định dạng file: FR-HS-10 ghi tải "CSV/.xlsx", còn BR-NS-EXP-025 chốt chỉ .xlsx. Nhờ BA chốt một phương án dùng chung.
  • BR-NS-EXP bỏ số cho trùng bản gốc BA gửi (không có 019/027 xen giữa D/E/F — đã gom xuống mục F); không có mã trùng.

FR-NS-02. Chi tiết hồ sơ nhân sự

File: chi-tiet-nhan-su.html?ma=NV-xxx (mặc định NV-001); &edit=1 bật chế độ sửa

Mục đích: xem & chỉnh sửa hồ sơ một nhân viên. 3 tab ngang (mockup hiện tại):

Tab Nội dung
Hồ sơ nhân sự Thẻ đầu hồ sơ → Hợp đồng lao động → Thông tin cá nhân → Thông tin công việc → Thông tin sức khỏe (chi tiết dưới)
Bảng lương Bảng Phiếu lương gần đây — đặc tả chi tiết ở FR-NS-09; mỗi dòng → phiếu lương cá nhân của NV (FR-LU-01)
Công nợ (giai đoạn sau) Bảng công nợ theo kỳ (nháp) — nội dung công nợ chưa đặc tả đợt này (giai đoạn sau)

Đã gộp tab — không còn tab Hợp đồng & Chấm công riêng

Bản mới còn 3 tab. Hợp đồng lao động không còn là tab riêng mà là khối đầu tiên trong tab Hồ sơ (trên "Thông tin cá nhân"). Chấm công cũng không còn là tab riêng — dữ liệu công chỉ còn được tham chiếu trong tab Bảng lương ("ngày công lấy từ Chấm công").

Tab Hồ sơ — thứ tự khối hiển thị (chế độ xem; edit=1 mở form đầy đủ như FR-NS-03):

  1. Thẻ đầu hồ sơ: ảnh đại diện · Họ tên + badge trạng thái · dòng "Chức vụ · Phòng ban"; hàng chip liên hệ: Mã NV · Email · SĐT · "Vào làm <ngày vào>".
  2. Hợp đồng lao động (khối đầu tiên): bảng Số HĐ · Loại HĐ · Ngày bắt đầu · Ngày kết thúc · Trạng thái; bấm một dòng → chi tiết HĐ (chi-tiet-hop-dong-nhan-su.html?ma=); nút + Thêm hợp đồng → FR-HD-09. Phụ đề đếm số HĐ của NV.
  3. Thông tin cá nhân — 3 thẻ con:
    • Thông tin định danh & liên hệ: Họ và tên · Số điện thoại · Giới tính · Ngày sinh · Số CCCD · Mã số thuế cá nhân · Mã số BHXH · Dân tộc · Tôn giáo · Tình trạng hôn nhân.
    • Tài khoản ngân hàng: Tên ngân hàng · Số tài khoản · Chủ tài khoản.
    • Địa chỉ nơi ở hiện tại: Tỉnh/Thành phố · Xã/Phường · Địa chỉ chi tiết.
  4. Thông tin công việc — 4 thẻ con:
    • Vị trí công tác: Ngày bắt đầu làm việc · Trạng thái (badge) · Vai trò của nhân sự · Phòng ban · Chức vụ · Quản lý trực tiếp · Chức danh · Nơi làm việc / Địa điểm chấm công.
    • Chữ ký nhân viên: chỉ hiển thị chữ ký Đang hiệu lực — ảnh chữ ký · tên tệp · ngày tải lên & người tải · badge trạng thái. Chữ ký Đã xoá KHÔNG hiển thị ở màn hồ sơ (vẫn lưu trong CSDL — xoá mềm, ràng buộc BR-SIGN); không còn chữ ký hiệu lực → hiện dòng “Chưa có chữ ký”. Ở chế độ xem là chỉ đọc — thao tác Xoá & Tải chữ ký mới chỉ có ở chế độ Sửa. Đặc tả đầy đủ: FR-NS-SIGN.
    • Tài khoản đăng nhập: Tên đăng nhập · Mật khẩu (hiển thị ẩn •••••••• (ẩn)).
    • Kinh nghiệm & chứng chỉ: 2 danh sách tệp — Kinh nghiệm làm việc · Chứng chỉ / Kỹ năng.
  5. Thông tin sức khỏe — 1 thẻ Hồ sơ y tế: chỉ có tệp Giấy khám sức khỏe / Hồ sơ y tế.

Chế độ xem gọn hơn form Thêm/Sửa — Dev lưu ý

Màn xem chỉ hiển thị các trường trên; nhiều trường của form Thêm/Sửa (FR-NS-03) không render ở chế độ xem: Email hiện ở chip đầu trang (không có ô riêng trong Cá nhân); Vị trí công tác không hiện Email công việc, Lịch làm việc/Ca; phần học vấn thu gọn còn Kinh nghiệm + Chứng chỉ (bỏ bảng Học vấn và Ngoại ngữ); sức khỏe chỉ còn tệp y tế (bỏ Nhóm máu/Chiều cao/Cân nặng/Dị ứng/Tiền sử…). Nút Sửa hồ sơ (góc phải, chỉ ở tab Hồ sơ) → mở them-nhan-vien.html?ma= (form đầy đủ, đổ sẵn dữ liệu), không sửa tại chỗ.

Tab Bảng lương — bảng Kỳ lương · Số công · Lương cơ bản (₫) · Phụ cấp (₫) · Tăng ca (₫) · Khấu trừ (₫) · Thực lĩnh (₫) · Trạng thái; bấm dòng → chi-tiet-bang-luong.html?ky=&nv=. Badge trạng thái phiếu: Nháp · đang tính (slate) · Đã chốt (emerald). (TONE còn khai Đã phát hành (amber) nhưng dữ liệu mẫu chưa dùng; khối "4 thẻ tổng quan lương" có trong code nhưng chưa render — code chết, cần chốt bỏ hay hiện.)

Enum hợp đồng — đã chuẩn hoá 11/08/2026

Khối Hợp đồng lao động trong tab Hồ sơ dùng đúng một bộ enum với màn Hợp đồng lao động — không khai riêng:

  • Trạng thái: Đang hiệu lực · Sắp hết hạn · Hết hạn · Chấm dứt hợp đồng
  • Loại hợp đồng: Xác định thời hạn · Thử việc · Thực tập (3 loại)

Đã sửa mockup: chi-tiet-nhan-su.html (badge + dữ liệu), nguồn chung nhan-su-data.js, và form them-hop-dong.html (bỏ Xác định 12/24 tháng · Không thời hạn · Khoán việc).

Quan hệ NV ↔ Hợp đồng

Mock hiện 1 NV ↔ 1 HĐ, nhưng khối Hợp đồng có phụ đề đếm số HĐ. Dev thiết kế 1 NV có nhiều HĐ theo thời gian (lịch sử hợp đồng).

Yêu cầu chức năng chi tiết (FR-NS-02.x)

Đặc tả từng chức năng của màn Chi tiết hồ sơ ở mức thao tác. Cột Quyền ghi vai trò được dùng chức năng (theo ma trận §2): AD Admin · NS Nhân sự · QL Quản lý (chỉ xem, phạm vi phòng ban mình + bản thân). Nhân viên không truy cập màn này — tự xem hồ sơ ở Trang cá nhân.

I. Khung màn hình & chỉnh sửa

Mã Chức năng Mô tả Quyền
FR-NS-02.1 Hiển thị chi tiết hồ sơ Mở chi-tiet-nhan-su.html?ma=NV-xxx → thẻ đầu hồ sơ: ảnh đại diện · Họ tên + badge trạng thái · "Chức vụ · Phòng ban"; chip liên hệ Mã NV · Email · SĐT · "Vào làm <ngày>". AD · NS · QL
FR-NS-02.2 Hiển thị theo tab 3 tab ngang: Hồ sơ nhân sự · Bảng lương (FR-NS-09) · Công nợ (giai đoạn sau). AD · NS · QL
FR-NS-02.3 Chuyển sang chế độ chỉnh sửa Người dùng có quyền sửa nhấn Sửa → hệ thống chuyển toàn bộ trường sang chế độ Edit (&edit=1). QL không thấy nút Sửa. (Mockup hiện mở form đầy đủ them-nhan-vien.html?ma= thay vì sửa tại chỗ — điểm bất nhất cần chốt, xem ghi chú "Chế độ xem gọn hơn form Thêm/Sửa" ở trên.) AD · NS
FR-NS-02.4 † Lưu thay đổi Ở chế độ Edit, nhấn Lưu → validate (BR-NS Nhóm 9) rồi ghi hồ sơ, thoát Edit. AD · NS
FR-NS-02.5 † Hủy chỉnh sửa Thoát Edit, bỏ thay đổi chưa lưu, về chế độ xem. AD · NS
FR-NS-02.6 Xem tab Bảng lương Chuyển sang tab Bảng lương — đặc tả ở FR-NS-09. QL: tab này chỉ hiện khi mở hồ sơ của chính mình; mở hồ sơ NV phòng ban thì tab Bảng lương bị ẩn. AD · NS · QL (chỉ hồ sơ mình)

II. Hợp đồng lao động (khối trong tab Hồ sơ)

Mã Chức năng Mô tả Quyền
FR-NS-02.7 Thêm hợp đồng Nút + Thêm hợp đồng → tạo hợp đồng mới cho NV (FR-HD-09). AD · NS
FR-NS-02.8 Xem chi tiết hợp đồng Nhấn một dòng trong bảng HĐ → mở màn Chi tiết hợp đồng (chi-tiet-hop-dong-nhan-su.html?ma=). AD · NS · QL
FR-NS-02.9 Hiển thị hợp đồng hiện hành NV có nhiều hợp đồng → hiển thị (đưa lên đầu) hợp đồng còn hiệu lực đầu tiên (BR-NS-012). AD · NS · QL

III. Thông tin cá nhân & tài khoản (khối trong tab Hồ sơ)

Mã Chức năng Mô tả Quyền
FR-NS-02.10 Hiển thị định danh & liên hệ Họ tên · SĐT · Giới tính · Ngày sinh · Số CCCD · MST cá nhân · Mã BHXH · Dân tộc · Tôn giáo · Tình trạng hôn nhân. (CCCD/MST/BHXH ẩn với QL.) AD · NS · QL*
FR-NS-02.11 Hiển thị tài khoản ngân hàng Tên ngân hàng · Số TK · Chủ TK. Ẩn toàn bộ khối với QL. AD · NS
FR-NS-02.12 Hiển thị địa chỉ nơi ở Tỉnh/TP · Xã/Phường · Địa chỉ chi tiết. AD · NS · QL
FR-NS-02.13 Hiển thị vị trí công tác Ngày bắt đầu làm việc · Trạng thái (badge) · Vai trò của nhân sự · Phòng ban · Chức vụ · Chức danh. AD · NS · QL
FR-NS-02.14 Hiển thị quản lý trực tiếp Người quản lý trực tiếp của NV. AD · NS · QL
FR-NS-02.15 Hiển thị nơi làm việc / địa điểm chấm công Danh sách địa điểm chấm công NV được gán (có thể nhiều nơi). AD · NS · QL
FR-NS-02.16 Hiển thị tài khoản đăng nhập Tên đăng nhập · Mật khẩu dạng ẩn •••••••• (ẩn) — không hiển thị rõ (BR-NS-021). Ẩn toàn bộ khối với QL. AD · NS

QL vẫn xem FR-NS-02.10 nhưng ẩn* ba trường CCCD · MST · BHXH.

IV. Bảo mật tài khoản

Mã Chức năng Mô tả Quyền
FR-NS-02.17 † Reset mật khẩu Admin/Nhân sự đặt lại mật khẩu đăng nhập của NV (BR-NS-022); mật khẩu mới đổi khi NV đăng nhập lần đầu. AD · NS

V. Kinh nghiệm (tệp đính kèm)

Mã Chức năng Mô tả Quyền
FR-NS-02.18 Hiển thị danh sách kinh nghiệm Liệt kê tất cả tệp kinh nghiệm làm việc của NV. AD · NS · QL
FR-NS-02.19 Upload kinh nghiệm Cho phép tải lên nhiều tệp (định dạng/dung lượng theo BR-NS Nhóm 5). AD · NS
FR-NS-02.20 Download tệp Tải tệp về máy. QL không được tải (chỉ xem danh sách). AD · NS
FR-NS-02.21 Xóa tệp Xóa tệp khi có quyền. AD · NS

VI. Chứng chỉ (tệp đính kèm)

Mã Chức năng Mô tả Quyền
FR-NS-02.22 Hiển thị chứng chỉ Danh sách tệp chứng chỉ / kỹ năng của NV. AD · NS · QL
FR-NS-02.23 Upload chứng chỉ Cho phép tải lên nhiều tệp. AD · NS
FR-NS-02.24 Download chứng chỉ Tải tệp về. QL không được tải. AD · NS
FR-NS-02.25 Xóa chứng chỉ Xóa tệp khi có quyền. AD · NS

VII. Hồ sơ sức khỏe (tệp đính kèm)

Mã Chức năng Mô tả Quyền
FR-NS-02.26 Hiển thị hồ sơ khám sức khỏe Hiển thị: Tên tệp · Ngày khám · Hạn khám. AD · NS · QL
FR-NS-02.27 Upload hồ sơ Cho phép tải lên hồ sơ khám sức khỏe. AD · NS
FR-NS-02.28 Download hồ sơ Tải hồ sơ về. QL không được tải. AD · NS
FR-NS-02.29 Thay thế hồ sơ Tải lên phiên bản mới thay hồ sơ cũ. AD · NS

VIII. Phân quyền hiển thị

Mã Chức năng Mô tả Quyền
FR-NS-02.30 Phân quyền theo vai trò Quản lý các thao tác Xem · Thêm · Sửa · Xóa trên màn theo Role — chi tiết ở bảng dưới. AD · NS · QL

Ma trận quyền cấp khối/trường trên màn Chi tiết hồ sơ:

Khối / thao tác Admin Nhân sự Quản lý
Xem hồ sơ (thẻ đầu · cá nhân · công việc · địa chỉ · hợp đồng) ✔ ✔ ✔ (phòng ban mình + bản thân)
Bảng lương / phiếu lương (tab Bảng lương) ✔ ✔ ẩn (chỉ xem lương của chính mình ở Trang cá nhân)
Định danh nhạy cảm — CCCD · MST · BHXH ✔ ✔ ẩn
Tài khoản ngân hàng ✔ ✔ ẩn
Tài khoản đăng nhập (Tên đăng nhập · Mật khẩu ẩn) ✔ ✔ ẩn
Tệp đính kèm (KN · CC · Sức khỏe) — Upload / Download / Xóa ✔ ✔ — (chỉ xem danh sách)
Sửa hồ sơ · Thêm hợp đồng · Reset mật khẩu ✔ ✔ —

IX. Đồng bộ liên phân hệ

Mã Chức năng Mô tả Quyền
FR-NS-02.31 † Đồng bộ sang phân hệ liên quan Thông tin hồ sơ thay đổi được đồng bộ sang Chấm công · Tính lương · Quyết định · Hợp đồng theo quy định nghiệp vụ (BR-NS-026). (hệ thống)
FR-NS-02.32 Đồng bộ trạng thái Có quyết định nghỉ việc có hiệu lực → trạng thái hồ sơ tự cập nhật (xem BR-05/06). (hệ thống)
FR-NS-02.33 Đồng bộ hợp đồng Hợp đồng hết hạn → trạng thái hợp đồng tự cập nhật. (hệ thống)
FR-NS-02.34 Đồng bộ bảng lương Thông tin công việc thay đổi → áp dụng cho kỳ lương theo quy định doanh nghiệp. Hệ thống không tự tính hồi tố: kỳ đã tạo chỉ cập nhật khi người làm lương chủ động bấm Tính lại (FR-PL-DETAIL-13) khi kỳ lương chưa chốt (BR-PL-RECALC-01). (hệ thống)

Mục có dấu † — dựng lại từ mockup/BR, cần BA chốt

Các mã † không đọc thẳng được từ mockup mà dựng lại để lấp chỗ trống đánh số bạn đưa: FR-NS-02.4 · .5 (Lưu / Hủy khi Edit — suy từ chế độ edit=1), FR-NS-02.17 (Reset mật khẩu — chưa có nút trên mockup, lấy từ BR-NS-022), FR-NS-02.31 (đồng bộ tổng quát — khái quát từ BR-NS-026). Nhờ BA xác nhận đúng ý trước khi Dev dùng.

Quy tắc nghiệp vụ hồ sơ (BR-NS)

Quan hệ với BR ở §4

Vài quy tắc dưới trùng ý với BR-05/06/07 (trạng thái tự động theo quyết định, lương chỉ tính NV Đang làm việc) — đây là góc nhìn ở cấp hồ sơ, không mâu thuẫn.

Nhóm 1 — Hồ sơ

Mã Quy tắc
BR-NS-001 Mỗi nhân viên chỉ có một hồ sơ nhân sự.
BR-NS-002 Mã nhân viên là duy nhất.
BR-NS-003 Email công việc không bắt buộc duy nhất (cho phép trùng).
BR-NS-004 Username đăng nhập là duy nhất.
BR-NS-005 Số CCCD không được trùng.
BR-NS-006 Mã số thuế không được trùng.
BR-NS-007 Mã BHXH không được trùng.

Nhóm 2 — Trạng thái

Mã Quy tắc
BR-NS-008 Trạng thái nhân viên gồm: Đang làm việc · Tạm nghỉ · Đã nghỉ việc.
BR-NS-009 Trạng thái lấy từ Quyết định nhân sự có hiệu lực.
BR-NS-010 Không cho phép chỉnh sửa hồ sơ nếu nhân viên đã nghỉ việc (trừ người có quyền đặc biệt).

Nhóm 3 — Hợp đồng

Mã Quy tắc
BR-NS-011 Một nhân viên có nhiều hợp đồng.
BR-NS-012 Chỉ một hợp đồng ở trạng thái Đang hiệu lực tại cùng một thời điểm.
BR-NS-013 Không được tạo hợp đồng mới chồng thời gian với hợp đồng đang hiệu lực.
BR-NS-014 Ngày bắt đầu ≤ ngày kết thúc.

Nhóm 4 — Phòng ban

Mã Quy tắc
BR-NS-015 Chức vụ phải thuộc phòng ban được cấu hình.
BR-NS-016 Quản lý trực tiếp phải là nhân viên đang làm việc.
BR-NS-017 Không được chọn chính mình làm quản lý trực tiếp.

Nhóm 5 — File đính kèm

Mã Quy tắc
BR-NS-018 Chỉ chấp nhận định dạng: PDF · DOC · DOCX · JPG · PNG.
BR-NS-019 Dung lượng tối đa mỗi file theo cấu hình hệ thống.
BR-NS-020 Không được tải file nhiễm virus hoặc định dạng không hợp lệ.

Nhóm 6 — Bảo mật

Mã Quy tắc
BR-NS-021 Mật khẩu không hiển thị dạng rõ (luôn ••••••••).
BR-NS-022 Admin và Nhân sự (HR) được quyền reset mật khẩu của nhân viên.

Nhóm 7 — (dành chỗ)

BR-NS-023 → BR-NS-025 — chưa đặc tả, bổ sung sau (giữ khoảng đánh số theo bản gốc của BA).

Nhóm 8 — Đồng bộ

Mã Quy tắc
BR-NS-026 Thông tin thay đổi phải đồng bộ sang các phân hệ liên quan: Chấm công · Tính lương · Quyết định · Hợp đồng theo quy định nghiệp vụ.
BR-NS-027 Nhân viên Đã nghỉ việc không xuất hiện trong danh sách chọn của chức năng tạo hợp đồng · bổ nhiệm · phân công công việc mới.

Nhóm 9 — Validation

Mã Quy tắc
BR-NS-028 Ngày vào làm không được lớn hơn ngày hiện tại.
BR-NS-029 Ngày sinh phải nhỏ hơn ngày vào làm.
BR-NS-030 Số điện thoại phải đúng định dạng.
BR-NS-031 Email phải đúng định dạng.
BR-NS-032 Số CCCD phải đúng số ký tự theo quy định.

Quy tắc nghiệp vụ tệp đính kèm (BR-NS-FILE)

Chi tiết hoá Nhóm 5 (BR-NS-018/019/020) cho các tệp Kinh nghiệm (FR-NS-02.18–.21), Chứng chỉ (.22–.25) và Sức khỏe (.26–.29).

Mã Quy tắc
BR-NS-FILE-003 Dung lượng tối đa mỗi file cấu hình trên hệ thống — ví dụ tối đa 10 MB/file. Vượt giới hạn → thông báo "File vượt quá dung lượng cho phép."
BR-NS-FILE-004 Số lượng file — Kinh nghiệm: nhiều file · Chứng chỉ: nhiều file · Sức khỏe: một hoặc nhiều file (tùy nghiệp vụ).
BR-NS-FILE-005 Không cho phép upload file rỗng (0 byte).
BR-NS-FILE-006 Tên file giữ nguyên sau khi tải lên; không cho phép tên chứa ký tự không hợp lệ theo hệ điều hành hoặc quy định bảo mật.
BR-NS-FILE-007 File trùng — tải lên file cùng tên · kích thước · thời gian tạo (hoặc checksum) → cảnh báo "File đã tồn tại."
BR-NS-FILE-011 Download — người dùng có quyền được phép tải file về.
BR-NS-FILE-012 Không hỗ trợ xem trước (preview) file đính kèm — muốn xem nội dung thì tải file về máy.
BR-NS-FILE-013 Xóa file — chỉ người có quyền mới được xóa; sau khi xóa, hệ thống cập nhật ngay danh sách file.
BR-NS-FILE-014 Lưu trữ — file lưu trên hệ thống lưu trữ tập trung; database chỉ lưu metadata: Tên file · Đường dẫn · Kích thước · Loại file · Ngày tải lên · Người tải lên.

BR-NS-FILE-001/002 và 008–010 — khoảng trống theo bản gốc của BA, bổ sung sau (dự kiến gồm định dạng hợp lệ, xem BR-NS-018).

FR-NS-09. Tab Bảng lương — Phiếu lương gần đây

Chi tiết hoá tab Bảng lương của Chi tiết hồ sơ (FR-NS-02) — file chi-tiet-nhan-su.html (tab 2).

Mục đích: hiển thị danh sách các phiếu lương gần nhất của nhân viên để người dùng xem nhanh tình hình lương và truy cập vào chi tiết phiếu lương.

Mã Chức năng Mô tả
FR-NS-09.1 Hiển thị danh sách phiếu lương Khi mở tab, hệ thống hiển thị danh sách kỳ lương của nhân viên, các cột: Kỳ lương · Số công · Lương cơ bản · Phụ cấp · Tiền tăng ca · Tổng khấu trừ · Thực lĩnh · Trạng thái.
FR-NS-09.2 Sắp xếp dữ liệu Danh sách sắp theo Kỳ lương mới nhất → cũ nhất.
FR-NS-09.3 Giới hạn dữ liệu Mặc định hiển thị 04 kỳ lương gần nhất; nếu nhân viên có ít hơn 4 kỳ thì hiển thị toàn bộ.
FR-NS-09.4 Xem chi tiết phiếu lương Nhấn một dòng → mở phiếu lương chi tiết của chính nhân viên đó (chi-tiet-bang-luong.html?ky=&nv=, FR-LU-01).
FR-NS-09.5 Hiển thị khi chưa có dữ liệu Nếu nhân viên chưa từng tính lương → hiển thị "Chưa có phiếu lương.", không hiển thị bảng.
FR-NS-09.6 Phân quyền Quản lý KHÔNG có quyền xem lương của nhân viên khác (kể cả NV thuộc phòng ban mình): khi QL mở hồ sơ NV phòng ban → tab Bảng lương bị ẩn. QL chỉ xem lương của chính mình (như Nhân viên) ở Trang cá nhân. Các vai trò không có quyền xem lương cũng ẩn tab tương tự.
FR-NS-09.7 Đồng bộ dữ liệu Thông tin lương luôn lấy trực tiếp từ bảng lương đã lưu; không lưu dữ liệu riêng tại Hồ sơ nhân sự.
FR-NS-09.8 Refresh dữ liệu Khi bảng lương được tính lại (FR-PL-DETAIL-13) hoặc chốt lương → tab phải hiển thị dữ liệu mới ngay khi tải lại màn hình.
FR-NS-09.9 Hiển thị định dạng tiền Giá trị tiền có dấu phân cách hàng nghìn, đơn vị VNĐ; không hiển thị số âm dạng màu đen; khoản khấu trừ hiển thị kèm dấu "−".
FR-NS-09.10 Hiển thị trạng thái Cột Trạng thái hiển thị trạng thái hiện tại của bảng lương: Đang tính · Đang ký & xác nhận · Hoàn tất ký & xác nhận (badge kỳ lương — xem §3.1 Trạng thái kỳ lương).

Quy tắc nghiệp vụ — Bảng lương (BR-NS-SAL)

Mã Quy tắc
BR-NS-SAL-001 Mỗi phiếu lương thuộc đúng 01 nhân viên và 01 kỳ lương.
BR-NS-SAL-002 Một nhân viên có thể có nhiều phiếu lương theo từng kỳ.
BR-NS-SAL-003 Không cho phép tồn tại 2 phiếu lương của cùng nhân viên + kỳ lương.
BR-NS-SAL-004 Phiếu lương chỉ hiển thị nếu kỳ lương đã được tạo.
BR-NS-SAL-005 Bảng lương đang tính → trạng thái hiển thị "Nháp · Đang tính".
BR-NS-SAL-006 Bảng lương đã khóa → không cho phép chỉnh sửa từ màn hồ sơ nhân sự.
BR-NS-SAL-007 Bảng lương đã chốt → mọi số liệu chỉ được phép xem.
BR-NS-SAL-008 Bảng lương bị tính lại (FR-PL-DETAIL-13 · BR-PL-RECALC-15) → thông tin trong tab Phiếu lương phải cập nhật theo dữ liệu mới.
BR-NS-SAL-009 Thực lĩnh lấy từ kết quả cuối cùng sau khi tính lương; không tự tính tại màn hồ sơ nhân sự.
BR-NS-SAL-010 Các khoản hiển thị phải đúng dữ liệu đã lưu trong bảng lương; không tính lại trên giao diện.
BR-NS-SAL-011 Người dùng không có quyền xem lương → không được xem: Lương cơ bản · Phụ cấp · OT · Khấu trừ · Thực lĩnh.
BR-NS-SAL-012 Nhân viên đã nghỉ việc → vẫn hiển thị các kỳ lương trước đó.
BR-NS-SAL-013 Nhân viên chưa từng có bảng lương → hiển thị "Chưa có phiếu lương.".
BR-NS-SAL-014 Danh sách mặc định chỉ hiển thị 4 kỳ gần nhất.
BR-NS-SAL-015 Danh sách sắp theo kỳ lương giảm dần.
BR-NS-SAL-016 Chỉ hiển thị các phiếu lương thuộc đúng nhân viên đang mở hồ sơ.
BR-NS-SAL-017 Nhấn vào một kỳ lương → điều hướng sang màn Chi tiết phiếu lương nếu người dùng có quyền xem.
BR-NS-SAL-018 Người dùng không có quyền xem chi tiết → hiển thị thông báo "Bạn không có quyền xem phiếu lương.".
BR-NS-SAL-019 Quản lý KHÔNG được xem lương của nhân viên phòng ban mình; chỉ xem lương của chính mình (như Nhân viên, ở Trang cá nhân). Mở hồ sơ NV khác → ẩn tab Bảng lương.

Cần chốt — bộ trạng thái hiển thị ở cột Trạng thái

FR-NS-09.10 dùng badge kỳ 3 mức (Đang tính · Đang ký & xác nhận · Hoàn tất ký & xác nhận — §3.1), nhưng BR-NS-SAL-005 lại ghi "Nháp · Đang tính" (badge phiếu, trùng nhãn mockup Nháp · đang tính / Đã chốt). Đây là 2 bộ nhãn khác nhau: badge kỳ là roll-up của cả kỳ (nhiều NV), còn mỗi dòng ở tab này là 1 NV × 1 kỳ. Nhờ BA chốt một bộ nhãn dùng thống nhất ở cột Trạng thái (liên quan §11.2 Vấn đề mở).

🔄 Luồng nghiệp vụ — Thêm mới hồ sơ nhân viên

Vai trò được thao tác: chỉ Nhân sự (NS) · Admin (AD) (§2, BR-NS-ADD-031/032). Quản lý · Nhân viên không truy cập màn Thêm. Hệ thống (HT) tự động hoá các bước validate · sinh mã · lưu file · đồng bộ.

Viết tắt vai trò (dùng chung cho cả 4 luồng nghiệp vụ): NS Nhân sự · AD Admin · QL Quản lý · NV Nhân viên · HT Hệ thống. Dấu → nghĩa là người thao tác chuyển tiếp cho hệ thống xử lý tự động (vd NS · AD → HT).

Bước Vai trò Hành động Kết quả / Chuyển trạng thái
1. Mở màn Thêm NS · AD Từ Danh sách nhân sự bấm + Thêm nhân viên → mở form them-nhan-vien.html Hiển thị form 5 section (nút không hiện với vai trò không có quyền — BR-NS-ADD-032)
2. Nhập thông tin cá nhân NS · AD Điền Họ tên* · SĐT* · giới tính · ngày sinh · CCCD · MST · BHXH · ngân hàng · địa chỉ (các trường danh mục lấy từ Thiết lập danh mục) Dữ liệu tạm trên form
3. Nhập thông tin công việc NS · AD Chọn Vai trò* · Phòng ban* · Chức vụ · Chức danh · Quản lý trực tiếp · Email công việc · chọn ≥1 Địa điểm chấm công* Chức vụ/Quản lý lọc theo phòng ban (BR-NS-ADD-016/037)
4. Tạo tài khoản đăng nhập NS · AD → HT Nếu bật tạo tài khoản: NS nhập tay Tên đăng nhập (Username); HT sinh Password ngẫu nhiên Username phải duy nhất (BR-NS-ADD-035); Password ẩn, đổi khi NV đăng nhập lần đầu (nếu cấu hình) (BR-NS-ADD-019/020/021)
5. Đính kèm hồ sơ NS · AD Upload Kinh nghiệm · Chứng chỉ · Giấy khám sức khỏe (nhiều file); Download/Xóa trước khi lưu File chờ lưu (chưa ghi hệ thống)
6. Lưu hồ sơ NS · AD → HT Bấm ✓ Thêm nhân viên → HT validate (BR-NS-ADD-008→013) Lỗi → báo & dừng tại trường lỗi. Hợp lệ → tạo hồ sơ · sinh mã NV · lưu file (FR-NS-03.13)
7. Sau khi tạo HT Đặt trạng thái mặc định Đang làm việc (BR-NS-ADD-027); đồng bộ hồ sơ sang Chấm công · Hợp đồng · Quyết định · Lương · Nghỉ phép · Khen thưởng · Kỷ luật (FR-NS-03.16); gửi tài khoản cho NV (kênh gửi theo cấu hình — cần chốt) hoặc HR sao chép (FR-NS-03.08); có thể gửi thông báo chào mừng (BR-NS-ADD-041) NV xuất hiện ở danh sách chọn các phân hệ (BR-NS-ADD-029)
— Hủy (nhánh rẽ) NS · AD Bấm Hủy bất kỳ lúc nào trước bước 6 Bỏ toàn bộ dữ liệu nhập & file chưa lưu (BR-NS-ADD-042)

* = trường/bước bắt buộc.

FR-NS-03. Thêm hồ sơ nhân viên

File: them-nhan-vien.html — form 5 section, nút Huỷ / Lưu nháp / ✓ Thêm nhân viên

Section 2 — Thông tin cá nhân

Trường Kiểu Bắt buộc Ràng buộc / lựa chọn
Họ và tên text ✓
Giới tính select Nam / Nữ / Khác
Ngày sinh date
Số CCCD · Mã số thuế · Mã số BHXH text (số)
Dân tộc text mặc định "Kinh"
Tôn giáo text mặc định "Không"
Tình trạng hôn nhân select Độc thân / Đã kết hôn / Khác
Số điện thoại tel ✓
Email email ten@longdo.com.vn
Tên ngân hàng / Số TK / Chủ TK text nhóm Tài khoản ngân hàng
Tỉnh/TP · Xã/Phường select danh sách rút gọn (hard-code)
Địa chỉ chi tiết text

Section 3 — Thông tin công việc

Trường Kiểu Bắt buộc Lựa chọn
Vai trò của nhân sự select ✓ Admin / Nhân sự / Quản lý / Nhân viên (mặc định) — 4 vai trò, xem §2
Phòng ban select ✓ 6 phòng ban
Chức vụ select Công nhân / Chỉ huy trưởng / Nhân viên / Trưởng phòng
Chức danh select BA / Kế toán / Lái xe / Kỹ sư / Công nhân / Bảo vệ / Thủ kho / Nhân viên hành chính
Email công việc email
Ngày bắt đầu làm việc date ✓
Nơi làm việc / Địa điểm chấm công checkbox (chọn nhiều) — trình bày dạng dropdown, mục đã chọn hiện thành chip trong ô, mở ra mới thấy danh sách (KHÔNG phải <select multiple> HTML thuần) ✓ Chọn ≥1 địa điểm: Văn phòng Long Đỗ / Công trường Linh Đàm / Hà Đông / Yên Bái — nhân viên có thể chấm công tại nhiều nơi
Chữ ký nhân viên upload ảnh (1 tệp / lần) Định dạng & dung lượng theo cấu hình (BR-SIGN-15) — mockup hiện đang áp JPG · JPEG · PNG, tối đa 2 MB. Màn Thêm mới: ảnh là bản nháp — chưa lưu, hiển thị không có badge trạng thái; chỉ 01 nút chỉ-icon Thay ảnh để chọn ảnh khác đè lên, không có nút Xoá ảnh (BR-SIGN-16). Màn Sửa: chữ ký đã lưu không sửa được — muốn thay phải Xoá (xoá mềm) rồi tải chữ ký mới (FR-NS-SIGN)
Tên đăng nhập text
Mật khẩu password "Tối thiểu 8 ký tự", đổi khi đăng nhập lần đầu

Section 4 — Học vấn & kinh nghiệm: 4 bảng thêm/xoá dòng (Học vấn · Kinh nghiệm · Chứng chỉ/Kỹ năng · Ngoại ngữ) + upload file. Section 5 — Thông tin sức khỏe: Nhóm máu · Tình trạng · Chiều cao · Cân nặng · Ngày khám · Dị ứng · Tiền sử bệnh · upload Giấy khám (PDF/JPG/PNG).

Dev lưu ý

Form chưa validate thật, chưa sinh mã NV. Section 1 (ảnh) ở form thêm chỉ là icon tĩnh (không upload), khác chế độ sửa (có "Đổi ảnh đại diện"). Danh sách Chức vụ/Chức danh/Lịch ở form thêm rút gọn/khác so với màn chi tiết — cần thống nhất từ danh mục.

Yêu cầu chức năng — màn Thêm hồ sơ (FR-NS-03.x)

Đặc tả chức năng của màn Thêm hồ sơ nhân viên (them-nhan-vien.html). Quyền truy cập màn: Admin · Nhân sự (xem §2, FR-NS-03.17 & BR-NS-ADD-031/032).

1. Thông tin cá nhân

Mã Chức năng Mô tả
FR-NS-03.01 Hiển thị form thông tin cá nhân Hiển thị các trường: Họ và tên · Số điện thoại · Giới tính · Ngày sinh · CCCD · MST cá nhân · Mã số BHXH · Dân tộc · Tôn giáo · Tình trạng hôn nhân · Ngân hàng · Số tài khoản · Chủ tài khoản · Tỉnh/Thành phố · Xã/Phường · Địa chỉ chi tiết.
FR-NS-03.02 Nhập thông tin Cho phép người dùng nhập, sửa dữ liệu trước khi lưu.
FR-NS-03.03 Danh mục dùng chung Các trường Dân tộc · Tôn giáo · Tình trạng hôn nhân · Ngân hàng · Tỉnh · Xã lấy từ danh mục hệ thống (FR-DM-01).

2. Thông tin công việc

Mã Chức năng Mô tả
FR-NS-03.04 Khai báo thông tin công việc Cho phép nhập: Ngày bắt đầu làm việc · Vai trò · Phòng ban · Chức vụ · Chức danh · Quản lý trực tiếp · Email công việc · Địa điểm làm việc.
FR-NS-03.05 Chọn nhiều địa điểm chấm công Cho phép chọn một hoặc nhiều địa điểm chấm công.
FR-NS-03.06 Tự sinh mã nhân viên Khi lưu hồ sơ, hệ thống tự động sinh mã nhân viên theo quy tắc cấu hình.

3. Tài khoản đăng nhập

Mã Chức năng Mô tả
FR-NS-03.07 Tạo tài khoản đăng nhập Nếu doanh nghiệp bật chức năng tạo tài khoản: Nhân sự nhập tay Tên đăng nhập (Username) — đảm bảo duy nhất (BR-NS-ADD-035); hệ thống tự sinh Password ngẫu nhiên (BR-NS-ADD-019).
FR-NS-03.08 Gửi tài khoản Sau khi tạo thành công, hệ thống có thể gửi thông tin tài khoản cho nhân viên (kênh gửi theo cấu hình — cần chốt) hoặc hiển thị để HR sao chép.

4. Hồ sơ đính kèm

Mã Chức năng Mô tả
FR-NS-03.09 Upload hồ sơ kinh nghiệm Cho phép upload nhiều file; định dạng PDF · DOC · DOCX · JPG · PNG (BR-NS-ADD-022).
FR-NS-03.10 Upload chứng chỉ Cho phép upload nhiều file; định dạng PDF · DOC · DOCX · JPG · PNG (BR-NS-ADD-022).
FR-NS-03.11 Upload hồ sơ sức khỏe Cho phép upload file hồ sơ khám sức khỏe; định dạng PDF · DOC · DOCX · JPG · PNG (BR-NS-ADD-022).
FR-NS-03.12 Tải xuống và xóa file Cho phép Download · Xóa file trước khi lưu. Không có xem trước (preview) — xem nội dung thì tải file về (BR-NS-FILE-012).

Chữ ký nhân viên — FR-NS-SIGN-01 → FR-NS-SIGN-05

Vị trí trên màn: mục Thông tin công việc → nhóm Chữ ký nhân viên. Có mặt ở cả 3 màn hồ sơ nhân sự: Thêm (them-nhan-vien.html) · Sửa (them-nhan-vien.html?ma= và chi-tiet-nhan-su.html?ma=&edit=1) · Xem chi tiết (chi-tiet-nhan-su.html — chỉ đọc). Nhân viên xem chữ ký của chính mình ở Trang cá nhân › Mẫu chữ ký.

Mục đích: lưu ảnh chữ ký của nhân viên để dùng khi ký đề xuất / chứng từ / phê duyệt. Chữ ký do Nhân sự (HR) cấp, nhân viên không tự đăng ký (BR-CN-22).

Trạng thái chữ ký: Đang hiệu lực (emerald) · Đã xoá (slate — xoá mềm, chỉ còn trong CSDL, không hiển thị trên giao diện). Ảnh bản nháp ở màn Thêm nhân viên không có badge trạng thái — ở màn thêm mới thì "chưa lưu" là đương nhiên, không cần nhắc lại.

Hai chế độ thao tác — khác nhau ở chỗ chữ ký đã nằm trong CSDL hay chưa

  • Màn Thêm nhân viên (hồ sơ chưa tồn tại): ảnh chữ ký tải lên là bản nháp — chưa lưu, hiển thị không kèm badge trạng thái. Chỉ có một nút chỉ-icon Thay ảnh (icon mũi tên xoay, nhãn ở title/aria-label) — chọn ảnh khác đè lên ảnh đang chọn, không popup xác nhận, không ghi vết. Không có nút Xoá ảnh ở màn này. Chữ ký chỉ thành bản ghi Đang hiệu lực khi bấm Lưu hồ sơ (BR-SIGN-16).
  • Màn Chi tiết hồ sơ → Sửa (chữ ký đã nằm trong CSDL): không sửa được; chỉ có nút Xoá — xoá mềm, có popup xác nhận (FR-NS-SIGN-03 · BR-SIGN-17).

Bố cục thẻ chữ ký — khác nhau giữa hai chế độ (theo mockup đã chốt):

Thành phần trên thẻ Màn Thêm nhân viên (bản nháp) Màn Sửa / Xem (đã lưu)
Ảnh chữ ký (bấm → xem cỡ lớn) ✔ ✔
Tên tệp ✔ ✔
Dòng Tải lên <ngày> · <người tải> — (chưa lưu nên chưa có ngày / người) ✔
Badge trạng thái — (không hiện) ✔ Đang hiệu lực
Nút thao tác 01 nút chỉ-icon Thay ảnh (↻) Nút Xoá (có nhãn chữ) — chỉ ở chế độ Sửa

Nút Thay ảnh chỉ có icon, không có nhãn chữ để thẻ gọn; nhãn "Thay ảnh chữ ký" đặt ở title + aria-label phục vụ tooltip & trình đọc màn hình. Popup xem ảnh cỡ lớn ở bản nháp cũng không hiện badge và không hiện dòng ngày tải lên.

Cột Mã gốc là số hiệu BA đặt trong bản đặc tả gốc (FR-SIGN-0x); cột Mã là số hiệu dùng trong SRS này (FR-NS-SIGN-0x, đã được tham chiếu ở nhiều mục khác nên giữ nguyên). Hai bộ mã chỉ về cùng một chức năng.

Mã Mã gốc Chức năng Mô tả Quyền
FR-NS-SIGN-02 FR-SIGN-01 Hiển thị chữ ký nhân viên Hệ thống hiển thị thông tin chữ ký tại màn Chi tiết hồ sơ nhân sự — dữ liệu hiển thị: ① Ảnh chữ ký (bấm vào ảnh → xem cỡ lớn) · ② Tên file · ③ Ngày tải lên · ④ Người tải lên · ⑤ Trạng thái (badge) · ⑥ Nút thao tác — hiện theo quyền (Xoá / Tải chữ ký mới, chỉ ở chế độ Sửa với AD · NS). Màn hồ sơ chỉ hiển thị chữ ký Đang hiệu lực (BR-SIGN-11); chữ ký Đã xoá KHÔNG hiển thị ở bất kỳ màn nào (vẫn lưu trong CSDL để truy vết — BR-SIGN-10 · BR-SIGN-17). Nhân viên chưa có chữ ký hiệu lực → Xem chi tiết hiện dòng “Chưa có chữ ký”, chế độ Sửa hiện khung tải chữ ký mới. Ở màn Xem chi tiết chỉ đọc — không có nút thao tác. AD · NS · QL (chỉ xem)
FR-NS-SIGN-01 FR-SIGN-02 Thêm mới chữ ký Cho phép Admin · Nhân sự (HR) tải lên chữ ký cho nhân viên (BR-SIGN-02). Luồng: ① người dùng nhấn Tải lên → ② chọn file ảnh → ③ hệ thống kiểm tra định dạng & dung lượng (BR-SIGN-15) → ④ hệ thống hiển thị ảnh xem trước. Sai định dạng / quá dung lượng → báo lỗi ngay tại chỗ, không nhận ảnh. Thời điểm ghi bản ghi khác nhau theo màn:
·
Màn Thêm nhân viên — ảnh là bản nháp, hiển thị không có badge trạng thái: chỉ 01 nút chỉ-icon Thay ảnh
(chọn ảnh khác đè lên ảnh đang chọn — không popup xác nhận, không sinh bản ghi nào; không có nút Xoá ảnh). Bấm Lưu hồ sơ → hệ thống mới tạo bản ghi chữ ký, trạng thái = Đang hiệu lực; bấm Huỷ → không lưu gì (BR-SIGN-16).
· Màn Sửa hồ sơ (hồ sơ đã có) — upload thành công → tạo bản ghi ngay, trạng thái mặc định = Đang hiệu lực (BR-SIGN-09).
Bản ghi lưu kèm tên tệp · ngày tải lên · người tải lên. NV đang có chữ ký hiệu lực → không cho tải lên (BR-SIGN-05).
AD · NS
FR-NS-SIGN-03 FR-SIGN-03 Xoá chữ ký (xoá mềm) Cho phép Admin · HR xoá chữ ký đang hiệu lực ở màn Chi tiết hồ sơ → Sửa. Luồng: ① người dùng chọn Xoá → ② hệ thống hiển thị popup xác nhận → ③ người dùng chọn Huỷ hoặc Xoá → ④ hệ thống đánh dấu bản ghi là Đã xoá, ghi ngày & người xoá (BR-SIGN-06). Là xoá mềm — bản ghi vẫn nằm trong CSDL phục vụ tra cứu / kiểm toán, không xoá cứng (BR-SIGN-17); nhưng biến khỏi mọi màn giao diện (BR-SIGN-11). Nội dung popup: “Chữ ký <tên tệp> của <tên nhân viên> sẽ không còn hiển thị trên hồ sơ và không được dùng để ký nữa. Bản ghi vẫn được lưu trong hệ thống để phục vụ tra cứu / kiểm toán. Vui lòng tải lên chữ ký mới để tiếp tục sử dụng chức năng ký.” — câu cuối in đậm; 2 nút Huỷ / Xoá. Chọn Huỷ / đóng popup → không đổi gì. AD · NS
FR-NS-SIGN-04 FR-SIGN-04 Thêm chữ ký mới sau khi xoá Sau khi chữ ký hiện tại ở trạng thái Đã xoá (thẻ chữ ký cũ biến khỏi màn, thay bằng khung tải lên): ① không còn chữ ký hiệu lực → ② nút Tải lên được hiển thị → ③ người dùng upload ảnh mới → ④ hệ thống tạo bản ghi chữ ký mới → ⑤ trạng thái = Đang hiệu lực (BR-SIGN-08/09). Bản ghi chữ ký cũ giữ nguyên trong CSDL ở trạng thái Đã xoá, không bị ghi đè (không hiển thị trên hồ sơ). AD · NS
FR-NS-SIGN-05 FR-SIGN-05 Phân quyền Admin: Xem · Thêm · Xoá. HR (Nhân sự): Xem · Thêm · Xoá. Nhân viên: chỉ xem chữ ký của chính mình — không có Thêm · Sửa · Xoá. (Khối Mẫu chữ ký trên Trang cá nhân — BR-CN-22 — đã có sẵn, đợt này không sửa màn đó.) Chi tiết ở ma trận dưới. AD · NS · NV (xem)

Ma trận quyền — chữ ký nhân viên (QL Quản lý theo ma trận §2):

Thao tác Admin HR (Nhân sự) Quản lý Nhân viên
Xem chữ ký ✔ ✔ ✔ (NV phòng ban mình — chỉ đọc) ✔ (chỉ của chính mình)
Thêm (tải lên) chữ ký ✔ ✔ — —
Xoá chữ ký (xoá mềm — chỉ ở chế độ Sửa) ✔ ✔ — —
Thay ảnh khi chưa lưu (màn Thêm nhân viên — nút chỉ-icon Thay ảnh) ✔ ✔ — —
Sửa chữ ký đã lưu · xoá cứng khỏi CSDL — — — — (không vai trò nào được — BR-SIGN-07 · BR-SIGN-17)

Quy tắc nghiệp vụ chữ ký (BR-SIGN)

Mã Quy tắc
BR-SIGN-01 Mỗi nhân viên chỉ được có 01 chữ ký ở trạng thái Đang hiệu lực tại một thời điểm.
BR-SIGN-02 Chỉ Admin và HR (Nhân sự) được phép thêm mới chữ ký cho nhân viên.
BR-SIGN-04 Nhân viên chưa có chữ ký → hệ thống cho phép Admin / HR tải lên chữ ký mới.
BR-SIGN-05 Nhân viên đã có chữ ký Đang hiệu lực → hệ thống không cho phép tải lên chữ ký mới. Thông báo: “Nhân viên đang có chữ ký hiệu lực. Vui lòng xoá chữ ký hiện tại trước khi thêm chữ ký mới.”
BR-SIGN-06 Khi HR / Admin xoá chữ ký: bản ghi chuyển trạng thái Đã xoá (kèm ngày & người xoá); chữ ký không còn được sử dụng trong các tài liệu phát hành sau thời điểm xoá.
BR-SIGN-07 Sau khi chữ ký bị xoá: không được chỉnh sửa · không được khôi phục / kích hoạt lại · chỉ còn tra cứu trong CSDL (không hiển thị trên giao diện).
BR-SIGN-08 Chỉ sau khi không còn chữ ký ở trạng thái Đang hiệu lực, hệ thống mới cho phép thêm chữ ký mới.
BR-SIGN-09 Khi tải lên chữ ký mới: hệ thống tạo bản ghi mới, không ghi đè lên chữ ký cũ; trạng thái mặc định = Đang hiệu lực.
BR-SIGN-10 Chữ ký đã xoá vẫn được lưu trong hệ thống để phục vụ tra cứu / kiểm toán.
BR-SIGN-11 Giao diện chỉ hiển thị chữ ký Đang hiệu lực; chữ ký Đã xoá không hiển thị ở bất kỳ màn nào (Xem chi tiết · Sửa · Trang cá nhân).
BR-SIGN-15 Hệ thống chỉ chấp nhận upload các định dạng được cấu hình (JPG · PNG · PDF) và dung lượng không vượt quá giới hạn cấu hình.
BR-SIGN-16 Màn Thêm nhân viên — ảnh chữ ký chưa được lưu ngay: ảnh vừa tải lên chỉ là bản nháp, chưa sinh bản ghi trong CSDL — hiển thị không kèm badge trạng thái. HR được thay ảnh khác không giới hạn qua nút chỉ-icon Thay ảnh (không có nút Xoá ảnh ở màn này, không popup xác nhận). Chỉ khi bấm Lưu hồ sơ hệ thống mới tạo bản ghi chữ ký Đang hiệu lực; bấm Huỷ / rời màn → ảnh bị bỏ, không lưu gì (FR-NS-03.15).
BR-SIGN-17 Xoá chữ ký = xoá mềm: hệ thống không xoá cứng bản ghi khỏi CSDL mà chỉ đánh dấu Đã xoá + lưu ngày xoá · người xoá. Bản ghi vẫn dùng để truy vết chứng từ đã ký trước đó, nhưng không hiển thị trên giao diện (BR-SIGN-11).

BR-SIGN-03 · BR-SIGN-12 → BR-SIGN-14 — chưa đặc tả, bổ sung sau (giữ khoảng đánh số theo bản gốc của BA).

Cần BA chốt — định dạng & dung lượng chữ ký (BR-SIGN-15)

BR-SIGN-15 ghi JPG · PNG · PDF, nhưng ba nơi hiện tại đang khác:

  • Mockup chu-ky-nhan-vien.js chỉ nhận JPG · JPEG · PNG, tối đa 2 MB (hằng số cứng).
  • BR-CN-23 (Trang cá nhân) cũng chốt ảnh, tối đa 2 MB.
  • Chữ ký được render dạng ảnh để ký đè lên chứng từ — PDF không hiển thị được bằng <img>, nếu chấp nhận PDF thì Dev phải thêm bước convert PDF → ảnh khi upload.

Nhờ BA chốt: (a) có thực sự nhận PDF không · (b) giới hạn dung lượng lấy theo cấu hình hệ thống (mặc định bao nhiêu MB?). Chốt xong sẽ sửa mockup + BR-CN-23 cho khớp.

Ràng buộc bổ sung đã dựng trong mockup — chờ BA cấp mã BR

Ngoài các quy tắc trên, mockup còn áp các ràng buộc sau (Dev hiện thực theo, BA bổ sung mã BR sau):

  • Khi còn chữ ký Đang hiệu lực thì ẩn hẳn khung tải lên (thể hiện BR-SIGN-05/08 trên giao diện, khớp BR-CN-22) → mỗi nhân viên chỉ thấy tối đa 1 thẻ chữ ký.
  • Khuyến nghị dùng PNG nền trong suốt để ký đè lên chứng từ.
  • Chữ ký không nằm trong danh sách trường Xuất Excel hồ sơ nhân sự (là tệp đính kèm, giống Kinh nghiệm / Chứng chỉ / Hồ sơ y tế).

5. Lưu hồ sơ

Mã Chức năng Mô tả
FR-NS-03.13 Lưu hồ sơ Khi nhấn Lưu, hệ thống: Validate dữ liệu → Tạo hồ sơ nhân viên → Sinh mã NV → Lưu file — bao gồm ghi bản ghi chữ ký từ ảnh nháp đang chọn (nếu có), trạng thái Đang hiệu lực (BR-SIGN-16).
FR-NS-03.15 Hủy Khi nhấn Hủy → không lưu dữ liệu (BR-NS-ADD-042) — ảnh chữ ký nháp cũng bị bỏ, không sinh bản ghi (BR-SIGN-16).

6. Đồng bộ dữ liệu

Mã Chức năng Mô tả
FR-NS-03.16 Đồng bộ sang các phân hệ Sau khi tạo thành công, hồ sơ được dùng cho: Chấm công · Hợp đồng · Quyết định · Tính lương · Nghỉ phép · Khen thưởng · Kỷ luật.

7. Phân quyền

Mã Chức năng Mô tả
FR-NS-03.17 Kiểm tra quyền Chỉ người có quyền Thêm nhân viên mới được phép tạo hồ sơ (BR-NS-ADD-031/032).

FR-NS-03.14 — khoảng trống theo bản gốc của BA, bổ sung sau.

Quy tắc nghiệp vụ tạo hồ sơ (BR-NS-ADD)

Quy tắc riêng của màn Thêm hồ sơ — bổ trợ cho BR-NS (Chi tiết hồ sơ) & BR-NS-FILE.

A. Quy tắc hồ sơ

Mã Quy tắc
BR-NS-ADD-001 Mỗi nhân viên chỉ có một hồ sơ nhân sự.
BR-NS-ADD-002 Mã nhân viên là duy nhất.
BR-NS-ADD-003 CCCD là duy nhất.
BR-NS-ADD-004 MST cá nhân là duy nhất (nếu có).
BR-NS-ADD-005 Mã BHXH là duy nhất (nếu có).
BR-NS-ADD-006 Email công việc có thể dùng chung (không cần duy nhất).
BR-NS-ADD-007 Username đăng nhập là duy nhất.

B. Validation

Mã Quy tắc
BR-NS-ADD-008 Trường bắt buộc: Họ tên · Số điện thoại · Ngày bắt đầu làm việc · Vai trò · Phòng ban · Địa điểm chấm công.
BR-NS-ADD-009 Ngày sinh phải nhỏ hơn ngày hiện tại.
BR-NS-ADD-010 Ngày bắt đầu làm việc không được nhỏ hơn ngày sinh.
BR-NS-ADD-011 Số điện thoại đúng định dạng.
BR-NS-ADD-012 Email đúng định dạng.
BR-NS-ADD-013 CCCD đúng số ký tự theo quy định.

C. Công việc

Mã Quy tắc
BR-NS-ADD-014 Quản lý trực tiếp phải là nhân viên đang làm việc.
BR-NS-ADD-015 Không được chọn chính mình làm quản lý.
BR-NS-ADD-016 Chức vụ phải thuộc phòng ban đã chọn.
BR-NS-ADD-017 Chức danh phải thuộc danh mục hệ thống.
BR-NS-ADD-018 Địa điểm chấm công phải đang hoạt động.

D. Tài khoản

Mã Quy tắc
BR-NS-ADD-019 Password được sinh ngẫu nhiên.
BR-NS-ADD-020 Password không hiển thị sau khi lưu.
BR-NS-ADD-021 Người dùng đổi mật khẩu khi đăng nhập lần đầu (nếu cấu hình).

E. Hồ sơ đính kèm

Mã Quy tắc
BR-NS-ADD-022 Định dạng cho phép: PDF · DOC · DOCX · JPG · PNG.
BR-NS-ADD-023 Dung lượng mỗi file không vượt quá cấu hình hệ thống.
BR-NS-ADD-024 Cho phép upload nhiều file với: Hồ sơ kinh nghiệm · Chứng chỉ.
BR-NS-ADD-025 Hồ sơ sức khỏe có thể yêu cầu ngày khám và ngày hết hiệu lực.
BR-NS-ADD-026 Tất cả file tải lên phải được quét virus trước khi lưu.

F. Trạng thái

Mã Quy tắc
BR-NS-ADD-027 Sau khi tạo thành công, trạng thái nhân viên mặc định là Đang làm việc.

G. Đồng bộ

Mã Quy tắc
BR-NS-ADD-029 Sau khi tạo hồ sơ thành công, nhân viên xuất hiện trong danh sách chọn của các phân hệ liên quan theo quyền và trạng thái.
BR-NS-ADD-030 Nhân viên chỉ được tính công và tính lương từ ngày bắt đầu làm việc.

H. Phân quyền

Mã Quy tắc
BR-NS-ADD-031 Chỉ người có quyền Thêm hồ sơ nhân sự được phép tạo mới.
BR-NS-ADD-032 Người không có quyền không được truy cập màn hình thêm mới.

I. Ràng buộc bổ sung

Mã Quy tắc
BR-NS-ADD-034 Không cho phép tạo nhân viên nếu CCCD đã tồn tại trên hệ thống (kể cả nhân viên đã nghỉ việc, tùy chính sách doanh nghiệp).
BR-NS-ADD-035 Nếu tạo tài khoản đăng nhập, Username sinh theo quy tắc cấu hình hoặc nhập thủ công nhưng vẫn phải duy nhất.
BR-NS-ADD-036 Nếu không nhập Email công việc, hệ thống vẫn cho phép lưu hồ sơ (Email không phải trường bắt buộc).
BR-NS-ADD-037 Khi chọn Phòng ban, danh sách Chức vụ và Quản lý trực tiếp chỉ hiển thị các giá trị thuộc phòng ban đó (hoặc theo quy định tổ chức).
BR-NS-ADD-038 Nếu một địa điểm chấm công bị xóa → không cho phép chọn khi tạo mới.
BR-NS-ADD-040 Nếu doanh nghiệp không dùng quy trình phê duyệt → hồ sơ có hiệu lực ngay sau khi lưu thành công.
BR-NS-ADD-041 Khi tạo hồ sơ thành công, hệ thống có thể tự động gửi thông báo chào mừng cho nhân viên theo cấu hình.
BR-NS-ADD-042 Khi hủy thao tác tạo mới → toàn bộ dữ liệu nhập và file tải lên chưa lưu sẽ không được ghi nhận vào hệ thống.

BR-NS-ADD-028 · 039 — khoảng trống theo bản gốc của BA, bổ sung sau.


5. Hợp đồng lao động

🔄 Luồng nghiệp vụ — Hợp đồng lao động

Vai trò được thao tác: Nhân sự (NS) · Admin (AD) tạo/sửa; Quản lý (QL) chỉ xem (phòng ban mình); Hệ thống (HT) tự cập nhật hiệu lực/hết hạn. (Chú giải viết tắt: xem Luồng Thêm hồ sơ.) Một nhân viên có nhiều hợp đồng theo thời gian (lịch sử HĐ).

Bước Vai trò Hành động Kết quả / Chuyển trạng thái
1. Tạo hợp đồng NS · AD + Thêm hợp đồng từ Danh sách HĐ hoặc từ hồ sơ NV → chọn Loại HĐ → form động theo loại (FR-HD-09) Form mở theo loại (Xác định thời hạn / Thử việc / Thực tập)
2. Nhập & Lưu NS · AD → HT Điền kỳ hạn · lương · phụ cấp; HT kiểm tra ngày bắt đầu ≤ ngày kết thúc (BR-NS-014) và không chồng thời gian với HĐ đang hiệu lực (BR-NS-013) Lỗi → báo & dừng. Hợp lệ → tạo HĐ (sinh Mã HĐ), gắn vào hồ sơ NV
3. Hiệu lực HT Xác định HĐ hiện hành Chỉ một HĐ Đang hiệu lực tại một thời điểm (BR-NS-012); hiển thị lên đầu ở hồ sơ (FR-NS-02.9)
— Nhập Excel (nhánh hàng loạt) NS · AD Nút Nhập Excel → modal 3 bước (tải file mẫu → chọn/kéo-thả file → xem trước & kiểm tra lỗi từng dòng) (Nhập Excel HĐ); Mã HĐ để trống → tự sinh theo loại & mã NV Nạp nhiều HĐ hợp lệ cùng lúc
— Gia hạn (nhánh kéo dài HĐ) NS · AD HĐ còn hiệu lực / sắp hết hạn → Gia hạn hợp đồng (FR-HD-10): cập nhật ngày kết thúc mới · lương · phụ cấp · file quyết định gia hạn HĐ giữ nguyên trạng thái, kéo dài thời hạn; sinh bản ghi Lịch sử gia hạn (+ Lịch sử lương nếu đổi lương)
— Nghỉ việc (nhánh kết thúc HĐ) NS · AD → HT Lập quyết định nghỉ việc ở Thêm quyết định: chọn nhân viên → tự chọn Ngày nghỉ việc (màn hiện sẵn hợp đồng để đối chiếu) → xác nhận hệ quả (BR-QD-RV-13). Ngày nghỉ việc không được sau Ngày kết thúc HĐ (BR-HD-CD-13) Ngày nghỉ việc chính là ngày kết thúc hợp đồng (BR-QD-RV-12). Tới ngày đó HT chuyển HĐ sang Chấm dứt hợp đồng (nghỉ trước hạn) hoặc Hết hạn (nghỉ đúng hạn) (BR-HD-CD-12 · BR-HD-CD-04) và khoá sửa/gia hạn (BR-HD-CD-05/06)
4. Hết hạn HT HĐ Xác định thời hạn tới ngày kết thúc Trạng thái tự cập nhật Hết hạn (FR-NS-02.33); badge Sắp hết hạn (cảnh báo trước N ngày) — ngưỡng chưa chốt, xem §11; HR ký HĐ mới (quay lại bước 1)

Màn Danh sách hợp đồng — FR-HD-01 → FR-HD-07

File: panel "Hợp đồng nhân sự" trong nhan-su.html#hop-dong

Mục đích: hiển thị danh sách tất cả hợp đồng nhân sự theo phạm vi quyền của người dùng, kèm tìm kiếm · lọc · thêm mới · xem chi tiết · Nhập/Xuất Excel.

Dữ liệu hiển thị

STT Trường Mô tả
1 Mã nhân sự Mã định danh nhân viên
2 Tên nhân viên Họ và tên — bấm để mở chi tiết hợp đồng
3 Chức vụ Chức vụ hiện tại
4 Phòng ban Phòng ban hiện tại
5 Loại hợp đồng Thử việc · Thực tập · Xác định thời hạn
6 Mã hợp đồng Mã hợp đồng (để trống khi nhập Excel → tự sinh)
7 Trạng thái Badge trạng thái HĐ (BR-HD-ST-01)

Hai điểm lệch với bản chốt trước — cần BA xác nhận

  • ~~Loại hợp đồng: bản đặc tả mới nhắc lại "Không xác định thời hạn"~~ — đã chốt lại 11/08/2026: BỎ. Enum loại hợp đồng dùng đúng 3 loại Xác định thời hạn · Thử việc · Thực tập trên toàn module (danh sách · chi tiết · form · tab Hồ sơ).
  • Cột Trạng thái không có trong danh sách trường mới, nhưng FR-HD-03 lọc theo Trạng thái và nhóm BR-HD-ST quy định trạng thái → tài liệu giữ cột Trạng thái (đúng mockup hiện tại).

Chức năng (FR)

Mã Chức năng Mô tả
FR-HD-01 Hiển thị danh sách hợp đồng Liệt kê hợp đồng theo phạm vi quyền của người dùng, với 7 trường ở bảng trên (BR-HD-DP-01/02).
FR-HD-02 Tìm kiếm Ô tìm theo Mã hợp đồng · Mã nhân viên · Họ tên nhân viên; hỗ trợ tìm gần đúng (chứa chuỗi), không phân biệt hoa/thường (BR-HD-SR-01/02).
FR-HD-03 Lọc dữ liệu Lọc theo Loại hợp đồng · Phòng ban · Trạng thái hợp đồng; các bộ lọc kết hợp đồng thời với nhau và với ô tìm (BR-HD-FL-01/02).
FR-HD-04 Thêm hợp đồng Nút + Thêm mới hợp đồng → mở màn tạo hợp đồng (FR-HD-09).
FR-HD-05 Xem chi tiết Nhấn một dòng (hoặc mã hợp đồng) → mở màn chi tiết hợp đồng chi-tiet-hop-dong-nhan-su.html?ma=NV-xxx.
FR-HD-06 Xuất Excel Xuất danh sách hợp đồng theo đúng điều kiện tìm kiếm/lọc đang áp dụng — modal chọn trường, file 2 sheet (Xuất Excel · BR-HD-EX).
FR-HD-07 Nhập Excel Nhập hàng loạt hợp đồng từ file mẫu Excel — modal 3 bước, kiểm tra lỗi từng dòng (Nhập Excel · BR-HD-VL).

Thành phần trên màn (ánh xạ mockup)

Thành phần Ghi chú
Ô tìm mã HĐ / mã NV / tên
Lọc Loại HĐ Tất cả / Xác định thời hạn / Thử việc / Thực tập
Lọc Phòng ban · Lọc Trạng thái Trạng thái: Tất cả / Đang hiệu lực / Sắp hết hạn / Hết hạn / Chấm dứt hợp đồng
Nút Nhập Excel (→ Nhập Excel) · Xuất Excel (modal chọn cột) · Thêm mới hợp đồng (→ FR-HD-09)
Bảng Mã NV · Tên (→ chi-tiet-hop-dong-nhan-su.html?ma=NV-xxx) · Chức vụ · Phòng ban · Loại HĐ · Mã HĐ · Trạng thái (danh sách chỉ xem — không có cột Ngày tạo & Thao tác; bấm dòng → chi tiết)

Badge trạng thái HĐ: Đang hiệu lực (emerald) · Sắp hết hạn (amber) · Hết hạn (rose) · Chấm dứt hợp đồng (slate — bổ sung 03/08/2026; từ 14/08/2026 do quyết định nghỉ việc đặt, xem FR-HD-11).

Xuất Excel hợp đồng

Nút Xuất Excel → modal chọn trường: tick các trường cần xuất (mặc định chọn hết) → file .xlsx 2 sheet — Hợp đồng (các trường tick) + Phụ cấp khác (itemized từng khoản, luôn kèm). Bộ trường (đã bỏ Chức vụ · Phòng ban · Trạng thái · Ngày tạo · Hình thức trả lương · Tổng phụ cấp):

Nhóm Trường
Định danh & nhân viên Mã hợp đồng · Mã nhân viên · Họ tên
Thông tin hợp đồng Loại HĐ · Ngày bắt đầu · Ngày kết thúc · Thời hạn
Lương P1 · P2 · P3 · Lương thử việc/chính thức · Lương thực tập · Lương đóng BHXH
Phụ cấp Ăn · Xăng xe/Điện thoại
  • Nhóm Lương chỉ xuất với vai trò Nhân sự / Kế toán.
  • Phụ cấp khác không còn là cột trên sheet Hợp đồng; mỗi khoản (Tên + Số tiền) là một dòng ở sheet 2 "Phụ cấp khác", nối với hợp đồng bằng Mã HĐ. Lấy từ Thành phần lương → mục "Phụ cấp khác" của hợp đồng (các khoản ngoài Ăn, Xăng xe, Điện thoại).

Nhập Excel (import hàng loạt)

Mẫu tham chiếu: docs/longdo-erp/hanh-chinh-nhan-su/mau-import-hop-dong-CACH1.xlsx

Mục đích: nạp hàng loạt hợp đồng khi di trú dữ liệu lúc go-live hoặc tuyển theo đợt lớn (vd công nhân công trường). HĐ phát sinh lẻ vẫn nhập tay qua FR-HD-09. Import chỉ Nhân sự & Admin (BR-03).

Cấu trúc file — 1 dòng = 1 hợp đồng; phụ cấp khác dạng cột cặp (Tên + Số tiền), tối đa 5 cặp trên cùng dòng:

Nhóm Cột Bắt buộc
Định danh Mã NV · Họ tên (đối chiếu) Mã NV
Loại & thời hạn Loại HĐ · Ngày bắt đầu · Ngày kết thúc · Thời hạn (tháng) · Hình thức trả lương · Mã HĐ · Trạng thái Loại HĐ · Ngày bắt đầu
Lương (theo loại) Lương cơ bản (P1) · P2 · P3 · Lương thử việc/chính thức · Lương thực tập · Lương đóng BHXH —
Phụ cấp cố định PC Xăng xe/ĐT · PC Ăn —
Phụ cấp khác PC khác 1–5 (Tên + Số tiền) —

Quy tắc nhập & kiểm tra (validate):

  • Mã NV là khoá đối chiếu hồ sơ nhân sự — không tồn tại / không Đang làm việc → báo lỗi dòng, bỏ qua dòng đó.
  • Loại HĐ · Trạng thái chọn từ danh sách (dropdown), không gõ tay. Mỗi loại HĐ chỉ điền ô lương tương ứng (Xác định thời hạn → P1/P2/P3/BHXH; Thử việc → Lương chính thức; Thực tập → Lương hỗ trợ).
  • Ngày định dạng dd/mm/yyyy, Ngày bắt đầu < Ngày kết thúc.
  • Tiền nhập số thuần (không ₫, không dấu phân cách).
  • Mã HĐ để trống → tự sinh theo loại + mã NV; điền nếu giữ số HĐ giấy cũ khi di trú. Mã HĐ trùng → báo lỗi.
  • Phụ cấp khác: có Tên thì bắt buộc có Số tiền; đổ vào Bảng 2 "Thành phần lương khác" của HĐ (không phải bảng lương cố định — xem FR-HD-08). HĐ có >5 phụ cấp khác → nhập 5, phần dư bổ sung tay ở màn Chi tiết.
  • Xem trước + báo lỗi theo từng dòng trước khi ghi: dòng hợp lệ vẫn nạp, dòng lỗi bỏ qua — không ghi nửa vời.
  • File scan HĐ (PDF) KHÔNG đi qua Excel — đính kèm sau khi import.

Giao diện mẫu — đọc file client-side, chưa ghi DB

Nút Nhập Excel có modal 3 bước (Tải file mẫu → Chọn/kéo-thả file → Xem trước & kiểm tra lỗi từng dòng → Nhập, kèm tuỳ chọn Bỏ qua dòng lỗi và chỉ nhập dòng hợp lệ). Mockup đọc file .xlsx thật ngay trên trình duyệt (thư viện SheetJS): parse 2 sheet Hợp đồng + Phụ cấp khác nối bằng Khoá tạm, validate từng dòng (Mã NV có trong hồ sơ · Loại HĐ hợp lệ · có Ngày bắt đầu; Mã HĐ để trống vẫn hợp lệ → tự sinh). Mỗi dòng preview bung được (▸) để xem đủ trường: Mã HĐ · hiệu lực (bắt đầu → kết thúc) · lương · phụ cấp cố định · phụ cấp khác. Dòng hợp lệ được chèn lên đầu bảng danh sách — chỉ điền đúng các cột danh sách đang hiển thị (dựng theo tiêu đề cột thực tế, không thêm trường thừa như ngày tạo); HĐ nạp vào mặc định trạng thái Đang hiệu lực. Mã HĐ để trống → hệ thống tự sinh theo loại HĐ + số hiệu NV (vd HĐLĐ-2026/027, HĐTV-…, HĐTT-…) và hiển thị mã thật trên bảng (không phải chữ "(tự sinh)"). Tải file mẫu tải mau-import-hop-dong.xlsx thật. Chưa ghi DB — vẫn là hạng mục di trú/go-live.

Quy tắc nghiệp vụ — Danh sách hợp đồng (BR-HD)

Áp dụng cho FR-HD-01 → FR-HD-07. Các quy tắc về hiệu lực · chồng thời gian của bản thân hợp đồng nằm ở BR-NS-012/013/014.

1. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-HD-DP-01 Danh sách chỉ hiển thị hợp đồng người dùng có quyền xem — Nhân sự · Admin: toàn công ty; Quản lý: nhân viên thuộc phòng ban mình + của chính mình (§2).
BR-HD-DP-02 Mặc định sắp xếp theo Ngày bắt đầu giảm dần (HĐ mới nhất lên đầu); trùng ngày → Ngày tạo giảm dần. (BA đưa 2 phương án — chọn Ngày bắt đầu vì danh sách không hiển thị cột Ngày tạo.)
BR-HD-DP-03 ✾ Một nhân viên có nhiều hợp đồng theo thời gian → danh sách HIỂN THỊ TẤT CẢ hợp đồng, mỗi HĐ một dòng — nhân viên có bao nhiêu HĐ thì xuất hiện bấy nhiêu dòng. Phương án "mỗi NV chỉ 1 dòng = HĐ hiện tại" bị loại. (Chốt 11/08/2026.)
BR-HD-DP-04 Danh sách chỉ xem — không có cột Ngày tạo và không có cột Thao tác (Sửa/Xoá); mọi thao tác chi tiết thực hiện ở màn Chi tiết hợp đồng.
BR-HD-DP-05 Số hợp đồng đang hiển thị đổi theo điều kiện tìm kiếm/lọc (vd "Hợp đồng nhân sự · 126 HĐ").

2. Quy tắc tìm kiếm (Search Rule)

Mã Quy tắc
BR-HD-SR-01 Ô tìm kiếm hỗ trợ tìm theo Mã hợp đồng · Mã nhân viên · Tên nhân viên (một ô tìm chung).
BR-HD-SR-02 Không phân biệt chữ hoa/chữ thường; tìm gần đúng (chứa chuỗi), tự bỏ khoảng trắng thừa đầu/cuối.
BR-HD-SR-03 Từ khoá tìm kiếm kết hợp (AND) với các bộ lọc đang chọn.

3. Quy tắc lọc (Filter Rule)

Mã Quy tắc
BR-HD-FL-01 Cho phép chọn đồng thời: Loại hợp đồng · Phòng ban · Trạng thái.
BR-HD-FL-02 Thay đổi bộ lọc → hệ thống cập nhật danh sách ngay và đưa về trang 1.
BR-HD-FL-03 Giá trị mặc định của mọi bộ lọc là Tất cả.

4. Quy tắc trạng thái (Status Rule) — nhóm quan trọng nhất

Mã Quy tắc
BR-HD-ST-01 Một hợp đồng có một trạng thái duy nhất tại một thời điểm.
BR-HD-ST-02 Đến ngày kết thúc → hệ thống tự chuyển sang Hết hạn (không cần thao tác tay).
BR-HD-ST-03 ✾ Còn ≤ 30 ngày tới ngày kết thúc → tự chuyển Sắp hết hạn. Trùng đúng mốc thông báo trước 30 ngày (BR-HD-NT-01) nên badge Sắp hết hạn và thông báo bật cùng lúc. (Chốt 11/08/2026.)
BR-HD-ST-04 Mỗi nhân viên chỉ có một HĐ Đang hiệu lực tại một thời điểm (BR-NS-012); HĐ mới không chồng thời gian với HĐ đang hiệu lực (BR-NS-013).
BR-HD-ST-05 † Chấm dứt hợp đồng là trạng thái kết thúc trước hạn — hệ thống đặt khi có quyết định nghỉ việc với Ngày nghỉ việc sớm hơn Ngày kết thúc HĐ (FR-HD-11 · BR-HD-CD-12). Nghỉ đúng ngày kết thúc thì hợp đồng chuyển Hết hạn. HĐ đã kết thúc theo quyết định nghỉ việc không sửa, không gia hạn, không tạo phụ lục (BR-HD-CD-05/06).

† BR-HD-ST-05 — bổ sung theo yêu cầu BA ngày 03/08/2026.

Bộ trạng thái mở rộng — cần chốt trước khi Dev làm

BA đề xuất 6 trạng thái: Nháp · Chờ duyệt · Đang hiệu lực · Sắp hết hạn · Hết hạn · Đã huỷ. SRS & mockup hiện dựng 4: Đang hiệu lực (emerald) · Sắp hết hạn (amber) · Hết hạn (rose) · Chấm dứt hợp đồng (slate) — chưa có luồng duyệt hợp đồng. Muốn dùng đủ 6 thì phải bổ sung: ai tạo Nháp, ai duyệt, quy tắc huỷ HĐ, và sửa lại badge trên mockup. Chốt 11/08/2026: giữ 3 trạng thái, KHÔNG làm luồng duyệt/huỷ (BR-HD-ST-01).

5. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-HD-PM-01 Nhân sự · Admin: xem · thêm · sửa · Nhập Excel · Xuất Excel (toàn công ty).
BR-HD-PM-02 Quản lý (Trưởng phòng / Chỉ huy trưởng): chỉ xem, phạm vi nhân viên phòng ban mình; không thêm/sửa/nhập/xuất.
BR-HD-PM-03 Nhân viên: không truy cập màn Danh sách hợp đồng; xem hợp đồng của chính mình tại Trang cá nhân. (BA ghi "Nhân viên chỉ xem hợp đồng của bản thân" — hiểu theo nghĩa xem ở Trang cá nhân, không mở màn HCNS; giữ nguyên cách hiểu này.)
BR-HD-PM-04 Nhóm trường Lương khi Xuất Excel chỉ dành cho Nhân sự / Kế toán (BR-03).

6. Quy tắc kiểm tra dữ liệu (Validation Rule) — áp dụng cho Nhập Excel

Mã Quy tắc
BR-HD-VL-01 Không cho nhập dòng thiếu Mã nhân viên, thiếu Loại hợp đồng, hoặc sai định dạng ngày (dd/mm/yyyy).
BR-HD-VL-02 Mã nhân viên phải tồn tại trong hồ sơ nhân sự và ở trạng thái Đang làm việc — sai → báo lỗi dòng.
BR-HD-VL-03 Ngày bắt đầu < Ngày kết thúc.
BR-HD-VL-04 Mã hợp đồng để trống → tự sinh theo loại HĐ + mã NV; trùng mã → báo lỗi dòng.
BR-HD-VL-05 Dòng lỗi bị bỏ qua, dòng hợp lệ vẫn nạp — không ghi nửa vời; có tuỳ chọn "Bỏ qua dòng lỗi, chỉ nhập dòng hợp lệ".
BR-HD-VL-06 Tiền nhập số thuần (không ₫, không dấu phân cách); Phụ cấp khác có Tên thì bắt buộc có Số tiền.

7. Quy tắc xuất dữ liệu (Export Rule)

Mã Quy tắc
BR-HD-EX-01 Xuất đúng dữ liệu đang tìm kiếm/lọc trên màn danh sách.
BR-HD-EX-02 Cột trong file xếp đúng thứ tự hiển thị trên modal chọn trường.
BR-HD-EX-03 Mỗi hợp đồng = 01 dòng Excel (sheet Hợp đồng); Phụ cấp khác tách sang sheet 2, mỗi khoản một dòng, nối bằng Mã HĐ (Xuất Excel).
BR-HD-EX-04 Định dạng: Ngày dd/MM/yyyy · Tiền có phân tách hàng nghìn; tên file mặc định Hop_dong_yyyyMMdd_HHmmss.xlsx.

Nhóm 8 — khoảng trống theo bản gốc của BA, bổ sung sau.

9. Quy tắc thông báo (Notification Rule)

Mã Quy tắc
BR-HD-NT-01 ✾ Hệ thống thông báo trước 30 ngày khi hợp đồng sắp hết hạn — cùng mốc bật badge Sắp hết hạn (BR-HD-ST-03). Người nhận: Nhân sự · Admin · Quản lý trực tiếp của nhân viên đó (quản lý phòng ban / công trường NV đang thuộc — §2); người lao động KHÔNG nhận. Kênh gửi: Trung tâm thông báo trong ứng dụng (FR-TB-01) — không gửi email. (Chốt 11/08/2026.)

10. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-HD-EC-01 Không có bản ghi khớp điều kiện → hiển thị "Không có dữ liệu."
BR-HD-EC-02 Nhập Excel lỗi → hiển thị danh sách dòng lỗi kèm lý do từng dòng.
BR-HD-EC-03 Lỗi hệ thống khi nhập/xuất → hiển thị nguyên nhân; không ghi dữ liệu nửa vời.

FR-HD-08. Chi tiết hợp đồng

File: chi-tiet-hop-dong-nhan-su.html?ma=NV-xxx — 4 tab

Mục đích: cho người dùng xem & cập nhật thông tin chi tiết một hợp đồng, gồm Thông tin hợp đồng · Thành phần lương · Lịch sử lương · Lịch sử gia hạn hợp đồng.

Ánh xạ mã FR

Bản đặc tả của BA đánh màn này là FR-HD-04 với 4 tab .1 → .4. Trong SRS, FR-HD-04 đã dùng cho chức năng Thêm hợp đồng trên màn Danh sách, nên màn Chi tiết giữ mã FR-HD-08 và 4 tab đánh FR-HD-08.1 → FR-HD-08.4 (nội dung giữ nguyên 1:1 theo bản đặc tả).

Loại hợp đồng (3 loại):

Mã Tên hiển thị
xac-dinh Xác định thời hạn
thu-viec Thử việc
thuc-tap Thực tập

FR-HD-08.1. Tab Thông tin hợp đồng

Hiển thị thông tin chung của hợp đồng.

Dữ liệu hiển thị

Nhóm Trường
Thông tin hợp đồng Loại hợp đồng · Trạng thái · Ngày bắt đầu · Ngày kết thúc
Lương Lương P1 · P2 · P3 · Lương đóng BHXH · Thời hạn hợp đồng
Phụ cấp Danh sách phụ cấp đang áp dụng (BR-HD-CT-DP-02)
File Tên file hợp đồng + nút Thay đổi file
Kết thúc (chỉ khi có quyết định nghỉ việc) Ngày kết thúc thực tế · Mã quyết định nghỉ việc (FR-HD-11)

Chức năng

Mã Chức năng Mô tả
FR-HD-08.1a Xem thông tin hợp đồng Khối Lương & phụ cấp đổ động theo loại HĐ (BR-HD-CT-DP-01).
FR-HD-08.1b Cập nhật file đính kèm Tải file hợp đồng mới → thay thế file hiện tại (BR-HD-CT-FL-01/02).
FR-HD-08.1c Chuyển sang Gia hạn hợp đồng Nút Gia hạn hợp đồng → mở màn FR-HD-10.
~~FR-HD-08.1d~~ † ~~Chấm dứt hợp đồng~~ ĐÃ BỎ 14/08/2026 — màn hợp đồng không còn nút Chấm dứt hợp đồng và popup chấm dứt. Hợp đồng kết thúc theo quyết định nghỉ việc (FR-HD-11 · BR-HD-CD-14).
FR-HD-08.1e † Khoá thao tác sau khi hợp đồng kết thúc HĐ đã kết thúc theo quyết định nghỉ việc (Chấm dứt hợp đồng hoặc Hết hạn) → ẩn/khoá các thao tác Sửa (thành phần lương · phụ cấp · thay đổi file) và Gia hạn hợp đồng; màn hiển thị banner kèm Ngày kết thúc thực tế + mã quyết định (BR-HD-CD-05).

† FR-HD-08.1d / 08.1e — bổ sung theo yêu cầu BA ngày 03/08/2026; cập nhật 14/08/2026 khi bỏ thao tác chấm dứt hợp đồng riêng.

Khối Lương & phụ cấp đổ động theo loại HĐ:

  • Thử việc: một mức lương (Lương chính thức) · Phụ cấp — không P2/P3/BHXH.
  • Thực tập: một mức lương hỗ trợ · Phụ cấp — không P2/P3/BHXH.
  • Xác định thời hạn: P1 Lương cơ bản · P2 (năng lực) · P3 (hiệu quả) · Thời hạn HĐ · Mức lương đóng BHXH (nếu tham gia) · Phụ cấp (Xăng xe/ĐT, Ăn, Khác).

FR-HD-08.2. Tab Thành phần lương

Hiển thị toàn bộ thành phần lương & phụ cấp của hợp đồng, chia 3 nhóm:

Nhóm Thành phần Thao tác cho phép
Lương cố định Lương cơ bản (P1) · Lương P2 · Lương P3 Chỉ sửa số tiền — không thêm/xoá (BR-HD-CT-SL-01)
Phụ cấp mặc định Ăn · Xăng xe/Điện thoại Chỉ sửa số tiền — không được xoá (BR-HD-CT-SL-02)
Phụ cấp khác Do người dùng khai thêm Thêm · Sửa · Xoá (BR-HD-CT-SL-03)

Trường của một khoản phụ cấp khác: Tên phụ cấp · Số tiền · Ngày bắt đầu · Ngày kết thúc · Người quyết định · Ghi chú.

Sửa số tiền P1 · P2 · P3 ✦ — mỗi lần sửa khai 4 trường: Số tiền mới · Áp dụng từ kỳ (tháng/năm) · Người quyết định · Lý do. Áp dụng từ kỳ mặc định là kỳ hiện tại (tháng của ngày thao tác), chọn được mọi kỳ CHƯA CHỐT — kể cả kỳ đã qua mà chưa chốt; không chọn được kỳ đã chốt (BR-HD-CT-SL-07 → 09). Khối Lương cố định hiển thị giá trị áp dụng cho kỳ hiện tại; khoản nào đã có mốc hẹn cho kỳ sau thì hiện thêm dòng phụ "Từ kỳ MM/YYYY: số mới".

Sửa lương chỉ KHÔNG đổi được kỳ ĐÃ CHỐT — chốt 11/09/2026

Sửa P2 trong tháng 9, số mới áp dụng từ Áp dụng từ kỳ trở đi, và:

  • Kỳ đã chốt (vd 06, 07) → giữ nguyên số cũ, phần mềm không cập nhật ngược — nhân viên đã nhận lương theo số đó (BR-PL-CHOT-06).
  • Kỳ chưa chốt, kể cả tháng đã qua (vd 08 đang làm lương) → vẫn đổi được: chọn Áp dụng từ kỳ = 08 thì kỳ 08 nhận số mới ở lần Tính lại kế tiếp (BR-PL-RECALC-41).
  • Tăng lương có hiệu lực từ một kỳ đã chốt → trả phần chênh bằng khoản truy lĩnh ở kỳ chưa chốt, không mở lại kỳ cũ (BR-HD-CT-SL-09 · BR-PL-RECALC-42).

Mockup chi-tiet-hop-dong-nhan-su.html chưa dựng ô Áp dụng từ kỳ.

Màn còn có 3 thẻ tổng hợp (Tổng thu nhập / Tổng khấu trừ / Thực nhận dự kiến). Tab này không dựng khoản BHXH.

FR-HD-08.3. Tab Lịch sử lương

Lịch sử thay đổi toàn bộ thành phần lương của hợp đồng — chỉ đọc, mới nhất lên trước.

Thông tin hiển thị: Thời điểm · Người thực hiện · Nhân viên · Thao tác (Thêm=emerald / Sửa=amber / Xoá=rose) · Trường thay đổi · Giá trị trước → sau · Áp dụng từ kỳ ✦ · Người quyết định · Lý do.

Mỗi dòng sửa P1 · P2 · P3 là một mốc giá trị — tab này là nơi tra kỳ nào áp dụng số nào (BR-HD-CT-SL-08). (Bổ sung cột Áp dụng từ kỳ 11/09/2026.)

FR-HD-08.4. Tab Lịch sử gia hạn hợp đồng

Toàn bộ lịch sử gia hạn — mỗi lần gia hạn hiển thị thành một nhóm, chỉ đọc, mới nhất lên trước.

Thông tin mỗi nhóm: Thời điểm · Thao tác · Trường thay đổi · Giá trị trước → sau; có file quyết định gia hạn thì hiển thị file của đúng lần gia hạn đó (BR-HD-CT-RN-04).

Tab này CHỈ ghi việc gia hạn — chốt 12/08/2026

Không có nhóm "Chấm dứt hợp đồng" ở đây. Việc kết thúc hợp đồng theo quyết định nghỉ việc không sinh bản ghi nào trong tab này (~~BR-HD-CD-10~~ đã bỏ). Muốn tra thì xem Ngày kết thúc thực tế + mã quyết định nghỉ việc ở tab Thông tin hợp đồng, trạng thái hợp đồng, hoặc mở thẳng quyết định nghỉ việc của nhân sự (FR-QD-07). Hợp đồng đã kết thúc vẫn xem được lịch sử gia hạn cũ của chính nó.

Quy tắc nghiệp vụ — Chi tiết hợp đồng (BR-HD-CT)

Mã mang cụm CT để không đụng BR-HD (màn Danh sách) và BR-HD-ADD (màn Thêm) — lưu ý BR-HD-FL ở màn Danh sách là Filter Rule, còn BR-HD-CT-FL ở đây là File Rule.

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-HD-CT-DP-01 Tab Thông tin hợp đồng chỉ hiển thị các trường thuộc loại hợp đồng tương ứng.
BR-HD-CT-DP-02 Chỉ hiển thị các phụ cấp còn hiệu lực tại thời điểm xem hợp đồng (theo Ngày bắt đầu – Ngày kết thúc của khoản phụ cấp).
BR-HD-CT-DP-03 Lịch sử lương và Lịch sử gia hạn hiển thị theo thời gian giảm dần (mới nhất trước).

II. Quy tắc lương (Salary Rule)

Mã Quy tắc
BR-HD-CT-SL-01 Thành phần lương mặc định theo loại HĐ (P1 · P2 · P3) không được thêm/xoá, chỉ được sửa số tiền.
BR-HD-CT-SL-02 Phụ cấp mặc định của hệ thống (vd Ăn · Xăng xe/Điện thoại) không được xoá, chỉ được cập nhật số tiền nếu người dùng có quyền.
BR-HD-CT-SL-03 Người dùng được thêm nhiều phụ cấp khác.
BR-HD-CT-SL-04 Trong cùng một hợp đồng, mỗi loại phụ cấp chỉ tồn tại một lần trong cùng khoảng thời gian hiệu lực.
BR-HD-CT-SL-05 ✦ Bảng lương lấy phụ cấp THEO KHOẢNG HIỆU LỰC của từng khoản, không lấy toàn bộ phụ cấp ghi trên hợp đồng: kỳ lương tháng nào thì chỉ cộng những khoản có Ngày bắt đầu – Ngày kết thúc phủ kỳ đó. Khoản hết hiệu lực giữa chừng thì thôi cộng từ kỳ kế tiếp; khoản mới bắt đầu thì cộng từ kỳ bắt đầu có hiệu lực. Áp cho Bảng lương · phiếu lương · và cột Tổng phụ cấp (BR-PS-08). (Chốt 11/08/2026.)
BR-HD-CT-SL-05 Ngày kết thúc phụ cấp ≥ Ngày bắt đầu phụ cấp.
BR-HD-CT-SL-06 Số tiền lương và phụ cấp ≥ 0.
BR-HD-CT-SL-07 ✦ Sửa P1 · P2 · P3 bắt buộc chọn Áp dụng từ kỳ. Mặc định = kỳ hiện tại (tháng của ngày thao tác). Chọn được mọi kỳ CHƯA CHỐT — kỳ đã qua mà chưa chốt, kỳ hiện tại hoặc kỳ sau; không chọn được kỳ đã chốt (BR-PL-CHOT-06). (Chốt 11/09/2026.)
BR-HD-CT-SL-08 ✦ Mỗi lần sửa tạo MỘT MỐC giá trị mới, không ghi đè mốc cũ. Giá trị P1/P2/P3 của một kỳ = mốc có Áp dụng từ kỳ gần nhất, không muộn hơn kỳ đó. Sửa lại lần nữa cùng một kỳ áp dụng → mốc mới thay mốc trước của đúng kỳ đó; Lịch sử lương vẫn ghi đủ cả hai lần. Bảng lương, phiếu lương và Tính lại đều đọc theo mốc này (BR-PS-02 · BR-PL-RECALC-41). (Chốt 11/09/2026.)
BR-HD-CT-SL-09 ✦ Chỉ kỳ ĐÃ CHỐT mới không đổi theo thành phần lương. Kỳ đã chốt đóng băng vĩnh viễn — nhân viên đã nhận lương theo số đó (BR-PL-CHOT-05 · 06); kỳ đã chốt nằm sau mốc (nếu có) cũng giữ nguyên. Kỳ chưa chốt — kể cả tháng đã qua — nằm từ Áp dụng từ kỳ trở đi thì nhận số mới; kỳ trước mốc giữ giá trị của mốc cũ. Ví dụ: ngày 10/09/2026, kỳ 06 · 07 đã chốt, kỳ 08 chưa chốt; sửa P2 từ 5.000.000 lên 6.000.000, chọn áp dụng từ kỳ 08 → kỳ 08 trở đi = 6.000.000, kỳ 06 · 07 vẫn 5.000.000; không chọn được kỳ 07. Tăng lương có hiệu lực từ một kỳ đã chốt → trả phần chênh bằng truy lĩnh ở kỳ chưa chốt, không sửa phiếu cũ (BR-PL-RECALC-42). (Chốt 11/09/2026.)

III. Quy tắc tệp (File Rule)

Mã Quy tắc
BR-HD-CT-FL-01 ✾ Chỉ cho phép tải lên file hợp đồng theo bộ định dạng dùng chung toàn module: PDF · DOC · DOCX · JPG · PNG (BR-NS-018). (Chốt 11/08/2026.)
BR-HD-CT-FL-02 Khi thay đổi file hợp đồng: file mới thay thế file hiện tại; file cũ không hiển thị trên giao diện.

IV. Quy tắc lịch sử (History Rule)

Mã Quy tắc
BR-HD-CT-HS-01 Mọi thao tác Thêm · Sửa · Xoá đối với thành phần lương hoặc phụ cấp đều sinh một bản ghi trong Lịch sử lương.
BR-HD-CT-HS-02 Bản ghi Lịch sử lương không được sửa hoặc xoá.
BR-HD-CT-HS-03 Mỗi bản ghi lưu tối thiểu: Thời gian · Người thực hiện · Thao tác · Trường thay đổi · Giá trị trước · Giá trị sau · Người quyết định · Lý do.

V. Quy tắc gia hạn (Renewal Rule)

Mã Quy tắc
BR-HD-CT-RN-01 Mỗi lần gia hạn hợp đồng được lưu thành một lần gia hạn độc lập.
BR-HD-CT-RN-03 Không được sửa hoặc xoá lịch sử gia hạn đã phát sinh.
BR-HD-CT-RN-04 File quyết định gia hạn (nếu có) lưu theo từng lần gia hạn và chỉ hiển thị trong lịch sử của đúng lần gia hạn đó.

BR-HD-CT-RN-02 — khoảng trống theo bản gốc của BA, bổ sung sau.

VI. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-HD-CT-PM-01 Người có quyền Xem hợp đồng được xem toàn bộ thông tin và lịch sử của hợp đồng.
BR-HD-CT-PM-02 Người có quyền Quản lý hợp đồng được: cập nhật file HĐ · chỉnh sửa thành phần lương · thêm/sửa/xoá phụ cấp · gia hạn hợp đồng · chấm dứt hợp đồng (BR-HD-CD-09).
BR-HD-CT-PM-03 Người không có quyền chỉnh sửa chỉ được xem dữ liệu.

Trạng thái mockup (cập nhật 03/08/2026)

chi-tiet-hop-dong-nhan-su.html đã dựng đủ 4 tab (Thông tin hợp đồng · Thành phần lương · Lịch sử lương · Lịch sử gia hạn hợp đồng), bảng lương mặc định chặn thêm/xoá, Phụ cấp khác có đủ Ngày bắt đầu · Ngày kết thúc · Người quyết định · Ghi chú; hai thao tác Gia hạn hợp đồng (FR-HD-10) là modal mở từ tab 1. (Popup Chấm dứt hợp đồng đã bỏ 14/08/2026 — FR-HD-11.)

FR-HD-09. Thêm hợp đồng

File: them-hop-dong-nhan-su.html (mở kèm ?ma=NV-xxx để chọn sẵn nhân sự) — form động theo loại HĐ

Mục đích: cho người dùng có quyền tạo một hợp đồng mới cho nhân viên; form hiện/ẩn trường theo loại hợp đồng đã chọn.

Luồng thực hiện — 4 bước

Bước 1 — Chọn nhân sự & loại hợp đồng

Trường Bắt buộc Mô tả
Nhân sự ✓ Chọn nhân viên cần tạo hợp đồng (mở từ hồ sơ NV thì chọn sẵn theo ?ma=NV-xxx)
Loại hợp đồng ✓ Thử việc (mặc định) · Thực tập · Xác định thời hạn

Chọn xong loại hợp đồng → hệ thống hiển thị các trường tương ứng (BR-HD-ADD-DP-01).

Bước 2 — Nhập thông tin theo loại hợp đồng

Trường hợp 1 — Hợp đồng lao động xác định thời hạn

Trường Bắt buộc
Mức lương cơ bản (P1) ✓
Lương P2
Lương P3
Mức lương đóng BHXH (mở khi tick ☑ Tham gia BHXH)
Thời hạn hợp đồng (tháng) ✓

Trường hợp 2 — Hợp đồng thử việc

Trường Bắt buộc
Mức lương chính thức ✓

Trường hợp 3 — Hợp đồng thực tập

Trường Bắt buộc
Mức lương hỗ trợ ✓

Bước 3 — Thông tin chung (áp dụng cho mọi loại hợp đồng)

Trường Bắt buộc Mô tả
Phụ cấp Nhiều khoản, thêm/xoá dòng (BR-HD-ADD-BS-06/07/08)
Ngày bắt đầu ✓
Ngày kết thúc HĐ xác định thời hạn → tự tính = Ngày bắt đầu + Thời hạn (BR-HD-ADD-BS-03)
File hợp đồng File scan HĐ đính kèm (BR-HD-ADD-VL-07)

Bước 4 — Lưu hợp đồng

Mã Chức năng Mô tả
FR-HD-09.01 Kiểm tra dữ liệu Chạy toàn bộ Validation Rule; có lỗi → báo lỗi tại trường và dừng lưu.
FR-HD-09.02 Sinh mã hợp đồng Tự sinh Mã HĐ theo loại HĐ + mã NV (vd HĐLĐ-2026/027 · HĐTV-… · HĐTT-…) — form không có ô nhập Mã HĐ (BR-HD-ADD-BS-02).
FR-HD-09.03 Lưu hợp đồng Ghi hợp đồng, gắn vào hồ sơ nhân viên; hiển thị ở Danh sách HĐ và tab Hợp đồng của hồ sơ NV.
FR-HD-09.04 Cập nhật trạng thái Trạng thái khi lưu mặc định Đang hiệu lực; hệ thống tự chuyển Sắp hết hạn / Hết hạn theo BR-HD-ST-02/03.
FR-HD-09.05 Ghi nhật ký thao tác Ghi audit log việc tạo hợp đồng (BR-HD-ADD-AU-01) — hiển thị ở tab Lịch sử thay đổi của Chi tiết hợp đồng.

Ánh xạ mockup (form chia 3 section)

Section Nội dung
1. Chọn nhân sự & loại HĐ Nhân sự (✓) · Loại HĐ (✓) — Thử việc (mặc định) / Xác định thời hạn / Thực tập
2. Thông tin theo loại (hiện/ẩn động) Thử việc · Thực tập: ẩn Section 2 · Xác định thời hạn: P1 (✓) · P2 · P3 · ☑ Tham gia BHXH → mở ô Mức lương đóng BHXH · Thời hạn HĐ (✓, số tháng)
3. Thông tin chung Mức lương chính thức/hỗ trợ (✓ khi loại = Thử việc/Thực tập — nhãn đổi theo loại) · Phụ cấp (thêm/xoá dòng) · Ngày bắt đầu (✓) · Ngày kết thúc · File đính kèm

Form không có ô Trạng thái · Mã HĐ · Hình thức trả lương · Ghi chú.

Dev lưu ý

Money fields là text inputmode=numeric hiển thị sẵn dấu chấm (vd "12.000.000") → cần parse/format khi lưu. Checkbox BHXH chỉ khoá/mở ô input (không xoá field). Mockup chưa hiện thực: validate ngày bắt đầu < kết thúc, tự sinh mã HĐ thật, tự tính ngày kết thúc theo thời hạn, chống trùng loại phụ cấp — Dev làm theo BR-HD-ADD.

Quy tắc nghiệp vụ — Thêm hợp đồng (BR-HD-ADD)

Mã mang cụm ADD để không đụng BR-HD của màn Danh sách — cùng cách đặt với BR-NS (chi tiết hồ sơ) ↔ BR-NS-ADD (thêm hồ sơ).

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-HD-ADD-DP-01 Sau khi chọn Loại hợp đồng, hệ thống chỉ hiển thị các trường thuộc loại đó: Xác định thời hạn → P1 · P2 · P3 · Lương đóng BHXH · Thời hạn HĐ; Thử việc → chỉ Mức lương chính thức; Thực tập → chỉ Mức lương hỗ trợ.
BR-HD-ADD-DP-02 Phần Thông tin chung luôn hiển thị với mọi loại hợp đồng: Phụ cấp · Ngày bắt đầu · Ngày kết thúc · File đính kèm.

II. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-HD-ADD-VL-01 Nhân sự là trường bắt buộc.
BR-HD-ADD-VL-02 Loại hợp đồng là trường bắt buộc.
BR-HD-ADD-VL-03 Ngày bắt đầu là trường bắt buộc.
BR-HD-ADD-VL-04 Ngày kết thúc phải lớn hơn Ngày bắt đầu.
BR-HD-ADD-VL-05 Các trường tiền lương ≥ 0.
BR-HD-ADD-VL-06 Thời hạn hợp đồng > 0 tháng.
BR-HD-ADD-VL-07 File đính kèm chỉ nhận định dạng được hỗ trợ và không vượt dung lượng tối đa cấu hình trên hệ thống (BR-NS-FILE-003). Dùng đúng BỘ CHUNG toàn module: PDF · DOC · DOCX · JPG · PNG ✾ — file hợp đồng không có bộ định dạng riêng. (Chốt 11/08/2026; bản đặc tả ghi PDF · DOC · DOCX nay không dùng.)

III. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-HD-ADD-BS-01 Một nhân viên chỉ được có 01 hợp đồng đang hiệu lực tại cùng một thời điểm (BR-NS-012/013).
BR-HD-ADD-BS-02 Mã hợp đồng sinh tự động theo quy tắc hệ thống (loại HĐ + mã NV) — người dùng không nhập.
BR-HD-ADD-BS-03 HĐ xác định thời hạn: Ngày kết thúc = Ngày bắt đầu + Thời hạn (tháng), hệ thống tự tính; người dùng được sửa nếu nghiệp vụ cho phép.
BR-HD-ADD-BS-04 HĐ thực tập không tham gia BHXH → không hiển thị trường Mức lương đóng BHXH. (HĐ thử việc cũng không hiển thị trường này — theo mockup & FR-HD-08.)
BR-HD-ADD-BS-06 Phụ cấp gồm nhiều khoản — vd Ăn · Xăng xe · Điện thoại · Thâm niên · Trách nhiệm · Nhà ở.
BR-HD-ADD-BS-07 Người dùng được thêm nhiều khoản phụ cấp cho một hợp đồng.
BR-HD-ADD-BS-08 Một loại phụ cấp chỉ được khai một lần trong cùng hợp đồng (✔ Ăn · ✔ Xăng xe · ✘ Ăn lần hai).

BR-HD-ADD-BS-05 và nhóm IV — khoảng trống theo bản gốc của BA, bổ sung sau.

BR-HD-ADD-BS-08 — giữ theo mockup (chốt 11/08/2026)

Tên phụ cấp giữ nguyên là ô text tự do; việc gom về dropdown danh mục khoản phụ cấp để giai đoạn sau. Trong đợt này quy tắc một loại phụ cấp chỉ khai một lần được thực thi bằng so khớp theo tên đã chuẩn hoá (bỏ dấu cách thừa, không phân biệt hoa/thường).

V. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-HD-ADD-PM-01 Chỉ người dùng có quyền Thêm hợp đồng (Nhân sự · Admin) mới được tạo hợp đồng.
BR-HD-ADD-PM-02 Người không có quyền chỉ được xem — Quản lý xem HĐ của nhân viên phòng ban mình, không mở được màn Thêm (§2).

VI. Quy tắc nhật ký (Audit Rule)

Mã Quy tắc
BR-HD-ADD-AU-01 Hệ thống ghi nhật ký khi tạo hợp đồng, gồm: Người thao tác · Thời gian tạo · Nhân viên được tạo HĐ · Loại hợp đồng · Nội dung thay đổi. Nhật ký hiển thị ở tab Lịch sử thay đổi của Chi tiết hợp đồng.

Về nhóm Audit

Ngày 23/07/2026 BA yêu cầu bỏ các ghi chú audit log khỏi SRS (vì mặc định hệ thống đã lưu). Nhóm này được khôi phục theo bản đặc tả màn Thêm hợp đồng ngày 27/07/2026 — vì ở đây audit có danh sách trường cụ thể cần Dev hiện thực, không còn là ghi chú chung chung.

FR-HD-10. Gia hạn hợp đồng

Chức năng mới — chưa có mockup. Mở từ nút Gia hạn hợp đồng ở tab Thông tin hợp đồng. Đề xuất file: gia-han-hop-dong-nhan-su.html?ma=<mã HĐ>.

Mục đích: gia hạn hợp đồng đang còn hiệu lực hoặc sắp hết hạn bằng cách cập nhật thời gian hợp đồng · mức lương · phụ cấp và đính kèm quyết định gia hạn.

Điều kiện thực hiện

# Điều kiện
1 Người dùng có quyền Gia hạn hợp đồng (BR-HD-GH-18)
2 Hợp đồng đang ở Đang hiệu lực / Sắp hết hạn (bộ 3 trạng thái — không có trạng thái Đã huỷ)
3 MỌI loại hợp đồng đều gia hạn được ✾ — Xác định thời hạn · Thử việc · Thực tập, hệ thống không giới hạn theo loại (chốt 11/08/2026)

Giao diện — Thông tin hợp đồng hiện tại (chỉ đọc)

Trường Mô tả
Mã hợp đồng Mã hợp đồng hiện tại
Loại hợp đồng Loại hợp đồng hiện tại
Thời gian hiệu lực Ngày bắt đầu – Ngày kết thúc hiện tại

Giao diện — Thông tin gia hạn

Trường Bắt buộc Cho phép sửa
Mức lương cơ bản (P1) ✓ ✓
Lương P2 ✓
Lương P3 ✓
Phụ cấp ăn ✓
Phụ cấp xăng xe ✓
Thời gian gia hạn (tháng) ✓ ✓
Ngày kết thúc mới ✓ ✓ (hoặc tự tính = Ngày kết thúc hiện tại + Thời gian gia hạn)
Thêm phụ cấp khác ✓
File quyết định gia hạn ✓

Xử lý khi nhấn Lưu

Mã Chức năng Mô tả
FR-HD-10.01 Cập nhật thông tin hợp đồng Ghi Ngày kết thúc mới & thời hạn sau gia hạn.
FR-HD-10.02 Cập nhật thành phần lương/phụ cấp Giá trị mới trở thành giá trị đang áp dụng (BR-HD-GH-09); trường không sửa thì giữ nguyên (BR-HD-GH-12).
FR-HD-10.03 Lưu file quyết định gia hạn Gắn file vào đúng lần gia hạn (BR-HD-CT-RN-04).
FR-HD-10.04 Sinh bản ghi Lịch sử gia hạn Ghi vào tab Lịch sử gia hạn — tất cả trường có thay đổi (BR-HD-GH-13).
FR-HD-10.05 Sinh bản ghi Lịch sử lương Nếu có thay đổi lương/phụ cấp → ghi thêm vào tab Lịch sử lương (BR-HD-GH-14).
FR-HD-10.06 Ghi Audit Log Ghi nhật ký lần gia hạn (BR-HD-GH-20).

Quy tắc nghiệp vụ — Gia hạn hợp đồng (BR-HD-GH)

Bản đặc tả của BA đánh mã BR-HD-RN-01→20; trong SRS đổi cụm thành GH (giữ nguyên số thứ tự 01→20) để không đụng nhóm Renewal Rule của màn Chi tiết (BR-HD-CT-RN).

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-HD-GH-01 Mở màn gia hạn → hệ thống tự hiển thị thông tin hiện tại của hợp đồng.
BR-HD-GH-02 Các trường lương & phụ cấp được khởi tạo bằng giá trị đang áp dụng (vd P1 = 40.000.000 · P2 = 8.000.000 · P3 = 5.000.000).
BR-HD-GH-03 Danh sách phụ cấp khác còn hiệu lực được hiển thị để người dùng chỉnh sửa hoặc bổ sung.

II. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-HD-GH-04 Thời gian gia hạn > 0 tháng.
BR-HD-GH-05 Ngày kết thúc mới > Ngày kết thúc hiện tại.
BR-HD-GH-06 Các khoản lương và phụ cấp ≥ 0.
BR-HD-GH-07 ✾ File quyết định gia hạn chỉ nhận bộ định dạng dùng chung: PDF · DOC · DOCX · JPG · PNG và không vượt dung lượng cấu hình (BR-NS-FILE-003).

III. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-HD-GH-23 ✦ Mọi loại hợp đồng đều gia hạn được — Xác định thời hạn · Thử việc · Thực tập. Hệ thống không chặn theo loại và không tự quyết thay người dùng.
BR-HD-GH-24 ✦ Chọn Gia hạn hay ký hợp đồng mới là quyết định của NGƯỜI DÙNG — phần mềm không ép, không tự đề xuất, không chặn đường nào. Hết hạn thì HR tự cân nhắc: kéo dài chính HĐ cũ (FR-HD-10) hay lập HĐ mới (FR-HD-09). (Chốt 11/08/2026.)
BR-HD-GH-08 Mỗi lần gia hạn tạo một lần gia hạn mới, không ghi đè dữ liệu các lần gia hạn trước.
BR-HD-GH-09 Thay đổi P1 · P2 · P3 · Phụ cấp → giá trị mới trở thành giá trị đang áp dụng sau khi gia hạn có hiệu lực. Với P1 · P2 · P3, việc này tạo một mốc giá trị mới (BR-HD-CT-SL-08); các kỳ trước ngày gia hạn có hiệu lực giữ nguyên giá trị cũ (BR-HD-CT-SL-09) ✦. Gia hạn có hiệu lực giữa tháng thì kỳ đó tính theo mức nào — chưa chốt ⚠ (§11 mục 6).
BR-HD-GH-10 Người dùng được sửa phụ cấp hiện có và thêm phụ cấp mới.
BR-HD-GH-11 Không được trùng tên phụ cấp trong cùng thời gian hiệu lực.
BR-HD-GH-12 Trường không thay đổi thì giữ nguyên giá trị hiện tại sau khi gia hạn.

IV. Quy tắc lịch sử (History Rule)

Mã Quy tắc
BR-HD-GH-13 Gia hạn thành công → ghi vào Lịch sử gia hạn hợp đồng tất cả trường có thay đổi (Thời gian gia hạn · Ngày kết thúc · P1 · P2 · P3 · Phụ cấp · File quyết định).
BR-HD-GH-14 Có thay đổi lương/phụ cấp → đồng thời ghi vào Lịch sử lương.
BR-HD-GH-15 Lịch sử gia hạn chỉ được xem, không sửa/xoá.

V. Quy tắc trạng thái (Status Rule)

Mã Quy tắc
BR-HD-GH-16 Gia hạn thành công → trạng thái hợp đồng giữ nguyên nếu HĐ đang còn hiệu lực.
BR-HD-GH-17 Gia hạn trước khi HĐ hết hạn → HĐ không chuyển sang Hết hạn.

VI. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-HD-GH-18 Chỉ người có quyền Gia hạn hợp đồng mới thực hiện được chức năng này — chỉ Admin · Nhân sự được thêm/sửa thông tin gia hạn.
BR-HD-GH-19 Người chỉ có quyền xem không được chỉnh sửa thông tin gia hạn.
BR-HD-GH-21 † Quản lý: chỉ xem lịch sử gia hạn hợp đồng của nhân viên thuộc phòng ban mình và của chính mình.
BR-HD-GH-22 Nhân viên: không được xem lịch sử gia hạn hợp đồng (kể cả của chính mình) — không có ở Trang cá nhân, không mở màn gia hạn.

† BR-HD-GH-21 — bổ sung theo yêu cầu BA ngày 27/07/2026 (ngoài bản đặc tả gốc 01→20). BR-HD-GH-22 — BA bỏ quyền xem của Nhân viên ngày 31/07/2026.

VII. Quy tắc nhật ký (Audit Rule)

Mã Quy tắc
BR-HD-GH-20 Ghi nhật ký mỗi lần gia hạn: Người thực hiện · Thời gian thực hiện · Hợp đồng được gia hạn · Các trường thay đổi · Giá trị trước và sau · File quyết định (nếu có).

Gia hạn hợp đồng — đã chốt 11/08/2026

  1. Gia hạn hay ký HĐ mới là do NGƯỜI DÙNG quyết (BR-HD-GH-24) — phần mềm không ép, không tự đề xuất, không chặn đường nào. Luồng §5 bước 4 giữ nguyên "HR ký HĐ mới" như một lựa chọn, bên cạnh nhánh Gia hạn (FR-HD-10).
  2. Mọi loại hợp đồng đều gia hạn được — Xác định thời hạn · Thử việc · Thực tập (BR-HD-GH-23).
  3. Điều kiện "chưa ở trạng thái Đã huỷ" bỏ — bộ trạng thái chốt là 3 trạng thái, không có Đã huỷ; gia hạn áp cho HĐ Đang hiệu lực / Sắp hết hạn.

Lưu ý pháp lý — Dev & BA cần biết khi triển khai thật

Theo Bộ luật Lao động 2019: phụ lục hợp đồng chỉ được sửa thời hạn 01 lần và không làm đổi loại HĐ; thử việc không được gia hạn (mỗi công việc chỉ thử việc một lần). Quyết định trên đặt toàn quyền cho người dùng nên hệ thống không chặn các trường hợp này — trách nhiệm tuân thủ thuộc về người lập hợp đồng.

FR-HD-11. Kết thúc hợp đồng theo quyết định nghỉ việc

Đổi luồng — chốt 14/08/2026

Trước đây kết thúc hợp đồng là thao tác riêng trên màn hợp đồng: nút Chấm dứt hợp đồng → popup nhập Ngày chấm dứt → ép sang màn tạo quyết định nghỉ việc. Bỏ toàn bộ luồng đó. Nay hợp đồng kết thúc chỉ như một hệ quả của quyết định nghỉ việc: Ngày nghỉ việc trên quyết định CHÍNH LÀ ngày kết thúc hợp đồng. Đã bỏ: nút Chấm dứt hợp đồng, popup chấm dứt, các mục FR-HD-11.10 → 11.14, BR-HD-CD-03b, và cặp ràng buộc hai chiều BR-QD-RV-03 / BR-QD-RV-09 → 11.

Màn liên quan: tab Thông tin hợp đồng (chi-tiet-hop-dong-nhan-su.html?ma=NV-xxx) — chỉ hiển thị kết quả, không còn thao tác nhập. Nơi nhập duy nhất: FR-QD-07 — Thêm quyết định loại Nghỉ việc.

Mục đích: xác định hợp đồng kết thúc ngày nào và ở trạng thái nào, dựa trên đúng một dữ kiện do người dùng nhập — Ngày nghỉ việc trên quyết định nghỉ việc.

Trạng thái đích của hợp đồng — so Ngày nghỉ việc với Ngày kết thúc ghi trên hợp đồng:

So sánh Ý nghĩa nghiệp vụ Trạng thái hợp đồng Quy tắc
Ngày nghỉ việc < Ngày kết thúc HĐ Nghỉ trước hạn Chấm dứt hợp đồng BR-HD-CD-12
Ngày nghỉ việc = Ngày kết thúc HĐ Nghỉ đúng hạn Hết hạn BR-HD-CD-12
Ngày nghỉ việc > Ngày kết thúc HĐ Không hợp lệ — hợp đồng đã hết trước đó (không lưu được) BR-HD-CD-13

Xử lý sau khi quyết định nghỉ việc được lưu

Mã Chức năng Mô tả
FR-HD-11.01 Ghi nhận ngày kết thúc thực tế Lưu Ngày nghỉ việc của quyết định vào hợp đồng dưới nhãn Ngày kết thúc thực tế (theo quyết định nghỉ việc), kèm mã quyết định nguồn; hiển thị trên tab Thông tin hợp đồng. Người dùng không nhập hai trường này trên màn hợp đồng (BR-HD-CD-14).
FR-HD-11.02 Xác định trạng thái đích Theo bảng so sánh ở trên — Chấm dứt hợp đồng (nghỉ trước hạn) hoặc Hết hạn (nghỉ đúng hạn) (BR-HD-CD-12).
FR-HD-11.03 Chuyển trạng thái theo ngày Đối chiếu Ngày nghỉ việc với ngày hiện tại: đã tới → chuyển ngay sang trạng thái đích; ngày ở tương lai → giữ nguyên trạng thái, hiện banner "Đã có quyết định nghỉ việc <mã QĐ> với ngày nghỉ việc dd/mm/yyyy — tới ngày này hệ thống chuyển hợp đồng sang <trạng thái đích>", hệ thống tự chuyển khi tới ngày (BR-HD-CD-04).
FR-HD-11.04 Khoá thao tác Hợp đồng đã kết thúc theo quyết định nghỉ việc (cả Chấm dứt hợp đồng lẫn Hết hạn) → ẩn Gia hạn hợp đồng · Thay đổi file đính kèm · Thêm phụ cấp khác, khoá sửa thành phần lương, không tạo phụ lục (BR-HD-CD-05/06).
FR-HD-11.05 Banner trạng thái HĐ đã kết thúc → banner xám "Hợp đồng đã chấm dứt / đã hết hạn từ ngày dd/mm/yyyy theo quyết định nghỉ việc <mã QĐ>…"; chưa tới ngày → banner vàng như FR-HD-11.03.
FR-HD-11.06 Lối tra ngược Mã quyết định nghỉ việc trên tab Thông tin hợp đồng là liên kết mở chi tiết quyết định — nơi duy nhất xem lý do nghỉ việc (BR-HD-CD-11).

Hợp đồng Hết hạn có 2 đường tới

① Tự nhiên — tới ngày kết thúc mà không ai làm gì, hệ thống tự chuyển (BR-HD-ST-02); hợp đồng này vẫn gia hạn được. ② Do nghỉ việc đúng hạn — có quyết định nghỉ việc với ngày nghỉ trùng ngày kết thúc; hợp đồng này bị khoá gia hạn (BR-HD-CD-05) vì nhân sự đã nghỉ. Phân biệt bằng có / không có Ngày kết thúc thực tế + mã quyết định nghỉ việc trên hợp đồng.

Quy tắc nghiệp vụ — Kết thúc hợp đồng (BR-HD-CD)

Bản đặc tả của BA đánh mã BR-01 → BR-07; trong SRS đổi cụm thành BR-HD-CD-01 → 07 (giữ nguyên số thứ tự) để không đụng BR-01 → BR-07 của hồ sơ nhân sự. BR-HD-CD-08 → 11 là phần bổ sung khi ánh xạ sang giao diện; BR-HD-CD-12 → 14 bổ sung 14/08/2026 khi đổi luồng — hợp đồng kết thúc theo quyết định nghỉ việc, không còn thao tác chấm dứt riêng.

I. Quy tắc trạng thái (Status Rule)

Mã Quy tắc Mã gốc BA
BR-HD-CD-12 ✦ Trạng thái đích do so sánh ngày quyết định — khi quyết định nghỉ việc có hiệu lực: Ngày nghỉ việc < Ngày kết thúc HĐ → hợp đồng chuyển Chấm dứt hợp đồng (kết thúc trước hạn); Ngày nghỉ việc = Ngày kết thúc HĐ → hợp đồng chuyển Hết hạn (kết thúc đúng hạn). (Chốt 14/08/2026.) —
BR-HD-CD-01 Đối tượng bị kết thúc theo quyết định nghỉ việc là hợp đồng đang ở trạng thái Đang hiệu lực hoặc Sắp hết hạn của nhân viên đó. BR-01
BR-HD-CD-02 Hợp đồng đã Chấm dứt hợp đồng hoặc đã Hết hạn thì không bị quyết định nghỉ việc tác động thêm lần nữa. BR-02
BR-HD-CD-04 Hệ thống đối chiếu Ngày nghỉ việc với ngày hiện tại: đã tới ngày → chuyển ngay sang trạng thái đích (BR-HD-CD-12); ngày ở tương lai → giữ nguyên trạng thái tới đúng ngày đó. FR-01
BR-HD-CD-05 Hợp đồng đã kết thúc theo quyết định nghỉ việc — dù là Chấm dứt hợp đồng hay Hết hạn — người dùng không thực hiện được thao tác sửa và gia hạn. FR-01

II. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc Mã gốc BA
BR-HD-CD-13 ✦ Ngày nghỉ việc KHÔNG được sau Ngày kết thúc hợp đồng. Vi phạm → chặn lưu quyết định, báo lỗi đỏ ngay dưới ô Ngày nghỉ việc: "Ngày nghỉ việc không được sau ngày kết thúc hợp đồng (dd/mm/yyyy). Vui lòng chọn lại." Giao diện đồng thời đặt giới hạn max trên ô chọn ngày để hạn chế chọn sai từ đầu. (Chốt 14/08/2026.) —
BR-HD-CD-03 Ngày nghỉ việc ≥ Ngày bắt đầu hiệu lực của hợp đồng. Vi phạm → chặn lưu, báo "Ngày nghỉ việc phải từ ngày bắt đầu hợp đồng (dd/mm/yyyy) trở đi." BR-03

III. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc Mã gốc BA
BR-HD-CD-14 ✦ Một nơi nhập duy nhất — Ngày kết thúc thực tế và trạng thái kết thúc của hợp đồng không phải trường nhập; chúng là hệ quả tính ra từ quyết định nghỉ việc. Màn hợp đồng không có nút Chấm dứt hợp đồng, không có ô nhập ngày chấm dứt — chỉ hiển thị kết quả kèm liên kết tới quyết định nguồn. (Chốt 14/08/2026.) —
BR-HD-CD-06 Không được tạo phụ lục hoặc gia hạn cho hợp đồng đã kết thúc theo quyết định nghỉ việc. BR-06
BR-HD-CD-07 Nhân viên chỉ có 01 hợp đồng đang hiệu lực; sau khi HĐ kết thúc, hệ thống không cho tạo hợp đồng mới có ngày hiệu lực chồng lấn với hợp đồng đã kết thúc (BR-NS-013). Ngày kết thúc thực tế của hợp đồng luôn bằng Ngày nghỉ việc trên quyết định — bảo đảm bằng chính cách tính, không cần đối chiếu thủ công (BR-QD-RV-12). BR-07
BR-HD-CD-08 ⚠ Bảng lương — nhân sự còn kỳ lương chưa chốt / chưa quyết toán thì kế toán vẫn phải quyết toán trước khi tất toán công nợ (BR-QD-RV-02). Cảnh báo này trước đây hiện trên popup chấm dứt; popup đã bỏ nên hiện chưa có chỗ hiển thị — xem mục cần BA chốt bên dưới. BR-07
BR-HD-CD-11 Lý do nghỉ việc khai một lần — hợp đồng không lưu lý do/ghi chú chấm dứt; lý do chỉ nằm trên quyết định nghỉ việc (chọn từ danh mục). Hợp đồng giữ Ngày kết thúc thực tế + mã quyết định; muốn xem lý do → mở quyết định đó. —

IV. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-HD-CD-09 Việc kết thúc hợp đồng đi theo quyền lập quyết định nghỉ việc (FR-QD-07) — Nhân sự · Admin; Quản lý · Nhân viên chỉ xem kết quả trên hợp đồng (BR-HD-CT-PM-02/03).

Kết thúc hợp đồng — 3 điểm cần BA chốt

  1. Huỷ / sửa quyết định nghỉ việc chưa tới ngày hiệu lực: khi Ngày nghỉ việc còn ở tương lai, sửa ngày thì hợp đồng tính lại theo ngày mới (BR-QD-RV-18); nhưng xoá quyết định thì hợp đồng có trả lại trạng thái cũ không? Ai được xoá? (Hiện SRS & mockup chưa đặc tả chiều hoàn tác.)
  2. Cảnh báo kỳ lương chưa chốt (BR-HD-CD-08): popup chấm dứt đã bỏ nên cảnh báo chưa có chỗ đứng. Đề xuất đưa vào hộp thoại xác nhận ở màn Thêm quyết định (FR-QD-07.03) — chờ BA duyệt, mockup hiện chưa làm.
  3. Hợp đồng không có Ngày kết thúc (HĐ không xác định thời hạn): đã đặc tả tạm ở BR-QD-RV-16 — mọi ngày nghỉ việc từ ngày bắt đầu HĐ trở đi đều hợp lệ, trạng thái đích luôn là Chấm dứt hợp đồng. (Dữ liệu mẫu chưa có ca này — cần BA xác nhận.)

6. Quyết định · Khen thưởng · Kỷ luật

Ba nghiệp vụ độc lập, đều trỏ về hồ sơ nhân viên

Quyết định nhân sự (QĐ-BN/MN/TN/NV), Khen thưởng (QĐ-KT), Kỷ luật (QĐ-KL) là 3 thực thể tách biệt — khen thưởng & kỷ luật tự thân là một quyết định (có mã QĐ, ngày QĐ, ngày hiệu lực, file scan, danh sách người nguoi[] riêng), không sinh bản ghi trong tab Quyết định. Liên kết duy nhất: cả 3 đều trỏ chi-tiet-nhan-su.html?ma=<NV> (đối tượng Tập thể trỏ phòng ban/công trường dạng chuỗi).

Không có trạng thái duyệt: cả 3 nghiệp vụ (Quyết định nhân sự, Khen thưởng, Kỷ luật) đều KHÔNG có trục trạng thái duyệt (Nháp/Chờ duyệt/Đang xử lý/Đã duyệt/Bị từ chối) và không có trường người ký — chúng là bản ghi quyết định đơn giản (mã QĐ · ngày QĐ · ngày hiệu lực · file scan · đối tượng liên quan). Khen thưởng & Kỷ luật thêm danh sách người nguoi[]. Xem FR-QD-06 · FR-KT-03 ≈ FR-KL-03.

Cầu nối sang Lương/Kế toán (khen thưởng Tiền mặt & kỷ luật Phạt tiền): mỗi bản ghi có trường Tháng áp dụng (kỳ lương) → số tiền cộng vào cột "Thưởng" / khấu trừ cột "Phạt" của Bảng lương kỳ đó. Luồng định tuyến chứng từ này được minh hoạ ở Trung tâm thông báo (thong-bao.html, xem §6.4) nhưng chưa nối thật — luồng chuyển chứng từ sang Lương/Kế toán để giai đoạn sau cùng Công nợ (§11.3).

Quy tắc chung cho cả 3 nghiệp vụ (BR-QKL)

Áp dụng đồng thời cho Quyết định nhân sự · Khen thưởng · Kỷ luật.

Mã Quy tắc
BR-QKL-01 Chỉ được sửa khi chưa đến ngày hiệu lực — bản ghi sửa được khi Ngày hiệu lực > ngày hiện tại. Từ ngày hiệu lực trở đi (kể cả đúng ngày hiệu lực), bản ghi bị khoá sửa: nút Sửa ẩn/vô hiệu, mở kèm ?edit=1 cũng không vào được chế độ sửa. (Chốt 27/07/2026.)
BR-QKL-02 Quyết định đã có hiệu lực mà sai thì không sửa đè — ban hành quyết định mới để điều chỉnh, giữ nguyên bản ghi cũ làm dấu vết.
BR-QKL-03 ✦ XOÁ KHÔNG bị khoá theo ngày hiệu lực — bản ghi xoá được ở mọi trạng thái hiệu lực: chưa tới hiệu lực, đúng ngày hiệu lực, hay đã có hiệu lực từ lâu đều xoá được. Nút 🗑️ Xoá ở 3 danh sách (Quyết định · Khen thưởng · Kỷ luật) giữ nguyên không điều kiện, chỉ chịu ràng buộc quyền. Đây là điểm khác Sửa: Sửa khoá từ ngày hiệu lực (BR-QKL-01), Xoá thì không. (Chốt 11/08/2026 — trước đó tài liệu đề xuất khoá xoá cùng lúc với sửa, nay bác đề xuất đó.)

| BR-QKL-04 ✦ | XOÁ = XOÁ MỀM, áp dụng cho TOÀN MODULE — quyết định nhân sự · khen thưởng · kỷ luật · hồ sơ nhân sự · hợp đồng lao động. Bản ghi bị xoá vẫn lưu trong CSDL nhưng không hiển thị ở bất kỳ màn nào (danh sách · chi tiết · tìm kiếm · báo cáo · dropdown chọn). Vì không có màn nào xem lại bản ghi đã xoá, hệ thống KHÔNG cần phân quyền xem / khôi phục và không dựng chức năng khôi phục ở giai đoạn này — dữ liệu giữ lại chỉ để truy vết ở tầng CSDL. (Chốt 11/08/2026 — thay cho BR-KT-VL-01 vốn chỉ áp cho Khen thưởng.) |

Điểm kèm theo BR-QKL-01 — cần BA chốt & Dev lưu ý

  • ~~Xoá có bị khoá theo cùng mốc không?~~ — đã chốt 11/08/2026: KHÔNG khoá, xoá được ở mọi trạng thái hiệu lực (BR-QKL-03). Nút 🗑️ Xoá ở 3 danh sách giữ nguyên.
  • ~~Admin có được sửa ngoại lệ sau ngày hiệu lực không?~~ — đã chốt 11/08/2026: KHÔNG — từ ngày hiệu lực trở đi không ai sửa được, kể cả Admin; sai thì ban hành quyết định mới (BR-QKL-02).
  • ~~Mockup chưa chặn~~ — đã làm 11/08/2026: detail-edit.js (dùng chung cho chi-tiet-quyet-dinh.html · chi-tiet-khen-thuong.html · chi-tiet-ky-luat.html) đọc Ngày hiệu lực trên màn; đã tới hạn thì nút Sửa bị vô hiệu hoá kèm tooltip nêu lý do, và ?edit=1 cũng không vào được chế độ sửa.

🔄 Luồng nghiệp vụ — Quyết định nhân sự

Vai trò được thao tác: Nhân sự (NS) · Admin (AD) tạo quyết định; Hệ thống (HT) tự chuyển trạng thái hồ sơ theo ngày hiệu lực. Quyết định là nguồn làm đổi trạng thái nhân viên & tác động tới lương.

Bước Vai trò Hành động Kết quả / Chuyển trạng thái
1. Tạo quyết định NS · AD + Thêm quyết định → chọn Loại: Bổ nhiệm / Miễn nhiệm / Tạm nghỉ / Nghỉ việc Form đổi theo loại (FR-QD-07)
2. Nhập nội dung theo loại NS · AD Bổ/Miễn nhiệm: phòng ban·chức vụ cũ → mới + thời hạn. Tạm nghỉ: từ ngày–đến ngày · lý do · bàn giao. Nghỉ việc: ngày nghỉ · lý do · bàn giao · công nợ Dữ liệu tạm trên form
3. Đính kèm & Lưu NS · AD → HT Đính kèm file scan → Lưu Tạo bản ghi QĐ (mã QĐ); không có bước duyệt. Riêng loại Nghỉ việc: khi Lưu, HT kiểm tra hợp đồng còn hiệu lực (BR-QD-RV-01) → chặn, bắt chấm dứt hợp đồng trước; và kiểm tra công nợ (BR-QD-RV-02) → cảnh báo xác nhận
4. Áp dụng theo ngày hiệu lực HT HT rà ngày hiệu lực mỗi ngày Tạm nghỉ: Từ ngày = hôm nay → Đang làm việc → Tạm nghỉ; Đến ngày = hôm nay → Tạm nghỉ → Đang làm việc (BR-05). Nghỉ việc: Ngày nghỉ = hôm nay → Đã nghỉ (BR-06)
5. Hệ quả liên phân hệ HT Cập nhật phạm vi chấm công · tính lương & danh sách chọn Chỉ NV Đang làm việc vào kỳ tính lương (BR-07); NV Đã nghỉ ngừng tính chấm công, ngừng tính lương từ kỳ tiếp theo và biến khỏi danh sách chọn tạo HĐ/quyết định mới — trừ tái tuyển dụng (BR-QD-RV-04 · BR-NS-027)

Màn Danh sách quyết định — FR-QD-01 → FR-QD-05

Panel nhan-su.html#quyet-dinh — lọc loại Bổ nhiệm / Miễn nhiệm / Tạm nghỉ / Nghỉ việc

Mục đích: cho người dùng xem danh sách các quyết định nhân sự đã tạo trong hệ thống, theo phạm vi quyền của mình. Truy cập: Nhân sự → Quyết định.

Ánh xạ mã FR

Bản đặc tả của BA đánh FR-QD-01 → FR-QD-05 cho màn danh sách; các mã FR-QD-02/03 trước đây dùng cho màn Chi tiết và màn Thêm nên được dời thành FR-QD-06 và FR-QD-07.

Dữ liệu hiển thị

STT Trường Mô tả
1 Số quyết định Mã số quyết định — mã mẫu QĐ-BN/2026/01 · QĐ-MN/2026/01 · QĐ-TN/2026/01 · QĐ-NV/2026/01
2 Loại quyết định Bổ nhiệm · Miễn nhiệm · Tạm nghỉ · Nghỉ việc (badge màu)
3 Nhân viên Họ tên nhân viên
4 Phòng ban Phòng ban của nhân viên tại thời điểm quyết định có hiệu lực
5 Ngày hiệu lực Ngày quyết định bắt đầu có hiệu lực
6 Thao tác Sửa (→ FR-QD-08, chỉ bật khi chưa đến ngày hiệu lực — BR-QKL-01) · Xoá (nếu có quyền) — xem chi tiết bằng cách bấm vào dòng

Chức năng (FR)

Mã Chức năng Mô tả
FR-QD-01 Hiển thị danh sách quyết định Vào Nhân sự → Quyết định → hệ thống liệt kê quyết định theo quyền của người dùng (BR-QD-DP-01/02).
FR-QD-02 Tìm kiếm quyết định Ô tìm theo Số quyết định · Mã nhân viên (nếu có) · Họ tên nhân viên · Loại quyết định; tìm gần đúng, không phân biệt hoa/thường (BR-QD-SR-01/02).
FR-QD-03 Lọc theo loại quyết định Danh sách chọn: Tất cả · Bổ nhiệm · Miễn nhiệm · Nghỉ việc · Tạm nghỉ — chọn 01 loại tại một thời điểm (BR-QD-FL-01/02).
FR-QD-04 Thêm mới quyết định Nhấn + Thêm quyết định → mở màn Thêm quyết định. Nút chỉ hiện với người có quyền tạo (BR-QD-PM-02).
FR-QD-05 Xem chi tiết quyết định Nhấn vào số quyết định (hoặc một dòng bất kỳ) → mở màn Chi tiết quyết định theo số QĐ.

Thanh công cụ (riêng của panel): Tìm kiếm + lọc Loại quyết định + + Thêm quyết định. Không có Xuất Excel lẫn Nhập Excel — quyết định chỉ nhập tay từng bản ghi.

Quy tắc nghiệp vụ — Danh sách quyết định (BR-QD)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-QD-DP-01 Danh sách chỉ hiển thị các quyết định người dùng có quyền xem — Nhân sự · Admin: toàn công ty; Quản lý: nhân viên thuộc phòng ban mình + của chính mình (§2).
BR-QD-DP-02 Mặc định sắp xếp theo Ngày hiệu lực giảm dần (quyết định mới nhất lên trước).
BR-QD-DP-03 Mỗi dòng tương ứng 01 quyết định.

II. Quy tắc tìm kiếm (Search Rule)

Mã Quy tắc
BR-QD-SR-01 Ô tìm kiếm hỗ trợ tìm theo: Số quyết định · Mã nhân viên (nếu có) · Họ tên nhân viên · Loại quyết định.
BR-QD-SR-02 Tìm kiếm gần đúng và không phân biệt chữ hoa/chữ thường.

III. Quy tắc lọc (Filter Rule)

Mã Quy tắc
BR-QD-FL-01 Bộ lọc loại quyết định chỉ chọn 01 loại tại một thời điểm. (Sau này hỗ trợ chọn nhiều loại thì điều chỉnh.)
BR-QD-FL-02 Thay đổi bộ lọc → hệ thống cập nhật lại danh sách theo điều kiện đã chọn.

V. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-QD-PM-01 Người có quyền Xem quyết định được truy cập danh sách và xem chi tiết.
BR-QD-PM-02 Người có quyền Tạo quyết định mới được hiển thị nút + Thêm quyết định.
BR-QD-PM-03 Người không có quyền chỉ được xem dữ liệu, không được tạo hoặc chỉnh sửa quyết định.

VI. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-QD-VL-01 ✾ Không hiển thị các quyết định đã bị xoá mềm (soft delete) — cơ chế xoá mềm áp dụng cho toàn module (BR-QKL-04). (Chốt 11/08/2026.)

VIII. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-QD-EP-01 Không có dữ liệu khớp điều kiện tìm kiếm/lọc → hiển thị "Không có dữ liệu".
BR-QD-EP-02 ✾ Lỗi khi xuất Excel → thông báo lỗi và không tạo file xuất. (Màn Quyết định KHÔNG có chức năng Xuất Excel — chốt 11/08/2026 không bổ sung; quyết định chỉ nhập tay từng bản ghi. Quy tắc giữ lại làm dự phòng, chưa áp dụng.)

Nhóm IV và nhóm VII — khoảng trống theo bản gốc của BA, bổ sung sau.

Ba điểm lệch — đã chốt 11/08/2026

  1. Cột Thao tác: giữ theo mockup — Sửa ✏️ + Xoá 🗑️, xem chi tiết bằng cách bấm dòng (không có nút Xem riêng). Nút Xoá không bị khoá theo ngày hiệu lực (BR-QKL-03).
  2. Xuất Excel: KHÔNG bổ sung cho màn Quyết định — quyết định chỉ nhập tay từng bản ghi (BR-QD-EP-02).
  3. Xoá mềm: có — xoá quyết định là xoá mềm, áp toàn module (BR-QKL-04).

FR-QD-06. Xem chi tiết quyết định

File: chi-tiet-quyet-dinh.html?ma=... (mặc định QĐ-BN/2026/01)

Mục đích: cho người dùng xem toàn bộ thông tin chi tiết của một quyết định nhân sự. Nội dung hiển thị khác nhau theo loại quyết định.

Truy cập: từ màn Danh sách quyết định, nhấn vào Số quyết định (hoặc bấm vào dòng / biểu tượng Xem chi tiết) → hệ thống mở màn Chi tiết quyết định của đúng số QĐ đó (FR-QD-05).

Ánh xạ mã FR

Bản đặc tả của BA đánh màn này là FR-QD-03; trong SRS, FR-QD-01 → FR-QD-05 đã dành cho màn danh sách nên màn Chi tiết giữ mã FR-QD-06 (xem ghi chú ánh xạ). Tương tự, bộ quy tắc màn này đánh prefix BR-QD-CT- để không trùng bộ BR-QD của màn danh sách (bản đặc tả dùng chung tên BR-QD-DP-01, BR-QD-FL-01, BR-QD-PM-01 cho cả hai màn).

Bố cục: thẻ tiêu đề (mã QĐ) → card Thông tin chung → card theo loại → card Tệp đính kèm.

Dữ liệu hiển thị

① Thông tin chung — hiển thị cho mọi loại quyết định

Trường Mô tả
Số quyết định Số quyết định (thẻ tiêu đề) — vd QĐ-BN/2026/01
Loại quyết định Bổ nhiệm (emerald) · Miễn nhiệm (amber) · Tạm nghỉ (sky) · Nghỉ việc (rose) — badge màu
Nhân viên Họ tên · Mã nhân viên; nhấn vào tên → mở Chi tiết hồ sơ (chi-tiet-nhan-su.html?ma=<NV>)

② Quyết định Bổ nhiệm / Miễn nhiệm — 2 card đặt cạnh nhau để đối chiếu (BR-QD-CT-BS-01)

Card Trường
Thông tin cũ Phòng ban · Chức vụ
Thông tin mới Phòng ban · Chức vụ · Thời hạn áp dụng (Từ ngày → Đến ngày; trống = không xác định thời hạn)
Tệp đính kèm File quyết định

③ Quyết định Nghỉ việc

Card Trường
Thông tin nghỉ việc Ngày nghỉ việc · Lý do · Người nhận bàn giao · Công nợ phải thu (₫) · Công nợ phải trả (₫) — hai khoản công nợ là ảnh chụp từ Sổ công nợ, chỉ đọc kể cả ở chế độ Sửa (BR-QD-CT-BS-02)
Tệp đính kèm File quyết định

④ Quyết định Tạm nghỉ

Card Trường
Thông tin tạm nghỉ Thời gian tạm nghỉ (ngày bắt đầu → ngày dự kiến quay lại) · Lý do tạm nghỉ · Người nhận bàn giao · Lý do chi tiết / Ghi chú
Tệp đính kèm File quyết định

Chức năng (FR)

Mã Chức năng Mô tả
FR-QD-06.01 Mở màn chi tiết Nhấn Số quyết định / dòng / biểu tượng Xem chi tiết ở danh sách → mở chi tiết theo số QĐ (BR-QD-CT-PM-01).
FR-QD-06.02 Hiển thị theo loại Hệ thống chỉ hiện các trường thuộc loại quyết định đang xem (BR-QD-CT-DP-01).
FR-QD-06.03 Hiển thị đúng dữ liệu đã lưu Giá trị lấy đúng như lúc tạo/sửa quyết định, không suy diễn lại (BR-QD-CT-DP-02 · BR-QD-CT-BS-02).
FR-QD-06.04 Chế độ chỉ đọc Mọi trường chỉ đọc, không sửa trực tiếp trên màn chi tiết (BR-QD-CT-DP-03).
FR-QD-06.05 Xem / tải file đính kèm Card Tệp đính kèm hiện tên file · dung lượng; người có quyền xem hoặc tải xuống (BR-QD-CT-FL-01/02).
FR-QD-06.06 Không có file Không đính kèm → hiện trạng thái "Chưa có file đính kèm" (BR-QD-CT-FL-03).
FR-QD-06.07 Sửa quyết định Nút Sửa mở màn Sửa quyết định (them-quyet-dinh.html?ma=<số QĐ>, điền sẵn dữ liệu); chỉ bật khi chưa đến ngày hiệu lực (BR-QKL-01).
FR-QD-06.08 Quay lại danh sách Nút ← trên header / breadcrumb → về nhan-su.html#quyet-dinh.
FR-QD-06.09 Không tìm thấy Số QĐ không tồn tại → màn trống "Không tìm thấy quyết định" + nút về danh sách.

Quy tắc nghiệp vụ — Chi tiết quyết định (BR-QD-CT)

I. Hiển thị (Display Rule)

Mã Quy tắc
BR-QD-CT-DP-01 Hệ thống chỉ hiển thị các trường tương ứng với loại quyết định: Bổ nhiệm / Miễn nhiệm → Thông tin cũ · Thông tin mới · Thời hạn áp dụng; Nghỉ việc → Ngày nghỉ việc · Lý do · Người nhận bàn giao · Công nợ; Tạm nghỉ → Thời gian tạm nghỉ · Lý do · Người nhận bàn giao · Ghi chú.
BR-QD-CT-DP-02 Thông tin chi tiết hiển thị theo đúng dữ liệu đã lưu khi tạo quyết định.
BR-QD-CT-DP-03 Các trường trên màn chi tiết ở chế độ chỉ đọc — không cho chỉnh sửa trực tiếp. Muốn sửa phải bấm Sửa để mở màn Sửa quyết định (FR-QD-06.07) và chỉ khi chưa đến ngày hiệu lực (BR-QKL-01).
BR-QD-CT-DP-04 Trường không có dữ liệu hiển thị: "Không có" với dữ liệu văn bản/số tiền (vd Công nợ phải thu: Không có), "—" với trường không áp dụng cho loại quyết định đang xem.

II. Tệp đính kèm (File Rule)

Mã Quy tắc
BR-QD-CT-FL-01 Có file đính kèm → hiển thị tên file và dung lượng file.
BR-QD-CT-FL-02 Người dùng có quyền được xem hoặc tải xuống file đính kèm.
BR-QD-CT-FL-03 Không có file đính kèm → hiển thị trạng thái "Chưa có file đính kèm".

III. Phân quyền (Permission Rule)

Mã Quy tắc
BR-QD-CT-PM-01 Chỉ người dùng có quyền Xem quyết định mới truy cập được màn chi tiết — Nhân sự · Admin: toàn công ty; Quản lý: nhân viên thuộc phòng ban mình + của chính mình (§2).
BR-QD-CT-PM-02 Người không có quyền truy cập không được xem thông tin quyết định (kể cả mở thẳng URL kèm ?ma=).

IV. Quy tắc nội dung (Decision Rule)

Mã Quy tắc
BR-QD-CT-BS-01 Quyết định Bổ nhiệm / Miễn nhiệm phải hiển thị đồng thời Thông tin cũ và Thông tin mới để người dùng dễ đối chiếu.
BR-QD-CT-BS-02 ✾ Quyết định Nghỉ việc: Công nợ phải thu / phải trả hiển thị theo giá trị đã lưu tại thời điểm lập quyết định (ảnh chụp — snapshot), không tự cập nhật theo dữ liệu công nợ phát sinh sau đó.
Bổ sung 12/08/2026: hai trường này chỉ đọc kể cả khi bật chế độ Sửa — nguồn số là Sổ công nợ, không phải người dùng nhập (BR-QD-RV-02).
BR-QD-CT-BS-03 Quyết định Tạm nghỉ: Thời gian tạm nghỉ hiển thị theo khoảng Từ ngày → Đến ngày ghi trên quyết định. (Bản đặc tả ghi "đã được phê duyệt" — quyết định nhân sự không có trục duyệt, xem §6; hiểu là khoảng thời gian đã chốt trên quyết định.)

Không có trạng thái duyệt

Quyết định nhân sự không có trục trạng thái duyệt (Nháp/Chờ duyệt/Đã duyệt/Bị từ chối) và không có nút Duyệt — là bản ghi quyết định đơn giản, đồng nhất với Khen thưởng/Kỷ luật (xem §6). (Nếu mockup còn hiển thị badge trạng thái này thì cần bỏ cho khớp — xem "Dev lưu ý" dưới.)

Sửa = mở lại màn Thêm kèm ?ma= (đồng bộ Khen thưởng / Kỷ luật)

Trang chi tiết là trang chỉ-đọc (BR-QD-CT-DP-03). Nút Sửa (#qd-edit) mở them-quyet-dinh.html?ma=<số QĐ> và điền sẵn dữ liệu hiện tại — không dùng chế độ sửa tại chỗ detail-edit.js như bản trước.

Điều kiện bật nút Sửa: chỉ khi chưa đến ngày hiệu lực (BR-QKL-01). Từ ngày hiệu lực trở đi, nút Sửa ẩn/vô hiệu.

Dev lưu ý — 3 điểm mockup còn lệch

  • Màn chi tiết hỗ trợ 4 loại (Bổ nhiệm / Miễn nhiệm / Tạm nghỉ / Nghỉ việc) — chưa hỗ trợ "Tuyển dụng" (form thêm cũng chưa có loại này).
  • Mockup chi-tiet-quyet-dinh.html hiện còn trường trangThai (Đã duyệt/Chờ duyệt/Đang xử lý/Bị từ chối) trong dữ liệu mẫu — cần bỏ cho khớp đặc tả "không có trạng thái duyệt". Form Thêm đã không có field trạng thái (đúng).
  • Trạng thái rỗng của tệp đính kèm: mockup đang ghi "Chưa có tệp đính kèm — quyết định chưa được duyệt/ký." → sửa thành "Chưa có file đính kèm" cho khớp BR-QD-CT-FL-03 và bỏ chữ "duyệt" (không có trục duyệt). Ngoài ra mockup luôn hiển thị có file (coFile = true) nên chưa demo được nhánh không có file.

FR-QD-07. Thêm quyết định

File: them-quyet-dinh.html — form động theo Loại quyết định (4 section đổi số badge)

Trường Kiểu Bắt buộc Lựa chọn / ghi chú
Loại quyết định select ✓ Bổ nhiệm (mặc định) / Miễn nhiệm / Tạm nghỉ / Nghỉ việc
Nhân viên combobox tìm kiếm ✓ 8 NV mẫu — tìm không dấu theo mã/tên/chức vụ/phòng ban; luôn hiện
[Thông tin cũ] Phòng ban · Chức vụ select ẩn khi Tạm nghỉ / Nghỉ việc
[Mới — Bổ/Miễn nhiệm] Phòng ban mới · Chức vụ mới select ✓
[Mới] Từ ngày · Đến ngày date ✓ / – Đến ngày trống = không xác định thời hạn
[Tạm nghỉ] Từ ngày (bắt đầu tạm nghỉ) date ✓ = ngày hiệu lực — mốc lật trạng thái NV → Tạm nghỉ và bắt đầu loại khỏi bảng lương
[Tạm nghỉ] Đến ngày (dự kiến quay lại) date ✓ Mốc tự khôi phục trạng thái Đang làm việc
[Tạm nghỉ] Lý do tạm nghỉ select ✓ Thai sản / Ốm đau
[Tạm nghỉ] Bàn giao công việc cho ai select NV người phụ trách thay khi vắng dài ngày
[Tạm nghỉ] Lý do chi tiết / Ghi chú textarea giải thích cụ thể trường hợp
[Nghỉ việc] Ngày nghỉ việc ✦ date ✓ Người dùng tự chọn — đây chính là ngày kết thúc hợp đồng (BR-QD-RV-12). Ràng buộc: ≥ Ngày bắt đầu HĐ (BR-HD-CD-03) và ≤ Ngày kết thúc HĐ (BR-HD-CD-13 — ô date đặt sẵn max). Dòng gợi ý dưới ô đổi theo ngày đang chọn, nói trước hệ quả: "…hợp đồng <mã HĐ> sẽ chuyển trạng thái Chấm dứt hợp đồng / Hết hạn". Không còn khoá như bản 12/08/2026 (đã bỏ BR-QD-RV-03/09)
[Nghỉ việc] Lý do select ✓ Thôi việc tự nguyện / Hết hạn hợp đồng / Nghỉ hưu / Đơn phương
[Nghỉ việc] Bàn giao cho ai select
[Nghỉ việc] Công nợ phải thu / phải trả ✾ read-only ₫ Tự đổ từ Sổ công nợ theo nhân viên đang chọn — người dùng KHÔNG nhập tay (BR-QD-RV-02, chốt 12/08/2026). Phải thu = NV nợ công ty (tạm ứng, bồi thường); Phải trả = công ty nợ NV (lương, trợ cấp còn thiếu); hai cột riêng, không bù trừ. Màn chỉ hiện 2 con số, không kèm nguồn/mốc thời gian/cảnh báo
File đính kèm file bản scan QĐ đã ký, ≤ 10 MB

Nút hành động (đầu form, canh phải)

Nút Hiện khi Xử lý
Huỷ mọi loại (kể cả Nghỉ việc — chốt 14/08/2026) Rời màn, không lưu → về danh sách quyết định
Lưu quyết định mọi loại Kiểm tra dữ liệu → lưu, sinh số QĐ theo loại. Loại Nghỉ việc phải qua hộp thoại xác nhận (FR-QD-07.03)

Chức năng — Lưu quyết định loại Nghỉ việc (đổi luồng 14/08/2026)

Mã Chức năng Mô tả
FR-QD-07.01 Đối chiếu ngay khi đổi ngày / đổi nhân viên Mỗi lần đổi Ngày nghỉ việc hoặc đổi nhân viên, màn đối chiếu tại chỗ với hợp đồng: sai ràng buộc → lỗi đỏ dưới ô ngày; hợp lệ → dòng gợi ý nói trước trạng thái hợp đồng sẽ chuyển sang. Đây là cảnh báo sớm, chưa ghi dữ liệu.
FR-QD-07.02 Sai ràng buộc ngày → không lưu Ngày nghỉ việc sau Ngày kết thúc HĐ (BR-HD-CD-13) hoặc trước Ngày bắt đầu HĐ (BR-HD-CD-03) → huỷ thao tác lưu: không tạo bản ghi, không sinh số QĐ, không rời màn; con trỏ nhảy về ô ngày, dữ liệu đã nhập giữ nguyên (BR-QD-RV-15).
FR-QD-07.03 Hộp thoại xác nhận trước khi ghi Ngày hợp lệ → hiện modal Xác nhận tạo quyết định nghỉ việc với đúng câu chữ sau (BR-QD-RV-13):
① "Nhân viên này hiện đang có ngày kết thúc hợp đồng là: dd/mm/yyyy (mã HĐ)."
② "Khi tạo quyết định nghỉ việc, ngày kết thúc hợp đồng dự kiến là ngày: dd/mm/yyyy."
③ "Hợp đồng này sau khi kết thúc sẽ có trạng thái <Chấm dứt hợp đồng / Hết hạn>." — lấy theo BR-HD-CD-12
④ "Bạn có muốn tiếp tục thao tác không ?"
2 nút: Quay lại (đóng, không ghi gì, con trỏ về ô Ngày nghỉ việc) và Tiếp tục.
FR-QD-07.04 Ghi dữ liệu Chỉ khi bấm Tiếp tục mới chạy luồng ghi: tạo bản ghi quyết định, sinh số QĐ, đồng thời ghi nhận hệ quả lên hợp đồng (FR-HD-11) rồi quay về danh sách quyết định. Bấm Quay lại → không ghi gì, ở lại form, dữ liệu giữ nguyên.
FR-QD-07.05 Phạm vi áp dụng Đối chiếu + xác nhận áp cho tạo mới ở mọi lối vào và cho cả Lưu nháp nếu có. Mở quyết định đã lưu để sửa → vẫn đối chiếu lại ngày với hợp đồng (sửa ngày thì hệ quả cũng đổi theo — BR-QD-SU-SY-03).
FR-QD-07.06 Phản hồi sau khi lưu Lưu xong hiện thông báo nêu cả hai vế: quyết định đã lưu và hợp đồng sẽ chuyển trạng thái nào — "Đã lưu quyết định nghỉ việc — hợp đồng <mã HĐ> sẽ chuyển <trạng thái đích>." Nhân viên không có hợp đồng → chỉ báo đã lưu quyết định (BR-QD-RV-14).
FR-QD-07.07 Thời điểm phát sinh hệ quả Quyết định ghi xong chưa đổi ngay trạng thái hợp đồng nếu Ngày nghỉ việc còn ở tương lai — hệ thống ghi nhận rồi chờ tới ngày mới lật trạng thái (BR-QD-RV-17 · BR-HD-CD-04). Trong lúc chờ, màn hợp đồng hiện banner vàng báo trước (FR-HD-11.03).

Loại Nghỉ việc — không còn ràng buộc với thao tác chấm dứt hợp đồng (chốt 14/08/2026)

Trước đây phải chấm dứt hợp đồng trước rồi mới lập được quyết định nghỉ việc, và ngược lại chấm dứt xong thì bắt buộc lưu quyết định. Bỏ cả hai chiều (BR-QD-RV-03 · BR-QD-RV-09 → 11). Nay lập quyết định nghỉ việc là việc độc lập: chọn nhân viên, tự chọn Ngày nghỉ việc, xác nhận — hợp đồng tự kết thúc theo đúng ngày đó. Kéo theo: nút Huỷ hiện lại cho loại Nghỉ việc, bỏ chặn điều hướng khi chưa lưu, bỏ khoá ô Ngày nghỉ việc.

Quyết định nghỉ việc — bộ yêu cầu chốt 14/08/2026

Gom một chỗ toàn bộ yêu cầu BA đặt ra cho quyết định nghỉ việc trong đợt này, kèm mã FR / BR tương ứng để Dev tra thẳng. Nội dung chi tiết vẫn nằm ở đúng bảng gốc — mục này không đặt luật mới, chỉ truy vết.

A. Truy vết yêu cầu → mã FR / BR

# Yêu cầu BA (nguyên văn ý) Hiện thực hoá ở Mã
1 Màn Thêm mới quyết định không ràng buộc với luồng Chấm dứt hợp đồng nữa Bỏ modal chặn "Chưa chấm dứt hợp đồng", bỏ chế độ bắt buộc lưu, bỏ chặn điều hướng, trả lại nút Huỷ ~~BR-QD-RV-03~~ · ~~BR-QD-RV-09 → 11~~ (bỏ) · BR-HD-CD-14
2 Chọn Ngày nghỉ việc thì đó chính là ngày chấm dứt / kết thúc hợp đồng Một nơi nhập duy nhất; hợp đồng lấy đúng ngày đó làm Ngày kết thúc thực tế BR-QD-RV-12 · FR-HD-11.01
3 Quyết định hiệu lực & ngày nghỉ việc < ngày kết thúc HĐ → hợp đồng Chấm dứt hợp đồng Trạng thái đích tính theo so sánh ngày BR-HD-CD-12 · FR-HD-11.02
4 Ngày nghỉ việc = ngày kết thúc HĐ → hợp đồng Hết hạn như trên BR-HD-CD-12 · FR-HD-11.02
5 Trước khi thêm mới phải hiện thông báo xác nhận — áp cho cả hai ca < và = Modal Xác nhận tạo quyết định nghỉ việc, 2 nút Quay lại / Tiếp tục BR-QD-RV-13 · FR-QD-07.03
6 Validate: ngày nghỉ việc không được > ngày kết thúc HĐ Chặn lưu + lỗi đỏ dưới ô ngày + max trên ô chọn ngày BR-HD-CD-13 · FR-QD-07.02
7 Câu chữ thông báo đúng như BA đọc Xác nhận tạo quyết định nghỉ việc
Nhân viên này hiện đang có ngày kết thúc hợp đồng là: 19/01/2028 (HĐLĐ-2026/027).
Khi tạo quyết định nghỉ việc, ngày kết thúc hợp đồng dự kiến là ngày: 15/07/2026.
Hợp đồng này sau khi kết thúc sẽ có trạng thái Chấm dứt hợp đồng.
Bạn có muốn tiếp tục thao tác không ?
FR-QD-07.03 · BR-QD-RV-13
8 Màn nhập không bày thông tin hợp đồng — số liệu hợp đồng chỉ xuất hiện trong thông báo xác nhận Hợp đồng đọc ngầm để giới hạn max ô ngày · báo lỗi · dựng nội dung modal BR-QD-RV-14

B. Bảng quyết định — một ngày, ba lối ra

Ngày nghỉ việc so với Ngày kết thúc HĐ Cho lưu? Có hộp thoại xác nhận? Trạng thái hợp đồng khi tới ngày
< Ngày kết thúc HĐ (nghỉ trước hạn) ✓ ✓ Chấm dứt hợp đồng
= Ngày kết thúc HĐ (nghỉ đúng hạn) ✓ ✓ Hết hạn
> Ngày kết thúc HĐ ✗ chặn – (không phát sinh)
< Ngày bắt đầu HĐ ✗ chặn – (không phát sinh)
Nhân viên chưa có hợp đồng ✓ ✓ (bản rút gọn) (không cập nhật hợp đồng nào)
Hợp đồng không có Ngày kết thúc ✓ ✓ Chấm dứt hợp đồng (BR-QD-RV-16)

C. Tiêu chí nghiệm thu (Given – When – Then)

# Given When Then
AT-RV-01 NV có HĐ kết thúc 19/01/2028 Chọn Nghỉ việc, Ngày nghỉ việc 15/07/2026, bấm Lưu quyết định Hiện modal nêu ngày kết thúc HĐ hiện tại 19/01/2028, ngày dự kiến 15/07/2026, trạng thái Chấm dứt hợp đồng; chưa ghi dữ liệu
AT-RV-02 Đang ở modal AT-RV-01 Bấm Quay lại Đóng modal, không tạo quyết định, không cấp số QĐ, ở lại form, dữ liệu giữ nguyên, con trỏ về ô Ngày nghỉ việc
AT-RV-03 Đang ở modal AT-RV-01 Bấm Tiếp tục Tạo quyết định + ghi nhận hợp đồng kết thúc ngày 15/07/2026, trạng thái Chấm dứt hợp đồng; về danh sách quyết định
AT-RV-04 NV có HĐ kết thúc 19/01/2028 Ngày nghỉ việc 19/01/2028 → Lưu Modal báo trạng thái đích Hết hạn; xác nhận xong hợp đồng chuyển Hết hạn, khoá gia hạn
AT-RV-05 NV có HĐ kết thúc 19/01/2028 Ngày nghỉ việc 01/02/2028 → Lưu Chặn: lỗi đỏ "Ngày nghỉ việc không được sau ngày kết thúc hợp đồng (19/01/2028). Vui lòng chọn lại."; không hiện modal, không ghi gì
AT-RV-06 Mở màn Thêm quyết định loại Nghỉ việc Đổi nhân viên Form không hiện khối thông tin hợp đồng nào; ô Ngày nghỉ việc đổi max theo HĐ của NV mới; dòng gợi ý & lỗi tính lại theo NV mới
AT-RV-07 NV chưa có hợp đồng trong hệ thống Lưu quyết định nghỉ việc Vẫn lưu được; modal hiện bản rút gọn; không hợp đồng nào đổi trạng thái
AT-RV-08 Ngày nghỉ việc ở tương lai & đã lưu quyết định Mở chi tiết hợp đồng của NV đó Hợp đồng giữ nguyên trạng thái, hiện banner vàng báo sẽ chuyển sang trạng thái đích vào đúng ngày nghỉ việc
AT-RV-09 Bất kỳ Mở chi tiết hợp đồng Không còn nút Chấm dứt hợp đồng và popup nhập ngày chấm dứt

Tạm nghỉ — quy tắc lương & mã QĐ

  • Khi lưu, hệ thống đặt trạng thái NV = Tạm nghỉ từ Từ ngày và loại NV khỏi bảng lương kỳ; tự trả về Đang làm việc ở Đến ngày. Trạng thái Tạm nghỉ đã có sẵn ở badge hồ sơ (FR-NS-01).
  • Số QĐ tự sinh prefix riêng QĐ-TN/2026/xx (cùng cơ chế QĐ-BN/MN/NV, reset theo năm).
  • Lý do gồm Thai sản & Ốm đau (do BHXH chi trả); cần chốt cách xử lý lương – BHXH cho từng lý do theo danh mục dùng chung.

Chức vụ — đã chuẩn hoá theo danh mục 11/08/2026

Ô Chức vụ ở form Thêm/Sửa quyết định và dữ liệu cvCu/cvMoi chỉ nhận giá trị thuộc danh mục Chức vụ — 8 mục: Giám đốc · Kế toán trưởng · Chỉ huy trưởng công trường · Tổ trưởng kỹ thuật điện · Kỹ sư dự toán · Cán bộ an toàn · Kế toán tổng hợp · Nhân viên vật tư. Đã gỡ các giá trị sai nghĩa "Nhân viên IT" · "Hành chính – kế toán" (phòng ban, không phải chức vụ) và "Nhân viên hành chính" (thuộc danh mục Chức danh, không phải Chức vụ) khỏi them-quyet-dinh.html · chi-tiet-quyet-dinh.html · quyet-dinh-data.js.

Tuyển dụng — chưa dựng trong form

Loại "Tuyển dụng" (không gắn người) chưa có trong form thêm hiện tại; các trường Chức danh cần tuyển / Số lượng / Mức lương dự kiến… là đề xuất tương lai, chưa thuộc phạm vi đợt này.

Quy tắc nghiệp vụ — Lưu quyết định Nghỉ việc (BR-QD-RV)

Áp dụng khi Loại quyết định = Nghỉ việc và người dùng bấm Lưu. BR-QD-RV-01/02/04 đánh mã theo bản đặc tả của BA. Đổi luồng 14/08/2026: quyết định nghỉ việc không còn ràng buộc hai chiều với thao tác chấm dứt hợp đồng — BR-QD-RV-03 và BR-QD-RV-09 → 11 đã bỏ, thay bằng BR-QD-RV-12 → 18 (ngày nghỉ việc = ngày kết thúc hợp đồng, xác nhận trước khi ghi). Bảng truy vết yêu cầu BA ↔ mã FR/BR + tiêu chí nghiệm thu: Bộ yêu cầu chốt 14/08/2026.

I. Kiểm tra khi lưu (Validation Rule)

Mã Quy tắc
BR-QD-RV-12 ✦ Ngày nghỉ việc CHÍNH LÀ ngày kết thúc hợp đồng. Người dùng chỉ nhập một ngày trên quyết định; hệ thống lấy đúng ngày đó làm ngày kết thúc thực tế của hợp đồng đang hiệu lực và suy ra trạng thái đích theo BR-HD-CD-12. Không còn thao tác nhập ngày chấm dứt ở màn hợp đồng (BR-HD-CD-14) → hai ngày không thể lệch nhau. (Chốt 14/08/2026.)
BR-QD-RV-13 ✦ Phải xác nhận trước khi ghi. Ngày nghỉ việc hợp lệ nhưng thay đổi số phận hợp đồng → hệ thống hiện hộp thoại xác nhận với nội dung:
"Nhân viên này hiện đang có ngày kết thúc hợp đồng là: dd/mm/yyyy. Khi tạo quyết định nghỉ việc, ngày kết thúc hợp đồng dự kiến là ngày: dd/mm/yyyy. Hợp đồng này sau khi kết thúc sẽ có trạng thái <trạng thái đích>. Bạn có muốn tiếp tục thao tác không ?"
Áp cho cả hai trường hợp hợp lệ: ngày nghỉ việc < ngày kết thúc HĐ (→ Chấm dứt hợp đồng) và ngày nghỉ việc = ngày kết thúc HĐ (→ Hết hạn). Chỉ khi bấm Tiếp tục hệ thống mới chạy luồng ghi (FR-QD-07.04); bấm Quay lại → đóng hộp thoại, không ghi gì, con trỏ về ô ngày. (Chốt 14/08/2026.)
BR-QD-RV-14 ✦ Hợp đồng đọc ngầm, KHÔNG hiển thị trên form. Màn Thêm quyết định không có khối thông tin hợp đồng — hệ thống tự lấy hợp đồng đang hiệu lực của nhân viên đang chọn để ① giới hạn ô Ngày nghỉ việc (max = ngày kết thúc HĐ), ② báo lỗi khi sai ràng buộc, ③ dựng nội dung hộp thoại xác nhận (BR-QD-RV-13) — đó là nơi duy nhất người dùng thấy số liệu hợp đồng. Đổi nhân viên → lấy lại hợp đồng của người mới. Nhân viên chưa có hợp đồng → quyết định vẫn lưu được, hộp thoại hiện bản rút gọn, hệ thống không cập nhật trạng thái hợp đồng nào. (Bỏ khối hiển thị trên form — chốt 14/08/2026.)
BR-QD-RV-16 ✦ Hợp đồng không có Ngày kết thúc (không xác định thời hạn) → không có mốc để so sánh: mọi Ngày nghỉ việc từ Ngày bắt đầu HĐ trở đi đều hợp lệ (BR-HD-CD-03), không áp BR-HD-CD-13, và trạng thái đích luôn là Chấm dứt hợp đồng — vì hợp đồng vô thời hạn không bao giờ "hết hạn". Hộp thoại xác nhận vẫn hiện, dòng ① ghi "—" ở chỗ ngày kết thúc. (Chốt 14/08/2026.)
BR-QD-RV-17 ✦ Thời điểm quyết định phát sinh hệ quả — quyết định nghỉ việc ghi vào dữ liệu ngay khi người dùng bấm Tiếp tục, nhưng hệ quả lên hợp đồng và trạng thái nhân viên chỉ phát sinh khi tới Ngày nghỉ việc:
① Ngày nghỉ việc ≤ hôm nay → hợp đồng chuyển ngay sang trạng thái đích, nhân viên chuyển Đã nghỉ việc (BR-QD-RV-04);
② Ngày nghỉ việc ở tương lai → hợp đồng & nhân viên giữ nguyên, hệ thống ghi nhận và tự lật khi tới ngày (BR-HD-CD-04), màn hợp đồng hiện banner báo trước. (Chốt 14/08/2026.)
BR-QD-RV-18 ⚠ Sửa / xoá quyết định nghỉ việc → hệ quả lên hợp đồng. Sửa Ngày nghỉ việc trước ngày hiệu lực thì ngày kết thúc thực tế và trạng thái đích của hợp đồng phải tính lại theo ngày mới (BR-QD-SU-SY-03) — ngày mới cũng phải qua đủ BR-HD-CD-03/13 và hộp thoại xác nhận. Chiều hoàn tác (xoá quyết định → hợp đồng có trả lại trạng thái cũ không, ai được xoá) chưa đặc tả — xem mục cần BA chốt ở FR-HD-11.
BR-QD-RV-15 ✦ Bị chặn thì KHÔNG ghi gì vào dữ liệu — lần bấm Lưu vi phạm ràng buộc ngày (BR-HD-CD-03 · BR-HD-CD-13) không tạo bản ghi quyết định, không cấp số quyết định, không sinh bản ghi lịch sử, không đổi trạng thái nhân viên hay hợp đồng. Người dùng ở lại form, dữ liệu đã nhập giữ nguyên. (Kế thừa BR-QD-RV-11 cũ.)
BR-QD-RV-01 ✦ Đối chiếu với hợp đồng khi lưu — khi lưu quyết định nghỉ việc, hệ thống lấy hợp đồng đang hiệu lực của nhân viên (nguồn: Hợp đồng lao động, trạng thái Đang hiệu lực · Sắp hết hạn) để kiểm ngày và tính trạng thái đích. ~~Nghiệp vụ bắt buộc chấm dứt hợp đồng trước~~ — đã bỏ 14/08/2026; nay hợp đồng kết thúc theo quyết định, không phải điều kiện tiên quyết của quyết định (BR-QD-RV-12).
BR-QD-RV-02 ✾ Kiểm tra công nợ — khi lưu, hệ thống kiểm tra công nợ của nhân viên. Còn công nợ phải thu / phải trả chưa xử lý → hiển thị thông tin công nợ để người dùng xác nhận hoặc xử lý theo quy định doanh nghiệp (không chặn cứng).
Ví dụ hiển thị: Công nợ phải thu: 5.000.000 VND · Công nợ phải trả: 2.000.000 VND.
Nguồn số — chốt 12/08/2026: hai trường Công nợ phải thu / phải trả trên form READ-ONLY, hệ thống tự đổ từ Sổ công nợ theo nhân viên đang chọn. Bỏ hoàn toàn việc nhập tay — số tiền trên một quyết định pháp lý không được do người dùng gõ, phải đối chiếu được với sổ.

I-bis. Trường Công nợ read-only (Data Rule) — chốt 12/08/2026

Bổ sung cho BR-QD-RV-02. Từ 14/08/2026 Ngày nghỉ việc đã mở khoá cho người dùng tự chọn (BR-QD-RV-12); hai trường công nợ vẫn khoá — vì lý do khác hẳn: nguồn số thuộc Sổ công nợ, không phải người dùng nhập.

Mã Quy tắc
BR-QD-RV-05 Hai cột riêng, không bù trừ. Phải thu = số nhân viên còn nợ công ty (tạm ứng, bồi thường); Phải trả = số công ty còn nợ nhân viên (lương, trợ cấp còn thiếu). Một nhân viên có thể đồng thời có cả hai; hệ thống không tự cấn trừ ở màn quyết định — cấn trừ chỉ xảy ra ở bước quyết toán / tất toán.
BR-QD-RV-06 Đổi nhân viên → tự lấy lại số dư của đúng người vừa chọn. Sau khi Lưu, số đóng băng theo quyết định (BR-QD-CT-BS-02); mở lại ở chế độ Sửa thì hiển thị snapshot đã lưu, không tự lấy số mới.
BR-QD-RV-07 Sổ công nợ chưa có dữ liệu cho nhân viên → hiển thị "Chưa có dữ liệu". Tuyệt đối không mở ô nhập tay để thay thế — thà thiếu số còn hơn có số không đối chiếu được.
BR-QD-RV-08 Giao diện tối giản (chốt 12/08/2026): màn chỉ hiện 2 con số phải thu / phải trả ở dạng ô khoá, không hiển thị nguồn lấy số, mốc thời gian, liên kết sang Sổ công nợ hay dòng cảnh báo về lương kỳ dở. Lưu ý "số này chưa phải số tất toán" vẫn đúng về nghiệp vụ (BR-HD-CD-08 · BR-PL-LIST-06) nhưng không đặt trên màn quyết định.

II. Quan hệ với hợp đồng lao động (Process Rule)

Một chiều, một nơi nhập — chốt 14/08/2026

Quyết định nghỉ việc là nguồn, hợp đồng là hệ quả: lập quyết định → hợp đồng tự kết thúc đúng ngày nghỉ việc, đúng trạng thái theo BR-HD-CD-12. Vì chỉ có một nơi nhập ngày (BR-HD-CD-14) nên Ngày nghỉ việc luôn = Ngày kết thúc thực tế của hợp đồng (BR-HD-CD-07) mà không cần ràng buộc chéo nào.

Đã bỏ — ràng buộc hai chiều bản 03→12/08/2026

BR-QD-RV-03 (chấm dứt hợp đồng xong bắt buộc lưu quyết định nghỉ việc; ngày nghỉ việc điền sẵn & khoá; chặn điều hướng khi chưa lưu) và BR-QD-RV-09 → 11 (muốn tạo quyết định nghỉ việc thì bắt buộc đã chấm dứt hợp đồng trước, kèm modal chặn "Chưa chấm dứt hợp đồng lao động" và nút "Mở hợp đồng để chấm dứt") không còn hiệu lực. Mã cũ giữ lại ở đây để tra ngược lịch sử — Dev không hiện thực hoá. Thay thế: BR-QD-RV-12 → 18 + BR-HD-CD-12 → 14.

III. Trạng thái sau khi có hiệu lực (Status Rule)

Mã Quy tắc
BR-QD-RV-04 Cập nhật trạng thái nhân viên — đến ngày nghỉ việc có hiệu lực, hệ thống:
① đổi trạng thái nhân viên thành Đã nghỉ việc (BR-06);
② ngừng tính chấm công cho nhân viên;
③ ngừng tính lương từ KỲ LƯƠNG TIẾP THEO — kỳ đang dở vẫn sinh phiếu lương, tính công tới ngày nghỉ việc (BR-PL-LIST-06, chốt 11/08/2026) ✾;
④ không cho tạo mới hợp đồng hoặc quyết định khác cho nhân viên đó (BR-NS-027), trừ trường hợp tái tuyển dụng — luồng tái tuyển dụng (mở lại hồ sơ cũ hay lập hồ sơ mới, ai được thao tác) không đặc tả đợt này ✾.

3 điểm Dev lưu ý ở bộ BR-QD-RV

  • Đã làm 14/08/2026: them-quyet-dinh.html đọc hợp đồng từ nguồn chung hop-dong-data.js, đối chiếu ngày tại chỗ (không bày thông tin hợp đồng lên form) và bắt xác nhận trước khi lưu (BR-QD-RV-12 → 18 · FR-QD-07.01 → 07). Phần công nợ đã làm 12/08/2026: hai trường chuyển sang read-only, tự đổ từ Sổ công nợ (cong-no-so-du.js), màn chỉ hiện 2 con số — BR-QD-RV-05 → 08.
  • Mốc "ngừng tính lương": ③ ghi kỳ lương tiếp theo, trong khi BR-07 loại NV khỏi bảng lương ngay khi hết trạng thái Đang làm việc → cần chốt cách tính lương kỳ đang dở (tính đến ngày nghỉ rồi mới dừng) — đã chốt 11/08/2026: kỳ đang dở vẫn sinh phiếu, tính công tới ngày nghỉ (BR-PL-LIST-06).
  • Tái tuyển dụng: ④ chừa ngoại lệ nhưng SRS chưa đặc tả luồng tái tuyển dụng (mở lại hồ sơ cũ hay tạo hồ sơ mới) — không đặc tả đợt này (chốt 11/08/2026).

FR-QD-08. Sửa quyết định

File: them-quyet-dinh.html?ma=<số QĐ> — dùng lại màn Thêm, đổi nhãn thành Sửa quyết định và điền sẵn toàn bộ dữ liệu bản ghi (đồng bộ cách làm của Khen thưởng / Kỷ luật).

Mục đích: cho người dùng có quyền chỉnh sửa thông tin một quyết định nhân sự trước khi quyết định có hiệu lực (BR-QKL-01).

Ánh xạ mã FR

Bản đặc tả của BA đánh màn này là FR-QD-04; SRS đã dùng FR-QD-01 → FR-QD-05 cho màn danh sách nên màn Sửa mang mã FR-QD-08 (nối tiếp FR-QD-06 Chi tiết · FR-QD-07 Thêm). Bộ quy tắc đánh prefix BR-QD-SU- để không trùng BR-QD (danh sách) · BR-QD-CT (chi tiết) — bản đặc tả dùng chung tên BR-QD-DP-01, BR-QD-PM-01… cho cả ba màn.

Điều kiện thực hiện — thoả đồng thời 3 điều kiện:

# Điều kiện
1 Người dùng có quyền Sửa quyết định (BR-QD-SU-PM-01) — vai trò Nhân sự · Admin (§2)
2 Quyết định tồn tại trong hệ thống (mở kèm ?ma= không tìm thấy → báo không tồn tại)
3 Quyết định chưa đến ngày hiệu lực (BR-QKL-01 · BR-QD-SU-ST-01)

Luồng xử lý

Bước Hành động Kết quả
1. Mở màn sửa Người dùng chọn Sửa ở danh sách hoặc màn chi tiết Hệ thống tải toàn bộ dữ liệu đã lưu của quyết định và điền sẵn lên form (BR-QD-SU-DP-01)
2. Hiển thị theo loại Form hiện đúng nhóm trường của loại quyết định đang sửa; trường tham chiếu ở chế độ chỉ đọc Xem bảng quyền sửa từng trường (BR-QD-SU-DP-02/03/04)
3. Lưu Người dùng nhấn Lưu / Cập nhật quyết định Hệ thống: ① kiểm tra dữ liệu hợp lệ (BR-QD-SU-VL-01→05) → ② cập nhật thông tin quyết định (giữ nguyên số QĐ — BR-QD-SU-BS-03) → ③ cập nhật file đính kèm nếu có thay đổi (BR-QD-SU-BS-04) → ④ đồng bộ dữ liệu liên quan (BR-QD-SU-SY-01→03). Không có bước ghi nhật ký thay đổi — hệ thống tự lưu log, không phải nghiệp vụ hiển thị ✾ (bỏ 11/08/2026)

Trường & quyền sửa theo loại quyết định

① Bổ nhiệm / Miễn nhiệm

Nhóm Trường Cho phép sửa
Thông tin chung Loại quyết định ✕
Thông tin chung Nhân viên ✕
Thông tin cũ Phòng ban hiện tại ✕
Thông tin cũ Chức vụ hiện tại ✕
Thông tin mới Phòng ban ✓
Thông tin mới Chức vụ ✓
Thông tin mới Từ ngày ✓
Thông tin mới Đến ngày ✓
Tệp đính kèm File quyết định ✓

② Tạm nghỉ

Trường Cho phép sửa
Loại quyết định · Nhân viên ✕
Từ ngày · Đến ngày ✓
Lý do tạm nghỉ ✓
Người nhận bàn giao ✓
Ghi chú ✓
File quyết định ✓

③ Nghỉ việc

Trường Cho phép sửa
Loại quyết định · Nhân viên ✕
Ngày nghỉ việc ✓
Lý do ✓
Người nhận bàn giao ✓
Công nợ phải thu ✓
Công nợ phải trả ✓
File quyết định ✓

Quy tắc nghiệp vụ — Sửa quyết định (BR-QD-SU)

Mã giữ theo bản đặc tả của BA. BR-QD-SU-BS-02 · ST-02 · EX-01 — xác nhận BỎ TRỐNG (chốt 11/08/2026): giữ khoảng trống, không bổ sung nội dung và không đánh lại số.

I. Hiển thị (Display Rule)

Mã Quy tắc
BR-QD-SU-DP-01 Màn hình sửa hiển thị toàn bộ dữ liệu hiện tại của quyết định (điền sẵn đúng giá trị đã lưu).
BR-QD-SU-DP-02 Thông tin hiển thị thay đổi theo loại quyết định (giống form Thêm — FR-QD-07).
BR-QD-SU-DP-03 Loại quyết định và Nhân viên chỉ hiển thị để tham chiếu, không cho chỉnh sửa.
BR-QD-SU-DP-04 Thông tin cũ của quyết định Bổ nhiệm / Miễn nhiệm chỉ hiển thị để đối chiếu, không được chỉnh sửa.

II. Kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-QD-SU-VL-01 Các trường bắt buộc phải nhập đầy đủ theo từng loại quyết định (theo bảng trường ở FR-QD-07).
BR-QD-SU-VL-02 Có nhập Đến ngày → Đến ngày ≥ Từ ngày.
BR-QD-SU-VL-03 Ngày nghỉ việc không được nhỏ hơn ngày bắt đầu làm việc của nhân viên (lấy từ hồ sơ nhân sự).
BR-QD-SU-VL-04 Công nợ phải thu và Công nợ phải trả phải ≥ 0.
BR-QD-SU-VL-05 File đính kèm phải đúng định dạng và không vượt dung lượng tối đa theo cấu hình hệ thống (BR-NS-FILE-003).

III. Quy tắc nội dung (Business Rule)

Mã Quy tắc
BR-QD-SU-BS-01 Không được thay đổi loại quyết định sau khi quyết định đã được tạo.
BR-QD-SU-BS-03 Sửa thông tin → hệ thống cập nhật dữ liệu của quyết định nhưng giữ nguyên số quyết định.
BR-QD-SU-BS-04 Thay đổi file đính kèm → hệ thống thay thế file hiện tại theo chính sách lưu trữ của hệ thống và cập nhật thông tin file mới (tên · dung lượng — hiển thị lại ở chi tiết).

IV. Trạng thái (Status Rule)

Mã Quy tắc
BR-QD-SU-ST-01 Quyết định chưa đến ngày hiệu lực → người dùng được chỉnh sửa theo quyền được cấp. (Từ ngày hiệu lực trở đi: khoá sửa — BR-QKL-01; sai thì ban hành quyết định mới — BR-QKL-02.)
BR-QD-SU-ST-03 Sửa ngày hiệu lực của quyết định chưa có hiệu lực → hệ thống cập nhật lại thời điểm áp dụng các thay đổi liên quan.

V. Đồng bộ (Synchronization Rule)

Mã Quy tắc
BR-QD-SU-SY-01 Sửa quyết định Bổ nhiệm / Miễn nhiệm trước ngày hiệu lực → hệ thống cập nhật lại thông tin sẽ áp dụng (phòng ban · chức vụ · thời hạn) khi quyết định có hiệu lực.
BR-QD-SU-SY-02 Sửa quyết định Tạm nghỉ trước ngày hiệu lực → cập nhật lại khoảng thời gian tạm nghỉ và thời điểm chuyển trạng thái nhân viên (BR-05).
BR-QD-SU-SY-03 Sửa quyết định Nghỉ việc trước ngày hiệu lực → cập nhật lại ngày nghỉ việc và các thông tin bàn giao · công nợ theo dữ liệu mới (BR-06 · BR-QD-RV-04).

VI. Phân quyền (Permission Rule)

Mã Quy tắc
BR-QD-SU-PM-01 Chỉ người dùng có quyền Sửa quyết định mới được chỉnh sửa quyết định (Nhân sự · Admin — §2).
BR-QD-SU-PM-02 Người dùng chỉ có quyền xem (vd Quản lý) không được lưu thay đổi — nút Sửa ẩn/vô hiệu, mở thẳng URL ?ma= cũng không lưu được.

VII. Ngoại lệ (Exception Rule)

Mã Quy tắc
BR-QD-SU-EX-02 ✾ Quyết định đã bị người dùng khác thay đổi trong lúc đang chỉnh sửa → hệ thống thông báo xung đột dữ liệu và yêu cầu tải lại thông tin trước khi tiếp tục lưu. (Cách hiện thực — khoá lạc quan bằng version / timestamp — không đặc tả trong SRS, thuộc tầng kỹ thuật của Dev; chốt 11/08/2026.)

4 điểm Dev lưu ý ở màn Sửa

  • Mockup chưa khoá trường tham chiếu: them-quyet-dinh.html?ma= mới điền sẵn dữ liệu, còn Loại quyết định · Nhân viên · Phòng ban cũ · Chức vụ cũ vẫn sửa được → cần chuyển sang chỉ đọc theo BR-QD-SU-DP-03/04 · BR-QD-SU-BS-01.
  • Mockup chưa chặn theo ngày hiệu lực: nút Sửa hiện luôn bật với mọi bản ghi (BR-QD-SU-ST-01 · BR-QKL-01).
  • Chưa có kiểm tra VL-02/03/04 trên form (Đến ngày ≥ Từ ngày · Ngày nghỉ ≥ ngày bắt đầu làm việc · công nợ ≥ 0) — hiện chỉ có required cơ bản.
  • Chống xung đột đồng thời (BR-QD-SU-EX-02) — cơ chế khoá lạc quan (version / timestamp) không đặc tả trong đợt này, để Dev xử lý ở tầng kỹ thuật (chốt 11/08/2026). (Audit Log cũng đã bỏ khỏi phạm vi — hệ thống tự ghi log.)

Lọc danh sách Khen thưởng / Kỷ luật theo nhân viên & kỳ lương ✦

File: hai panel nhan-su.html#khen-thuong · nhan-su.html#ky-luat

Mã Yêu cầu chức năng Mô tả
FR-NS-KTKL-LOC-01 ✦ Mở màn là lọc sẵn Mở panel kèm tham số ?nv=&lt;mã NV&gt;&amp;ten=&lt;tên&gt;&amp;ky=&lt;YYYY-MM&gt; → danh sách chỉ còn quyết định của đúng nhân viên đó, có Tháng áp dụng đúng kỳ đó. Dùng khi bấm nút xem chi tiết ở khối Khen thưởng / Phạt kỷ luật trong hộp Luồng ký & xác nhận của bảng lương (FR-PL-KY-10). Không có tham số → hiện đủ danh sách như cũ. Khớp theo mã nhân viên; quyết định tập thể sổ danh sách theo tên (không có mã) nên khớp thêm theo tên.
FR-NS-KTKL-LOC-02 ✦ Dải đang lọc Đang lọc thì đầu bảng hiện dải xanh: Đang lọc theo <tên> (<mã>) · Tháng M/YYYY · <N> quyết định khen thưởng / kỷ luật, kèm nút Xoá lọc đưa về danh sách đầy đủ. Lọc mà không còn bản ghi nào → bảng ghi “Nhân viên này không có quyết định khen thưởng / kỷ luật nào trong kỳ.” thay cho câu “Chưa có…”.

(Dựng 15/09/2026 — cùng cơ chế với hai màn danh sách đơn ở FR-DS-02.)


Màn Danh sách khen thưởng — FR-KT-LS-01 → FR-KT-LS-10

File: panel "Khen thưởng" trong nhan-su.html#khen-thuong — render từ nguồn chung khen-thuong-data.js

Mục đích: cho người dùng xem danh sách các quyết định khen thưởng đã tạo trong hệ thống, theo phạm vi quyền của mình. Truy cập: Nhân sự → Khen thưởng.

Ánh xạ mã FR

Bản đặc tả của BA đánh mã FR-KT-LS-xx cho màn danh sách; SRS trước đây gọi màn này là FR-KT-01. Giữ nguyên tên/anchor FR-KT-01 (đang được §2 và Phụ lục A trỏ tới) và bổ sung bộ mã chi tiết FR-KT-LS-xx bên dưới. Bộ quy tắc màn này đánh prefix BR-KT- — không trùng với quy tắc chung 3 nghiệp vụ BR-QKL.

Thành phần màn

Thành phần Ghi chú
Ô tìm / lọc thanh công cụ mặc định (Tìm kiếm + lọc Phòng ban — chưa nối logic trong mockup)
Nút Thêm khen thưởng (→ FR-KT-03) — không có Xuất Excel lẫn Nhập Excel: công ty không dùng, chỉ nhập tay
Bảng Số QĐ · Đối tượng · Hình thức · Số tiền (₫) · Ngày quyết định · Ngày hiệu lực · Thao tác (🗑️ Xoá)

Dữ liệu hiển thị

STT Trường Mô tả
1 Số quyết định Mã số quyết định khen thưởng — mã mẫu QĐ-KT/2026/01
2 Đối tượng Loại đối tượng + tóm tắt: Cá nhân 1 người → Cá nhân · <tên NV>; Cá nhân nhiều người → Cá nhân · N người; Tập thể → Tập thể · <phòng ban> (BR-KT-DP-03/04/05). Chi tiết từng người xem ở màn Chi tiết
3 Hình thức Tiền mặt · Bằng khen — mã lưu trong KT_HINHTHUC (Tiền mặt = tien)
4 Số tiền (₫) Tổng số tiền của các người trong quyết định — chỉ khi Hình thức = Tiền mặt; hình thức không có giá trị tiền hiển thị — (BR-KT-DP-06)
5 Ngày quyết định Ngày ban hành quyết định — trục sắp xếp mặc định (BR-KT-DP-01)
6 Ngày hiệu lực Ngày quyết định bắt đầu có hiệu lực. Mọi bản ghi khen thưởng đều có Ngày hiệu lực (điền đủ, hiển thị ở danh sách)
7 Thao tác 🗑️ Xoá (nếu có quyền) — Sửa nằm ở màn Chi tiết; xem chi tiết bằng cách bấm vào dòng

Chức năng (FR)

Mã Chức năng Mô tả
FR-KT-LS-01 Xem danh sách khen thưởng Vào Nhân sự → Khen thưởng → hệ thống liệt kê các quyết định khen thưởng theo quyền của người dùng (BR-KT-DP-01/02).
FR-KT-LS-02 Tìm kiếm khen thưởng Ô tìm theo Số quyết định · Mã nhân viên · Tên nhân viên · Tên phòng ban; không phân biệt hoa/thường (BR-KT-SR-01/02).
FR-KT-LS-03 Lọc theo phòng ban Danh sách chọn phòng ban — chọn 01 phòng ban tại một thời điểm, đổi bộ lọc thì tự tải lại danh sách (BR-KT-FL-01/02).
FR-KT-LS-04 ✾ Phân trang Chỉ có chuyển trang, không có ô đổi số bản ghi mỗi trang — giữ đúng mockup. (Chốt 11/08/2026.)
FR-KT-LS-05 ✾ Sắp xếp danh sách Danh sách luôn sắp theo Ngày hiệu lực, mới nhất lên đầu (giảm dần) — cố định, người dùng không chọn cột sắp xếp. Bản ghi chưa có ngày hiệu lực xếp cuối danh sách; hai bản ghi trùng ngày hiệu lực thì lấy Ngày quyết định mới hơn lên trước. (Chốt 11/08/2026 — bỏ phương án cho sắp xếp theo Ngày quyết định · Số tiền.)
FR-KT-LS-06 Thêm mới quyết định khen thưởng Nhấn + Thêm khen thưởng → mở màn Thêm khen thưởng. Nút chỉ hiện với người có quyền tạo (BR-KT-PM-02).
FR-KT-LS-07 ✾ Xem chi tiết quyết định Bấm vào dòng (hoặc vào Số quyết định) → mở màn Chi tiết khen thưởng. KHÔNG có nút Xem riêng ở cột Thao tác — cột này chỉ có 🗑️ Xoá. (Chốt 11/08/2026, giữ theo mockup.)
FR-KT-LS-08 ✾ (khuyết) Mã này không có trong bản đặc tả BA gửi (nhảy từ 07 sang 09) — xác nhận giữ trống (chốt 11/08/2026).
FR-KT-LS-09 Xoá quyết định (nếu có) Chỉ xoá mềm — bản ghi vẫn được lưu trong cơ sở dữ liệu, chỉ ẩn khỏi danh sách (BR-KT-VL-01). (Chốt 03/08/2026. Không khoá theo ngày hiệu lực — xoá được ở mọi trạng thái hiệu lực, BR-QKL-03, chốt 11/08/2026.)
FR-KT-LS-10 Làm mới danh sách Cập nhật lại dữ liệu mới nhất sau khi thêm · sửa · xoá quyết định.

Thanh công cụ (riêng của panel): Tìm kiếm + lọc Phòng ban + + Thêm khen thưởng. Không có Xuất Excel lẫn Nhập Excel — khen thưởng chỉ nhập tay từng bản ghi.

Quy tắc nghiệp vụ — Danh sách khen thưởng (BR-KT)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-KT-DP-01 Danh sách hiển thị các quyết định khen thưởng theo Ngày quyết định giảm dần (mới nhất lên trước).
BR-KT-DP-02 Mỗi dòng tương ứng 01 quyết định khen thưởng.
BR-KT-DP-03 Đối tượng là nhiều cá nhân → hiển thị Cá nhân · X người. Ví dụ: Cá nhân · 3 người.
BR-KT-DP-04 Đối tượng là một cá nhân → hiển thị Cá nhân · <tên NV>. Ví dụ: Cá nhân · Nguyễn Văn A.
BR-KT-DP-05 Đối tượng là tập thể → hiển thị Tập thể · <phòng ban>. Ví dụ: Tập thể · Phòng Kế hoạch – Kỹ thuật.
BR-KT-DP-06 Hình thức khen thưởng không có giá trị tiền (Bằng khen, Giấy khen…) → cột Số tiền hiển thị —.

II. Quy tắc tìm kiếm (Search Rule)

Mã Quy tắc
BR-KT-SR-01 Ô tìm kiếm hỗ trợ tìm theo: Số quyết định · Mã nhân viên · Tên nhân viên · Tên phòng ban.
BR-KT-SR-02 Tìm kiếm không phân biệt chữ hoa và chữ thường.

III. Quy tắc lọc (Filter Rule)

Mã Quy tắc
BR-KT-FL-01 Người dùng chỉ được chọn 01 phòng ban tại một thời điểm để lọc danh sách.
BR-KT-FL-02 Sau khi thay đổi điều kiện lọc, hệ thống tự động tải lại danh sách.

IV. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-KT-VL-01 ✾ Xoá quyết định khen thưởng là xoá mềm (soft delete) — nay là quy tắc chung toàn module (BR-QKL-04, chốt 11/08/2026): dữ liệu giữ nguyên trong CSDL, chỉ không hiển thị ở danh sách & các màn nghiệp vụ. (Chốt 03/08/2026 — FR-KT-LS-09.)
BR-KT-VL-02 Một quyết định phải có ít nhất một đối tượng khen thưởng.

V. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-KT-PM-01 Chỉ người dùng có quyền Xem khen thưởng mới được truy cập màn hình danh sách.
BR-KT-PM-02 Chỉ người dùng có quyền Thêm khen thưởng mới được hiển thị nút + Thêm khen thưởng.
BR-KT-PM-03 Chỉ người dùng có quyền Chỉnh sửa khen thưởng mới được phép chỉnh sửa quyết định — và chỉ khi chưa đến ngày hiệu lực (BR-QKL-01).

VI. Quy tắc trạng thái (Status Rule)

Mã Quy tắc
BR-KT-ST-01 Khi đến Ngày hiệu lực, quyết định khen thưởng được coi là có hiệu lực và được áp dụng theo quy định của doanh nghiệp.

VII. Quy tắc xử lý (Process Rule)

Mã Quy tắc
BR-KT-PR-02 Đối tượng hiển thị trên danh sách được xác định theo dữ liệu đã lưu tại thời điểm tạo quyết định (ảnh chụp — snapshot). Ví dụ: quyết định áp dụng cho 3 nhân viên thì luôn hiển thị Cá nhân · 3 người, kể cả sau này một trong các nhân viên chuyển phòng ban hoặc nghỉ việc.
BR-KT-PR-05 Mỗi quyết định khen thưởng chỉ được đồng bộ sang Bảng lương một lần — tránh phát sinh thưởng trùng khi người dùng mở lại hoặc chỉnh sửa quyết định sau khi đã chi trả. Điểm neo đồng bộ là trường Tháng áp dụng (kỳ lương) (FR-KT-03 → cột "Thưởng" của Bảng lương).

VIII. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-KT-EX-01 Không có dữ liệu khớp điều kiện tìm kiếm/lọc → hệ thống hiển thị thông báo "Không có dữ liệu".

Mã khuyết theo bản gốc của BA: BR-KT-PR-01 · BR-KT-PR-03 · BR-KT-PR-04 — xác nhận giữ trống (chốt 11/08/2026), không bổ sung nội dung, không đánh lại số.

Bốn điểm lệch giữa bản đặc tả và mockup — cần BA xác nhận

  1. ~~Sắp xếp (FR-KT-LS-05) — mockup chưa có sắp xếp theo cột~~ — đã chốt 11/08/2026: sắp cố định theo Ngày hiệu lực, mới nhất lên đầu; không có điều khiển sắp xếp.
  2. Nút Xem (FR-KT-LS-07) — bản đặc tả ghi "nhấn Số quyết định hoặc nút Xem", còn mockup + ma trận quyền §2 chỉ có bấm dòng để xem chi tiết và 🗑️ Xoá ở cột Thao tác. Giữ theo mockup hay bổ sung nút Xem?
  3. Đổi số bản ghi mỗi trang (FR-KT-LS-04) — mockup mới có chuyển trang, chưa có ô chọn số bản ghi/trang.
  4. Đồng bộ Bảng lương một lần (BR-KT-PR-05) — cần cờ đã-đồng-bộ trên bản ghi khen thưởng (và tham chiếu chứng từ sang kỳ lương). Cơ chế này chưa đặc tả trong SRS lẫn mockup — gắn với §11.3 (Công nợ — giai đoạn sau).

FR-KT-02. Chi tiết khen thưởng

File: chi-tiet-khen-thuong.html?ma=... (mặc định QĐ-KT/2026/02) — header có nút Sửa

Cards (render từ khen-thuong-data.js + nhan-su-data.js): Đối tượng & hình thức → Danh sách người được khen (bảng) → Lý do & đợt → Thông tin quyết định → Tệp đính kèm.

  • Đối tượng: Cá nhân / Tập thể. Hình thức (badge indigo): Tiền mặt / Bằng khen. Tập thể có Quyền lợi kèm theo (cả tập thể) hiển thị ở card này.
  • Bảng "Danh sách người được khen" — cột mức khen đổi theo hình thức (Tiền mặt → Số tiền + dòng Tổng cộng; Bằng khen → badge hình thức):
    • Cá nhân (1 hoặc nhiều người): luôn dạng bảng — Nhân viên (tên · mã NV, đã bỏ chức vụ) · Phòng ban · (mức khen) · Quyền lợi theo nguoi[], cùng cấu trúc bảng màn Thêm.
    • Tập thể: Tên NV · Chức vụ · (mức khen) cho toàn bộ nhân viên thuộc phòng ban — Tiền mặt lấy từ nguoi[] (mức từng người); Bằng khen tự sổ danh sách NV của phòng từ nhan-su-data.js, badge hình thức áp chung cả tập thể.
  • Lý do & đợt: card này hiển thị Tháng áp dụng (kỳ lương) khi Hình thức = Tiền mặt (đồng bộ màn Thêm), rỗng thì hiện —.
  • Sửa: nút Sửa mở lại màn Thêm kèm ?ma= và điền sẵn dữ liệu (không sửa tại chỗ). Nút này chỉ bật khi chưa đến ngày hiệu lực (BR-QKL-01).

Truy cập: từ màn Danh sách khen thưởng, nhấn vào Số quyết định (hoặc bấm vào dòng) → hệ thống mở màn Chi tiết khen thưởng của đúng số QĐ đó (FR-KT-LS-07).

Ánh xạ mã BR

Bộ quy tắc màn này đánh prefix BR-KT-CT- để không trùng bộ BR-KT của màn danh sách — bản đặc tả của BA dùng chung tên BR-KT-DP-01, BR-KT-FL-01, BR-KT-PM-01, BR-KT-EX-01 cho cả hai màn, và riêng BR-KT-FL- ở màn này mang nghĩa File Rule (tệp đính kèm) chứ không phải Filter Rule như màn danh sách.

Dữ liệu hiển thị

4.1. Thông tin chung — hiển thị cho mọi quyết định khen thưởng (card Đối tượng & hình thức)

STT Trường Mô tả
1 Số quyết định Mã quyết định khen thưởng — mã mẫu QĐ-KT/2026/02 (hiển thị ở thẻ tiêu đề)
2 Đối tượng Cá nhân · Tập thể
3 Hình thức khen thưởng Badge indigo — Tiền mặt · Bằng khen (bản đặc tả nêu thêm "Hiện vật…", chốt 11/08/2026: KHÔNG bổ sung)

4.2. Trường hợp khen thưởng CÁ NHÂN

Card "Danh sách người được khen" — dạng bảng theo nguoi[], cùng cấu trúc bảng ở màn Thêm:

STT Trường Mô tả
1 Mã nhân viên Mã NV — mockup hiển thị gộp ô Nhân viên dạng Tên · Mã NV
2 Họ tên Họ tên nhân viên được khen
3 Phòng ban Phòng ban của nhân viên tại thời điểm lập quyết định (BR-KT-PR-02)
4 Số tiền thưởng Mức thưởng từng người — chỉ khi Hình thức = Tiền mặt; Bằng khen → ẩn cột (BR-KT-CT-DP-06)
5 Quyền lợi kèm theo Quyền lợi riêng của từng người (text)

Hiển thị tổng (dòng Tổng cộng dưới bảng, khi Hình thức = Tiền mặt): Tổng số người được khen · Tổng số tiền thưởng (BR-KT-CT-BS-05).

Card "Lý do & đợt khen thưởng":

STT Trường Mô tả
1 Lý do / Thành tích Lý do khen thưởng
2 Đợt / Dịp khen thưởng Text tự nhập (không phải danh mục cố định)
3 Tháng áp dụng (kỳ lương) Chỉ hiển thị khi Hình thức = Tiền mặt — điểm neo cộng vào cột "Thưởng" của Bảng lương (BR-KT-CT-BS-06); rỗng thì hiện —
4 Mô tả thành tích Mô tả chi tiết

4.3. Trường hợp khen thưởng TẬP THỂ

Card "Thông tin tập thể":

STT Trường Mô tả
1 Phòng ban / Tập thể Tên phòng ban hoặc công trường được khen — lưu bằng chuỗi, chưa có ID
2 Hình thức khen Tiền mặt · Bằng khen — áp chung cả tập thể
3 Quyền lợi tập thể Quyền lợi kèm theo (cả tập thể) — luôn hiển thị khi Đối tượng = Tập thể, ở mọi hình thức

Card "Danh sách thành viên" — toàn bộ nhân viên thuộc phòng ban tại thời điểm lập quyết định (BR-KT-CT-DP-03):

STT Trường Mô tả
1 Họ tên Họ tên thành viên
2 Chức vụ Chức vụ tại thời điểm lập quyết định
3 Hình thức khen Badge hình thức áp chung cả tập thể. Riêng Tập thể × Tiền mặt, mockup hiện hiển thị thêm Số tiền từng người lấy từ nguoi[] — bản đặc tả không nêu cột này — chốt 11/08/2026: giữ theo mockup, nhập tiền theo từng cá nhân

Card "Lý do & đợt khen thưởng": Lý do / Thành tích · Đợt / Dịp · Mô tả. (Bản đặc tả không liệt kê Tháng áp dụng (kỳ lương) cho tập thể — chốt 11/08/2026: CÓ hiển thị khi hình thức là Tiền mặt.)

4.4. Thông tin quyết định · 4.5. File đính kèm

STT Card Trường Mô tả
1 Thông tin quyết định Ngày quyết định Ngày ban hành quyết định
2 Thông tin quyết định Ngày hiệu lực Ngày quyết định bắt đầu có hiệu lực — mốc khoá sửa (BR-QKL-01)
3 Tệp đính kèm File quyết định Tên file quyết định đã đính kèm (BR-KT-CT-FL-01)
4 Tệp đính kèm Dung lượng file Dung lượng file (≤ 10 MB)

Chức năng (FR)

Mã Chức năng Mô tả
FR-KT-CT-01 Xem chi tiết quyết định khen thưởng Hiển thị toàn bộ thông tin của quyết định ở chế độ chỉ đọc, bố cục đổi theo loại đối tượng (BR-KT-CT-DP-01/04).
FR-KT-CT-02 Xem danh sách người được khen / thành viên Cá nhân → bảng người được khen kèm mức thưởng & quyền lợi từng người; Tập thể → thông tin tập thể + danh sách thành viên (BR-KT-CT-DP-02/03).
FR-KT-CT-03 Xem tổng hợp mức thưởng Khen thưởng Cá nhân × Tiền mặt → hiển thị tổng số người và tổng số tiền thưởng (BR-KT-CT-BS-05).
FR-KT-CT-04 Xem & tải tệp đính kèm Hiển thị tên file · dung lượng; người dùng có quyền được tải xuống (BR-KT-CT-FL-01/02).
FR-KT-CT-05 Sửa quyết định Nút Sửa mở lại màn Thêm kèm ?ma= và điền sẵn dữ liệu (không sửa tại chỗ). Nút chỉ hiện với người có quyền sửa (BR-KT-CT-PM-02) và chỉ bật khi chưa đến ngày hiệu lực (BR-QKL-01).

Quy tắc nghiệp vụ — Chi tiết khen thưởng (BR-KT-CT)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-KT-CT-DP-01 Hệ thống hiển thị thông tin chi tiết theo đúng loại đối tượng của quyết định khen thưởng (Cá nhân / Tập thể).
BR-KT-CT-DP-02 Đối tượng là Cá nhân → hiển thị danh sách người được khen cùng mức thưởng và quyền lợi của từng người.
BR-KT-CT-DP-03 Đối tượng là Tập thể → hiển thị thông tin tập thể được khen và danh sách thành viên thuộc tập thể tại thời điểm lập quyết định (ảnh chụp — snapshot, đồng bộ BR-KT-PR-02).
BR-KT-CT-DP-04 Toàn bộ dữ liệu trên màn chi tiết ở chế độ chỉ đọc — mọi thay đổi phải qua nút Sửa → màn Thêm/Sửa.
BR-KT-CT-DP-05 Trường không có dữ liệu → hiển thị —.
BR-KT-CT-DP-06 Hình thức khen thưởng không có giá trị tiền (Bằng khen, Giấy khen…) → trường Số tiền không hiển thị (ẩn cột) hoặc hiển thị —.

II. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-KT-CT-BS-05 Khen thưởng Cá nhân bằng Tiền mặt → hệ thống hiển thị tổng số người được khen và tổng số tiền thưởng.
BR-KT-CT-BS-06 Nếu có cấu hình chi trả qua bảng lương → thông tin Tháng áp dụng (kỳ lương) được hiển thị theo dữ liệu đã lưu của quyết định (không tự tính lại theo ngày hiện tại).

Mã khuyết theo bản gốc của BA: BR-KT-CT-BS-01 → BS-04 — xác nhận giữ trống (chốt 11/08/2026), không bổ sung nội dung, không đánh lại số.

III. Quy tắc tệp đính kèm (File Rule)

Mã Quy tắc
BR-KT-CT-FL-01 Quyết định có file đính kèm → hệ thống hiển thị Tên file và Dung lượng file.
BR-KT-CT-FL-02 Người dùng có quyền được phép tải xuống tệp đính kèm.

IV. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-KT-CT-PM-01 Chỉ người dùng có quyền Xem khen thưởng mới được truy cập màn hình chi tiết.
BR-KT-CT-PM-02 Chỉ người dùng có quyền Sửa khen thưởng mới được hiển thị nút Sửa — kết hợp điều kiện thời gian của BR-QKL-01.

V. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-KT-CT-EX-01 ✾ Quyết định không tồn tại hoặc đã bị xoá (BR-QKL-04) → hệ thống không mở màn chi tiết, hiện thông báo "Không tìm thấy quyết định" rồi quay về màn danh sách tương ứng. Áp chung toàn module cho mọi màn chi tiết mở bằng ?ma= (quyết định · khen thưởng · kỷ luật · hợp đồng · hồ sơ). (Chốt 11/08/2026.)

Bốn điểm lệch — đã chốt 11/08/2026 (giữ theo mockup)

  1. Hình thức: giữ 2 hình thức (KT_HINHTHUC = tien · bang-khen) — KHÔNG bổ sung Hiện vật.
  2. Tập thể × Tiền mặt: mức thưởng nhập theo từng cá nhân như mockup (BR-KT-ADD-BS-12), không một khoản chung cho cả tập thể.
  3. Tháng áp dụng cho Tập thể: CÓ — card Lý do & đợt của tập thể hiển thị Tháng áp dụng (kỳ lương) khi hình thức là Tiền mặt, cùng quy tắc với cá nhân (BR-KT-CT-BS-06 · BR-KL-ADD-VL-15).
  4. Chỉ đọc (BR-KT-CT-DP-04): màn chi tiết chỉ xem; nút Sửa mở chế độ sửa và tự khoá khi quyết định đã tới ngày hiệu lực (BR-QKL-01) — đã làm ở detail-edit.js ngày 11/08/2026.

FR-KT-03. Thêm / Sửa khen thưởng

File: them-khen-thuong.html (mở kèm ?ma= để Sửa — điền sẵn dữ liệu); 3 section.

Section 1 — "Đối tượng & hình thức khen thưởng" (tên heading mockup; gồm cả bảng người được khen, động theo Đối tượng × Hình thức):

Trường Kiểu Bắt buộc Lựa chọn / ghi chú
Đối tượng select ✓ Cá nhân / Tập thể
Hình thức khen thưởng select ✓ Tiền mặt (mặc định) / Bằng khen
[Cá nhân] Bảng người được khen bảng thêm/xoá dòng ✓ mỗi dòng: Nhân viên (combobox tìm nhanh, 8 NV mẫu từ nhan-su-data.js, option hiển thị Tên — Mã NV, chọn tự do không theo phòng; chọn NV → tự điền Phòng ban của NV đó, vẫn sửa được) · Phòng ban (combobox tìm nhanh, mọi phòng ban) · cột mức khen · Quyền lợi kèm theo (text); nút "+ Thêm nhân viên"; mặc định sẵn 1 dòng trống. Ô Nhân viên nới rộng + bảng cuộn ngang để đủ chỗ hiện Tên+Mã; dropdown combobox hiển thị nổi (portal) nên không bị khung cuộn cắt
[Cá nhân] cột mức khen — — Tiền mặt → Số tiền (₫); Bằng khen → ẩn cột
[Tập thể] Phòng ban / Tập thể select ✓ 6 phòng ban + Công trường–Gói thầu số 2
[Tập thể · Tiền mặt] Bảng sổ nhân viên bảng tự đổ chọn phòng ban → sổ toàn bộ NV thuộc phòng: Tên · Chức vụ · Số tiền thưởng
[Tập thể · mọi hình thức] Quyền lợi kèm theo (cả tập thể) text luôn hiển thị khi Đối tượng = Tập thể, áp cho cả tập thể ở mọi hình thức (kể cả Tiền mặt)

Section 2 — Lý do & đợt: Lý do/Thành tích · Đợt/Dịp khen thưởng (text tự nhập, không phải danh mục cố định) · (khi Hình thức = Tiền mặt) Tháng áp dụng (kỳ lương) — tự gợi ý theo Ngày hiệu lực, cho sửa (kỳ đã chốt / chi trả trễ kỳ); số tiền đổ vào cột "Thưởng" của Bảng lương tháng này · Mô tả thành tích. Section 3 — Thông tin quyết định: Ngày quyết định (✓) · Ngày hiệu lực · File đính kèm (≤ 10 MB).

Sửa dùng lại màn Thêm — một nguồn dữ liệu

chi-tiet/nhan-su/them cùng đọc khen-thuong-data.js. Bấm Sửa ở chi tiết → mở them-khen-thuong.html?ma=<mã>: đổi nhãn sang Sửa, đổ dữ liệu lên đúng bảng/ô (nhiều người, số tiền/danh hiệu theo hình thức). Mô hình: nguoi[] cho Cá nhân & Tập thể–Tiền mặt.

Quy tắc nghiệp vụ — Thêm / Sửa khen thưởng (BR-KT-ADD)

Ánh xạ mã BR

Bản đặc tả của BA đánh 2 quy tắc này là BR-KT-BS-09 · BR-KT-BS-10 — cùng dãy BS với BR-KT-CT-BS-05/06 của màn Chi tiết, nhưng nội dung là kiểm tra lúc CHỌN dữ liệu nên thuộc màn Thêm/Sửa. SRS đánh prefix BR-KT-ADD- (đồng bộ BR-HD-ADD · BR-NS-ADD) và giữ nguyên số thứ tự 09/10 của bản gốc.

II. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-KT-ADD-BS-09 Kiểm tra trạng thái nhân viên — chỉ cho phép chọn nhân viên có trạng thái Đang làm việc tại thời điểm lập quyết định. Nhân viên Đã nghỉ việc hoặc Tạm nghỉ không được đưa vào danh sách khen thưởng (đồng bộ BR-05/BR-06 · BR-QD-RV-04).
BR-KT-ADD-BS-10 ✾ Phòng ban chọn được = phòng ban CÒN TRONG DANH MỤC — dropdown lấy đúng danh sách phòng ban đang hiển thị ở Thiết lập danh mục. Phòng ban đã xoá khỏi danh mục thì không hiển thị nên không chọn được (BR-QKL-04 — xoá mềm, ẩn khỏi mọi màn). Không cần thêm trường Đang hoạt động / Đã giải thể: giải thể phòng ban = xoá khỏi danh mục. Công trường cũng là một phòng ban trong cùng danh mục, áp đúng quy tắc này. (Chốt 11/08/2026.)
BR-KT-ADD-BS-12 ✦ Tập thể × khoản tiền: nhập THEO TỪNG CÁ NHÂN, không nhập một khoản chung cho cả tập thể — áp cho Khen thưởng tiền mặt và Kỷ luật phạt tiền. Sổ danh sách nhân viên của phòng ban rồi nhập mức của từng người (BR-KT-ADD-BS-11); tổng của quyết định = tổng mức của các cá nhân (BR-KL-ADD-BS-04). Nhờ vậy đẩy sang bảng lương được đúng theo từng nhân viên. (Chốt 11/08/2026.)
BR-KT-ADD-BS-11 ✦ Chọn Tập thể = phòng ban → hệ thống sổ ra DANH SÁCH NHÂN VIÊN thuộc phòng ban đó để nhập mức khen / mức phạt cho từng người. Danh sách này được lưu vào bản ghi quyết định ngay khi lập; về sau phòng ban thay đổi nhân sự thì quyết định cũ giữ nguyên danh sách đã lưu, không sổ lại theo hiện trạng (BR-KT-PR-02 · BR-KL-CT-BS-03). Áp giống hệt cho Kỷ luật (BR-KL-ADD-BS-02) và cho cả màn Thêm/Sửa lẫn màn Chi tiết. (Chốt 11/08/2026.)

Mã khuyết theo bản gốc của BA: BR-KT-ADD-BS-07 · BS-08 — cần BA bổ sung nội dung hoặc xác nhận bỏ trống mã.

Chỉ chặn LÚC LẬP (thêm mới) — chốt 11/08/2026

BR-KT-ADD-BS-09/10 chỉ áp ở màn Thêm mới. Màn Sửa một quyết định cũ KHÔNG bị chặn: quyết định đã lưu giữ nguyên người / phòng ban theo ảnh chụp (BR-KT-PR-02 · BR-KT-CT-DP-03) — nhân viên sau đó nghỉ việc hay phòng ban bị xoá khỏi danh mục thì không làm quyết định cũ sai hay biến mất, và vẫn sửa được các trường khác của quyết định đó.

Khoảng trống còn lại ở mockup

  • Mockup chưa lọc theo trạng thái nhân viên — combobox Nhân viên ở màn Thêm đang sổ toàn bộ NV mẫu từ nhan-su-data.js, không lọc Đang làm việc (BR-KT-ADD-BS-09).
  • ~~Danh mục Phòng ban chưa có trạng thái~~ — đã chốt 11/08/2026: không cần trường Đang hoạt động / Đã giải thể. Dropdown lấy danh sách phòng ban còn hiển thị trong Thiết lập danh mục; phòng ban bị xoá thì không hiển thị nên không chọn được (BR-KT-ADD-BS-10).
  • ~~Nhánh Tập thể còn "Công trường – Gói thầu số 2"~~ — đã chốt: công trường cũng là một phòng ban trong cùng danh mục, áp đúng quy tắc phòng ban.

Kỷ luật thiết kế lại — cùng khuôn với Khen thưởng (v0.4)

Từ v0.4, ba màn Kỷ luật (danh sách · chi tiết · thêm/sửa) đọc chung nguồn ky-luat-data.js + nhan-su-data.js và theo đúng khuôn Khen thưởng: Section 1 dạng bảng nhiều người (nguoi[]), hình thức lưu bằng mã (KL_HINHTHUC = { khien-trach, phat-tien }). Đã bỏ hẳn các trường Số QĐ nhập tay · Trạng thái · Người ký/Thẩm quyền · Thời hạn kỷ luật và 3 hình thức cũ (Kéo dài nâng lương / Cách chức / Sa thải). Việc thu gọn còn 2 hình thức là quyết định thiết kế của BA — cần xác nhận có giữ lâu dài không → đã chốt 11/08/2026: GIỮ mô hình gọn (kỷ luật = bản ghi quyết định, 2 hình thức, không có trục duyệt), không khôi phục hình thức nặng.

FR-KL-01. Danh sách kỷ luật

File: panel "Kỷ luật" trong nhan-su.html#ky-luat — render từ nguồn chung ky-luat-data.js

Thành phần Ghi chú
Ô tìm / lọc thanh công cụ mặc định (Tìm kiếm + lọc Phòng ban — chưa nối logic)
Nút Thêm kỷ luật (→ FR-KL-03) — không có Xuất Excel lẫn Nhập Excel: công ty không dùng, chỉ nhập tay
Bảng Số QĐ · Đối tượng · Hình thức · Số tiền phạt (₫) · Lý do · Ngày quyết định · Ngày hiệu lực · Thao tác (🗑️ Xoá)

Cột Đối tượng (giống Khen thưởng): Cá nhân 1 người → Cá nhân · <tên NV>; Cá nhân nhiều người → Cá nhân · N người; Tập thể → Tập thể · <phòng ban>. Cột Số tiền phạt = tổng số tiền các người (chỉ khi Hình thức = Phạt tiền), còn lại —. Hình thức (mã KL_HINHTHUC): Khiển trách (khien-trach) / Phạt tiền (phat-tien). Nhấn dòng → mở chi tiết. Thao tác chỉ có 🗑️ Xoá (Sửa nằm ở màn chi tiết). Phân trang mẫu "10 trường hợp". Sắp xếp ✾: danh sách luôn sắp theo Ngày hiệu lực, mới nhất lên đầu — cố định, không có điều khiển sắp xếp; bản ghi chưa có ngày hiệu lực xếp cuối, trùng ngày hiệu lực thì Ngày quyết định mới hơn lên trước. Quy tắc giống hệt danh sách Khen thưởng (FR-KT-LS-05). (Chốt 11/08/2026.)

Đã bỏ cột & badge Trạng thái

Danh sách kỷ luật không còn cột Trạng thái (Chờ duyệt/Đã duyệt/Nháp/Hết hiệu lực) — kỷ luật nay là bản ghi quyết định đơn giản, không có trục duyệt (khác Quyết định nhân sự, xem §6).

Đã bỏ Nhập Excel cho Quyết định · Khen thưởng · Kỷ luật

Modal Nhập Excel dùng chung (3 bước: tải file mẫu → chọn file → xem trước & kiểm tra) trước đây có trên 3 panel nhan-su.html#quyet-dinh · #khen-thuong · #ky-luat đã gỡ bỏ — 3 loại bản ghi này chỉ nhập tay từng quyết định (FR-QD-07 · FR-KT-03 · FR-KL-03). Nhập Excel chỉ còn ở Hợp đồng lao động (phục vụ di trú dữ liệu go-live).

FR-KL-02. Chi tiết kỷ luật

File: chi-tiet-ky-luat.html?ma=... (mặc định QĐ-KL/2026/01) — header có nút Sửa

Cards (render từ ky-luat-data.js + nhan-su-data.js): Đối tượng & hình thức kỷ luật → Danh sách người bị kỷ luật (bảng) → Lý do → Thông tin quyết định → Tệp đính kèm.

  • Đối tượng & hình thức: Đối tượng (Cá nhân/Tập thể) · (Tập thể) Phòng ban/Tập thể bị kỷ luật · Hình thức kỷ luật (badge: Khiển trách amber · Phạt tiền rose) · (Tập thể) Mức độ vi phạm (cả tập thể).
  • Bảng "Danh sách người bị kỷ luật" — cột phải đổi theo hình thức:
    • Cá nhân (1 hoặc nhiều người, có thể khác phòng ban): Nhân viên (tên · mã NV, đã bỏ chức vụ) · Phòng ban · Mức độ vi phạm + (Phạt tiền) Số tiền phạt kèm dòng Tổng cộng — theo nguoi[].
    • Tập thể · Khiển trách: không sổ danh sách — chỉ một mức chung ở card trên.
    • Tập thể · Phạt tiền: tự sổ toàn bộ nhân viên thuộc phòng (từ nhan-su-data.js) — Tên NV · Chức vụ · Số tiền phạt (mỗi người một mức) + dòng Tổng cộng.
  • Lý do: Lý do · Ngày xảy ra vi phạm · (Phạt tiền) Tháng áp dụng (kỳ lương) · Mô tả.
  • Thông tin quyết định: Ngày quyết định · Ngày hiệu lực. (Không còn Số QĐ trong body, Người ký, Thời hạn kỷ luật, Trạng thái — đã bỏ.)
  • Sửa: nút Sửa mở lại màn Thêm kèm ?ma= và điền sẵn dữ liệu (không sửa tại chỗ). Nút này chỉ bật khi chưa đến ngày hiệu lực (BR-QKL-01).

Mức độ vi phạm (badge): Nhẹ (emerald) · Trung bình (amber) · Nghiêm trọng (rose).

Truy cập: từ màn Danh sách kỷ luật, nhấn vào Số quyết định (hoặc bấm vào dòng) → hệ thống mở màn Chi tiết kỷ luật của đúng số QĐ đó.

Ánh xạ mã FR / BR

Bản đặc tả của BA không đánh mã FR cho màn này (chỉ liệt kê mục 4.1 → 4.6) — SRS đặt bộ FR-KL-CT-01 → 05 theo đúng nội dung đã liệt kê, đối xứng với FR-KT-CT của Khen thưởng. Bộ quy tắc đánh prefix BR-KL-CT- (bản gốc ghi BR-KL-DP-01, BR-KL-FL-01…) để không trùng với bộ quy tắc màn Danh sách kỷ luật sẽ bổ sung sau — cùng cách xử lý như BR-KT-CT. Riêng BR-KL-FL- ở màn này mang nghĩa File Rule (tệp đính kèm).

Dữ liệu hiển thị

4.1. Thông tin chung — hiển thị cho mọi quyết định kỷ luật (card Đối tượng & hình thức kỷ luật)

STT Trường Mô tả
1 Số quyết định Mã quyết định kỷ luật — mã mẫu QĐ-KL/2026/01 (hiển thị ở thẻ tiêu đề, không nằm trong body)
2 Đối tượng Cá nhân · Tập thể
3 Hình thức kỷ luật Badge — Khiển trách (amber) · Phạt tiền (rose). Bản đặc tả nêu thêm "Cảnh cáo…" — chốt 11/08/2026: KHÔNG bổ sung, giữ 2 hình thức

4.2. Trường hợp đối tượng là CÁ NHÂN — card "Danh sách người bị kỷ luật" (bảng theo nguoi[])

STT Trường Mô tả
1 Mã nhân viên Mã NV — mockup hiển thị gộp ô Nhân viên dạng Tên · Mã NV
2 Họ tên Họ tên nhân viên bị kỷ luật
3 Phòng ban Phòng ban theo dữ liệu đã lưu trong quyết định (BR-KL-CT-BS-02)
4 Mức độ vi phạm Badge — Nhẹ (emerald) · Trung bình (amber) · Nghiêm trọng (rose) (BR-KL-CT-BS-04)
5 (Phạt tiền) Số tiền phạt Mức phạt từng người + dòng Tổng cộng. Bản đặc tả không liệt kê cột này — chốt 11/08/2026: GIỮ cột này theo mockup**

4.3. Trường hợp đối tượng là TẬP THỂ

Thông tin tập thể (card Đối tượng & hình thức kỷ luật):

STT Trường Mô tả
1 Phòng ban / Tập thể bị kỷ luật Tên phòng ban hoặc công trường — lưu bằng chuỗi, chưa có ID
2 Mức độ vi phạm của tập thể Mức chung áp cho cả tập thể

Card "Danh sách thành viên":

STT Trường Mô tả
1 Họ tên Họ tên thành viên thuộc quyết định (BR-KL-CT-BS-03/08)
2 Chức vụ Chức vụ theo dữ liệu đã lưu trong quyết định
3 Mức độ vi phạm Mức độ vi phạm của thành viên. Mockup hiện hiển thị Số tiền phạt (nhánh Phạt tiền) và không sổ danh sách ở nhánh Khiển trách — chốt 11/08/2026: giữ theo mockup**

4.4. Thông tin vi phạm (card Lý do) · 4.5. Thông tin quyết định · 4.6. File đính kèm

STT Card Trường Mô tả
1 Thông tin vi phạm Lý do Lý do kỷ luật
2 Thông tin vi phạm Ngày xảy ra vi phạm Ngày sự việc xảy ra (khác Ngày quyết định)
3 Thông tin vi phạm Mô tả Mô tả chi tiết vi phạm
4 Thông tin vi phạm (Phạt tiền) Tháng áp dụng (kỳ lương) Điểm neo khấu trừ vào cột "Phạt" của Bảng lương (BR-KL-CT-BS-06)
5 Thông tin quyết định Ngày quyết định Ngày ban hành quyết định
6 Thông tin quyết định Ngày hiệu lực Ngày quyết định bắt đầu có hiệu lực — mốc khoá sửa (BR-QKL-01)
7 Tệp đính kèm Tên file Tên file quyết định đã đính kèm (BR-KL-CT-FL-01)
8 Tệp đính kèm Dung lượng file Dung lượng file (≤ 10 MB)

Chức năng (FR)

Mã Chức năng Mô tả
FR-KL-CT-01 Xem chi tiết quyết định kỷ luật Hiển thị toàn bộ thông tin của quyết định ở chế độ chỉ đọc, bố cục đổi theo loại đối tượng (BR-KL-CT-DP-01/04).
FR-KL-CT-02 Xem danh sách người bị kỷ luật / thành viên Cá nhân → bảng người bị kỷ luật kèm phòng ban & mức độ vi phạm từng người; Tập thể → thông tin tập thể + danh sách thành viên (BR-KL-CT-DP-02/03).
FR-KL-CT-03 Xem thông tin vi phạm Hiển thị Lý do · Ngày xảy ra vi phạm · Mô tả; hình thức Phạt tiền có thêm Tháng áp dụng (kỳ lương) (BR-KL-CT-BS-06).
FR-KL-CT-04 Xem & tải tệp đính kèm Hiển thị tên file · dung lượng; không có file → hiện trạng thái "Chưa có file đính kèm". Người dùng có quyền được tải xuống (BR-KL-CT-FL-01/02/03).
FR-KL-CT-05 Sửa quyết định Nút Sửa mở lại màn Thêm kèm ?ma= và điền sẵn dữ liệu (không sửa tại chỗ). Nút chỉ hiện với người có quyền sửa (BR-KL-CT-PM-02) và chỉ bật khi chưa đến ngày hiệu lực (BR-QKL-01).

Quy tắc nghiệp vụ — Chi tiết kỷ luật (BR-KL-CT)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-KL-CT-DP-01 Hệ thống hiển thị thông tin chi tiết theo đúng đối tượng kỷ luật (Cá nhân hoặc Tập thể).
BR-KL-CT-DP-02 Đối tượng là Cá nhân → hiển thị danh sách người bị kỷ luật cùng phòng ban và mức độ vi phạm của từng người.
BR-KL-CT-DP-03 Đối tượng là Tập thể → hiển thị: ① Phòng ban/tập thể bị kỷ luật · ② Mức độ vi phạm của tập thể · ③ Danh sách các thành viên thuộc quyết định.
BR-KL-CT-DP-04 Toàn bộ dữ liệu trên màn chi tiết ở chế độ chỉ đọc — mọi thay đổi phải qua nút Sửa → màn Thêm/Sửa.
BR-KL-CT-DP-05 Trường không có dữ liệu → hiển thị —.

II. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-KL-CT-BS-01 Thông tin trên màn chi tiết là dữ liệu đã lưu tại thời điểm tạo quyết định, không phụ thuộc dữ liệu hiện tại của nhân viên hoặc phòng ban.
BR-KL-CT-BS-02 Nhân viên đã chuyển phòng ban hoặc nghỉ việc sau khi quyết định được tạo → màn chi tiết vẫn hiển thị theo quyết định đã lưu.
BR-KL-CT-BS-03 Đối tượng là Tập thể → danh sách thành viên hiển thị theo dữ liệu đã lưu trong quyết định, không tự động thay đổi theo biến động nhân sự của phòng ban.
BR-KL-CT-BS-04 Mức độ vi phạm của từng cá nhân hiển thị theo dữ liệu đã được phê duyệt trong quyết định.
BR-KL-CT-BS-06 Hình thức Phạt tiền và có cấu hình khấu trừ qua bảng lương → màn hình hiển thị thông tin khấu trừ / kỳ lương áp dụng (trường Tháng áp dụng (kỳ lương), nếu hệ thống quản lý thông tin này).
BR-KL-CT-BS-07 Bảo toàn dữ liệu lịch sử — sau khi quyết định được lưu, hệ thống lưu thông tin đối tượng bị kỷ luật (phòng ban · chức vụ · mức độ vi phạm · danh sách thành viên…) dưới dạng snapshot. Màn chi tiết luôn hiển thị dữ liệu này để đảm bảo tính pháp lý và khả năng truy vết, kể cả khi hồ sơ nhân sự hoặc cơ cấu tổ chức đã thay đổi.
BR-KL-CT-BS-08 Hiển thị danh sách đối tượng theo quyết định — ① Cá nhân: hiển thị đúng các nhân viên có trong quyết định, kể cả khi quyết định áp dụng cho nhiều người. ② Tập thể: hiển thị các thành viên tại thời điểm lập quyết định, không tự động thêm/loại bỏ nhân viên khi cơ cấu phòng ban thay đổi.

Mã khuyết theo bản gốc của BA: BR-KL-CT-BS-05 (và nhóm V · VI) — xác nhận giữ trống (chốt 11/08/2026). BS-07 · BS-08 là phần "nên bổ sung" BA đề xuất, đã đưa vào bộ chính thức.

III. Quy tắc tệp đính kèm (File Rule)

Mã Quy tắc
BR-KL-CT-FL-01 Quyết định có file đính kèm → hệ thống hiển thị Tên file và Dung lượng file.
BR-KL-CT-FL-02 Người dùng có quyền được phép tải xuống tệp đính kèm.
BR-KL-CT-FL-03 ✾ Không có file đính kèm → hệ thống hiển thị trạng thái "Chưa có file đính kèm". Áp CHUNG cho mọi màn chi tiết có tệp đính kèm — kỷ luật · khen thưởng · quyết định nhân sự · hợp đồng. (Chốt 11/08/2026.)

IV. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-KL-CT-PM-01 Chỉ người dùng có quyền Xem kỷ luật mới được truy cập màn hình chi tiết.
BR-KL-CT-PM-02 Chỉ người dùng có quyền Sửa kỷ luật mới được hiển thị nút Sửa — kết hợp điều kiện thời gian của BR-QKL-01.

VII. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-KL-CT-EX-01 Quyết định không tồn tại hoặc đã bị xoá → hệ thống không mở màn chi tiết và hiển thị thông báo phù hợp.

Nhóm V và nhóm VI — khoảng trống theo bản gốc của BA, bổ sung sau.

Snapshot — đã chốt 11/08/2026

Chọn Tập thể = phòng ban → sổ ra danh sách nhân viên thuộc phòng ban đó (đúng như mockup đang làm), áp giống nhau ở Khen thưởng và Kỷ luật, ở màn Thêm/Sửa lẫn màn Chi tiết (BR-KT-ADD-BS-11). Danh sách đó được lưu vào bản ghi quyết định (thanhVien[]) ngay lúc lập — về sau phòng ban đổi người thì quyết định cũ giữ nguyên danh sách đã lưu, không sổ lại theo hiện trạng (BR-KL-CT-BS-03/07/08 · BR-KT-PR-02 · BR-KT-CT-DP-03).

Việc còn lại cho Dev: mockup hiện sổ động từ nhan-su-data.js mỗi lần mở màn — bản thật phải đọc thanhVien[] đã lưu trong bản ghi quyết định.

Bốn điểm lệch — đã chốt 11/08/2026 (giữ theo mockup)

  1. Hình thức: giữ 2 hình thức (KL_HINHTHUC = khien-trach · phat-tien) — KHÔNG bổ sung Cảnh cáo, không khôi phục các hình thức nặng.
  2. Cột Số tiền phạt: GIỮ theo mockup — Danh sách người bị kỷ luật (Cá nhân) có cột Số tiền phạt + dòng Tổng cộng khi Hình thức = Phạt tiền; hình thức Khiển trách thì ẩn cột.
  3. Tập thể · Khiển trách: KHÔNG sổ danh sách thành viên — chỉ hiển thị tên phòng ban và một mức độ vi phạm chung cho cả tập thể ở card trên. Danh sách thành viên chỉ sổ ở nhánh Tập thể · Phạt tiền (để nhập số tiền từng người — BR-KT-ADD-BS-11).
  4. Cột của Danh sách thành viên (Tập thể · Phạt tiền): Tên NV · Chức vụ · Số tiền phạt như mockup. Mức độ vi phạm của tập thể ghi CHUNG, không ghi từng thành viên.

FR-KL-03. Thêm / Sửa kỷ luật

File: them-ky-luat.html (mở kèm ?ma= để Sửa — điền sẵn dữ liệu); 3 section, động theo Đối tượng × Hình thức.

Section 1 — "Đối tượng & hình thức kỷ luật" (tên heading mockup; gồm cả bảng người bị kỷ luật):

Trường Kiểu Bắt buộc Lựa chọn / ghi chú
Đối tượng select ✓ Cá nhân / Tập thể
Hình thức kỷ luật select ✓ Khiển trách (mặc định) / Phạt tiền
[Cá nhân] Bảng người bị kỷ luật bảng thêm/xoá dòng ✓ mỗi dòng: Nhân viên (combobox tìm nhanh, 8 NV mẫu, option hiển thị Tên — Mã NV — chọn NV tự điền Phòng ban của NV) · Phòng ban (combobox, mọi phòng, sửa được) · Mức độ vi phạm · (Phạt tiền) Số tiền phạt (₫); nút "+ Thêm nhân viên"; mặc định 1 dòng trống. Ô Nhân viên nới rộng + bảng cuộn ngang; dropdown combobox hiển thị nổi (portal) không bị cắt
[Tập thể] Phòng ban / Tập thể select tìm nhanh ✓ 6 phòng ban + Công trường–Gói thầu số 2
[Tập thể] Mức độ vi phạm (cả tập thể) select ✓ Nhẹ / Trung bình / Nghiêm trọng
[Tập thể · Phạt tiền] Bảng sổ nhân viên bảng tự đổ chọn phòng ban → sổ toàn bộ NV thuộc phòng: Tên · Chức vụ · Số tiền phạt (mỗi người một mức)
[Tập thể · Khiển trách] — ghi chú áp một mức chung cả đơn vị, không tách từng người, không số tiền

Section 2 — Lý do & đợt:

Trường Kiểu Bắt buộc Lựa chọn / ghi chú
Lý do select ✓ Vi phạm nội quy công ty / Vi phạm quy định an toàn lao động / Gây thất thoát / hư hỏng tài sản công ty
Ngày xảy ra vi phạm date
[Phạt tiền] Tháng áp dụng (kỳ lương) select ✓ tháng khấu trừ; số tiền phạt đổ vào cột "Khấu trừ / Phạt" của Bảng lương kỳ đã chọn
Mô tả hành vi / Ghi chú textarea

Section 3 — Thông tin quyết định: Ngày quyết định (✓) · Ngày hiệu lực (✓) · File đính kèm (biên bản vi phạm + biên bản họp + QĐ, ≤ 10 MB). Số QĐ tự sinh QĐ-KL/2026/xx (không có ô nhập tay).

Sửa dùng lại màn Thêm — một nguồn dữ liệu

chi-tiet/nhan-su/them cùng đọc ky-luat-data.js. Bấm Sửa ở chi tiết → mở them-ky-luat.html?ma=<mã>: đổi nhãn sang Sửa, đổ dữ liệu lên đúng bảng/ô (nhiều người, mức độ, số tiền phạt, tháng áp dụng). Kỳ lương nằm ngoài danh sách tĩnh vẫn được chèn lại khi Sửa.

Mục đích & điều kiện thực hiện

Ánh xạ mã FR / BR

Bản đặc tả của BA đánh màn Thêm mới quyết định kỷ luật là FR-KL-04; SRS gộp Thêm và Sửa vào một màn (them-ky-luat.html, mở kèm ?ma= để Sửa) nên giữ mã FR-KL-03. Bộ quy tắc đánh prefix BR-KL-ADD- (đồng bộ BR-KT-ADD · BR-HD-ADD) để không trùng bộ BR-KL-CT của màn Chi tiết — bản gốc dùng chung tên BR-KL-DP-01, BR-KL-BS-01, BR-KL-PM-01, BR-KL-EX-01 cho cả hai màn.

Mục đích: cho phép người dùng tạo mới quyết định kỷ luật đối với cá nhân hoặc tập thể.

Điều kiện thực hiện

# Điều kiện
1 Người dùng có quyền Thêm kỷ luật (BR-KL-ADD-PM-01)
2 Các danh mục Hình thức kỷ luật · Lý do kỷ luật · Phòng ban · Nhân viên đã được cấu hình trong hệ thống. (Hiện 4 danh mục này hard-code rải rác, chưa gom về FR-DM-01 — việc gom về danh mục để giai đoạn sau)

Luồng thực hiện — 5 bước

Bước Vai trò Hành động Kết quả
1. Chọn đối tượng & hình thức NS · AD Chọn Đối tượng: Cá nhân / Tập thể. Chọn Hình thức kỷ luật: Khiển trách · Cảnh cáo · Phạt tiền · hình thức khác nếu doanh nghiệp cấu hình Giao diện đổi theo đối tượng (BR-KL-ADD-DP-01/02) và theo hình thức (DP-03/04). Chốt 11/08/2026: 2 hình thức, không bổ sung Cảnh cáo
2a. Nhập đối tượng — Cá nhân NS · AD Thêm một hoặc nhiều nhân viên → chọn nhân viên → hệ thống hiển thị phòng ban của NV → chọn mức độ vi phạm từng người → (Phạt tiền) nhập *số tiền phạt từng người Bảng nguoi[] (BR-KL-ADD-PR-02 · DP-05)
2b. Nhập đối tượng — Tập thể NS · AD Chọn phòng ban/tập thể bị kỷ luật → chọn mức độ vi phạm chung của tập thể → (Phạt tiền) nhập số tiền phạt của tập thể 01 phòng ban mỗi quyết định (BR-KL-ADD-PR-03). Chốt 11/08/2026: nhập tiền từng người (BR-KT-ADD-BS-12)
3. Nhập lý do NS · AD Lý do · Ngày xảy ra vi phạm · Mô tả hành vi / Ghi chú Bắt buộc Lý do & Ngày vi phạm (BR-KL-ADD-VL-03/04)
4. Nhập thông tin quyết định NS · AD Ngày quyết định · Ngày hiệu lực · File đính kèm Ràng buộc ngày (BR-KL-ADD-VL-07/08); file đúng định dạng & dung lượng (VL-14)
5. Lưu NS · AD → HT Bấm Lưu HT ① kiểm tra dữ liệu → ② sinh số quyết định (BR-KL-ADD-PR-04) → ③ lưu quyết định + danh sách đối tượng + mức độ + số tiền (PR-05) → ④ lưu file đính kèm → ⑤ ghi nhật ký thao tác. Lỗi ở bất kỳ khâu nào → không sinh số QĐ, không lưu gì cả (EX-01)

Quy tắc nghiệp vụ — Thêm kỷ luật (BR-KL-ADD)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-KL-ADD-DP-01 Đối tượng = Cá nhân → hiển thị bảng nhập danh sách nhân viên bị kỷ luật.
BR-KL-ADD-DP-02 Đối tượng = Tập thể → hiển thị: ① Phòng ban/Tập thể bị kỷ luật · ② Mức độ vi phạm của tập thể.
BR-KL-ADD-DP-03 Hình thức = Phạt tiền → hiển thị trường nhập Số tiền phạt.
BR-KL-ADD-DP-04 Hình thức Khiển trách · Cảnh cáo hoặc hình thức không có phạt tiền → ẩn hoặc vô hiệu hoá trường Số tiền phạt.
BR-KL-ADD-DP-05 ✾ Đối tượng Cá nhân: sau khi chọn nhân viên, hệ thống tự sổ ra phòng ban hiện tại của nhân viên — nhưng KHÔNG khoá: người lập vẫn chọn được phòng ban khác khi cần ghi khác với hồ sơ. Áp cả Kỷ luật lẫn Khen thưởng. (Sửa 11/08/2026 — trước đó quy định tự điền rồi khoá.)

II. Quy tắc kiểm tra dữ liệu (Validation Rule)

Mã Quy tắc
BR-KL-ADD-VL-01 Đối tượng là trường bắt buộc.
BR-KL-ADD-VL-02 Hình thức kỷ luật là trường bắt buộc.
BR-KL-ADD-VL-03 Lý do là trường bắt buộc.
BR-KL-ADD-VL-04 ✾ Ngày xảy ra vi phạm là trường bắt buộc — mockup đã gắn dấu sao đỏ và chặn Lưu khi bỏ trống. (Chốt 11/08/2026.)
BR-KL-ADD-VL-05 Ngày quyết định là trường bắt buộc.
BR-KL-ADD-VL-06 Ngày hiệu lực là trường bắt buộc.
BR-KL-ADD-VL-07 Ngày xảy ra vi phạm ≤ Ngày quyết định (không được lớn hơn).
BR-KL-ADD-VL-08 Ngày hiệu lực ≥ Ngày quyết định (không được nhỏ hơn).
BR-KL-ADD-VL-09 Đối tượng Cá nhân: danh sách người bị kỷ luật phải có ít nhất một nhân viên.
BR-KL-ADD-VL-10 Đối tượng Tập thể: bắt buộc chọn phòng ban.
BR-KL-ADD-VL-11 Một nhân viên chỉ được xuất hiện một lần trong cùng một quyết định kỷ luật.
BR-KL-ADD-VL-12 Hình thức = Phạt tiền → số tiền phạt > 0 (và bắt buộc nhập — BR-KL-ADD-BS-08).
BR-KL-ADD-VL-13 Mức độ vi phạm là trường bắt buộc.
BR-KL-ADD-VL-14 File đính kèm phải đúng định dạng (PDF · DOC · DOCX…) và không vượt quá 10 MB. (Bộ định dạng dùng chung toàn module chốt 23/07/2026 là PDF · DOC · DOCX · JPG · PNG — áp bộ chung này, chốt 11/08/2026)

III. Quy tắc xử lý (Process Rule)

Mã Quy tắc
BR-KL-ADD-PR-01 Một quyết định chỉ áp dụng cho MỘT loại đối tượng: Cá nhân hoặc Tập thể.
BR-KL-ADD-PR-02 Đối tượng Cá nhân → cho phép thêm nhiều nhân viên trong cùng một quyết định.
BR-KL-ADD-PR-03 Đối tượng Tập thể → mỗi lần tạo chỉ áp dụng cho một phòng ban / đơn vị.
BR-KL-ADD-PR-04 Lưu thành công → hệ thống tự sinh số quyết định theo quy tắc đánh số của doanh nghiệp. (Mockup sinh QĐ-KL/2026/xx; quy tắc đánh số chuẩn chưa đặc tả, để Dev thống nhất)
BR-KL-ADD-PR-05 Hệ thống lưu đồng thời: ① Thông tin quyết định · ② Danh sách đối tượng bị kỷ luật · ③ Mức độ vi phạm · ④ Số tiền phạt (nếu có) · ⑤ File đính kèm.
BR-KL-ADD-PR-06 Hình thức = Phạt tiền và doanh nghiệp cấu hình khấu trừ qua bảng lương → hệ thống tạo dữ liệu chờ khấu trừ theo kỳ lương tương ứng, sau khi quyết định có hiệu lực (§11.3).
BR-KL-ADD-VL-15 ✦ Tháng áp dụng (kỳ lương) là trường BẮT BUỘC khi hình thức có TIỀN — Phạt tiền (kỷ luật) và Thưởng tiền mặt (khen thưởng); hình thức không dính tiền (Khiển trách · Bằng khen…) thì không hiện trường này và không bắt buộc. Đây là mốc để đẩy khoản vào đúng kỳ lương (BR-KL-ADD-PR-06 · BR-PL-RECALC-03). Trên giao diện có dấu sao đỏ khi bắt buộc. (Chốt 11/08/2026.)

IV. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-KL-ADD-BS-01 Chỉ cho phép chọn nhân viên có trạng thái Đang làm việc để tạo quyết định kỷ luật mới. (Đối xứng BR-KT-ADD-BS-09 của Khen thưởng.)
BR-KL-ADD-BS-02 ✾ Phòng ban chọn được cho kỷ luật tập thể = phòng ban còn trong danh mục (BR-KT-ADD-BS-10); chọn xong thì sổ ra danh sách nhân viên thuộc phòng ban đó và lưu vào quyết định (BR-KT-ADD-BS-11). Công trường cũng là phòng ban, áp cùng quy tắc.
BR-KL-ADD-BS-04 Hình thức = Phạt tiền → tổng số tiền phạt của quyết định = tổng số tiền phạt của tất cả đối tượng bị kỷ luật.
BR-KL-ADD-BS-05 Hình thức Khiển trách hoặc Cảnh cáo → quyết định không phát sinh dữ liệu khấu trừ lương.
BR-KL-ADD-BS-07 Kiểm tra tính hợp lệ theo thời điểm vi phạm — chỉ cho phép lập quyết định nếu Ngày xảy ra vi phạm nằm trong thời gian nhân viên còn làm việc hoặc phòng ban còn hoạt động.
BR-KL-ADD-BS-08 Kiểm tra hình thức & dữ liệu nhập — hình thức = Phạt tiền → bắt buộc nhập số tiền phạt (kết hợp VL-12: phải > 0).

Mã khuyết theo bản gốc của BA: BR-KL-ADD-BS-03 · BS-06 — cần BA bổ sung nội dung hoặc xác nhận bỏ trống mã.

V. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-KL-ADD-PM-01 Chỉ người dùng có quyền Thêm kỷ luật mới được phép tạo quyết định.
BR-KL-ADD-PM-02 Người dùng không có quyền chỉ được xem danh sách, không được truy cập màn hình thêm mới.

VII. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-KL-ADD-EX-01 Lưu không thành công → hệ thống không tạo số quyết định và không lưu bất kỳ dữ liệu nào (giao dịch toàn vẹn — all-or-nothing).
BR-KL-ADD-EX-02 File tải lên sai định dạng hoặc vượt dung lượng → hệ thống từ chối tải lên và hiển thị thông báo lỗi.

Nhóm VI — khoảng trống theo bản gốc của BA, bổ sung sau.

Điểm lệch còn lại giữa bản đặc tả và mockup — cần BA xác nhận

  1. Tập thể · Phạt tiền — một khoản chung hay từng người — bản đặc tả bước 2b: "nhập số tiền phạt của tập thể" (một số); mockup sổ toàn bộ NV của phòng và nhập mức từng người — chốt 11/08/2026: nhập theo từng cá nhân (BR-KT-ADD-BS-12).
  2. Định dạng file (VL-14) — bản đặc tả PDF · DOC · DOCX…, bộ dùng chung toàn module (chốt 23/07/2026) là PDF · DOC · DOCX · JPG · PNG. Nên chốt một bộ chung.
  3. Quy tắc đánh số quyết định (PR-04) — chưa đặc tả: tiền tố · reset theo năm · số nhảy khi xoá. (Nhật ký thao tác đã bỏ khỏi phạm vi 11/08/2026 — hệ thống tự ghi log.)

Đã chốt 11/08/2026 (không còn lệch): Phòng ban tự sổ theo NV nhưng không khoá (BR-KL-ADD-DP-05) · Ngày xảy ra vi phạm bắt buộc, mockup đã gắn sao đỏ (BR-KL-ADD-VL-04) · Tháng áp dụng (kỳ lương) giữ theo mockup, bắt buộc khi hình thức có tiền (BR-KL-ADD-VL-15).

FR-KL-05. Sửa quyết định kỷ luật

Cùng file them-ky-luat.html?ma=<mã> — màn Thêm dùng lại cho Sửa

Ánh xạ mã FR / BR

SRS gộp Thêm và Sửa vào một màn nên đặc tả Sửa nằm trong FR-KL-03; mã FR-KL-05.01 → 05.05 giữ nguyên theo bản đặc tả của BA. Bộ quy tắc đánh prefix BR-KL-SU- (đồng bộ BR-QD-SU của Sửa quyết định) để không trùng BR-KL-ADD và BR-KL-CT — bản gốc dùng chung tên BR-KL-VL-01, BR-KL-DP-01, BR-KL-BS-01… cho cả ba màn. Bản gốc đánh số nhóm I. Permission rồi lại I. Validation (trùng số) và bỏ II · VII — SRS chuẩn hoá lại thứ tự nhóm, giữ nguyên mã từng quy tắc.

Đã chốt 11/08/2026 — KHOÁ CỨNG theo BR-QKL-01 (phương án A)

Màn Sửa kỷ luật chỉ sửa được quyết định CHƯA đến ngày hiệu lực. Đã có hiệu lực thì KHÔNG cho sửa, không ngoại lệ cho Admin — sai thì ban hành quyết định mới (BR-QKL-02). Giữ nguyên BR-QKL-01, loại phương án cấu hình được.

Bốn quy tắc dưới đây trong bản đặc tả giả định ngược lại (đã có hiệu lực vẫn sửa được, chỉ cảnh báo / đồng bộ lại) nên KHÔNG BAO GIỜ CHẠY TỚI — giữ trong tài liệu ở dạng "dự phòng, chưa áp dụng", Dev không hiện thực hoá:

  • BR-KL-SU-BS-07 — đã có hiệu lực & đã dùng ở phân hệ khác → hiển thị cảnh báo trước khi cho phép lưu (tức vẫn cho lưu).
  • BR-KL-SU-BS-09 — "nếu doanh nghiệp không cho phép chỉnh sửa theo quy định nội bộ" → tức việc khoá sửa là tuỳ cấu hình, không phải luật cứng.
  • BR-KL-SU-PR-02 · BS-08 — xử lý khi sửa số tiền phạt / ngày hiệu lực của quyết định đã đồng bộ sang bảng lương — chỉ xảy ra nếu được sửa sau khi có hiệu lực.

Hệ quả kèm theo: không thiết kế "quyền đặc biệt" trong ma trận quyền, không có cảnh báo đánh giá ảnh hưởng, không có luồng đồng bộ lại bảng lương khi sửa quyết định đã hiệu lực.

Mục đích: cho phép người dùng chỉnh sửa thông tin của một quyết định kỷ luật đã được tạo.

Điều kiện thực hiện

# Điều kiện
1 Người dùng có quyền Sửa kỷ luật (BR-KL-SU-PM-01)
2 Quyết định kỷ luật tồn tại trong hệ thống (BR-KL-SU-EX-02)
3 Quyết định đáp ứng điều kiện được phép chỉnh sửa theo quy định của doanh nghiệp — SRS đang hiểu là chưa đến ngày hiệu lực (BR-QKL-01); bản đặc tả hàm ý cấu hình được (BR-KL-SU-BS-09) — đã loại 11/08/2026, dùng khoá cứng theo BR-QKL-01

Luồng xử lý (FR)

Mã Chức năng Mô tả
FR-KL-05.01 Hiển thị thông tin quyết định Bấm Sửa → hệ thống đổ toàn bộ dữ liệu đã lưu: ① Thông tin chung (Đối tượng · Hình thức kỷ luật) · ② Danh sách người bị kỷ luật (Nhân viên · Phòng ban · Mức độ vi phạm · Số tiền phạt nếu có) · ③ Thông tin vi phạm (Lý do · Ngày xảy ra vi phạm · Mô tả) · ④ Thông tin quyết định (Ngày quyết định · Ngày hiệu lực · File đính kèm) (BR-KL-SU-DP-01→05).
FR-KL-05.02 Chỉnh sửa thông tin Người dùng sửa theo quyền được cấp: Danh sách người bị kỷ luật · Mức độ vi phạm · Số tiền phạt · Lý do · Ngày xảy ra vi phạm · Mô tả · Ngày quyết định · Ngày hiệu lực · File đính kèm. Không sửa được: Loại đối tượng (BS-01) · Số quyết định (BS-06) · Hình thức kỷ luật khi đã phát sinh dữ liệu liên quan (BS-02).
FR-KL-05.03 Kiểm tra dữ liệu Nhấn Lưu → hệ thống kiểm tra toàn bộ Business Rule. Hợp lệ → ① cập nhật dữ liệu · ② ghi Audit Log · ③ đồng bộ các dữ liệu liên quan (nếu có) (PR-01/02). (Audit Log đã bỏ khỏi phạm vi SRS 11/08/2026 — hệ thống tự ghi log.)
FR-KL-05.04 Thay đổi file đính kèm Cho phép thay file cũ · xoá file cũ · tải file mới (BR-KL-SU-FL-01/02/03).
FR-KL-05.05 Huỷ chỉnh sửa Chọn Huỷ → hệ thống không lưu bất kỳ thay đổi nào.
Quy tắc nghiệp vụ — Sửa kỷ luật (BR-KL-SU)

I. Quy tắc hiển thị (Display Rule)

Mã Quy tắc
BR-KL-SU-DP-01 Hệ thống hiển thị màn hình theo đúng loại đối tượng đã lưu.
BR-KL-SU-DP-02 Đối tượng là Cá nhân → hiển thị danh sách nhân viên.
BR-KL-SU-DP-03 Đối tượng là Tập thể → hiển thị phòng ban bị kỷ luật.
BR-KL-SU-DP-04 Hình thức = Phạt tiền → hiển thị trường Số tiền phạt.
BR-KL-SU-DP-05 Hình thức không phải Phạt tiền → ẩn hoặc khoá trường Số tiền phạt.

II. Quy tắc kiểm tra dữ liệu (Validation Rule)

Bộ này lặp lại BR-KL-ADD-VL của màn Thêm nhưng đánh số khác và thiếu 3 quy tắc: Lý do bắt buộc · Cá nhân phải có ít nhất 1 nhân viên · Mức độ vi phạm bắt buộc (ADD-VL-03/09/13). Chốt 11/08/2026: Thêm và Sửa DÙNG CHUNG MỘT BỘ VALIDATION — màn Sửa không nới lỏng hơn; 3 quy tắc thiếu ở trên vẫn áp cho màn Sửa.

Mã Quy tắc
BR-KL-SU-VL-01 Đối tượng không được để trống.
BR-KL-SU-VL-02 Hình thức kỷ luật không được để trống.
BR-KL-SU-VL-03 Ngày xảy ra vi phạm là bắt buộc.
BR-KL-SU-VL-04 Ngày quyết định là bắt buộc.
BR-KL-SU-VL-05 Ngày hiệu lực là bắt buộc.
BR-KL-SU-VL-06 Ngày xảy ra vi phạm ≤ Ngày quyết định.
BR-KL-SU-VL-07 Ngày hiệu lực ≥ Ngày quyết định.
BR-KL-SU-VL-08 Hình thức = Phạt tiền → số tiền phạt > 0.
BR-KL-SU-VL-09 Không cho phép một nhân viên xuất hiện nhiều lần trong cùng một quyết định.
BR-KL-SU-VL-10 Kỷ luật Tập thể → bắt buộc chọn phòng ban.
BR-KL-SU-VL-11 File tải lên phải đúng định dạng và không vượt quá dung lượng quy định.

III. Quy tắc xử lý (Process Rule)

Mã Quy tắc
BR-KL-SU-PR-01 Lưu thành công → hệ thống cập nhật toàn bộ thông tin của quyết định.
BR-KL-SU-PR-02 Quyết định đã đồng bộ sang bảng lương mà người dùng đổi số tiền phạt hoặc ngày hiệu lực → hệ thống phải cập nhật lại dữ liệu đồng bộ hoặc yêu cầu đồng bộ lại theo quy trình doanh nghiệp. (Chỉ xảy ra ở mô hình (B) đã bị loại — dự phòng, chưa áp dụng.)
BR-KL-SU-PR-03 Thay đổi file đính kèm → file cũ được thay bằng file mới, hệ thống cập nhật thông tin file lưu trữ.
BR-KL-SU-PR-04 Thay đổi danh sách người bị kỷ luật → hệ thống cập nhật lại toàn bộ danh sách của quyết định.

IV. Quy tắc nghiệp vụ (Business Rule)

Mã Quy tắc
BR-KL-SU-BS-01 ✾ Không cho phép thay đổi Loại đối tượng (Cá nhân/Tập thể) sau khi quyết định đã được tạo — áp cả Khen thưởng. (Mockup còn cho đổi; cần khoá ô Đối tượng ở chế độ Sửa — việc của Dev, chốt 11/08/2026.)
BR-KL-SU-BS-02 Không cho phép thay đổi Hình thức kỷ luật nếu quyết định đã phát sinh dữ liệu liên quan (đã khấu trừ lương, đã ghi nhận vào hồ sơ nhân sự…) — trừ khi người dùng có quyền đặc biệt. (Ma trận quyền §2 chưa có khái niệm "quyền đặc biệt".)
BR-KL-SU-BS-03 Chỉ cho phép chọn nhân viên có trạng thái Đang làm việc tại thời điểm cập nhật danh sách bị kỷ luật. (Lưu ý: khác BR-KL-ADD-BS-01 ở mốc thời gian — người đã có sẵn trong quyết định không bị loại bỏ, theo snapshot BR-KL-CT-BS-07)
BR-KL-SU-BS-04 Thêm nhân viên mới vào quyết định → hệ thống kiểm tra trùng lặp trong cùng quyết định (VL-09).
BR-KL-SU-BS-05 Thay đổi số tiền phạt → hệ thống tự tính lại tổng số tiền phạt của quyết định (BR-KL-ADD-BS-04).
BR-KL-SU-BS-06 Việc thay đổi dữ liệu không làm thay đổi Số quyết định đã được cấp.
BR-KL-SU-BS-07 Quyết định đã có hiệu lực và đã được dùng ở phân hệ khác (Tính lương, Hồ sơ nhân sự…) → hệ thống hiển thị cảnh báo trước khi cho phép lưu để người dùng đánh giá ảnh hưởng. (Mô hình (B) — mâu thuẫn BR-QKL-01, xem cảnh báo đầu mục.)
BR-KL-SU-BS-08 Đổi Ngày hiệu lực sang kỳ lương khác → hệ thống phải cập nhật kỳ khấu trừ tương ứng (nếu có phạt tiền & tích hợp phân hệ tính lương).
BR-KL-SU-BS-09 Quyết định đã có hiệu lực mà doanh nghiệp không cho phép chỉnh sửa theo quy định nội bộ → hệ thống khoá chức năng sửa và yêu cầu điều chỉnh bằng quyết định mới hoặc quyết định huỷ/thay thế. (Trùng tinh thần BR-QKL-02; nhưng chữ "nếu doanh nghiệp không cho phép" hàm ý cấu hình được — xem cảnh báo đầu mục.)

V. Quy tắc phân quyền (Permission Rule)

Mã Quy tắc
BR-KL-SU-PM-01 Chỉ người dùng có quyền Sửa kỷ luật mới được phép cập nhật quyết định.
BR-KL-SU-PM-02 Người dùng không có quyền chỉ được xem thông tin.

VI. Quy tắc tệp đính kèm (File Rule)

Mã Quy tắc
BR-KL-SU-FL-01 Người dùng được phép thay thế file quyết định.
BR-KL-SU-FL-02 ✾ Khi thay file: file mới trở thành file đang sử dụng, file cũ không còn liên kết với quyết định. KHÔNG làm quản lý phiên bản tài liệu ở giai đoạn này — file cũ mất liên kết hẳn, không có màn xem lại phiên bản cũ. (Chốt 11/08/2026.)
BR-KL-SU-FL-03 Chỉ chấp nhận định dạng được cấu hình PDF · DOC · DOCX · JPG · PNG (bộ chung toàn module) và dung lượng tối đa 10 MB (BR-KL-ADD-VL-14).

VII. Quy tắc ngoại lệ (Exception Rule)

Mã Quy tắc
BR-KL-SU-EX-01 Dữ liệu không hợp lệ → hệ thống không lưu bất kỳ thay đổi nào và hiển thị thông báo lỗi tại đúng trường.
BR-KL-SU-EX-02 Quyết định không còn tồn tại hoặc đã bị người khác xoá trong lúc chỉnh sửa → hệ thống dừng thao tác và yêu cầu người dùng tải lại dữ liệu. (Cách hiện thực chống xung đột đồng thời thuộc tầng kỹ thuật của Dev — không đặc tả trong SRS.)

FR-TB-01. Trung tâm thông báo — định tuyến quyết định theo vai trò (demo)

File: thong-bao.html — bản demo, dữ liệu minh hoạ, các nút chỉ mô phỏng, chưa nối hệ thống thật.

Màn demo — mô hình đề xuất, chưa chốt

Đây là màn đề xuất cách thông báo cho cụm Khen thưởng / Kỷ luật / Quyết định nhân sự, dùng để duyệt mô hình định tuyến. Chưa phải màn nghiệp vụ hoàn chỉnh; đưa vào SRS để chốt quy tắc thông báo & luồng tiền → Lương/Kế toán trước khi Dev hiện thực.

Mô hình: mỗi quyết định sinh 2 loại thông báo — quy trình (chờ ký / cần xử lý → có nút hành động) và kết quả (thông báo / cần xác nhận đã nhận). Người nhận khác nhau theo vai trò; màn cho chọn vai trò để xem đúng phần vai trò đó nhận.

Vai tròNhận thông báo gì
Cán bộ HCNS / HRTrạng thái quyết định (đã ký / đã ban hành).
Lãnh đạo ký duyệtCác quyết định **đang chờ ký** (nút "Xem & ký").
Kế toán / Lương**Chỉ khi có dòng tiền**: thưởng tiền mặt → "Đưa vào bảng lương"; phạt tiền → "Khấu trừ vào lương"; điều chỉnh lương.
Nhân viên (NLĐ)Quyết định hệ quả lớn (kỷ luật, nghỉ việc, bổ nhiệm, miễn nhiệm) → phải **Xác nhận đã nhận**.

Quy tắc rút ra (phần luồng tiền sang Lương/Kế toán để giai đoạn sau cùng Công nợ — §11.3):

  • Kỷ luật gắn nhãn "Riêng tư" — không công khai, chỉ quản lý trực tiếp xem; Khen thưởng có thể công khai.
  • Kế toán/Lương chỉ nhận khi có dòng tiền — khớp trường Tháng áp dụng (kỳ lương) ở Khen thưởng Tiền mặt & Kỷ luật Phạt tiền: đây là cầu nối thật đưa số tiền vào Bảng lương.
  • Quyết định hệ quả lớn buộc NLĐ Xác nhận đã nhận — cần bổ sung trạng thái "đã nhận" cho quyết định.

7. Lương

Đã đổi 11/08/2026 — tóm tắt thay đổi mục Bảng lương

Gom trong một chỗ để Dev đọc lướt biết phần nào vừa đổi; chi tiết nằm ở đúng FR/BR được dẫn.

Chốt kỳ lương

  • Chốt luôn là thao tác thủ công — người làm lương bấm nút, không có cơ chế tự động chốt theo lịch/ngày (FR-PL-CHOT-01).
  • Gỡ mọi nội dung về mốc chốt kỳ chấm công khỏi module Lương: bỏ chip Công Tx: đang mở — tự chốt ngày 03 tháng sau ở danh sách kỳ & màn chi tiết, bỏ cảnh báo tương ứng trong modal chốt, bỏ FR-PL-CHOT-04 và BR-PL-CHOT-04 cũ. Mốc chốt kỳ công thuộc SRS Chấm công, module Lương không hiển thị & không ràng buộc theo mốc đó.
  • Bỏ nghiệp vụ Mở lại kỳ khỏi đợt này — gỡ nút, modal, badge "Đã mở lại N lần", bước 8 của luồng, dòng chức năng Mở lại kỳ và 5 quy tắc mở lại kỳ ở cuối bộ BR. Xem khối ⏸ Mở lại kỳ lương ở FR-PL-CHOT.
  • Kỳ đã chốt khoá tuyệt đối (BR-PL-CHOT-06): không sửa inline (kể cả phiếu còn ở Nháp), không Duyệt · Gửi phiếu · Trả về · Thu hồi xác nhận · Tính lại, checkbox tắt, không có đường hạ phiếu về nhap.
  • Điều kiện chốt siết lại: 100% phiếu phải ở Đã ký và xác nhận (BR-PL-CHOT-01) — bỏ ngoại lệ cũ cho chốt khi còn Chờ ký và xác nhận kèm lý do, và bổ sung chặn phiếu Đã duyệt (trước đây lọt lưới). Kéo theo: bỏ khối cảnh báo vàng trong modal, ô Lý do thành tuỳ chọn, bỏ khái niệm không phản hồi (BR-PL-CHOT-03 · 07).
  • Cột Trạng thái của kỳ đã chốt chỉ còn badge, bỏ hết dòng chú thích bên dưới (BR-PL-CHOT-11).
  • Dữ liệu mẫu: kỳ T4/2026 và T5/2026 chuyển sang Đã chốt — chỉ còn T6/2026 là kỳ mở.

Sổ Lịch sử thay đổi bảng lương

  • Sổ đi theo hai cấp: chọn kỳ → xem từng lần tính lại (FR-PL-HIST-01 · 01.1).
  • Cấp 2 là một bảng duy nhất xếp theo ngày–giờ, bỏ thẻ bung/thu; dòng nhóm chỉ hiện thời điểm (FR-PL-HIST-02).
  • Thanh lọc: Từ ngày · Đến ngày · Tìm nhân viên; bỏ dải tổng hợp 4 ô và các bộ lọc khoản thay đổi / người thực hiện (FR-PL-HIST-03). Từ 12/08/2026 thanh lọc chỉ còn ở cấp 2 — cấp 1 rút còn Kỳ lương · Lần gần nhất · Xem (FR-PL-HIST-01.1).
  • Cột Khoản thay đổi hiển thị text thường, bỏ badge màu (FR-PL-HIST-02.1).
  • Một lần bấm Áp dụng = đúng một bản ghi, dù chạm bao nhiêu phiếu (BR-PL-HIST-08).
  • Bỏ nguồn Chấm công khỏi sổ (12/08/2026): sổ chỉ còn khoản từ QĐ khen thưởng và QĐ kỷ luật; ngày công & phạt theo chấm công không ghi, không hiển thị (FR-PL-HIST-08 · BR-PL-HIST-09 → 11). Tính lại không đổi.

🔄 Luồng nghiệp vụ — Bảng lương theo kỳ

Vai trò được thao tác: người làm lương (Nhân sự · Admin) lập/duyệt/gửi; Nhân viên (NV) ký & xác nhận (các vai còn lại trong dây chuyền ký ký trên bảng lương) ở Trang cá nhân; Hệ thống (HT) roll-up badge kỳ. Trục trạng thái = PAY_FLOW §3; badge kỳ 4 mức = §3.1.

Bước Vai trò Hành động Kết quả / Chuyển trạng thái
1. Lập & tính lương NS · AD Tạo/mở kỳ lương, nhập·sửa dòng lương (P1·P2·P3, thưởng/phạt, ngày công lấy từ Chấm công) Dòng ở Nháp (nhap); badge kỳ Đang tính
2. Duyệt NS · AD Bấm Duyệt dòng lương nhap → da-duyet (Đã duyệt)
3. Gửi nhân viên NS · AD Bấm Gửi phiếu phiếu lương da-duyet → cho-xn-luong (Chờ ký và xác nhận); phiếu đầu tiên gửi → badge kỳ Đang ký & xác nhận
4. Dây chuyền ký NV · KT · BKS · GĐTC · TGĐ Lần lượt Ký & xác nhận (nhân viên ký ở Trang cá nhân, các vai còn lại ký trên bảng lương) — §3.2 Phiếu giữ nguyên cho-xn-luong suốt dây chuyền; chữ ký cuối (TGĐ) → da-xn-luong (Đã ký và xác nhận). Bất kỳ ai từ chối → khong-xn-luong (Không ký và xác nhận)
5. Xử lý từ chối (nhánh rẽ) NS · AD Bấm Trả về phiếu bị từ chối → sửa → Gửi phiếu lại khong-xn-luong → nhap → lặp bước 1–4
6. Hoàn tất kỳ HT Khi toàn bộ phiếu trong kỳ = Đã ký và xác nhận Badge kỳ Hoàn tất ký & xác nhận
7. Chốt kỳ lương ✾ NS · AD Bấm Chốt kỳ lương (FR-PL-CHOT-01) — chỉ bấm được khi bước 6 xong, tức 100% phiếu Đã ký và xác nhận (BR-PL-CHOT-01) Badge kỳ Đã chốt; số liệu đóng băng, mọi thao tác trên phiếu bị khoá

Chỉ nhân viên Đang làm việc mới vào kỳ

Bước 1 chỉ nạp NV có trạng thái Đang làm việc (BR-07) — liên kết với Luồng Quyết định (Tạm nghỉ/Nghỉ việc làm NV rời khỏi kỳ tính lương).

FR-PL-CHOT-01. Chốt kỳ lương

Nút Chốt kỳ lương ở header màn chi-tiet-bang-luong.html; badge Đã chốt hiện ở cả danh sách kỳ lẫn màn chi tiết.

Chốt kỳ lương luôn là thao tác thủ công — do người làm lương bấm nút, có modal xác nhận và người chịu trách nhiệm. Không có cơ chế tự động chốt theo lịch/ngày: kỳ lương chỉ chuyển sang Đã chốt khi có người bấm. (Chốt 11/08/2026.)

Vì sao cần: BR-PL-RECALC-09 và BR-PS-01 đều nói ngày công chỉ lấy từ dữ liệu chấm công đã chốt, nhưng bảng lương lại không có mốc bất biến của riêng nó. Không có mốc chốt thì mỗi lần bấm Tính lại ra một con số khác, phiếu đã gửi bị hạ về Nháp và thu hồi xác nhận của nhân viên (BR-PL-RECALC-18 · 21 · 22) — dù lương tháng đó đã trả.

Chức năng

Mã Chức năng Mô tả
FR-PL-CHOT-01 Chốt kỳ lương Nút ở header màn chi tiết kỳ, quyền Nhân sự · Admin. Mở modal xác nhận hiển thị: ① Kỳ lương + mã kỳ; ② Số phiếu & Tổng thực lĩnh (₫) — số sắp bị đóng băng; ③ phân rã theo 5 bậc PAY_FLOW; ④ khối "Chốt xong hệ thống sẽ…"; ⑤ ô nhập Ngày chốt (mặc định hôm nay), Lý do/Ghi chú, người chốt (tự điền, chỉ xem); ⑥ checkbox xác nhận "số liệu kỳ này là cuối cùng". Nút Chốt chỉ bật khi đủ điều kiện chốt (BR-PL-CHOT-01) và đã tick checkbox; không bắt nhập lý do.
FR-PL-CHOT-02 ✾ Hiển thị trạng thái chốt Kỳ đã chốt hiện badge tím 🔒 Đã chốt · dd/mm ở danh sách kỳ + dải thông tin ở đầu màn chi tiết (ngày chốt · người chốt · lý do). Phiếu lương cá nhân của kỳ đã chốt hiện dải "Đây là bản chốt — số liệu không đổi nữa".

Business Rule (BR-PL-CHOT)

Mã Quy tắc
BR-PL-CHOT-01 ✦✾ ĐIỀU KIỆN CHỐT DUY NHẤT — 100% phiếu trong kỳ phải ở Đã ký và xác nhận (da-xn-luong). Còn bất kỳ phiếu nào ở 4 bậc kia của PAY_FLOW — Nháp · Đã duyệt · Chờ ký và xác nhận · Không ký và xác nhận — thì chặn cứng, nút Chốt không bấm được. Lý do: chốt là đóng băng vĩnh viễn & một chiều (đợt này không có Mở lại kỳ), nên không được chốt khi còn phiếu chưa đi hết dây chuyền ký. Điều kiện này khớp badge kỳ Hoàn tất ký & xác nhận (§3.1): badge phải ở Hoàn tất ký & xác nhận thì mới chốt được. (Siết 11/08/2026 — trước đó chỉ chặn Nháp + Không ký và xác nhận, cho chốt khi còn Chờ ký và xác nhận kèm lý do, và không xét phiếu Đã duyệt.)
BR-PL-CHOT-02 ✾ Hộp xác nhận liệt kê đúng nhóm phiếu đang chặn, mỗi nhóm kèm số lượng và việc phải làm: Nháp → cần Duyệt rồi Gửi phiếu; Đã duyệt → cần Gửi phiếu; Chờ ký và xác nhận → cần nhắc nhân viên xác nhận; Không ký và xác nhận → cần Trả về xử lý tranh chấp rồi gửi lại. Xử lý hết mới quay lại chốt.
BR-PL-CHOT-03 ✾ Không còn ngoại lệ "cảnh báo nhưng vẫn cho chốt" — mọi trường hợp thiếu xác nhận đều là chặn cứng (BR-PL-CHOT-01). Hộp xác nhận vì thế không còn khối cảnh báo vàng, và ô Lý do / Ghi chú thành tuỳ chọn (không bắt buộc nhập). (Sửa 11/08/2026 — trước đó cho chốt khi còn Chờ ký và xác nhận nếu nhập lý do.)
BR-PL-CHOT-04 Điều kiện BR-PL-CHOT-01 → 03 được kiểm tra lại ngay trước khi ghi, không chỉ lúc mở modal (chống đua với thao tác của người khác).
BR-PL-CHOT-05 Chốt xong hệ thống chụp snapshot toàn bộ phiếu trong kỳ: mọi khoản + ngày công + nguồn từng khoản. Snapshot là bản đối chiếu bất biến.
BR-PL-CHOT-06 ✦✾ Kỳ đã chốt khoá TUYỆT ĐỐI — không thao tác nào làm đổi được số liệu. Khoá: Tính lại (nút dòng · hàng loạt · toàn kỳ — BR-PL-RECALC-01) · sửa inline · Duyệt · Gửi phiếu · Trả về · Thu hồi xác nhận · chọn dòng (checkbox tắt) · thêm/bớt nhân viên khỏi kỳ. Đặc biệt: KHÔNG có đường hạ phiếu về nhap — mọi lối đưa phiếu về Nháp (Trả về · Thu hồi xác nhận · hạ trạng thái do Tính lại theo BR-PL-RECALC-18) đều không tồn tại trong kỳ đã chốt. Khoá áp dụng cho mọi phiếu, kể cả phiếu còn đang ở Nháp tại thời điểm chốt. (Siết 11/08/2026 — trước đó chỉ liệt kê nút bị ẩn.)
BR-PL-CHOT-07 ✾ Chốt xong đóng cửa mọi thao tác của nhân viên trên phiếu kỳ đó: Trang cá nhân hiện dòng "Kỳ lương đã chốt ngày dd/mm", phiếu chuyển chỉ-xem. Không còn khái niệm không phản hồi: theo BR-PL-CHOT-01, kỳ chỉ chốt được khi mọi phiếu đã đi hết dây chuyền ký, nên không thể tồn tại phiếu chưa phản hồi tại thời điểm chốt. (Sửa 11/08/2026.)
BR-PL-CHOT-08 Badge kỳ chuyển Đã chốt và ngừng roll-up (§3.1) — không tự tính lại nữa.
BR-PL-CHOT-09 ✾ Chốt xong mới mở cổng hạ nguồn: xuất bảng chi lương ngân hàng và chuyển sang Công nợ. Đây là thời điểm DUY NHẤT phiếu được đẩy sang công nợ (BR-PL-DETAIL-10) — kỳ chưa chốt thì chưa có phiếu nào ở công nợ, nhờ vậy Tính lại chỉ cần một cổng chặn là kỳ đã chốt (BR-PL-RECALC-01). (Làm rõ 11/08/2026.)
BR-PL-CHOT-10 Ghi nhật ký mỗi lần chốt: người chốt · thời điểm · lý do · số phiếu · tổng thực lĩnh tại thời điểm chốt.
BR-PL-CHOT-11 ✦✾ Kỳ đã chốt: cột Trạng thái CHỈ hiện badge, không kèm dòng chú thích nào bên dưới. Bỏ toàn bộ ghi chú phụ vốn hiện ở kỳ còn mở — → trả về Nháp để sửa · ↩ đã trả về (thu hồi xác nhận) · ↓ tính lại (ghi chú → đã chuyển công nợ đã bỏ hẳn 11/08/2026 vì công nợ chỉ sinh khi chốt kỳ — BR-PL-DETAIL-10). Lý do: kỳ đóng băng thì mọi phiếu đều ở Đã ký và xác nhận (BR-PL-CHOT-07) và không còn việc gì để làm, nên ghi chú diễn biến chỉ gây nhiễu; chúng chỉ có nghĩa ở kỳ còn mở, nơi người làm lương còn phải xử lý tiếp. Việc nhân viên không phản hồi trước khi chốt vẫn được nêu ở dải đầu phiếu lương cá nhân, không nêu lại trong bảng. (Chốt 11/08/2026.)

⏸ Mở lại kỳ lương — chưa đặc tả trong đợt này

Nghiệp vụ Mở lại kỳ (gỡ chốt để sửa số rồi chốt lại) để giai đoạn sau, dựng cùng giao diện Công nợ — vì mọi quy tắc mở lại đều bám vào công nợ: chặn mở lại khi phiếu đã chuyển công nợ, không mở lại kỳ đã chi tiền, phiên bản bản chốt v1/v2, nhật ký người mở. Đợt này giao diện không có nút Mở lại kỳ: kỳ đã chốt là một chiều, đóng băng vĩnh viễn, không thao tác nào đổi được số (BR-PL-CHOT-06).

Hệ quả cần biết khi nghiệm thu: phát sinh sau khi chốt chưa có đường xử lý trong hệ thống ở đợt này — xử lý ngoài hệ thống, hoặc chờ nghiệp vụ Công nợ + Sổ điều chỉnh. (Chốt 11/08/2026.)

Phạm vi giai đoạn này — chưa có Sổ điều chỉnh

Cơ chế truy lĩnh / truy thu tự động (chênh lệch phát sinh sau khi chốt được ghi sổ rồi kết chuyển sang kỳ mở kế tiếp) gắn chặt với Công nợ — vốn để giai đoạn sau. Đợt này:

  • Nguồn phát sinh chặn được từ gốc thì chặn: dropdown Tháng áp dụng (kỳ lương) ở Khen thưởng · Kỷ luật · Quyết định không liệt kê kỳ đã chốt.
  • Nguồn không chặn được (hợp đồng hồi tố, hồ sơ nhập trễ): đợt này chưa có đường xử lý trong hệ thống — nghiệp vụ Mở lại kỳ để giai đoạn sau (xem khối trên).
  • Lương đã chi mà phát sinh chênh lệch: xử lý ngoài hệ thống ở giai đoạn này.

Khi nào tiền chênh lệch hiện ở đâu (đã thống nhất): tiền công/lương đi đường lương — hiển thị trên phiếu lương cho Nhân sự xem trước, kế toán nhận sau theo phiếu; chỉ khi nhân viên đã nghỉ việc (không còn phiếu nào để gắn) mới ghi thẳng vào công nợ cá nhân.

FR-PL-LIST-01 → 08. Danh sách bảng lương theo tháng (danh sách kỳ lương)

Panel Bảng lương trong nhan-su.html#bang-luong — chi tiết hoá mục Lương › Bảng lương của FR-NS-01. Mỗi dòng là một kỳ lương (một tháng); mở ra Bảng lương chi tiết theo kỳ (FR-LU-01).

Mục đích: người làm lương (Nhân sự · Admin) xem toàn bộ kỳ lương đã tạo, theo dõi tiến độ từng kỳ qua badge trạng thái (§3.1), tạo kỳ lương mới và mở chi tiết để lập/duyệt/gửi phiếu lương.

Dữ liệu hiển thị (cột bảng)

# Cột Mô tả
1 Kỳ lương Tháng của kỳ, hiển thị dạng Tháng 6/2026 (mã kỳ YYYY-MM); bấm → chi tiết kỳ
2 Số nhân viên Số nhân viên được sinh bảng lương trong kỳ (BR-PL-LIST-03)
3 Tổng thực lĩnh (₫) Tổng tiền thực nhận của toàn bộ nhân viên trong kỳ (FR-PL-LIST-06)
4 Trạng thái Badge kỳ 3 mức: Đang tính · Đang ký & xác nhận · Hoàn tất ký & xác nhận — roll-up từ trạng thái từng phiếu (§3.1)
5 Thao tác Mở → (FR-PL-LIST-05)

Chức năng

Mã Chức năng Mô tả
FR-PL-LIST-01 Hiển thị danh sách kỳ lương Liệt kê các kỳ lương đã tạo với 5 cột: Kỳ lương · Số nhân viên · Tổng thực lĩnh · Trạng thái · Thao tác (Mở).
FR-PL-LIST-04 Tạo kỳ lương Nút + Tạo kỳ lương → modal chọn Tháng / Năm (mặc định gợi ý kỳ kế tiếp của kỳ mới nhất đang có). Sau khi tạo thành công, hệ thống: ① sinh kỳ lương (mã YYYY-MM); ② lấy dữ liệu từ các module liên quan — ngày công từ Chấm công, P1/P2/P3 & phụ cấp từ Hợp đồng › Thành phần lương, Thưởng từ Khen thưởng, Phạt từ Kỷ luật theo trường Tháng áp dụng (kỳ lương); ③ sinh bảng lương của từng nhân viên đủ điều kiện tính lương (BR-PL-LIST-03 → BR-PL-LIST-05), mọi dòng ở trạng thái nhap. Kết thúc → mở chi tiết kỳ (chi-tiet-bang-luong.html?ky=YYYY-MM).
FR-PL-LIST-05 Mở chi tiết Bấm tên kỳ lương hoặc nút Mở → → mở màn Bảng lương chi tiết theo kỳ (FR-LU-01) của kỳ đó.
FR-PL-LIST-06 Hiển thị tổng thực lĩnh Cột Tổng thực lĩnh = tổng tiền thực nhận của toàn bộ nhân viên trong kỳ (tổng cột Thực nhận của mọi phiếu — công thức ở FR-LU-01), định dạng số nghìn, đơn vị ₫.
FR-PL-LIST-07 Phân trang Khi số kỳ lương vượt giới hạn hiển thị của một trang → phân trang, kèm dòng đếm "Hiển thị 1–N trong M kỳ lương" và bộ chuyển trang.
FR-PL-LIST-08 Sắp xếp Cho phép sắp xếp danh sách theo: tháng mới nhất (mặc định — BR-PL-LIST-07) · tổng lương (tổng thực lĩnh) · số nhân viên.

Business Rule (BR-PL-LIST)

Mã Quy tắc
BR-PL-LIST-03 Kỳ lương sau khi tạo sẽ sinh bảng lương cho tất cả nhân viên đủ điều kiện tính lương — tức nhân viên có trạng thái Đang làm việc (BR-07).
BR-PL-LIST-04 Nhân viên nghỉ việc trước kỳ lương → không được sinh bảng lương trong kỳ đó.
BR-PL-LIST-05 Nhân viên có hợp đồng lao động bắt đầu sau kỳ lương → không được sinh bảng lương trong kỳ đó (nhân viên chỉ được tính công & tính lương từ ngày bắt đầu hợp đồng lao động).
BR-PL-LIST-06 ✦ Nhân viên nghỉ việc GIỮA KỲ → vẫn được sinh bảng lương cho kỳ đó, tính công tới ngày nghỉ việc ghi trên quyết định nghỉ việc. Không loại nhân viên khỏi kỳ chỉ vì trạng thái hồ sơ hiện tại đã là Đã nghỉ việc — chỉ BR-PL-LIST-04 (nghỉ trước kỳ) mới loại. (Chốt 11/08/2026 — lấp mã khuyết BR-PL-LIST-06, §11 điểm Mốc so trạng thái nhân sự.)
BR-PL-LIST-07 Danh sách hiển thị theo kỳ lương mới nhất trước (mặc định, trước khi người dùng đổi tiêu chí sắp xếp ở FR-PL-LIST-08).

Đánh số FR/BR còn khoảng trống

Bản đặc tả nhận từ BA không có FR-PL-LIST-02 · 03 và BR-PL-LIST-01 · 02 · 06 — trong đó BR-PL-LIST-06 đã được lấp nội dung ngày 11/08/2026 (NV nghỉ việc giữa kỳ vẫn sinh phiếu). Tài liệu giữ nguyên mã đã cấp để khớp bản gốc; các mã còn thiếu xác nhận giữ trống (chốt 11/08/2026).

Mã khuyết — xác nhận bỏ trống (chốt 11/08/2026)

FR-PS-03 và BR-PS-11 không có trong bản đặc tả gốc — giữ khoảng trống, không bổ sung nội dung và không đánh lại số. Bản gốc còn đánh mã trần trùng bộ BR-01 → 07 của Danh sách hồ sơ nên tài liệu đã thêm tiền tố -PS-; đề nghị BA dùng tiền tố ngay từ bản đặc tả cho các đợt sau.

Giữ theo mockup — chốt 11/08/2026

  • Sắp xếp (FR-PL-LIST-08): danh sách đổ theo kỳ mới nhất trước (BR-PL-LIST-07); không dựng điều khiển sắp xếp cho người dùng ở đợt này.
  • Tìm kiếm & lọc trạng thái kỳ: không có ở panel Bảng lương — danh sách chỉ 12 kỳ/năm, xem thẳng. Bộ lọc Trạng thái mô tả ở §3.1 là badge hiển thị, không phải bộ lọc.
  • Tạo kỳ trùng tháng (FR-PL-LIST-04) và mốc so trạng thái nhân sự khi sinh bảng lương (BR-PL-LIST-03/04/05): không đặc tả thêm đợt này — giữ đúng hành vi mockup hiện có.

FR-LU-01. Bảng lương chi tiết theo kỳ

File: chi-tiet-bang-luong.html?ky=YYYY-MM (bảng công ty) / ?ky=&nv=NV-xxx (phiếu cá nhân chỉ-xem)

Mục đích: người làm lương lập/duyệt/gửi bảng lương theo tháng cho toàn bộ NV. (Đặc tả chức năng & quy tắc theo mã FR/BR của màn này: xem FR-PL-DETAIL.)

Công thức (chốt từ code):

Lương tháng    = P1 + P2 + P3
Tổng phụ cấp   = Phụ cấp Ăn + Xăng-ĐT + Khác
Lương CT       = round(Lương tháng / Định mức công × Ngày công chính thức)
Lương TV       = round(Lương tháng / Định mức công × Ngày công thử việc  × 85%)   ← TY_LE_TV
Lương TT       = round(Mức lương hỗ trợ / Định mức công × Ngày công thực tập)    ← lấy đúng mức lương
                                                                                   hỗ trợ trên HĐ thực tập
Tổng lương công = Lương CT + Lương TV + Lương TT
                 ↑ 3 vế có thể CÙNG có số trong một phiếu (NV đổi loại HĐ giữa kỳ);
                   mỗi vế lấy Lương tháng / Mức hỗ trợ của ĐÚNG hợp đồng đoạn đó — FR-PL-CONG
Thu nhập tổng  = Tổng lương công + Tổng phụ cấp + Thưởng
Phạt (tổng)    = Phạt chấm công + Phạt kỷ luật        ← HAI cột riêng, hai nguồn khác nhau
Cộng (giảm)    = Thuế TNCN + BHXH + Phạt chấm công + Phạt kỷ luật + Tạm ứng kỳ này
                 ← BHXH CÓ trừ; Giảm trừ gia cảnh KHÔNG trừ (chỉ để tính thuế) — BR-PS-12/14
Thực nhận      = Thu nhập tổng − Cộng

Phạt tách hai cột theo nguồn — chốt 10/08/2026

Cột Phạt gộp cũ được tách làm hai cột riêng: Phạt chấm công (nguồn Chấm công) và Phạt kỷ luật (nguồn QĐ kỷ luật hình thức Phạt tiền). Hai khoản đến từ hai đầu mục nghiệp vụ khác nhau nên phải nhìn tách được: sai phạt chấm công thì xử ở đơn giải trình / chấm công, sai phạt kỷ luật thì phải sửa hoặc huỷ quyết định kỷ luật. Chi tiết: BR-PS-22 · BR-PL-RECALC-29 · 30.

Lương thực tập — chốt 03/08/2026

Lương thực tập lấy theo đúng Mức lương hỗ trợ điền trong hợp đồng thực tập (FR-HD-08.1), không tính từ Lương tháng (P1 + P2 + P3) và không nhân tỷ lệ %. Kỳ lương chỉ chia theo ngày công thực tập / định mức công. (Tỷ lệ thử việc 85% vẫn giữ nguyên — BR-PS-05.)

(Đặc tả từng khoản, nguồn dữ liệu & quy tắc: BR-PS-01 → 15.)

Nhóm cột bảng (rất rộng): Mã NV · Họ tên · Chức vụ · Lương tháng (tính) · Lương (nhập: P1 · P2 NKNN · P3 NLQL) · Phụ cấp (Ăn · Xăng/ĐT · Khác) · Định mức công (tự động theo khối — VP: lịch tháng · CT: HR thiết lập; không nhập tay, BR-PS-18; ô chỉ hiện số công, cách tính theo khối để ở tooltip + chú thích chân bảng, không in nhãn khối cạnh số) · Ngày công chính thức (lấy từ Chấm công, tô amber nếu < định mức — đã bỏ link sang Chấm công: chấm công là dữ liệu cá nhân, nhân sự không xem được) · Ngày công thử việc · Ngày công thực tập (3 cột này tách theo loại hợp đồng hiệu lực từng ngày trong kỳ — một NV đổi loại HĐ giữa kỳ sẽ có số ở nhiều cột: FR-PL-CONG) · Lương chính (Lương CT · Lương TV · Lương TT · Thu nhập tổng — tính) · Giảm trừ (Giảm trừ gia cảnh · Thuế TNCN · Phạt chấm công (tự động — nguồn Chấm công) · Phạt kỷ luật (tự động — nguồn QĐ kỷ luật phạt tiền) — BR-PL-RECALC-29 · BR-PS-22 · Tạm ứng · BHXH) · Cộng · Thực nhận · Trạng thái · Sửa · Thao tác.

Phiếu lương cá nhân — khối Phụ cấp tách rõ

Phiếu lương cá nhân (?nv=NV-xxx, chỉ-xem — đặc tả ở FR-PS) tách khối Phụ cấp thành: Phụ cấp ăn ca · Phụ cấp xăng xe / điện thoại · Phụ cấp khác (từng khoản có tên) · Tổng phụ cấp. Phụ cấp khác lấy từ Thành phần lương → mục "Phụ cấp khác" của nhân viên; NV không có → hiện "Không có khoản phụ cấp khác". (Bảng lương công ty vẫn gộp cột Xăng/ĐT và Khác như cũ.)

Phiếu lương cá nhân — khối Phạt tách hai nguồn

Phiếu lương cá nhân dựng hai khối phạt riêng, mỗi khối có tổng riêng (BR-PS-22):

  • Phạt theo chấm công (nguồn: phân hệ Chấm công) — ✦ hai khoản: Trừ đi muộn · Trừ nghỉ không giải trình hoặc đơn bị từ chối — cùng hai khoản mà hộp ký gọi là Phạt đi muộn · Phạt nghỉ không giải trình (BR-PL-KY-12 — tách khoản 15/09/2026)
  • Phạt theo kỷ luật (nguồn: Quyết định kỷ luật có phạt tiền) — Trừ vi phạm nội quy · Trừ chậm nộp báo cáo · Trừ không hoàn thành công việc

Dưới hai khối là dòng Tổng phạt = tổng hai khối, khớp đúng Phạt chấm công + Phạt kỷ luật của bảng lương công ty. Thẻ tổng quan Phạt ghi kèm dòng phụ "Chấm công … · Kỷ luật …". Cùng cách chia này áp dụng cho phiếu lương nhân viên tự xem ở Trang cá nhân.

Xuất Excel bảng lương (chế độ xem bảng công ty trong chi-tiet-bang-luong.html): nút Xuất Excel → tải file .xlsx/CSV dữ liệu giống bảng, 27 cột (Mã NV · Họ tên · Chức vụ · Lương tháng · P1/P2/P3 · Phụ cấp Ăn/Xăng-ĐT/Khác · Thưởng · Định mức công · Ngày công CT/TV/TT · Lương CT/TV/TT · Thu nhập tổng · GTGC · Thuế TNCN · Phạt chấm công · Phạt kỷ luật · Tạm ứng · BHXH · Cộng · Thực nhận) cho mọi NV trong kỳ — không xuất cột Trạng thái và Thao tác. Là tài liệu nội bộ (đối chiếu / chuyển khoản / BHXH–thuế), không phát cho nhân viên — nhân viên xem & xác nhận qua phiếu lương cá nhân. Panel Bảng lương ở ngoài (nhan-su.html#bang-luong) không có nút Xuất Excel.

Thao tác theo trạng thái (xem §3 PAY_FLOW):

Nút Điều kiện Hiệu ứng
Sửa inline (✏️/Xong) chỉ dòng nhap sửa P1/P2/P3 · phụ cấp · Giảm trừ gia cảnh · Thuế TNCN · BHXH. Không sửa được: Ngày công · Định mức công · Thưởng · Phạt (đều là dữ liệu nguồn). Ô P1/P2/P3 · phụ cấp không có dấu đã sửa tay, và lần Tính lại kế tiếp sẽ ghi đè các ô này theo mốc giá trị hợp đồng áp dụng cho kỳ (BR-PL-RECALC-41 · BR-HD-CT-SL-08) — muốn đổi lâu dài thì sửa ở hợp đồng ✦ (sửa 09/09/2026; 11/09/2026: theo mốc kỳ)
Tính lại (dòng) mọi trạng thái — chỉ cần kỳ chưa chốt lấy lại nguồn & tính lại 1 phiếu; phiếu đổi số → hạ về nhap (FR-PL-DETAIL-13 · BR-PL-RECALC-18)
Duyệt nhap → da-duyet (chặn nếu phiếu còn cờ cần rà Thuế TNCN — BR-PL-RECALC-25)
Gửi phiếu da-duyet → cho-xn-luong
Trả về khong-xn-luong / da-xn-luong → nhap (Thu hồi xác nhận, đặt cờ)
Bulk Duyệt hàng loạt NV đã chọn (chỉ nhap) → da-duyet
Bulk Sửa hàng loạt tích trường (Gtgc / Thuế TNCN / BHXH — đã bỏ Định mức công) + giá trị + Áp dụng ghi đè cùng giá trị, chỉ lên dòng nhap trong tập đã chọn
Bulk Tính lại NV đã chọn (mọi trạng thái, kỳ chưa chốt) lấy lại nguồn & tính lại các phiếu đã chọn
Header "Tính lại (N phiếu)" kỳ chưa chốt và còn ≥ 1 phiếu đang lệch nguồn tính lại toàn kỳ
Header "Gửi N phiếu lương cho NV" mọi NV da-duyet → cho-xn-luong

Chọn dòng (checkbox)

Ô chọn bật cho mọi phiếu trong kỳ chưa chốt (phục vụ Tính lại hàng loạt); kỳ đã chốt thì checkbox tắt hết. Riêng Duyệt hàng loạt và Sửa hàng loạt vẫn chỉ tác động lên dòng nhap trong tập đã chọn và báo rõ số dòng bị bỏ qua.

Theo dõi tiến độ xác nhận: badge cạnh tiêu đề màn = badge kỳ (§3.1) + đếm tiến độ dạng "N/M đã ký và xác nhận" (FR-PL-DETAIL-01). (NV xác nhận thực tế ở Trang cá nhân; màn này chỉ theo dõi.)

Công thức Thực nhận — chốt 11/08/2026

Cộng = Thuế TNCN + BHXH + Phạt chấm công + Phạt kỷ luật + Tạm ứng · Thực nhận = Thu nhập tổng − Cộng (BR-PS-14 · BR-PS-15). BHXH CÓ trừ vào Thực nhận (BR-PS-12); Giảm trừ gia cảnh KHÔNG trừ — chỉ là đầu vào tính thuế TNCN. Thuế TNCN · GTGC · BHXH đều nhập tay, hệ thống không tự tính theo biểu thuế lũy tiến (BR-PS-13). Bảo hiểm chỉ có một khoản BHXH, không tách BHYT · BHTN.

FR-PL-CONG-01 → 07. Ngày công & loại lương theo hợp đồng trong kỳ

Áp dụng cho bảng lương chi tiết (FR-LU-01), phiếu lương cá nhân (FR-PS) và bước Tính lại lương (FR-PL-DETAIL-13). (Bổ sung 12/08/2026.)

Vấn đề: bảng lương có 3 cột ngày công — Ngày công chính thức · Ngày công thử việc · Ngày công thực tập — nhưng một nhân viên có thể đổi loại hợp đồng ngay giữa kỳ (thử việc → chính thức, thực tập → thử việc), hoặc vào làm / nghỉ việc giữa tháng. Khi đó một phiếu lương chứa nhiều loại lương cùng lúc, và mỗi loại phải tính bằng tham số của đúng hợp đồng sinh ra nó.

Nguyên tắc — chấm công cho số ngày, hợp đồng cho loại ngày

Chấm công trả lời "ngày nào nhân viên có công" (BR-PS-01); hợp đồng trả lời "ngày công đó thuộc cột nào". Một ngày công luôn được xếp vào đúng một cột, theo loại hợp đồng đang hiệu lực vào chính ngày đó — không chia đều, không ước lượng theo tỷ lệ, không lấy loại của hợp đồng mới nhất áp cho cả kỳ.

Bước tính (hệ thống tự chạy khi lập kỳ & khi Tính lại)

# Bước Mô tả
1 Lấy khoảng kỳ lương Kỳ YYYY-MM → khoảng [ngày đầu kỳ … ngày cuối kỳ] (mặc định ngày 01 → ngày cuối tháng).
2 Lấy hợp đồng giao với kỳ Mọi hợp đồng của nhân viên có khoảng hiệu lực giao với khoảng kỳ — kể cả HĐ đã Hết hạn hoặc Chấm dứt trong kỳ (BR-PL-CONG-02).
3 Cắt thành đoạn hiệu lực trong kỳ Đoạn = từ max(Ngày bắt đầu HĐ, ngày đầu kỳ) đến min(Ngày kết thúc hiệu lực, ngày cuối kỳ). HĐ kết thúc theo quyết định nghỉ việc → lấy Ngày kết thúc thực tế (FR-HD-11) thay cho Ngày kết thúc ghi trên HĐ (BR-PL-CONG-03).
4 Gán loại cho từng đoạn Theo loại hợp đồng của đoạn — bảng ánh xạ bên dưới (BR-PL-CONG-04).
5 Đếm ngày công theo đoạn Số công chấm công đã chốt rơi trong đoạn được cộng vào cột tương ứng của đoạn đó (BR-PL-CONG-05).
6 Tính lương từng loại Mỗi loại lương dùng tham số của chính hợp đồng đoạn đó (P1/P2/P3 hoặc Mức lương hỗ trợ), chia cho định mức công của kỳ (BR-PL-CONG-06).
7 Cộng lại Tổng lương theo công = Lương CT + Lương TV + Lương TT (BR-PS-07).

Ánh xạ loại hợp đồng → cột ngày công → công thức lương

(Enum loại hợp đồng đúng 3 loại đang dùng toàn module — FR-HD-01.)

Loại hợp đồng của đoạn Cột ngày công Tham số lấy từ hợp đồng của đoạn Công thức
Xác định thời hạn Ngày công chính thức Lương tháng = P1 + P2 + P3 (tab Thành phần lương) BR-PS-04
Thử việc Ngày công thử việc Lương tháng = P1 + P2 + P3 × 85% (tỷ lệ thử việc) BR-PS-05
Thực tập Ngày công thực tập Mức lương hỗ trợ trên HĐ thực tập (FR-HD-08.1) BR-PS-06

Ví dụ — nhân viên chuyển thử việc → chính thức giữa kỳ

Kỳ 07/2026, khối Văn phòng, định mức công của kỳ = 24 (dùng chung cho cả 3 loại — BR-PL-CONG-07). Nhân viên có 2 hợp đồng: HĐTV-2026/045 Thử việc 15/06/2026 – 14/07/2026 (Lương tháng 8.000.000 ₫) và HĐLĐ-2026/061 Xác định thời hạn từ 15/07/2026 (Lương tháng 12.000.000 ₫).

Đoạn trong kỳ Hợp đồng Loại Ngày công chấm được Vào cột Thành tiền
01/07 → 14/07 HĐTV-2026/045 Thử việc 10 Ngày công thử việc 8.000.000 ÷ 24 × 10 × 85% = 2.833.333 ₫
15/07 → 31/07 HĐLĐ-2026/061 Xác định thời hạn 13 Ngày công chính thức 12.000.000 ÷ 24 × 13 = 6.500.000 ₫
23 Tổng lương theo công 9.333.333 ₫

→ Trên bảng lương, nhân viên này có cả hai cột Ngày công thử việc = 10 và Ngày công chính thức = 13 (cột Ngày công thực tập = —), hai dòng lương Lương TV và Lương CT đều có số. Nếu áp sai — lấy loại hợp đồng mới nhất cho cả kỳ — thì 10 ngày thử việc bị trả theo mức chính thức, chênh hơn 1,7 triệu.

Chức năng (FR)

Mã Chức năng Mô tả
FR-PL-CONG-01 Tách 3 cột ngày công theo hợp đồng Hệ thống tự tách số công đã chốt của kỳ vào Ngày công chính thức · thử việc · thực tập theo đoạn hiệu lực hợp đồng (7 bước trên). Người dùng không nhập tay 3 cột này (BR-PS-01).
FR-PL-CONG-02 Nhiều loại lương trên một phiếu Một phiếu lương được phép có đồng thời Lương CT · Lương TV · Lương TT; mỗi khoản tính bằng tham số của hợp đồng tương ứng, cột nào không có công thì hiện — và thành tiền = 0.
FR-PL-CONG-03 Cột Lương tháng · P1/P2/P3 khi kỳ có nhiều HĐ Hiển thị theo hợp đồng có hiệu lực ở ngày cuối cùng nhân viên còn làm việc trong kỳ; kỳ có ≥ 2 hợp đồng → gắn dấu ⓘ cạnh ô, tooltip liệt kê "Kỳ này có 2 hợp đồng: HĐTV-2026/045 (01–14/07) · HĐLĐ-2026/061 (15–31/07)" (BR-PL-CONG-08).
FR-PL-CONG-04 Khối Chi tiết theo hợp đồng trong kỳ — phiếu lương cá nhân Phiếu lương cá nhân có thêm khối bảng khi kỳ có ≥ 2 đoạn hợp đồng: Mã HĐ · Loại HĐ · Đoạn hiệu lực trong kỳ · Ngày công · Mức lương áp dụng · Thành tiền, dòng cuối Tổng lương theo công. Chỉ một đoạn → ẩn khối này (không làm rối phiếu thường).
FR-PL-CONG-05 Ngày công không có hợp đồng phủ Ngày có chấm công nhưng không hợp đồng nào hiệu lực (vd chấm công trước ngày hợp đồng bắt đầu) → không cộng vào cột nào, phiếu gắn cờ cảnh báo "N ngày công ngoài thời gian hợp đồng" để nhân sự xử lý ở hồ sơ hợp đồng; sửa xong cờ tự mất và ngày công vào cột ngay (thời gian thực — BR-PL-CONG-09 · 10).
FR-PL-CONG-06 Cập nhật thời gian thực Cả hai nguồn của phép phân bổ — chấm công đã chốt và danh sách hợp đồng trong kỳ — đều được bảng lương đọc theo thời gian thực (BR-PL-RECALC-39). Sửa / chấm dứt / gia hạn hợp đồng, hay duyệt muộn một đơn giải trình, thì 3 cột ngày công tự phân bổ lại ngay, người dùng không phải bấm Tính lại (BR-PL-CONG-10).
FR-PL-CONG-07 Xuất Excel File xuất giữ đủ 3 cột ngày công và 3 cột lương như bảng (FR-LU-01) — không gộp.

Quy tắc nghiệp vụ (BR-PL-CONG)

Mã Quy tắc
BR-PL-CONG-01 Loại ngày công = loại hợp đồng hiệu lực vào chính ngày đó. Không suy ra từ hợp đồng mới nhất, không suy ra từ trạng thái nhân sự.
BR-PL-CONG-02 Kỳ lương xét mọi hợp đồng giao với khoảng kỳ, kể cả hợp đồng đã Hết hạn hoặc Chấm dứt trong kỳ — hợp đồng kết thúc giữa kỳ vẫn phải trả công phần đã làm.
BR-PL-CONG-03 Biên của đoạn: từ = max(Ngày bắt đầu HĐ, ngày đầu kỳ), đến = min(Ngày kết thúc hiệu lực, ngày cuối kỳ); hợp đồng kết thúc theo quyết định nghỉ việc thì Ngày kết thúc thực tế (FR-HD-11) thay cho Ngày kết thúc ghi trên HĐ. Hai đầu mút tính vào đoạn (bao gồm cả ngày đầu và ngày cuối).
BR-PL-CONG-04 Ánh xạ 1–1 loại HĐ → cột ngày công: Xác định thời hạn → chính thức · Thử việc → thử việc · Thực tập → thực tập. Một ngày công chỉ vào đúng một cột, không đếm hai lần.
BR-PL-CONG-05 Ngày công của mỗi đoạn lấy đúng số công chấm công đã chốt rơi trong đoạn (BR-PS-01) — không chia đều theo số ngày lịch của đoạn.
BR-PL-CONG-06 Mỗi loại lương dùng tham số của hợp đồng đoạn đó: đoạn Xác định thời hạn / Thử việc lấy P1 · P2 · P3 của chính hợp đồng ấy; đoạn Thực tập lấy Mức lương hỗ trợ của hợp đồng thực tập ấy. Hai đoạn khác mức lương thì tính riêng rồi cộng, không lấy một mức áp cho cả kỳ (mở rộng BR-PS-02).
BR-PL-CONG-07 Định mức công là của kỳ, không cắt theo đoạn — cả 3 công thức đều chia cho cùng một định mức công của kỳ (BR-PS-18 → 20). Nhờ vậy nhân viên làm đủ công cả kỳ qua 2 hợp đồng nhận đúng ~1 tháng lương, không bị nhân đôi.
BR-PL-CONG-08 Kỳ có ≥ 2 hợp đồng → bảng lương công ty hiển thị Lương tháng · P1/P2/P3 của hợp đồng cuối kỳ kèm dấu ⓘ (danh sách hợp đồng trong kỳ); số tiền chi tiết từng đoạn xem ở phiếu lương cá nhân (FR-PL-CONG-04). Bảng công ty không tách dòng cho mỗi hợp đồng — vẫn 1 nhân viên = 1 dòng.
BR-PL-CONG-09 Ngày công ngoài mọi đoạn hợp đồng → không tính lương, phiếu gắn cảnh báo để nhân sự rà lại hợp đồng; không tự gán vào cột chính thức.
BR-PL-CONG-10 Hợp đồng và chấm công đều là nguồn đọc thời gian thực — thay đổi hợp đồng (ký mới · gia hạn · chấm dứt · sửa ngày hiệu lực) hoặc thay đổi chấm công trong kỳ chưa chốt thì 3 cột ngày công phân bổ lại ngay, không cần và không thuộc phạm vi Tính lại (BR-PL-RECALC-38 · 39). Đây chỉ nói về 3 cột ngày công: thành phần lương ghi trên hợp đồng (P1/P2/P3 · phụ cấp) thì có thuộc phạm vi Tính lại (BR-PL-RECALC-41, 09/09/2026) — hai việc khác nhau, đừng gộp. Kỳ đã chốt → snapshot đóng băng, sửa nguồn về sau không đổi kỳ đó (FR-PL-CHOT-01 · BR-PL-CHOT-05).

Hai điểm cần BA chốt

  1. Phụ cấp khi một kỳ có 2 hợp đồng: phụ cấp là khoản theo tháng, không chia theo công (BR-PS-08). Kỳ có hợp đồng thử việc (phụ cấp thấp) rồi hợp đồng chính thức (phụ cấp cao) thì trả nguyên khoản của hợp đồng cuối kỳ (hiện tài liệu tạm ghi nhận cách này) hay chia theo tỷ lệ ngày công của từng đoạn? Ảnh hưởng trực tiếp tới số tiền — cần chốt trước khi Dev code.
  2. Hai hợp đồng chồng ngày: BR-NS-013 quy định mỗi NV chỉ 01 hợp đồng đang hiệu lực, nhưng nếu dữ liệu cũ nhập lệch làm 2 hợp đồng phủ cùng một ngày thì kỳ lương xử lý sao — chặn lập phiếu hay lấy hợp đồng có ngày bắt đầu muộn hơn + cảnh báo?

Mockup hiện chưa mô phỏng ca nhiều hợp đồng

chi-tiet-bang-luong.html đang cho mỗi nhân viên đúng một loại công trong kỳ (chỉ CT, hoặc chỉ TV, hoặc chỉ TT). Ca chuyển loại giữa kỳ ở mục này chưa có dữ liệu mẫu trên giao diện — cần bổ sung khi dựng lại màn bảng lương để BA & Dev nhìn được cột đôi và khối Chi tiết theo hợp đồng trong kỳ.

FR-PL-DETAIL-01 → 12. Chi tiết bảng lương — đặc tả chức năng & quy tắc

Chi tiết hoá màn FR-LU-01 — chi-tiet-bang-luong.html?ky=YYYY-MM (chế độ bảng công ty). Mở từ danh sách kỳ lương (FR-PL-LIST-05).

Vai trò: Nhân sự · Admin (người làm lương). Quản lý & Nhân viên không vào màn này — NV xem & xác nhận phiếu của mình ở Trang cá nhân (§2).

Chức năng

Mã Chức năng Mô tả
FR-PL-DETAIL-01 Hiển thị thông tin kỳ lương Đầu màn hiển thị: tháng của kỳ (vd Bảng lương Tháng 6/2026), trạng thái kỳ (badge 3 mức — §3.1) và số nhân viên đã xác nhận dạng "N/M đã ký và xác nhận" (N = số phiếu đạt da-xn-luong, M = tổng NV trong kỳ). ✦ Chỉ số N/M chỉ đi kèm badge ở màn bảng lương cả kỳ; mở phiếu lương chi tiết của một nhân viên thì badge chỉ còn nhãn trạng thái kỳ, bỏ chỉ số — tiến độ toàn công ty không phải việc của màn đó, muốn xem thì mở hộp Luồng ký & xác nhận (FR-PL-KY-09). (Sửa 15/09/2026.) Chân bảng hiển thị tổng số nhân viên của kỳ.
FR-PL-DETAIL-02 Hiển thị danh sách phiếu lương Bảng liệt kê toàn bộ phiếu lương của NV trong kỳ, gồm đủ các cột trong mockup (nhóm cột chi tiết ở FR-LU-01): Mã NV · Họ tên · Chức vụ · Lương tháng · nhóm Lương (P1 Lương cơ bản · P2 NKNN · P3 NLQL) · nhóm Phụ cấp (Ăn · Xăng xe/ĐT · Khác) · Thưởng · Định mức công · Ngày công chính thức · Ngày công thử việc · Ngày công thực tập · nhóm Lương chính (Lương chính thức · Lương thử việc · Lương thực tập · Thu nhập tổng) · nhóm Các khoản giảm trừ (Giảm trừ gia cảnh · Thuế TNCN · Phạt chấm công · Phạt kỷ luật · Tạm ứng kỳ này · BHXH — BR-PS-22) · Cộng · Thực nhận · Trạng thái (§3 PAY_FLOW) · Thao tác (Sửa · nút hành động theo trạng thái). Có ô chọn dòng (checkbox, kể cả chọn tất cả) phục vụ thao tác hàng loạt ở FR-LU-01.
FR-PL-DETAIL-03 Lọc danh sách Lọc theo Trạng thái phiếu lương — 5 lựa chọn = 5 bậc PAY_FLOW: Nháp · Đã duyệt · Chờ ký và xác nhận · Đã ký và xác nhận · Không ký và xác nhận (mặc định Tất cả trạng thái). Kèm nút lọc nhanh Chờ tôi duyệt (FR-PL-KY-06).
FR-PL-DETAIL-04 Tìm kiếm nhân viên Nhập từ khoá → tìm theo Mã nhân viên hoặc Họ tên (không phân biệt hoa/thường, khớp một phần). Kết hợp đồng thời với bộ lọc trạng thái; không có kết quả → hiện thông báo rỗng nêu rõ từ khoá và/hoặc trạng thái đang lọc.
FR-PL-DETAIL-05 Xem phiếu lương Mở phiếu lương chi tiết của từng nhân viên (chi-tiet-bang-luong.html?ky=&nv=NV-xxx) — chế độ chỉ xem, mọi chỉnh sửa thực hiện trên bảng công ty (FR-LU-01).
FR-PL-DETAIL-08 Xuất Excel Nút Xuất Excel → xuất toàn bộ bảng lương của kỳ (mọi NV trong kỳ, 27 cột dữ liệu giống bảng — Phạt xuất thành hai cột Phạt chấm công & Phạt kỷ luật (BR-PS-22), không xuất cột Trạng thái & Thao tác) — chi tiết ở FR-LU-01. Tệp bang-luong-<YYYY-MM>; là tài liệu nội bộ, không phát cho NV.
FR-PL-DETAIL-09 Gửi phiếu Gửi phiếu lương cho các NV có trạng thái Đã duyệt (da-duyet): theo dòng (nút Gửi phiếu) hoặc hàng loạt bằng nút đầu màn "Gửi N phiếu lương cho NV" (N = số phiếu đang da-duyet; nút chỉ hiện khi N > 0). Phiếu ở trạng thái khác không được gửi (BR-PL-DETAIL-08).
FR-PL-DETAIL-10 Nhắc ký Với phiếu đang Chờ ký và xác nhận (cho-xn-luong) → nút Nhắc ký gửi thông báo tới đúng người đang giữ lượt ký (có thể là nhân viên, kế toán, ban kiểm soát, giám đốc tài chính hoặc tổng giám đốc — §3.2), không phải mặc định gửi cho nhân viên. Không làm đổi trạng thái phiếu.
FR-PL-DETAIL-11 ✾ Trả về Trả phiếu lương về trạng thái Nháp (nhap) để sửa: từ Không ký và xác nhận (NV từ chối) → Trả về; từ Đã ký và xác nhận → Trả về mang nghĩa Thu hồi xác nhận (có hộp xác nhận, nêu rõ hệ quả mất xác nhận của NV và toàn bộ chữ ký các bước sau, phải sửa rồi Duyệt & gửi lại) — phiếu được đánh dấu đã thu hồi để sửa. Không còn hệ quả rút phiếu khỏi công nợ: kỳ chưa chốt thì chưa có công nợ để rút (BR-PL-DETAIL-10). (Sửa 11/08/2026.)
FR-PL-DETAIL-12 ✾ Chuyển công nợ Phiếu chỉ chuyển sang Công nợ khi kỳ lương đã chốt (BR-PL-CHOT-09) — không phải ngay lúc ký xác nhận ở bất kỳ bước nào trong dây chuyền. Kỳ đã chốt: mỗi dòng có lối mở Công nợ ↗ sang sổ công nợ cá nhân của NV theo kỳ. Kỳ chưa chốt thì không có ghi chú "→ đã chuyển công nợ" và không có lối Công nợ ↗ trên dòng. (Sửa 11/08/2026 — gỡ xung đột cờ "đã chuyển công nợ", xem BR-PL-RECALC-01.)
FR-PL-DETAIL-13 ✦ Tính lại lương Nút Tính lại cho phép lấy lại Thưởng và Phạt kỷ luật từ quyết định khen thưởng / kỷ luật, lấy lại thông tin hợp đồng & thành phần lương (P1/P2/P3 · phụ cấp) và rà lại danh sách nhân viên của kỳ — nhân sự thêm hồ sơ + hợp đồng hiệu lực trong tháng sau khi kỳ đã mở thì nhân viên đó được thêm vào kỳ ngay tại đây (BR-PL-RECALC-40 · 41) — rồi tính lại toàn bộ khoản dẫn xuất của phiếu (BR-PL-RECALC-38). Không đụng ngày công & phạt chấm công — hai nhóm này đổ về thời gian thực (BR-PL-RECALC-39). Áp dụng cho phiếu ở cả 5 trạng thái PAY_FLOW; điều kiện loại trừ duy nhất là kỳ lương đã chốt (BR-PL-RECALC-01 · FR-PL-CHOT-01). Kỳ chưa chốt thì mọi phiếu đều tính lại được — kể cả phiếu Đã ký và xác nhận — và phiếu đổi số sẽ về nhap để nhân sự sửa nốt thông tin cần thiết rồi Duyệt & gửi lại (BR-PL-RECALC-18 · 19). Có 3 phạm vi: ① theo dòng (nút Tính lại ở cột Thao tác); ② theo lựa chọn (nút Tính lại trên thanh thao tác hàng loạt); ③ toàn kỳ (nút Tính lại (N phiếu) ở đầu màn). Nút ① và ③ chỉ hiện khi có phiếu đang lệch nguồn (BR-PL-RECALC-33). Bấm nút → hệ thống tính thử, chưa ghi gì, rồi mở hộp xác nhận hiển thị ngay bảng đối chiếu trước/sau để người làm lương duyệt bằng số thật, kèm: câu mô tả phạm vi cập nhật · số phiếu trong phạm vi · khối việc phải làm (cần Duyệt & gửi lại bao nhiêu phiếu · trong đó bao nhiêu phiếu phải để nhân viên xác nhận lần nữa) — không hiển thị trạng thái phiếu ở bất kỳ đâu trong luồng Tính lại (BR-PL-RECALC-33) · không nêu cảnh báo Thuế TNCN ở hộp xác nhận (BR-PL-RECALC-07) — không có tuỳ chọn Khôi phục theo hợp đồng (bỏ 10/08/2026, BR-PL-RECALC-38) ✾. Không có ô Lý do tính lại / Ghi chú thêm. Nội dung hộp xác nhận đổi theo phạm vi: một nhân viên → thẻ chi tiết của riêng nhân viên đó; nhiều nhân viên → bảng liệt kê chi tiết TẤT CẢ nhân viên trong phạm vi (BR-PL-RECALC-31 · 32). Chỉ khi bấm Áp dụng hệ thống mới ghi vào phiếu và hạ trạng thái phiếu có đổi số (BR-PL-RECALC-18). Chạy xong chỉ báo bằng toast kèm liên kết Xem lịch sử thay đổi — không dải kết quả, không lối Xem lại đối chiếu (BR-PL-RECALC-11) ✾. Quy tắc chi tiết: BR-PL-RECALC.

Đánh số FR/BR còn khoảng trống

Bản đặc tả nhận từ BA không có FR-PL-DETAIL-06 · 07 và BR-PL-DETAIL-01 → 05. Tài liệu giữ nguyên mã đã cấp để khớp bản gốc, không tự bịa nội dung cho các mã còn thiếu — các thao tác Duyệt · Sửa inline · Sửa hàng loạt · Duyệt hàng loạt hiện đặc tả ở bảng Thao tác theo trạng thái của FR-LU-01 và không cấp mã FR riêng — mã khuyết xác nhận giữ trống (chốt 11/08/2026). ✦ FR-PL-DETAIL-13 là mã mới cấp 05/08/2026 (không có trong bản gốc) cho nghiệp vụ Tính lại lương — đặc tả đầy đủ ở § Tính lại lương.

Business Rule (BR-PL-DETAIL)

Mã Quy tắc
BR-PL-DETAIL-06 ✾ Sửa tay (inline) chỉ mở cho phiếu nhap trong kỳ chưa chốt. Phiếu từ Đã duyệt trở đi → ô nhập & nút Sửa vô hiệu; kỳ đã chốt → khoá tuyệt đối mọi dòng, kể cả dòng còn nhap (BR-PL-CHOT-06). (Sửa 11/08/2026 — trước đó khoá theo cờ "đã chuyển công nợ".)
BR-PL-DETAIL-08 Sau khi gửi phiếu lương, trạng thái phiếu chuyển Đã duyệt → Chờ ký và xác nhận (da-duyet → cho-xn-luong) và vào dây chuyền 5 chữ ký (§3.2).
BR-PL-DETAIL-09 Nhân viên chỉ xác nhận một lần cho mỗi lượt gửi — đã xác nhận (hoặc đã từ chối) thì không tự đổi lại được; muốn xác nhận lại phải do người làm lương Trả về rồi gửi lại (BR-PL-DETAIL-12).
BR-PL-DETAIL-10 ✾ Công nợ sinh ở bước CHỐT KỲ LƯƠNG, không sinh lúc ký xác nhận ở bất kỳ bước nào trong dây chuyền: chốt kỳ → hệ thống đẩy toàn bộ phiếu của kỳ sang Công nợ (BR-PL-CHOT-09). Nhờ vậy trong kỳ chưa chốt không tồn tại phiếu "đã chuyển công nợ", nên Tính lại chỉ còn một điều kiện loại trừ là kỳ đã chốt (BR-PL-RECALC-01) và Thu hồi xác nhận không phải rút phiếu khỏi công nợ. (Sửa 11/08/2026 — gỡ xung đột cờ "đã chuyển công nợ"; trước đó công nợ tạo tự động ngay khi NV xác nhận.)
BR-PL-DETAIL-11 Nếu bất kỳ người ký nào trong dây chuyền (nhân viên · kế toán · ban kiểm soát · giám đốc tài chính · tổng giám đốc) từ chối → trạng thái chuyển Không ký và xác nhận (khong-xn-luong), kèm lý do bắt buộc của người từ chối (BR-PL-KY-04).
BR-PL-DETAIL-12 Phiếu Không ký và xác nhận có thể được trả về Nháp để chỉnh sửa rồi gửi lại — lặp vòng cho tới khi phiếu đi hết dây chuyền ký (Tổng giám đốc ký xong — §3.2).

Công nợ là phạm vi giai đoạn sau

FR-PL-DETAIL-12 và BR-PL-DETAIL-10 chạm vào nghiệp vụ Công nợ — vốn để giai đoạn sau (FR-CN-01 · §11.3). Đợt này chỉ nghiệm thu phần thuộc bảng lương: thời điểm đẩy sang công nợ = lúc chốt kỳ (BR-PL-CHOT-09) và lối điều hướng Công nợ ↗ ở kỳ đã chốt. Cơ chế sinh bút toán công nợ (bản ghi gì, số dư ra sao) chưa đặc tả — xem §11.3.

Lệch giữa đặc tả & mockup hiện tại

  • FR-PL-DETAIL-10 (Nhắc lại): mockup chỉ hiện toast "Đã gửi nhắc lại cho …". Kênh gửi thật (email / Trung tâm thông báo) và giới hạn tần suất không đặc tả đợt này — Dev nối theo hạ tầng thông báo chung (chốt 11/08/2026).
  • BR-PL-DETAIL-09 (chỉ xác nhận một lần): quy tắc giữ nguyên — mockup Trang cá nhân cần khoá nút Xác nhận / Không xác nhận sau lần phản hồi đầu tiên (việc của Dev, không còn là câu hỏi cho BA).
  • Hai nút cùng nhãn Trả về (FR-PL-DETAIL-11) — một cho khong-xn-luong, một cho da-xn-luong: giữ nguyên nhãn như mockup, không tách (chốt 11/08/2026).

FR-PL-DETAIL-13. Tính lại lương — luồng & quy tắc (BR-PL-RECALC)

Chi tiết hoá FR-PL-DETAIL-13 — nút Tính lại trên chi-tiet-bang-luong.html?ky=YYYY-MM. (Bổ sung 05/08/2026 — đóng điểm mở về tạo lại / tính lại kỳ đã tồn tại.)

Vì sao cần: quyết định khen thưởng / kỷ luật có thể được thêm sau khi kỳ lương đã tạo, với Tháng áp dụng = kỳ này. Hai khoản Thưởng · Phạt kỷ luật chụp số lúc tạo kỳ nên phải có lệnh lấy lại — đó là Tính lại. Không có nó, người làm lương phải sửa tay từng dòng — sai số cao và không truy vết được.

Tình huống thứ hai, phát sinh y hệt: kỳ lương đã mở rồi nhân sự mới thêm hồ sơ nhân viên và hợp đồng có hiệu lực ngay trong tháng đó — người mới vào việc giữa tháng, hoặc hợp đồng ký muộn / sửa lại sau khi kỳ đã tạo. Kỳ lương chụp danh sách nhân viên và thành phần lương lúc tạo nên nhân viên đó không có phiếu, còn phiếu của người đã có thì vẫn mang số hợp đồng cũ. Tính lại là lệnh để kỳ lương rà lại danh sách nhân viên và lấy lại thông tin hợp đồng (BR-PL-RECALC-40 · 41, chốt 09/09/2026).

Chấm công KHÔNG nằm trong Tính lại — chốt 12/08/2026

Dữ liệu chấm công đổ về bảng lương theo thời gian thực, giống thành phần lương trong hợp đồng: Ngày công chính thức · thử việc · thực tập và Phạt theo chấm công luôn phản ánh số mới nhất của phân hệ Chấm công — đơn giải trình duyệt muộn thì bảng lương đổi ngay, không phải bấm gì. Vì không bao giờ lệch nguồn nên không có gì để "lấy lại": 4 khoản này ra khỏi phạm vi Tính lại (BR-PL-RECALC-38 · 39).

Dòng chảy này chỉ dừng khi kỳ lương được chốt (FR-PL-CHOT-01): chốt xong hệ thống chụp snapshot toàn bộ phiếu kể cả ngày công (BR-PL-CHOT-05) — từ đó số đóng băng vĩnh viễn, chấm công có sửa nữa cũng không ảnh hưởng kỳ đã chốt.

→ Tính lại còn 2 khoản / 2 nguồn: Thưởng (QĐ khen thưởng) · Phạt kỷ luật (QĐ kỷ luật). (Trước 12/08/2026 phạm vi là 6 khoản / 3 nguồn, có cả chấm công.)

Bổ sung 09/09/2026 — thêm nguồn thứ ba: Hồ sơ & hợp đồng. Đây không phải quay lại cách cũ: chấm công vẫn đứng ngoài phạm vi. Cái được đưa vào là hai việc mà realtime không làm thay được — thêm nhân viên mới vào kỳ đã mở (chưa có phiếu thì không có gì để đọc realtime) và lấy lại thành phần lương theo hợp đồng đang hiệu lực trong kỳ (BR-PL-RECALC-40 · 41).

Luồng nghiệp vụ — 9 bước

Điểm mấu chốt: hệ thống tính thử trước, chưa ghi gì, và bảng đối chiếu trước/sau hiện ngay trong hộp xác nhận — người làm lương duyệt bằng số thật, không phải chạy rồi mới biết đổi gì.

# Bước Ai Hệ thống làm gì
1 Chọn phạm vi & bấm Tính lại NS · AD Lọc tập phiếu đủ điều kiện = mọi trạng thái trong kỳ chưa chốt (BR-PL-RECALC-01) — kỳ đã chốt thì không có nút để bấm
2 Tính thử (không ghi gì) HT Kéo nguồn & tính trên bản sao: khoản nào đổi · Thực nhận trước–sau · phiếu nào sẽ hạ trạng thái
3 Hộp xác nhận có đối chiếu HT Hiển thị đối chiếu trước/sau ngay tại đây — một NV → thẻ chi tiết riêng (BR-PL-RECALC-31); nhiều NV → bảng liệt kê đủ mọi nhân viên trong phạm vi (BR-PL-RECALC-32) — kèm số phiếu trong phạm vi · khối việc phải làm. Không hỏi lý do · không hiện trạng thái phiếu (BR-PL-RECALC-33)
4 Duyệt & xác nhận NS · AD Rà đối chiếu → bấm Áp dụng cho N phiếu (một NV: Áp dụng cho phiếu này). Huỷ thì không thay đổi gì
5 Ghi đè có chọn lọc ✦ HT Ghi 3 nhóm thuộc phạm vi — Thưởng · Phạt kỷ luật (BR-PL-RECALC-38) và thành phần lương theo hợp đồng đang hiệu lực trong kỳ (P1 · P2 · P3 · phụ cấp — BR-PL-RECALC-41), giữ nguyên khoản nhân sự nhập tay (BR-PL-RECALC-04); không đụng ngày công & phạt chấm công (đọc thời gian thực — BR-PL-RECALC-39)
6 Tính lại công thức HT Chạy lại BR-PS-03 → 15: Lương CT/TV/TT → Thu nhập tổng → Cộng → Thực nhận
7 Hạ trạng thái phiếu đổi số HT Phiếu có thay đổi → về nhap, huỷ dấu duyệt & xác nhận; phiếu không đổi → giữ nguyên trạng thái (BR-PL-RECALC-18 · 19)
8 Thu hồi & thông báo HT Thu hồi phiếu đang chờ xác nhận · thông báo nhân viên (BR-PL-RECALC-21 · 22) — không lưu lịch sử xác nhận cũ ✾
9 Rà danh sách NV · báo kết quả · ghi nhật ký HT Sinh/đánh dấu phiếu theo danh sách NV (BR-PL-RECALC-08) — nhân viên có hồ sơ + hợp đồng hiệu lực trong tháng được thêm sau khi kỳ đã mở thì phiếu mới sinh ở bước này (BR-PL-RECALC-40); báo kết quả chỉ bằng toast (kèm liên kết Xem lịch sử thay đổi) — không dải kết quả, không lối Xem lại đối chiếu, không cảnh báo Thuế TNCN (BR-PL-RECALC-11 · 25); ghi một bản ghi vào Lịch sử thay đổi bảng lương (BR-PL-RECALC-10 · BR-PL-HIST-01)

Ma trận ghi đè — quyết định cốt lõi của nghiệp vụ này:

Nhóm khoản Nguồn Khi Tính lại
~~Ngày công chính thức · thử việc · thực tập~~ Chấm công (BR-PS-01) KHÔNG vào phạm vi tính lại ✦ — bảng lương đọc chấm công theo thời gian thực, không bao giờ lệch nguồn; đóng băng khi chốt kỳ (BR-PL-RECALC-39). (Bỏ 12/08/2026.)
Thưởng QĐ khen thưởng đã đến ngày hiệu lực có Tháng áp dụng = kỳ này Luôn ghi đè — không sửa trong phiếu, sửa ở quyết định
~~Phạt chấm công~~ Chấm công — ✦ hai khoản: trừ đi muộn và trừ nghỉ không giải trình hoặc đơn bị từ chối (BR-PL-KY-12) KHÔNG vào phạm vi tính lại ✦ — cùng lý do với ngày công: đọc thời gian thực từ Chấm công (BR-PL-RECALC-39). (Bỏ 12/08/2026.)
Phạt kỷ luật QĐ kỷ luật hình thức Phạt tiền có Tháng áp dụng = kỳ này Luôn ghi đè — hoàn toàn tự động, không nhập tay; là khoản riêng, không gộp với phạt chấm công (BR-PL-RECALC-29)
P1 · P2 · P3 · Phụ cấp (Ăn · Xăng-ĐT · Khác) Hợp đồng → Thành phần lương của hợp đồng đang hiệu lực trong kỳ Luôn ghi đè ✦ — lấy lại theo hợp đồng mới nhất có hiệu lực trong tháng của kỳ, P1/P2/P3 theo mốc giá trị áp dụng cho kỳ đang tính — không lấy giá trị hiện tại; kỳ trước mốc và kỳ đã chốt giữ nguyên (BR-HD-CT-SL-08 · 09); hợp đồng ký muộn / sửa lại sau khi kỳ đã mở thì phiếu nhận số mới ngay lần tính lại kế tiếp (BR-PL-RECALC-41). Muốn đổi thì sửa ở hợp đồng, không sửa ở phiếu. (Mở lại 09/09/2026 — đã bỏ khỏi phạm vi ngày 10/08/2026.)
Danh sách nhân viên của kỳ Hồ sơ nhân sự + Hợp đồng hiệu lực trong tháng Rà lại mỗi lần tính lại ✦ — NV thêm muộn mà đủ điều kiện → sinh phiếu mới ở nhap; NV không còn đủ điều kiện → đánh dấu, hệ thống không tự xoá (BR-PL-RECALC-40 · BR-PL-RECALC-08). (Bổ sung 09/09/2026.)
~~Định mức công~~ Lịch tháng / HR thiết lập KHÔNG vào phạm vi tính lại ✾ — không phải khoản phát sinh muộn (BR-PL-RECALC-38). (Bỏ 10/08/2026.)
Lương CT · TV · TT · Thu nhập tổng · Cộng · Thực nhận Hệ thống tự tính Luôn tính lại
Giảm trừ gia cảnh · Thuế TNCN · BHXH · Tạm ứng kỳ này Nhân sự nhập tay Giữ nguyên — tính lại không xoá

Thuế TNCN & Giảm trừ gia cảnh — quyết toán cuối năm, Tính lại không nhắc (chốt 06/08/2026)

Thuế TNCN và Giảm trừ gia cảnh là số quyết toán cuối năm, không chốt theo từng tháng. Vì vậy nghiệp vụ Tính lại hằng tháng KHÔNG cảnh báo, KHÔNG gắn cờ cần rà thuế, KHÔNG tô đỏ ô Thuế TNCN của từng nhân viên, và KHÔNG chặn Duyệt vì lý do thuế (BR-PL-RECALC-07 · 25). Hai khoản vẫn được giữ nguyên khi tính lại (BR-PL-RECALC-04) và vẫn do nhân sự nhập tay (BR-PS-13).

Business Rule (BR-PL-RECALC)

Mã Quy tắc
BR-PL-RECALC-38 ✦ Phạm vi tính lại đóng ở 3 nhóm / 3 nguồn — ① Thưởng (QĐ khen thưởng); ② Phạt kỷ luật (QĐ kỷ luật); ③ Hồ sơ & hợp đồng — danh sách nhân viên của kỳ và thành phần lương P1 · P2 · P3 · phụ cấp (BR-PL-RECALC-40 · 41). Cả ba đều chụp số lúc tạo kỳ nên mới có chuyện lệch nguồn khi bản ghi được thêm muộn. KHÔNG thuộc phạm vi — vì đọc theo thời gian thực, sửa ở nguồn là bảng lương đổi ngay, không có độ trễ để mà "lấy lại": ① Ngày công chính thức · thử việc · thực tập và Phạt theo chấm công (nguồn Chấm công — BR-PL-RECALC-39); ② Định mức công. Hệ quả bắt buộc: hộp xác nhận Tính lại và sổ Lịch sử thay đổi không bao giờ xuất hiện dòng khoản thuộc hai nhóm này. (Chốt 10/08/2026 với 6 khoản / 3 nguồn; thu về 2 khoản / 2 nguồn ngày 12/08/2026 khi chốt chấm công đổ realtime; mở lại nhóm Hồ sơ & hợp đồng ngày 09/09/2026 — realtime không thay được việc thêm nhân viên vào kỳ đã mở. Sổ bỏ bộ lọc Khoản thay đổi ngày 11/08/2026 — chỉ còn ô tìm theo mã NV / họ tên, xem FR-PL-HIST-03.)
BR-PL-RECALC-39 ✦ Chấm công đổ về bảng lương theo THỜI GIAN THỰC. Ngày công CT/TV/TT và Phạt theo chấm công của một phiếu luôn bằng số mới nhất bên Chấm công — đơn giải trình / đơn công tác được duyệt muộn (FR-VT-12 · FR-VT-20) thì bảng lương cập nhật ngay, và các khoản dẫn xuất (Lương CT · TV · TT · Thu nhập tổng · Cộng · Thực nhận) tính lại tự động theo BR-PS-03 → 15. Người dùng không phải bấm gì — không nút, không cảnh báo lệch nguồn, không hạ trạng thái phiếu vì lý do chấm công. Dòng chảy chỉ dừng khi kỳ lương được chốt (FR-PL-CHOT-01): snapshot lúc chốt (BR-PL-CHOT-05) đóng băng vĩnh viễn ngày công của kỳ; chấm công sửa sau đó không làm đổi kỳ đã chốt. (Chốt 12/08/2026.)
BR-PL-RECALC-40 ✦ Kỳ đã mở, nhân sự thêm hồ sơ + hợp đồng hiệu lực trong tháng → Tính lại đưa nhân viên đó vào kỳ. Kỳ lương chụp danh sách nhân viên lúc tạo (FR-PL-LIST-04), nên người được thêm sau đó không có phiếu — và vì chưa có phiếu nên cơ chế đọc thời gian thực không giúp được gì. Bấm Tính lại thì hệ thống rà lại danh sách nhân viên của kỳ theo đúng BR-PL-LIST-03/04/05 cộng thêm điều kiện hợp đồng: có hợp đồng lao động hiệu lực trong tháng của kỳ → sinh phiếu mới ở trạng thái nhap, lấy thành phần lương theo hợp đồng (BR-PL-RECALC-41), ngày công tính từ ngày hiệu lực hợp đồng (đọc realtime từ Chấm công — BR-PL-RECALC-39), Thưởng · Phạt kỷ luật theo Tháng áp dụng = kỳ này. Việc rà danh sách chạy ở cả 3 phạm vi; phiếu mới sinh luôn nằm trong phạm vi áp dụng kể cả khi người dùng bấm Tính lại theo dòng hay theo lựa chọn. Hộp xác nhận phải có khối riêng “Thêm mới vào kỳ” liệt kê mã NV · họ tên · ngày hiệu lực hợp đồng · số ngày công dự kiến · Thực nhận dự kiến — đứng trước bảng đối chiếu trước/sau (BR-PL-RECALC-31 · 32); không có nhân viên nào thêm mới thì không hiện khối này. Nhân viên không còn đủ điều kiện vẫn chỉ được đánh dấu, hệ thống không tự xoá phiếu (BR-PL-RECALC-08). Kỳ đã chốt thì không áp dụng — cấm thêm/bớt nhân viên khỏi kỳ (BR-PL-CHOT-06); nhân viên bị bỏ sót của kỳ đã chốt xử lý ở kỳ kế tiếp, tài liệu chưa đặc tả cách truy lĩnh ⚠. (Chốt 09/09/2026.)
BR-PL-RECALC-41 ✦ Tính lại lấy lại thông tin hợp đồng và thành phần lương. Mỗi phiếu trong phạm vi được đọc lại hợp đồng lao động đang hiệu lực trong tháng của kỳ (FR-HD-08) rồi ghi đè P1 · P2 · P3 theo mốc giá trị áp dụng cho đúng kỳ đang tính (BR-HD-CT-SL-08) — không lấy giá trị hiện tại của hợp đồng ✦ — và phụ cấp (Ăn · Xăng-ĐT · Khác) theo hợp đồng đó, sau đó tính lại toàn bộ khoản dẫn xuất (BR-PS-03 → 15). Ví dụ: P2 sửa ngày 10/09/2026 — áp dụng từ kỳ 08/2026 (chưa chốt) thì kỳ 08 lệch nguồn và nhận P2 mới ở lần Tính lại kế tiếp; áp dụng từ kỳ 09/2026 thì Tính lại kỳ 08 vẫn ra P2 cũ. Kỳ đã chốt không bao giờ đổi (BR-PL-RECALC-42). Áp dụng cho cả hợp đồng ký muộn, hợp đồng sửa lại, phụ lục đổi thành phần lương phát sinh sau khi kỳ đã mở. Trong tháng có nhiều hợp đồng nối tiếp (hết hạn giữa tháng rồi ký mới) → lấy hợp đồng có hiệu lực tại thời điểm cuối kỳ; phần chênh do đổi mức giữa tháng chưa đặc tả cách chia theo ngày ⚠ — điểm cần BA chốt. Hệ quả: ô P1/P2/P3 · phụ cấp sửa tay trên phiếu sẽ bị ghi đè ở lần tính lại kế tiếp, giống hệt Thưởng · Phạt kỷ luật — muốn đổi lâu dài thì sửa ở hợp đồng, không sửa ở phiếu (FR-PL-DETAIL). Phiếu đổi số vì lý do này vẫn hạ về nhap như mọi thay đổi khác (BR-PL-RECALC-18) và ghi vào sổ lịch sử (BR-PL-RECALC-10). (Chốt 09/09/2026 — đảo lại quyết định 10/08/2026 vốn để nhóm hợp đồng ngoài phạm vi. 11/09/2026: P1/P2/P3 đọc theo mốc kỳ, không lấy giá trị hiện tại.)
BR-PL-RECALC-42 ✦ Tính lại chỉ đổi thành phần lương của kỳ CHƯA CHỐT nằm từ mốc áp dụng trở đi. Sửa P1/P2/P3 ở hợp đồng làm lệch nguồn mọi kỳ chưa chốt từ Áp dụng từ kỳ trở đi — kể cả tháng đã qua (BR-HD-CT-SL-07 → 09) — và các kỳ này nhận số mới ở lần Tính lại kế tiếp theo đúng luồng thường (hạ về nhap, ghi sổ lịch sử — BR-PL-RECALC-18 · 10). Kỳ trước mốc và mọi kỳ đã chốt không bị tính là lệch: nút Tính lại không hiện vì lý do này (BR-PL-RECALC-33) và hộp xác nhận không có dòng P1/P2/P3 cho kỳ đó. Tăng lương có hiệu lực từ một kỳ ĐÃ CHỐT (vd quyết định tăng từ kỳ 07 — đã chốt — nhưng kỳ 09 mới nhập) → không mở lại kỳ cũ, phần chênh trả bằng khoản truy lĩnh ở kỳ chưa chốt; cách ghi khoản truy lĩnh thuộc Sổ điều chỉnh — giai đoạn sau (§11.3), đợt này chưa đặc tả ⚠. (Chốt 11/09/2026.)
BR-PL-RECALC-01 ✱✾ Điều kiện loại trừ DUY NHẤT của Tính lại là: kỳ lương ĐÃ CHỐT (FR-PL-CHOT-01) → mọi phiếu trong kỳ đều không tính lại được, và đợt này không có đường mở lại. Kỳ CHƯA CHỐT thì tính lại được TẤT CẢ phiếu, ở cả 5 trạng thái PAY_FLOW — Nháp · Đã duyệt · Chờ ký và xác nhận · Đã ký và xác nhận · Không ký và xác nhận — không còn điều kiện loại trừ nào khác. Cờ đã chuyển công nợ không còn là điều kiện loại trừ: công nợ chỉ sinh khi chốt kỳ (BR-PL-DETAIL-10 · BR-PL-CHOT-09) nên trong kỳ chưa chốt không tồn tại phiếu đã chuyển công nợ. Phiếu đổi số sau khi tính lại về nhap để nhân sự sửa nốt thông tin cần thiết rồi Duyệt & gửi lại (BR-PL-RECALC-18 · 19). (Sửa 06/08/2026 — trước đó chỉ cho phiếu nhap. Bổ sung điều kiện kỳ đã chốt 10/08/2026. Sửa 11/08/2026 — bỏ điều kiện loại trừ theo Công nợ, chỉ còn một cổng chặn duy nhất là kỳ đã chốt.)
BR-PL-RECALC-02 ✱ Không yêu cầu Trả về Nháp trước khi tính lại. Việc hạ trạng thái do chính nghiệp vụ Tính lại xử lý (BR-PL-RECALC-18); Trả về (FR-PL-DETAIL-11) vẫn giữ nguyên như một thao tác độc lập khi người làm lương chỉ muốn sửa tay mà không cần lấy lại nguồn.
BR-PL-RECALC-03 ✱✦ Tính lại lấy lại dữ liệu từ 3 nguồn, đều là việc thêm MUỘN — phát sinh sau thời điểm kỳ lương chụp số: ① QĐ khen thưởng thêm muộn (FR-KT-03) → khoản Thưởng; ② QĐ kỷ luật phạt tiền thêm muộn (FR-KL-03) → khoản Phạt kỷ luật; ③ hồ sơ nhân sự & hợp đồng thêm hoặc sửa muộn (FR-HD-08) → danh sách nhân viên của kỳ và thành phần lương P1/P2/P3 · phụ cấp (BR-PL-RECALC-40 · 41, bổ sung 09/09/2026). Cả hai lấy bản ghi đã đến ngày hiệu lực (BR-QKL-01), lọc theo Tháng áp dụng (kỳ lương) = kỳ đang tính; quyết định nhân sự không có trục duyệt (§6) nên mốc áp dụng là ngày hiệu lực, không phải "ngày duyệt". Ngoài 2 nguồn này không còn nguồn phát sinh nào (BR-PL-RECALC-38) — Chấm công đã ra khỏi phạm vi vì đổ về thời gian thực (BR-PL-RECALC-39). (Sửa 10/08/2026 từ 5 nguồn xuống 3; sửa 12/08/2026 xuống 2 nguồn, bỏ Chấm công.)
BR-PL-RECALC-04 ✱ Các khoản nhân sự nhập tay — Giảm trừ gia cảnh · Thuế TNCN · BHXH · Tạm ứng kỳ này — được giữ nguyên, tính lại không xoá hoặc đặt về 0. (Bỏ Định mức công khỏi nhóm này từ 06/08/2026 — nay là dữ liệu nguồn, xem BR-PS-20.)
~~BR-PL-RECALC-05~~ ✾ ~~Ô thuộc nhóm Hợp đồng (P1/P2/P3 · phụ cấp) đã sửa tay thì không bị ghi đè; chỉ ghi đè khi tích Khôi phục theo hợp đồng.~~ BỎ 10/08/2026 — nhóm hợp đồng đã ra khỏi phạm vi tính lại (BR-PL-RECALC-38) nên không còn nguy cơ bị ghi đè. Kéo theo: bỏ dấu chấm tím "đã sửa tay" trên bảng lương và bỏ tuỳ chọn Khôi phục P1/P2/P3 & phụ cấp theo hợp đồng trong hộp xác nhận.
BR-PL-RECALC-06 Sau khi kéo lại nguồn, hệ thống tính lại toàn bộ khoản dẫn xuất theo BR-PS-03 → BR-PS-15 — không giữ lại giá trị dẫn xuất cũ.
BR-PL-RECALC-07 ✱ BỎ toàn bộ cảnh báo "rà lại Thuế TNCN" khi Tính lại. Thuế TNCN và Giảm trừ gia cảnh là số quyết toán cuối năm, không chốt theo từng tháng → tính lại bảng lương hằng tháng không nhắc, không gắn cờ, không tô cảnh báo hai ô này cho từng nhân viên; không có dòng cảnh báo ở hộp xác nhận, khối Hệ quả, hay dải kết quả sau khi áp dụng. Hai khoản vẫn giữ nguyên giá trị khi tính lại (BR-PL-RECALC-04) và vẫn do nhân sự nhập tay (BR-PS-13). (Sửa 06/08/2026 — trước đó bắt cảnh báo & tô đỏ ô Thuế TNCN.)
BR-PL-RECALC-08 ✦ Tính lại rà lại danh sách nhân viên của kỳ theo BR-PL-LIST-03/04/05 kèm điều kiện hợp đồng hiệu lực trong tháng của kỳ: NV mới đủ điều kiện — kể cả hồ sơ + hợp đồng vừa được nhân sự thêm sau khi kỳ đã mở — → sinh thêm phiếu ở nhap với thành phần lương lấy theo hợp đồng (BR-PL-RECALC-40 · 41); phiếu của NV không còn đủ điều kiện mà đang nhap → đánh dấu để người làm lương xử lý, hệ thống không tự xoá. (Bổ sung điều kiện hợp đồng & phiếu sinh mới 09/09/2026.)
BR-PL-RECALC-09 ✦ Ngày công chỉ lấy từ dữ liệu chấm công đã chốt (BR-PS-01). Ngày chưa chốt công (thiếu mốc chấm — xem Chấm công §Quên chấm công) → chưa cộng vào ngày công, phiếu hiện cảnh báo, không lấy về 0; ngày đó chốt công lúc nào thì bảng lương nhận số lúc ấy (BR-PL-RECALC-39). Quy tắc này thuộc cơ chế đọc thời gian thực, không còn liên quan tới nút Tính lại. (Sửa 12/08/2026.)
BR-PL-RECALC-10 ✱ Mỗi lần tính lại phải ghi nhật ký tự động (không cần người dùng nhập gì): người thực hiện · thời điểm · phạm vi (dòng / lựa chọn / toàn kỳ) · số phiếu thay đổi · từng khoản đổi kèm giá trị trước–sau của từng phiếu · tổng chênh lệch Thực nhận. Đây là bản ghi thay cho ô Lý do tính lại đã bỏ — và là dữ liệu lịch sử duy nhất của bảng lương (FR-PL-HIST-01) ✾. Trừ khoản nguồn Chấm công — không ghi vào sổ (FR-PL-HIST-08 · BR-PL-HIST-09, chốt 12/08/2026); lần tính lại chỉ đổi các khoản ấy thì không sinh bản ghi.
BR-PL-RECALC-11 ✱ Đối chiếu trước/sau chỉ hiện MỘT LẦN — trong hộp xác nhận, TRƯỚC khi áp dụng (BR-PL-RECALC-31 · 32). Chạy xong, hệ thống không hiển thị lại đối chiếu: ~~dải kết quả~~ · ~~nút Xem lại đối chiếu~~ · ~~tô đánh dấu ô vừa bị ghi đè~~ đều BỎ từ 06/08/2026. Sau khi Áp dụng chỉ còn toast báo số phiếu đã tính lại (kèm số phiếu cần Duyệt & gửi lại) và ghi chú ↓ tính lại dưới badge trạng thái của phiếu bị hạ (BR-PL-RECALC-33). Ô vừa ghi đè giữ tooltip "Tính lại: trước → sau" khi rê chuột. Vết đối chiếu đầy đủ nằm ở nhật ký (BR-PL-RECALC-10) — toast có kèm liên kết Xem lịch sử thay đổi mở thẳng bản ghi vừa tạo ở FR-PL-HIST-01 (bổ sung 10/08/2026).
BR-PL-RECALC-12 Quyền tính lại = quyền lập bảng lương: Nhân sự · Admin (§2). Quản lý và Nhân viên không có quyền này.
BR-PL-RECALC-13 ✱✾ Tính lại không tác động tới Công nợ — vì Tính lại chỉ chạy trong kỳ chưa chốt, mà công nợ thì chỉ sinh khi chốt kỳ (BR-PL-DETAIL-10 · BR-PL-CHOT-09). Hai nghiệp vụ không bao giờ giẫm nhau. (Sửa 11/08/2026 — trước đó lý do là "phiếu đã chuyển công nợ bị loại khỏi phạm vi".)
BR-PL-RECALC-14 Không giới hạn số lần tính lại. Mỗi lần chạy ghi một dòng nhật ký riêng.
BR-PL-RECALC-15 Sau khi tính lại, dữ liệu mới phải hiển thị đúng ở mọi nơi tham chiếu bảng lương: tab Bảng lương trong hồ sơ nhân sự (BR-NS-SAL-008), phiếu lương cá nhân, và cột Tổng thực lĩnh của danh sách kỳ lương.

Bổ sung 06/08/2026 — mở phạm vi sang mọi trạng thái (sửa 11/08/2026 — cổng chặn chuyển từ Công nợ sang Chốt kỳ)

Nhóm A — Điều kiện & phạm vi

Mã Quy tắc
~~BR-PL-RECALC-16~~ ✾ ~~Phiếu đã chuyển sang Công nợ → không tính lại được; hộp xác nhận liệt kê mã NV + họ tên các phiếu bị loại kèm hướng xử lý Thu hồi xác nhận.~~ BỎ 11/08/2026 — công nợ chỉ sinh khi chốt kỳ (BR-PL-DETAIL-10), mà kỳ đã chốt thì đã bị chặn bởi BR-PL-RECALC-01. Kéo theo: hộp xác nhận bỏ hẳn khối "phiếu bị loại vì đã chuyển công nợ" — trong kỳ chưa chốt không phiếu nào bị loại.
~~BR-PL-RECALC-17~~ ✾ ~~"Đã chuyển công nợ" là cờ riêng của phiếu, không suy ra từ PAY_FLOW; phiếu Đã ký và xác nhận chưa đẩy sang sổ công nợ thì vẫn tính lại được.~~ BỎ 11/08/2026 — cờ này không còn ảnh hưởng tới Tính lại. Nó vẫn tồn tại như thuộc tính của kỳ đã chốt (BR-PL-CHOT-09), nhưng điều kiện tính lại chỉ nhìn kỳ đã chốt hay chưa.

Nhóm B — Trạng thái sau khi tính lại

Mã Quy tắc
BR-PL-RECALC-18 Phiếu có thay đổi số liệu → hạ về Nháp (nhap), bất kể trạng thái trước đó. Phiếu tính ra kết quả y hệt → giữ nguyên trạng thái, không bị hạ.
BR-PL-RECALC-19 Phiếu bị hạ về Nháp thì dấu duyệt và xác nhận của nhân viên trước đó mất hiệu lực; muốn phát hành lại phải đi đủ vòng Duyệt → Gửi phiếu → dây chuyền ký (kết thúc bằng chữ ký Tổng giám đốc — §3.2) (FR-PL-DETAIL-09).
BR-PL-RECALC-20 Sau khi trạng thái phiếu đổi, badge kỳ (§3.1) và bộ đếm "N/M đã ký và xác nhận" (FR-PL-DETAIL-01) phải được tính lại ngay.

Nhóm C — Thông báo & lịch sử

Mã Quy tắc
BR-PL-RECALC-21 Phiếu đang Chờ ký và xác nhận bị tính lại → thu hồi khỏi Trang cá nhân; nhân viên không còn nút Xác nhận / Không xác nhận cho lần gửi đó.
BR-PL-RECALC-22 ✱ Mọi nhân viên có phiếu bị đổi trạng thái phải được thông báo (FR-TB-01), nêu rõ: kỳ lương · khoản đã thay đổi (trước → sau) · phiếu đang được lập lại · sẽ gửi lại để xác nhận. (Sửa 06/08/2026 — thay "lý do tính lại" bằng khoản đã thay đổi, vì hệ thống không còn hỏi lý do.)

Nhóm D — Chính xác số liệu

Mã Quy tắc
BR-PL-RECALC-24 Thưởng · Phạt khi tính lại được ĐẶT LẠI bằng tổng nguồn hiện có của kỳ, KHÔNG cộng dồn vào số cũ — chống nhân đôi khi tính lại nhiều lần (đối chiếu BR-KT-PR-05 mỗi quyết định chỉ đồng bộ một lần).
BR-PL-RECALC-25 ✱ ~~Phiếu có Thu nhập tổng thay đổi bị gắn cờ cần rà Thuế TNCN, không cho Duyệt khi cờ chưa xử lý.~~ BỎ quy tắc này 06/08/2026 — không còn cờ cần rà Thuế TNCN, Duyệt không bị chặn vì lý do thuế. Thuế TNCN & Giảm trừ gia cảnh quyết toán cuối năm, không chốt theo tháng (BR-PL-RECALC-07).
BR-PL-RECALC-26 ✾ ~~Kỳ chấm công chưa chốt → hộp xác nhận phải cảnh báo trước khi chạy.~~ BỎ 11/08/2026 — mốc chốt kỳ chấm công nằm ngoài phạm vi module Lương: bảng lương không hiển thị trạng thái kỳ công và không cảnh báo theo mốc đó (FR-PL-CHOT).

Nhóm F — Cột Phạt

Mã Quy tắc
BR-PL-RECALC-29 ✦ Phạt là HAI khoản riêng, mỗi khoản một nguồn — Phạt chấm công ← Chấm công — ✦ hai khoản: trừ đi muộn và trừ nghỉ không giải trình hoặc đơn bị từ chối (BR-PL-KY-12); Phạt kỷ luật ← QĐ kỷ luật hình thức Phạt tiền có Tháng áp dụng = kỳ này. Cả hai hoàn toàn tự động, KHÔNG nhập tay ở bất kỳ đâu (không sửa inline, không sửa hàng loạt). Muốn đổi số phạt thì sửa ở đúng nguồn, nhưng cách cập nhật khác nhau ✦: Phạt chấm công → bổ sung/duyệt đơn giải trình, bảng lương nhận số ngay theo thời gian thực, không phải Tính lại (BR-PL-RECALC-39); Phạt kỷ luật → sửa hoặc huỷ quyết định kỷ luật rồi Tính lại (BR-PL-RECALC-38). (Tách hai khoản 10/08/2026; tách cách cập nhật 12/08/2026.)
BR-PL-RECALC-30 ✦ Khi một trong hai khoản phạt thay đổi, bóc chi tiết khoản phạt ở phiếu lương cá nhân phải cập nhật đồng bộ theo đúng nhóm nguồn: nhóm Phạt theo chấm công = ✦ Trừ đi muộn + Trừ nghỉ không giải trình hoặc đơn bị từ chối (BR-PL-KY-12); nhóm Phạt theo kỷ luật = Trừ vi phạm nội quy · Trừ chậm nộp báo cáo · Trừ không hoàn thành công việc. Tổng mỗi nhóm luôn bằng cột tương ứng của bảng lương (BR-PS-22).
BR-PL-RECALC-37 ✦ Bảng đối chiếu trước/sau chỉ có 2 khoản — Thưởng và Phạt theo kỷ luật (BR-PL-RECALC-38); Phạt theo chấm công không còn xuất hiện ở đây vì đã ra khỏi phạm vi tính lại. Mỗi dòng ghi kèm đầu mục nguồn (Quyết định khen thưởng · Quyết định kỷ luật) để người làm lương biết muốn sửa số này thì quay về phân hệ nào. Khoản nào không lệch nguồn thì không xuất hiện. (Chốt 10/08/2026 với 2 dòng phạt tách riêng; sửa 12/08/2026 — bỏ dòng Phạt chấm công & các đầu mục nguồn không còn thuộc phạm vi.)

Nhóm G — Phạm vi & cách hiển thị hộp xác nhận ✱ (bổ sung 06/08/2026)

Mã Quy tắc
BR-PL-RECALC-31 Tính lại MỘT nhân viên — bấm nút Tính lại trên dòng của nhân viên thì hệ thống chỉ tính lại đúng phiếu của nhân viên đó, không đụng phiếu nào khác. Hộp xác nhận hiển thị thẻ chi tiết của riêng nhân viên đó: mã NV · họ tên · chức vụ · phòng ban · bảng khoản thay đổi 3 cột chia đều bề ngang (Khoản thay đổi · Giá trị trước · Giá trị sau — không có cột Chênh) · dòng tổng Thực nhận trước → sau · nguồn phát sinh của thay đổi. Không hiện badge trạng thái phiếu, không có dòng Trạng thái sau khi áp dụng (BR-PL-RECALC-33). Nút xác nhận ghi "Áp dụng cho phiếu này".
BR-PL-RECALC-33 ✱ Nút Tính lại chỉ hiện khi phiếu THẬT SỰ có gì để tính lại. Điều kiện hiện nút trên dòng nhân viên = cả hai đều đúng: ① kỳ lương chưa chốt (BR-PL-RECALC-01) ✾; ② ít nhất một khoản thuộc phạm vi (Thưởng · Phạt kỷ luật · thành phần lương theo hợp đồng — BR-PL-RECALC-38) đang lệch so với nguồn trong kỳ đang mở. Nguồn khớp hết → ẩn nút, không mời người dùng bấm một thao tác chắc chắn không đổi số nào. Nút Tính lại (N phiếu) ở đầu màn đếm đúng số phiếu thoả 2 điều kiện trên, cộng thêm số nhân viên đủ điều kiện mà chưa có phiếu trong kỳ (BR-PL-RECALC-40) — nhờ vậy kỳ chưa có phiếu nào lệch nhưng vừa thêm nhân sự mới thì nút vẫn hiện, nếu không sẽ không còn lối nào đưa người mới vào kỳ. N = 0 → ẩn nút. (Chốt 06/08/2026; bổ sung vế nhân viên thêm muộn 09/09/2026.)
BR-PL-RECALC-32 Tính lại NHIỀU nhân viên — phạm vi theo lựa chọn hoặc toàn kỳ thì hộp xác nhận phải liệt kê chi tiết TẤT CẢ nhân viên trong phạm vi, gồm cả phiếu có thay đổi lẫn phiếu không thay đổi: mã NV · họ tên · khoản thay đổi (trước → sau) hoặc ghi rõ "Không có khoản nào thay đổi" · Thực nhận trước → sau + chênh lệch. Không có cột Trạng thái sau (BR-PL-RECALC-33). Tiêu đề bảng nêu số phiếu thay đổi / tổng số phiếu trong phạm vi. Không được rút gọn còn mỗi phiếu thay đổi — người làm lương phải nhìn thấy đủ danh sách trước khi Áp dụng. Không còn khối "phiếu bị loại" — kỳ chưa chốt thì mọi phiếu trong phạm vi đều tính lại được (BR-PL-RECALC-01) ✾.

Nhóm H — Không hiển thị trạng thái phiếu ✱ (bổ sung 06/08/2026)

Mã Quy tắc
BR-PL-RECALC-33 ✱ Luồng Tính lại KHÔNG hiển thị trạng thái phiếu ở bất kỳ đâu — bỏ: badge trạng thái trên thẻ một nhân viên · dòng Trạng thái sau khi áp dụng · cột Trạng thái sau của bảng nhiều nhân viên · chip đếm phiếu theo trạng thái · khối Hệ quả khi áp dụng liệt kê theo trạng thái · nhắc trạng thái ở tooltip nút Tính lại, dải kết quả và toast · tên trạng thái cũ trong ghi chú dưới badge ở cột Trạng thái — ghi chú chỉ còn ↓ tính lại, không ghi hạ từ "Đã duyệt" / "Chờ ký và xác nhận"… (bỏ 06/08/2026). Hộp xác nhận chỉ trả lời "số có đúng không"; trạng thái phiếu đã có sẵn ở cột Trạng thái của bảng lương (FR-PL-DETAIL-02), không lặp lại. (Chốt 06/08/2026.)
BR-PL-RECALC-34 ✱ Thay khối Hệ quả bằng khối việc phải làm — nêu đúng phần việc người làm lương phải làm tiếp, không gọi tên trạng thái: "Sau khi áp dụng, bạn cần Duyệt & gửi lại N phiếu. Trong đó M phiếu phải để nhân viên xác nhận lần nữa." Khối chỉ hiện khi N > 0. Giữ lại vì mất xác nhận của nhân viên và toàn bộ chữ ký các bước sau là hệ quả không đảo ngược (BR-PL-RECALC-19) — người làm lương phải biết trước khi bấm Áp dụng. Không hứa hẹn "lịch sử xác nhận cũ vẫn được lưu": hệ thống không lưu lịch sử xác nhận lương ✾. (Sửa 11/08/2026.)
BR-PL-RECALC-36 ✱ Hộp xác nhận KHÔNG mô tả nguồn dữ liệu. Bỏ khối giải thích đầu hộp ("Hệ thống cập nhật lại các thành phần đã thay đổi…" + danh sách Ngày công ← Chấm công · Định mức công ← lịch tháng/HR · P1·P2·P3·Phụ cấp ← Hợp đồng · Thưởng ← QĐ khen thưởng · Phạt ← Chấm công + QĐ kỷ luật + dòng các khoản nhập tay được giữ nguyên). Người làm lương đã nắm nguồn của từng cột; hộp xác nhận chỉ cần bảng đối chiếu trước/sau (BR-PL-RECALC-31 · 32). Ma trận ghi đè vẫn giữ trong tài liệu (xem Ma trận ghi đè) như quy tắc nghiệp vụ — chỉ không hiển thị trên giao diện. (Chốt 06/08/2026.)
BR-PL-RECALC-35 Hành vi không đổi: phiếu đổi số vẫn hạ về Nháp (BR-PL-RECALC-18), vẫn huỷ dấu duyệt & xác nhận (BR-PL-RECALC-19), vẫn thu hồi & thông báo nhân viên (BR-PL-RECALC-21 · 22), nhật ký vẫn ghi đủ (BR-PL-RECALC-10). Nhóm H chỉ đổi cách hiển thị, không đổi nghiệp vụ.

Đã gỡ 11/08/2026 — cổng chặn Tính lại chuyển từ Công nợ sang Chốt kỳ

Xung đột cũ: BR-PL-DETAIL-10 cho tự tạo công nợ ngay khi NV xác nhận → mọi phiếu da-xn-luong đều đã ở công nợ → BR-PL-RECALC-16 loại sạch, việc đưa Đã ký và xác nhận vào phạm vi tính lại thành vô nghĩa.

Cách gỡ đã chốt: công nợ chỉ sinh khi CHỐT KỲ LƯƠNG (BR-PL-DETAIL-10 · BR-PL-CHOT-09) — trong kỳ chưa chốt không tồn tại phiếu đã chuyển công nợ. Nhờ vậy Tính lại còn đúng một điều kiện loại trừ: kỳ đã chốt (BR-PL-RECALC-01). BR-PL-RECALC-16 · 17 bị BỎ; kỳ còn mở thì phiếu ở bậc nào cũng tính lại được, đổi số thì về nhap cho nhân sự sửa nốt rồi Duyệt & gửi lại.

Đã chốt

  • 05/08/2026 — Ô đã sửa tay không bị ghi đè (BR-PL-RECALC-05); không tự xoá phiếu khi NV không còn đủ điều kiện (BR-PL-RECALC-08); nút đặt ở cả 3 chỗ.
  • 06/08/2026 — Phạm vi = cả 5 trạng thái (BR-PL-RECALC-01).
  • 11/08/2026 — Cổng chặn duy nhất = KỲ ĐÃ CHỐT. Bỏ điều kiện loại trừ theo đã chuyển công nợ (BR-PL-RECALC-16 · 17 bỏ): công nợ chỉ sinh khi chốt kỳ (BR-PL-DETAIL-10) nên kỳ còn mở thì mọi phiếu đều tính lại được, đổi số thì về nhap cho nhân sự sửa nốt (BR-PL-RECALC-01 · 18). Kéo theo: hộp xác nhận bỏ khối phiếu bị loại.
  • 06/08/2026 — Đối chiếu trước/sau hiển thị NGAY trong hộp xác nhận (hệ thống tính thử, chưa ghi gì) — người làm lương duyệt bằng số thật thay vì chạy xong mới biết đổi gì.
  • 06/08/2026 — Chỉ hạ về Nháp phiếu có đổi số; phiếu không đổi giữ nguyên trạng thái (BR-PL-RECALC-18).
  • 06/08/2026 — Cột Phạt không nhập tay, tự động từ Chấm công + QĐ kỷ luật (BR-PL-RECALC-29).
  • 06/08/2026 — Bỏ ô Lý do tính lại & Ghi chú thêm trong hộp xác nhận; nhật ký ghi tự động khoản đổi & số trước–sau (BR-PL-RECALC-10).
  • 06/08/2026 — Bỏ hẳn dải kết quả sau khi áp dụng (dòng "Đã tính lại N phiếu…" · nút Xem lại đối chiếu · khối Cần Duyệt & gửi lại · dòng Nhật ký) — sau khi Áp dụng chỉ còn toast; đối chiếu đã xem đủ ở hộp xác nhận (BR-PL-RECALC-11).
  • 06/08/2026 — Ghi chú dưới badge trạng thái bỏ vế hạ từ "…" — chỉ còn ↓ tính lại (BR-PL-RECALC-33).
  • 06/08/2026 — Bỏ tô nền ô vừa bị ghi đè trên bảng lương sau khi áp dụng; chênh lệch xem ở Xem lại đối chiếu, ô chỉ còn tooltip trước → sau (BR-PL-RECALC-11).
  • 06/08/2026 — Bỏ khối mô tả nguồn dữ liệu ở đầu hộp xác nhận (danh sách Ngày công ← Chấm công · Định mức công · P1/P2/P3 ← Hợp đồng · Thưởng · Phạt và dòng khoản nhập tay giữ nguyên); hộp chỉ còn bảng đối chiếu trước/sau (BR-PL-RECALC-36).
  • 06/08/2026 — Hộp xác nhận đổi theo phạm vi: một NV → thẻ chi tiết riêng của NV đó; nhiều NV → liệt kê đủ mọi nhân viên trong phạm vi, kể cả phiếu không đổi số (BR-PL-RECALC-31 · 32).
  • 06/08/2026 — Nút Tính lại chỉ hiện khi phiếu đang lệch nguồn (không kể ô đã sửa tay) và kỳ chưa chốt; nguồn khớp hết thì ẩn nút (BR-PL-RECALC-33).
  • 06/08/2026 — Bỏ mọi cảnh báo Thuế TNCN khi Tính lại (hộp xác nhận · khối Hệ quả · dải kết quả · tô đỏ ô) và bỏ chặn Duyệt vì thuế: Thuế TNCN & Giảm trừ gia cảnh quyết toán cuối năm, không chốt theo tháng (BR-PL-RECALC-07 · 25).
  • 06/08/2026 — Luồng Tính lại không hiển thị trạng thái phiếu (badge · dòng Trạng thái sau khi áp dụng · cột Trạng thái sau · chip đếm theo trạng thái · khối Hệ quả); thay bằng khối việc phải làm "cần Duyệt & gửi lại N phiếu" (BR-PL-RECALC-33 → 35). Nghiệp vụ giữ nguyên, chỉ đổi cách hiển thị.
  • 06/08/2026 — Cột Định mức công không nhập tay: khối Văn phòng tự tính theo lịch tháng (T2–T6 = 1 công · sáng T7 = 0,5 công), khối Công trường do HR thiết lập trước; là dữ liệu nguồn nên Tính lại sẽ ghi đè (BR-PS-18 → 20). (Vế "Tính lại ghi đè" đã bỏ ngày 12/08/2026 — xem mục cuối danh sách này.)
  • 12/08/2026 — PHẠM VI TÍNH LẠI THU VỀ 2 KHOẢN / 2 NGUỒN: Thưởng ← QĐ khen thưởng · Phạt kỷ luật ← QĐ kỷ luật (BR-PL-RECALC-38). Chấm công ra khỏi phạm vi — ngày công CT/TV/TT và phạt theo chấm công đổ về bảng lương theo thời gian thực, chỉ đóng băng khi chốt kỳ (BR-PL-RECALC-39); định mức công cũng vậy (BR-PS-20). Kéo theo: bảng đối chiếu không còn dòng nguồn Chấm công (BR-PL-RECALC-37) và sổ Lịch sử thay đổi chỉ còn 2 nguồn (FR-PL-HIST-08).

Còn mở

  • Phiếu đã chi tiền — kỳ đã chốt thì khoá tuyệt đối, không tính lại được (BR-PL-RECALC-01). Vậy phát hiện sai sau khi đã chi tiền thì sửa bằng cách nào: mở lại kỳ (giai đoạn sau, dựng cùng giao diện Công nợ) hay bút toán điều chỉnh kỳ sau? Gắn với §11.3 (Công nợ — giai đoạn sau).
  • Tính lại tự động — hiện là thao tác thủ công. Khuyến nghị giữ thủ công, chỉ thông báo "kỳ 6/2026 có 3 nguồn thay đổi từ lần tính lại gần nhất" để người làm lương biết mà chạy.
  • ~~Xem lại nhật ký tính lại~~ — đã chốt 10/08/2026: nhật ký hiển thị ở màn riêng Lịch sử thay đổi bảng lương (FR-PL-HIST-01). Còn mở: thời hạn lưu bản ghi.
  • Sinh phiếu mới giữa kỳ (BR-PL-RECALC-08) — gắn với điểm mở

về mốc so trạng thái nhân sự khi sinh bảng lương (BR-PL-LIST-03/04/05). - Quyền tính lại (BR-PL-RECALC-12) — nay phạm vi chạm cả phiếu đã xác nhận, cần chốt có tách quyền riêng cho thao tác này (chỉ Admin) hay giữ chung Nhân sự · Admin. - Định mức công — 3 điểm phụ (BR-PS-18): (a) ngày lễ / Tết có bị trừ khỏi định mức khối Văn phòng không (mockup hiện chưa trừ — chỉ đếm T2–T6 + nửa T7); (b) nơi thiết lập định mức khối Công trường (tham số trong Thiết lập danh mục hay nhập theo từng kỳ ở màn Bảng lương) và đặt theo toàn khối hay theo từng công trường / dự án; (c) khối làm việc của nhân viên (Văn phòng / Công trường) hiện lấy từ Chấm công — chốt nơi lưu duy nhất là hồ sơ nhân sự hay cấu hình chấm công.

FR-PL-HIST-01 → 08. Lịch sử thay đổi bảng lương

File: lich-su-thay-doi-bang-luong.html?ky=YYYY-MM[&id=<mã bản ghi>] Mở từ: nút Lịch sử thay đổi trên bảng lương chi tiết · nút Lịch sử thay đổi bảng lương ở panel Bảng lương (FR-PL-LIST) · liên kết Xem lịch sử thay đổi trong toast ngay sau khi áp dụng Tính lại (BR-PL-RECALC-11).

Vai trò: Nhân sự · Admin — cùng nhóm vai được vào bảng lương (§2).

Vì sao cần: BR-PL-RECALC-11 chỉ cho xem đối chiếu trước/sau một lần trong hộp xác nhận; áp dụng xong thì bảng lương chỉ còn số mới. Khi kế toán hoặc nhân viên hỏi "vì sao tháng này khác lần trước", người làm lương phải có chỗ tra lại — đó là màn này. Đây chính là nhật ký tự động mà hộp xác nhận hứa ghi (BR-PL-RECALC-10).

Mã Chức năng Mô tả
FR-PL-HIST-01 ✦✾ Hai cấp: chọn kỳ → xem từng lần tính lại Sổ đi theo hai cấp. Cấp 1 — danh sách kỳ lương có phát sinh tính lại. Cấp 2 — bấm vào một kỳ → một bảng duy nhất liệt kê từng lần tính lại của kỳ đó, xếp theo ngày–giờ thực hiện, mới nhất trước; mỗi lần mở đầu bằng một dòng nhóm (FR-PL-HIST-02), tiếp theo là các dòng khoản. Cấp 2 không có thẻ bung/thu — cuộn một mạch, một bộ tiêu đề cột dùng chung. Quay lại cấp 1 bằng nút ← hoặc breadcrumb Lịch sử thay đổi. (Sửa 11/08/2026 — trước đó là một danh sách phẳng trộn mọi kỳ, mỗi lần tính lại một thẻ bung/thu riêng.)
FR-PL-HIST-01.1 ✦ Cấp 1 — chỉ để chọn kỳ Bảng 2 cột + lối mở: Kỳ lương · Lần gần nhất (ngày–giờ) và lối Xem →; kỳ có lần tính lại gần đây nhất xếp trên. Chỉ liệt kê kỳ thực sự có bản ghi, luôn hiện đủ — cấp này không có bộ lọc / tìm kiếm (FR-PL-HIST-03). Bấm cả dòng (hoặc Enter/Space khi focus) để vào cấp 2. ĐÃ BỎ 3 cột tổng hợp Số lần tính lại · Phiếu đổi số · Tổng chênh Thực nhận — số liệu chi tiết xem ở cấp 2, cấp 1 giữ đúng vai trò bảng chọn kỳ. (Chốt 11/08/2026 với 5 cột; rút còn 2 cột + Xem ngày 12/08/2026.)
FR-PL-HIST-02 ✦✾ Dòng nhóm — chỉ thời điểm Dòng trải hết bề ngang bảng, nền xám, hiển thị DUY NHẤT thời điểm nhân sự bấm Áp dụng (dd/mm/yyyy hh:mm). Không hiện kỳ lương (đã có ở tiêu đề màn), không hiện người thực hiện · phạm vi · số phiếu · tổng chênh · mã bản ghi — những dữ liệu này vẫn được ghi và lưu trong bản ghi (BR-PL-HIST-01), chỉ không hiển thị ở dải này. Dải nhóm chỉ làm đúng một việc: ngăn các lần tính lại với nhau theo mốc thời gian. (Sửa 11/08/2026 — trước đó dải mang đủ 7 thông tin.)
FR-PL-HIST-02.1 ✾ Các dòng khoản — một khoản một dòng Dưới mỗi dòng nhóm, bảng liệt kê theo 6 cột: Nhân viên · Khoản thay đổi · Giá trị trước · Giá trị sau · Nguồn phát sinh · Thực nhận (trước → sau + chênh). mỗi khoản thay đổi chiếm MỘT DÒNG riêng, không gộp nhiều khoản vào một ô. Nhân viên có k khoản đổi → k dòng; ô Nhân viên và ô Thực nhận gộp dòng (rowspan) cho cả nhóm vì là số của cả phiếu, không phải của từng khoản. Cột Giá trị trước / Giá trị sau căn phải, kèm đơn vị ₫ (khoản tiền) hoặc công (ngày công · định mức). Cột Nguồn phát sinh ghi đầu mục nguồn — chỉ còn QĐ khen thưởng · QĐ kỷ luật (FR-PL-HIST-08) — kèm diễn giải ngắn của đúng khoản đó. Cột Khoản thay đổi ghi tên khoản đúng như trên bảng lương (Thưởng · Phạt theo kỷ luật), trình bày bằng text thường — KHÔNG badge, KHÔNG tô màu: thứ cần bắt mắt ở màn này là giá trị trước–sau, không phải tên khoản. (Chốt 10/08/2026; bỏ badge màu 11/08/2026.)
FR-PL-HIST-03 ✦ Lọc & tìm — chỉ ở cấp 2 Thanh lọc Từ ngày · Đến ngày · Tìm nhân viên (mã NV / họ tên) chỉ hiển thị khi đã vào một kỳ (cấp 2); ở cấp 1 không có bộ lọc lẫn ô tìm — danh sách kỳ luôn hiện đủ. Khoảng ngày xét theo ngày thực hiện tính lại, không phải kỳ lương. Tìm nhân viên xét tới từng phiếu bên trong bản ghi. Nút Bỏ lọc chỉ hiện khi đang có điều kiện lọc; quay về cấp 1 thì điều kiện lọc bị xoá. Từ ngày > Đến ngày → hiện dòng lỗi đỏ và không trả kết quả. (Sửa 11/08/2026 — thêm khoảng ngày; 12/08/2026 — gỡ khỏi cấp 1.)
FR-PL-HIST-04 ✾ Lối vào Vào từ panel Bảng lương (không tham số) → mở ở cấp 1. Vào từ bảng lương chi tiết hoặc liên kết trong toast (?ky=YYYY-MM) → nhảy thẳng cấp 2 của đúng kỳ đó. Ở cấp 2, breadcrumb bám theo kỳ đang xem. KHÔNG có nút Mở bảng lương — màn này chỉ để tra cứu, không mang lối tác nghiệp sang bảng lương; quay lại bằng nút ← ở đầu màn hoặc breadcrumb ✾. (Sửa 11/08/2026 — bỏ hẳn nút Mở bảng lương.)
FR-PL-HIST-05 ✾ Nhảy tới bản ghi vừa ghi Vào từ liên kết trong toast (&id=) → cuộn thẳng tới dòng nhóm của bản ghi vừa tạo; dòng đó tô nền brand nhạt + vạch trái đậm để nhận ra ngay.
FR-PL-HIST-06 ✦ Trạng thái rỗng Cấp 1 chưa có bản ghi nào → "Chưa có lần tính lại nào" kèm câu nhắc sổ chỉ ghi khi bấm Áp dụng (cấp 1 không lọc nên không có ca "không khớp bộ lọc" — sửa 12/08/2026). Cấp 2 không còn lần nào khớp → "Kỳ này không có lần tính lại nào khớp bộ lọc" kèm câu nhắc sổ chỉ ghi khi bấm Áp dụng.
FR-PL-HIST-07 Chỉ xem Màn chỉ để xem: không sửa, không xoá, không thêm tay bản ghi nào.
FR-PL-HIST-08 ✦ Không ghi khoản nguồn Chấm công Sổ chỉ ghi khoản đến từ Quyết định khen thưởng và Quyết định kỷ luật. Khoản đến từ Chấm công — Ngày công chính thức · Ngày công thử việc · Ngày công thực tập · Phạt theo chấm công — không đưa vào sổ: không ghi khi Áp dụng, không hiển thị nếu bản ghi cũ đang có (BR-PL-HIST-09 → 11). Thanh chú thích đầu màn nói rõ sổ chỉ nhận 2 nguồn nào. (Chốt 12/08/2026.)

Business Rule (BR-PL-HIST) {#br-pl-hist}

Mã Quy tắc
BR-PL-HIST-01 ✾ Bản ghi ghi tự động khi áp dụng Tính lại, gồm: mã bản ghi · kỳ lương · thời điểm · người thực hiện · phạm vi · danh sách phiếu đổi số; mỗi phiếu gồm mã NV · họ tên · Thực nhận trước–sau và danh sách khoản thay đổi, mỗi khoản là một bản ghi con gồm tên khoản · giá trị trước · giá trị sau · đầu mục nguồn · diễn giải nguồn. Diễn giải gắn theo từng khoản, không phải một câu lý do chung cho cả phiếu — vì mỗi khoản đến từ một phân hệ nguồn khác nhau, sửa sai phải quay về đúng phân hệ đó. (Sửa 10/08/2026.)
BR-PL-HIST-02 Bản ghi không sửa, không xoá — kể cả Admin. Ghi sai chỉ khắc phục bằng một lần tính lại mới, và lần đó cũng để lại bản ghi riêng.
BR-PL-HIST-03 Chỉ phiếu thật sự đổi số mới vào bản ghi. Phiếu chạy nhưng nguồn khớp (không đổi khoản nào) không ghi — sổ giữ đúng nghĩa lịch sử thay đổi.
BR-PL-HIST-04 Sổ ghi cả những lần tính lại đã làm trước khi kỳ được chốt; chốt kỳ (FR-PL-CHOT-01) không xoá lịch sử, chỉ khiến kỳ đó không phát sinh bản ghi mới nữa.
BR-PL-HIST-05 ✾ Tổng chênh Thực nhận của một bản ghi = tổng (Thực nhận sau − Thực nhận trước) của các phiếu trong bản ghi đó; tổng chênh của một kỳ = tổng của các bản ghi thuộc kỳ. Con số này vẫn được lưu trong bản ghi nhưng không hiển thị ở đâu trên giao diện: dải nhóm đã bỏ từ 11/08/2026 (FR-PL-HIST-02), cột Tổng chênh Thực nhận ở danh sách kỳ đã bỏ ngày 12/08/2026 (FR-PL-HIST-01.1). Người xem tự đối chiếu qua cột Thực nhận (trước → sau) của từng phiếu ở cấp 2. (Sửa 11/08/2026; sửa tiếp 12/08/2026.)
BR-PL-HIST-06 ✾ Nhân viên và Thực nhận gộp dòng theo phiếu. Một phiếu có bao nhiêu khoản đổi thì bảng chi tiết có bấy nhiêu dòng, nhưng chỉ một ô Nhân viên và một ô Thực nhận trải suốt nhóm dòng đó. Không lặp lại tên nhân viên trên từng dòng khoản, cũng không chia nhỏ Thực nhận theo khoản — Thực nhận là kết quả của toàn phiếu sau khi cộng tất cả khoản. (Chốt 10/08/2026.)
BR-PL-HIST-07 ✦✾ Nhãn Phạm vi ghi đúng cách người làm lương đã gọi lệnh tính lại, tương ứng 3 lối vào ở FR-PL-DETAIL-13: ① nút Tính lại trên dòng một nhân viên → "phiếu <mã NV> — <họ tên>"; ② nút Tính lại trên thanh thao tác hàng loạt (đã tick chọn) → "<N> nhân viên đã chọn" — kể cả khi N = 1, vì đây là lệnh theo lựa chọn chứ không phải theo dòng; ③ nút Tính lại (N phiếu) ở đầu màn → "toàn kỳ Tháng M/YYYY". Phạm vi phản ánh tập phiếu được đưa vào tính, không phải tập phiếu thực sự đổi số — nên "2 nhân viên đã chọn" mà bảng chi tiết chỉ có 1 dòng nhân viên là đúng: người kia chạy nhưng nguồn khớp nên không vào sổ (BR-PL-HIST-03). (Chốt 10/08/2026. Từ 11/08/2026 phạm vi vẫn được ghi vào bản ghi nhưng không hiển thị trên dải nhóm — FR-PL-HIST-02.)
BR-PL-HIST-09 ✦ Sổ chỉ nhận 2 nguồn phát sinh: Quyết định khen thưởng · Quyết định kỷ luật — đúng bằng phạm vi Tính lại (BR-PL-RECALC-38). Khoản có nguồn Chấm công (Ngày công chính thức · thử việc · thực tập · Phạt theo chấm công) không được ghi vào sổ, và không hiển thị kể cả khi bản ghi cũ còn lưu. (Chốt 12/08/2026 — thay cho quy ước 3 nguồn ngày 10/08/2026.)
BR-PL-HIST-10 ✦ Lọc theo tầng, rỗng thì bỏ: phiếu sau khi bỏ khoản nguồn Chấm công mà không còn khoản nào → không vào sổ; lần Áp dụng sau khi lọc mà không còn phiếu nào → không sinh bản ghi, toast báo tính lại xong nhưng không kèm liên kết sang sổ. Số phiếu và Tổng chênh Thực nhận của bản ghi tính trên phần còn giữ (BR-PL-HIST-05).
BR-PL-HIST-11 ✦ Hệ quả tất yếu của phạm vi Tính lại, không phải một bộ lọc riêng: Tính lại chỉ chạm Thưởng · Phạt kỷ luật (BR-PL-RECALC-38) nên sổ vốn không thể sinh dòng nguồn Chấm công. Việc lọc khi đọc chỉ để dọn bản ghi cũ lập trước 12/08/2026. Hệ quả phải chấp nhận: thay đổi ngày công / phạt chấm công không để lại dấu vết ở sổ này — muốn truy vết phải quay về Chấm công và đơn giải trình.
BR-PL-HIST-08 ✦✾ Một lần bấm Áp dụng = ĐÚNG MỘT bản ghi, bất kể lần đó chạm bao nhiêu phiếu: áp dụng cho 7 phiếu thì sổ thêm một bản ghi chứa cả 7, không phải 7 bản ghi. Ngược lại, mở hộp Tính lại rồi xem đối chiếu và Huỷ → không sinh bản ghi nào; chỉ Áp dụng mới ghi sổ. (Chốt 11/08/2026.)

Còn mở

  • Thời hạn lưu bản ghi lịch sử (giữ vĩnh viễn hay theo số năm quyết toán).
  • Phạm vi sổ: hiện chỉ ghi thao tác Tính lại. Cần chốt có ghi thêm sửa tay từng ô · sửa hàng loạt · chốt kỳ / mở lại kỳ vào cùng sổ này hay không — nếu có thì bản ghi cần thêm trường loại thao tác và bộ lọc tương ứng. (Cấu trúc dữ liệu đã chừa sẵn trường loại.)
  • Kết xuất: có cần xuất Excel sổ lịch sử để gửi kiểm toán không.

FR-PS-01 → 07. Chi tiết phiếu lương (phiếu lương cá nhân)

File: chi-tiet-bang-luong.html?ky=YYYY-MM&nv=NV-xxx — chế độ phiếu cá nhân, chỉ-xem. Mở từ FR-PL-DETAIL-05 (người làm lương) hoặc từ Trang cá nhân (nhân viên xem phiếu của mình) và từ tab Bảng lương trong hồ sơ nhân sự.

Quy ước mã trong tài liệu

Bản đặc tả nhận từ BA đánh mã trần (FR-01…FR-07, BR-01…BR-17) — trùng với bộ BR-01 → BR-07 của Danh sách hồ sơ nhân sự. Tài liệu giữ nguyên số, thêm tiền tố -PS- (payslip): FR-01 →FR-PS-01, BR-01 →BR-PS-01… Bản gốc thiếu FR-03 và BR-11 → xác nhận giữ trống, không bịa (chốt 11/08/2026).

Chức năng

Mã Chức năng Mô tả
FR-PS-01 Xem chi tiết phiếu lương Hiển thị toàn bộ thông tin của một phiếu lương thuộc kỳ đã chọn — 8 nhóm dữ liệu ở bảng Dữ liệu hiển thị dưới.
FR-PS-02 Hiển thị công thức tính Với mọi khoản hệ thống tự tính, hiển thị công thức ngay dưới/ cạnh giá trị: Lương chính thức = Lương tháng ÷ định mức × ngày công chính thức; Lương thử việc = … × ngày TV × 85%; Lương thực tập = Mức lương hỗ trợ ÷ định mức × ngày TT — lấy đúng mức lương hỗ trợ nhân sự nhập trên hợp đồng thực tập, không nhân tỷ lệ %; Thu nhập tổng = Tổng lương theo công + Tổng phụ cấp + Tổng thưởng; Tổng giảm trừ = Thuế TNCN + Phạt chấm công + Phạt kỷ luật + Tạm ứng (BR-PS-14); Thực nhận = Thu nhập tổng − Tổng giảm trừ.
FR-PS-04 Hiển thị nguồn dữ liệu Mỗi khoản phải chỉ rõ nguồn (xem bảng Nguồn dữ liệu từng khoản dưới): lấy từ Hợp đồng · Chấm công · Quyết định khen thưởng / kỷ luật · nhân sự nhập tay · hệ thống tự tính. Các khoản không tham gia công thức Thực nhận (Giảm trừ gia cảnh · BHXH) phải ghi rõ chú thích "không trừ vào Thực nhận".
FR-PS-05 Ký & xác nhận phiếu lương Nhân viên ký phiếu khi phiếu đã được gửi về Trang cá nhân (trạng thái cho-xn-luong — FR-PL-DETAIL-09). Nhân viên là bước 2 trong dây chuyền 6 bước (§3.2): Ký & xác nhận → phiếu vẫn ở cho-xn-luong, chuyển lượt sang Kế toán; Không ký và xác nhận (kèm lý do) → khong-xn-luong. Phiếu chỉ sang da-xn-luong khi Tổng giám đốc — chữ ký cuối — đã ký. Thao tác thực hiện tại Trang cá nhân; phiếu mở từ màn bảng lương không có nút xác nhận.
FR-PS-06 Trả về nháp Nhân sự / Admin trả phiếu về Nháp (FR-PL-DETAIL-11). Sau khi trả về: mở khoá dữ liệu → cho phép chỉnh sửa (sửa trên bảng lương công ty) → Duyệt & gửi xác nhận lại. Phiếu hiển thị dải cảnh báo hướng dẫn đúng bước tiếp theo theo trạng thái đang ở.
FR-PS-07 ✾ Đồng bộ công nợ Sau khi kỳ lương được chốt (BR-PL-CHOT-09), hệ thống chuyển dữ liệu sang module Công nợ cá nhân; phiếu hiện dải "Số liệu đã chuyển sang Công nợ cá nhân ↗" kèm lối mở sổ công nợ cá nhân theo kỳ. Phiếu đã xác nhận nhưng kỳ chưa chốt thì chưa chuyển công nợ — dải chỉ báo đã xác nhận, chờ chốt kỳ. (Sửa 11/08/2026.)

Dữ liệu hiển thị (8 nhóm)

Nhóm Trường
① Thông tin nhân viên Mã nhân viên · Họ tên · Chức vụ · Phòng ban · Trạng thái xác nhận lương (badge PAY_FLOW)
② Thông tin kỳ lương Tên kỳ lương (vd Tháng 6/2026) · Trạng thái kỳ lương (badge 3 mức — §3.1) · Số lượng nhân viên đã xác nhận ("N/M đã ký và xác nhận")
③ Thông tin ngày công Định mức công (kèm chú thích cách tính: khối Văn phòng → lịch tháng, khối Công trường → HR thiết lập — BR-PS-18) · Ngày công chính thức · Ngày công thử việc · Ngày công thực tập (không có thì hiện —; ngày công chính thức < định mức → tô cảnh báo). Ba cột tách theo loại hợp đồng hiệu lực từng ngày — đổi loại HĐ giữa kỳ thì nhiều cột cùng có số (FR-PL-CONG)
④ Lương theo hợp đồng P1 (lương cơ bản) · P2 (năng lực & chức vụ – NKNN) · P3 (năng lực quản lý – NLQL) → Lương tháng. Kỳ có ≥ 2 hợp đồng → thêm khối Chi tiết theo hợp đồng trong kỳ: Mã HĐ · Loại HĐ · Đoạn hiệu lực trong kỳ · Ngày công · Mức lương áp dụng · Thành tiền (FR-PL-CONG-04)
⑤ Phụ cấp Phụ cấp ăn ca · Phụ cấp xăng xe / điện thoại · Phụ cấp khác (liệt kê từng khoản có tên) → Tổng phụ cấp
⑥ Thưởng Thưởng tiến độ · Thưởng ý thức trách nhiệm · Thưởng chế độ chính sách → Tổng thưởng
⑦ Lương theo ngày công Lương chính thức · Lương thử việc · Lương thực tập → Tổng lương theo công → Thu nhập tổng
⑧ Các khoản giảm trừ Giảm trừ gia cảnh (không trừ vào Thực nhận — chỉ để tính thuế) · Thuế TNCN · BHXH (có trừ) · Tạm ứng kỳ này · BHXH (không trừ vào Thực nhận) · hai khối phạt riêng, mỗi khối một tổng (BR-PS-22): nhóm Phạt theo chấm công ✦ (Trừ đi muộn + Trừ nghỉ không giải trình hoặc đơn bị từ chối — BR-PL-KY-12) · nhóm Phạt theo kỷ luật (Trừ vi phạm nội quy · Trừ chậm nộp báo cáo · Trừ không hoàn thành công việc) → Tổng phạt → Tổng giảm trừ → Thực nhận

Nguồn dữ liệu từng khoản (FR-PS-04)

Khoản Nguồn Sửa được ở đâu
P1 · P2 · P3 Hợp đồng đang hiệu lực → tab Thành phần lương (BR-PS-02) Bảng lương (sửa inline, chỉ khi nhap)
Phụ cấp Ăn · Xăng xe/ĐT · Khác Hợp đồng → Thành phần lương, các khoản đang hiệu lực trong kỳ (BR-PS-08) Bảng lương (chỉ khi nhap)
Thưởng Quyết định khen thưởng đã đến ngày hiệu lực có Tháng áp dụng = kỳ này (BR-PS-09) Không sửa trong phiếu — sửa ở quyết định
Phạt chấm công Chấm công — ✦ hai khoản: Trừ đi muộn (hộp ký gọi Phạt đi muộn) và Trừ nghỉ không giải trình hoặc đơn bị từ chối (hộp ký gọi Phạt nghỉ không giải trình) (BR-PS-22 · BR-PL-KY-12) Không nhập tay ở đâu cả (BR-PL-RECALC-29) — bổ sung / duyệt đơn giải trình, bảng lương nhận số ngay (thời gian thực, không phải Tính lại — BR-PL-RECALC-39)
Phạt kỷ luật Quyết định kỷ luật hình thức Phạt tiền, Tháng áp dụng = kỳ này (BR-PS-22) Không nhập tay ở đâu cả (BR-PL-RECALC-29) — sửa hoặc huỷ quyết định kỷ luật rồi Tính lại
Định mức công Theo khối làm việc (Chấm công §Khối): Văn phòng → tự tính từ lịch tháng của kỳ; Công trường → HR thiết lập trước cho từng kỳ (BR-PS-18) Không nhập tay ở đâu cả — sửa ở nguồn (lịch làm việc / thiết lập kỳ), bảng lương cập nhật ngay theo thời gian thực; không thuộc phạm vi Tính lại (BR-PL-RECALC-38)
Ngày công chính thức · thử việc · thực tập Chấm công — dữ liệu đã chốt của kỳ (BR-PS-01), tách 3 cột theo loại hợp đồng hiệu lực từng ngày (FR-PL-CONG) Không sửa trong phiếu lương — sửa ở chấm công hoặc hợp đồng, bảng lương cập nhật ngay theo thời gian thực (BR-PL-RECALC-39)
Lương CT · TV · TT · Tổng lương công · Thu nhập tổng · Tổng giảm trừ · Thực nhận Hệ thống tự tính (BR-PS-03 → BR-PS-15) Không nhập tay
Giảm trừ gia cảnh · Thuế TNCN · BHXH · Tạm ứng kỳ này Nhân sự nhập tay Bảng lương (chỉ khi nhap)

Định mức công — hai cách tính theo khối (BR-PS-18 → 20)

Khối Cách xác định Ví dụ kỳ Tháng 6/2026
Văn phòng Tự tính từ lịch tháng của kỳ: thứ 2 → thứ 6 = 1 công · sáng thứ 7 = 0,5 công · Chủ nhật = 0 22 ngày T2–T6 + 4 sáng T7 → 24 công
Công trường HR thiết lập trước cho từng kỳ — không ăn theo lịch (thi công theo tiến độ, chạy cả thứ 7) HR đặt 26 công

Định mức công khác nhau theo tháng — không phải hằng số 24

Vì khối Văn phòng ăn theo lịch, định mức đổi theo từng tháng và có thể lẻ 0,5: T1/2026 = 24,5 · T2/2026 = 22 · T3–T4/2026 = 24 · T5/2026 = 23,5 · T6/2026 = 24. Con số 24 trong mockup chỉ là giá trị đúng của riêng kỳ 6/2026, không được hardcode.

Business Rule (BR-PS)

Mã Quy tắc
BR-PS-01 ✦ Nguồn ngày công: ngày công phải lấy từ dữ liệu chấm công đã được chốt; không cho sửa trực tiếp trong phiếu lương. Bảng lương đọc chấm công theo thời gian thực và đóng băng khi chốt kỳ (BR-PL-RECALC-39) — không nằm trong phạm vi Tính lại. Việc tách số công đó vào 3 cột chính thức · thử việc · thực tập theo loại hợp đồng hiệu lực từng ngày: xem FR-PL-CONG · BR-PL-CONG-01 → 05.
BR-PS-02 Lương hợp đồng: P1 · P2 · P3 lấy từ hợp đồng đang hiệu lực của nhân viên, theo mốc giá trị áp dụng cho kỳ của phiếu — không lấy giá trị hiện tại (BR-HD-CT-SL-08) ✦. Kỳ có nhiều hợp đồng (chuyển loại giữa kỳ) → mỗi loại lương lấy tham số của đúng hợp đồng đoạn đó rồi cộng lại (BR-PL-CONG-06).
BR-PS-03 Lương tháng = P1 + P2 + P3
BR-PS-04 Lương chính thức = Lương tháng ÷ Định mức công × Ngày công chính thức
BR-PS-05 ✾ Lương thử việc = Lương tháng ÷ Định mức công × Ngày thử việc × % lương thử việc. Tỷ lệ thử việc mặc định 85% (đúng như mockup). Nơi lưu tham số (trường trên hợp đồng hay tham số trong Thiết lập danh mục) không đặc tả đợt này — Dev tự chọn cách lưu, miễn là một nơi duy nhất và sửa được. (Chốt 11/08/2026.)
BR-PS-06 Lương thực tập = Mức lương hỗ trợ ÷ Định mức công × Ngày thực tập. Mức lương hỗ trợ lấy đúng giá trị nhân sự nhập trên hợp đồng thực tập (FR-HD-08.1) — không tính từ Lương tháng (P1+P2+P3) và không nhân tỷ lệ %. (Chốt 03/08/2026.)
BR-PS-07 Tổng lương theo công = Lương chính thức + Lương thử việc + Lương thực tập
BR-PS-08 Tổng phụ cấp = tổng tất cả khoản phụ cấp đang hiệu lực trong kỳ lương.
BR-PS-09 ✱ Tổng thưởng = tổng tất cả quyết định khen thưởng đã đến ngày hiệu lực (BR-QKL-01) có Tháng áp dụng = kỳ này. (Sửa 06/08/2026 — bỏ chữ "đã được duyệt": quyết định nhân sự không có trục duyệt (§6), mốc áp dụng là ngày hiệu lực.)
BR-PS-10 Thu nhập tổng = Tổng lương theo công + Tổng phụ cấp + Tổng thưởng
BR-PS-12 ✾ Bảo hiểm chỉ có MỘT khoản: BHXH — không tách BHYT · BHTN, giao diện chỉ hiển thị Bảo hiểm xã hội. Khoản này TRỪ TRỰC TIẾP vào Thực nhận, nằm trong Tổng giảm trừ (BR-PS-14). (Chốt 11/08/2026 — trước đó quy tắc nêu 3 khoản BHXH · BHYT · BHTN và không trừ vào Thực nhận.)
BR-PS-13 Thuế TNCN và Giảm trừ gia cảnh do nhân sự / kế toán nhập tay vào bảng lương (khi phiếu ở nhap) — hệ thống không tự tính theo biểu thuế lũy tiến. Người nhập tự xác định thuế trên thu nhập tính thuế (đã trừ giảm trừ gia cảnh, bảo hiểm…) theo quy định. (Chốt 03/08/2026.)
BR-PS-14 ✾ Tổng giảm trừ = Thuế TNCN + BHXH + Tạm ứng + Phạt chấm công + Phạt kỷ luật (BR-PS-22). BHXH TRỪ vào Thực nhận; Giảm trừ gia cảnh KHÔNG trừ — GTGC chỉ là đầu vào tính thuế TNCN (chốt 11/08/2026).
BR-PS-15 Thực nhận = Thu nhập tổng − Tổng giảm trừ
BR-PS-16 Trạng thái phiếu dùng đúng bộ enum PAY_FLOW §3 — 5 bậc: nhap Nháp · da-duyet Đã duyệt · cho-xn-luong Chờ ký và xác nhận · da-xn-luong Đã ký và xác nhận · khong-xn-luong Không ký và xác nhận. "Trả về" là hành động (đưa phiếu về nhap — FR-PL-DETAIL-11), không phải trạng thái. (Chốt 03/08/2026 — PAY_FLOW là bộ enum duy nhất cho cả bảng lương & phiếu lương; nhãn 3 bậc cuối đổi 14/09/2026 theo luồng ký mới — §3.2.)
BR-PS-18 ✦ Định mức công KHÔNG được nhập tay ở bất kỳ đâu trong bảng lương — không sửa inline, không sửa hàng loạt. Giá trị xác định theo khối làm việc của nhân viên (Chấm công §Khối): Văn phòng → tự tính từ lịch tháng của kỳ (T2 → T6 = 1 công · sáng T7 = 0,5 công · CN = 0); Công trường → HR thiết lập trước cho từng kỳ, không ăn theo lịch. (Chốt 06/08/2026.)
BR-PS-19 ✦ Định mức công thay đổi theo từng tháng (khối Văn phòng) và có thể lẻ 0,5 công. Không được coi 24 là hằng số — mọi công thức chia định mức (BR-PS-04 → 06) phải lấy đúng giá trị của kỳ đang tính.
BR-PS-20 ✦ Định mức công là dữ liệu nguồn, không phải số nhập tay → bảng lương đọc theo thời gian thực và đóng băng khi chốt kỳ, giống ngày công (BR-PL-RECALC-39). Muốn đổi định mức phải sửa ở nguồn (lịch làm việc của kỳ · thiết lập định mức khối Công trường); không nằm trong phạm vi Tính lại (BR-PL-RECALC-38). (Sửa 12/08/2026 — trước đó nói Tính lại ghi đè định mức.)
BR-PS-21 ✦ Chức danh · Phòng ban hiển thị trên bảng lương, phiếu lương và hộp xác nhận Tính lại lấy từ hồ sơ nhân sự theo mã nhân viên — bảng lương không khai riêng hai trường này. Đổi chức danh / phòng ban ở hồ sơ nhân sự thì mọi màn hiển thị theo giá trị mới, không phải sửa ở hai nơi. (Chốt 06/08/2026.)
BR-PS-22 ✦ Phạt lưu và hiển thị thành HAI khoản riêng, không gộp: Phạt chấm công (nguồn Chấm công) và Phạt kỷ luật (nguồn QĐ kỷ luật hình thức Phạt tiền). Áp dụng đồng bộ ở mọi nơi: hai cột riêng trên bảng lương chi tiết · hai khối riêng có tổng riêng trên phiếu lương cá nhân và Trang cá nhân · hai cột riêng khi xuất Excel · hai dòng riêng trong bảng đối chiếu Tính lại (BR-PL-RECALC-37) · trong Lịch sử thay đổi bảng lương thì chỉ Phạt kỷ luật được ghi — Phạt chấm công không vào sổ (FR-PL-HIST-08, chốt 12/08/2026). Nơi nào cần một con số gộp thì ghi Tổng phạt = Phạt chấm công + Phạt kỷ luật, nhưng không thay thế hai khoản chi tiết. Lý do: hai khoản đến từ hai đầu mục nghiệp vụ khác nhau, chỉnh sai phải quay về đúng phân hệ nguồn. (Chốt 10/08/2026.)

Enum trạng thái phiếu — đã chốt 03/08/2026

Trạng thái phiếu lương lấy theo §3 PAY_FLOW (5 bậc: Nháp · Đã duyệt · Chờ ký và xác nhận · Đã ký và xác nhận · Không ký và xác nhận) — đúng bộ đang áp dụng trong mockup & FR-LU-01. Bộ 4 trạng thái cũ trong bản đặc tả BA (Nháp · Chờ xác nhận · Đã xác nhận · Trả về) không dùng nữa: Đã duyệt là điều kiện để gửi phiếu (BR-PL-DETAIL-08), Không ký và xác nhận là trạng thái khi NV từ chối (BR-PL-DETAIL-11), còn Trả về chỉ là hành động đưa phiếu về nhap.

BHXH · Thuế TNCN · Giảm trừ gia cảnh — chốt 03/08/2026, sửa công thức 11/08/2026

  • BHXH TRỪ vào Thực nhận ✾, Giảm trừ gia cảnh KHÔNG trừ (chỉ là đầu vào tính thuế TNCN) — công thức: Tổng giảm trừ = Thuế TNCN + BHXH + Tạm ứng + Phạt chấm công + Phạt kỷ luật (BR-PS-12 · BR-PS-14 · BR-PS-22). (Sửa 11/08/2026 — trước đó BHXH cũng không trừ vào Thực nhận.)
  • Thuế TNCN và Giảm trừ gia cảnh: nhập tay (BR-PS-13) — hệ thống không tự tính theo biểu thuế lũy tiến, không cần bảng biểu thuế · số người phụ thuộc · trần BHXH ở giai đoạn này. Mockup hiện tại (nhân sự nhập tay 2 ô này) đã đúng, không phải sửa.
  • Bảo hiểm chỉ MỘT khoản BHXH ✾ — không tách BHYT · BHTN (BR-PS-12, chốt 11/08/2026).

Lệch giữa đặc tả & mockup hiện tại

  • FR-PS-04 (nguồn dữ liệu) ✾ — giữ nguyên hiện trạng: mockup ghi chú 2 chỗ ("nhân sự nhập tay" ở Thuế TNCN, "không trừ vào Thực nhận" ở GTGC). Bảng Nguồn dữ liệu từng khoản ở trên là tài liệu tham chiếu, không bắt buộc thể hiện thành nhãn/tooltip trên giao diện ở đợt này (chốt 11/08/2026).
  • Lương thử việc (BR-PS-05) ✾ — mockup hard-code TY_LE_TV = 85% là đúng giá trị mặc định đã chốt; nơi lưu tham số để Dev quyết (chốt 11/08/2026). (Lương thực tập (BR-PS-06) đã sửa xong 03/08/2026: mockup bỏ TY_LE_TT, dùng trường Mức lương hỗ trợ (luongHoTro) lấy từ HĐ thực tập — cột Lương tháng và phiếu lương của thực tập sinh hiển thị Mức lương hỗ trợ thay cho P1/P2/P3.)
  • ~~"Chấm công đã chốt" (BR-PS-01): SRS Chấm công chưa có nghiệp vụ chốt kỳ.~~ Đã chốt 10/08/2026: mốc chốt kỳ chấm công thuộc SRS Chấm công — module Lương không đặc tả, không hiển thị và không ràng buộc theo mốc đó. Kỳ lương có nút bấm vì đó là tiền, phải có người ký (FR-PL-CHOT-01).

FR-CN-01 · FR-CN-02. Công nợ cá nhân & tổng hợp — giai đoạn sau

⏸ Chưa đặc tả trong đợt này

Toàn bộ nghiệp vụ Công nợ — sổ công nợ cá nhân (chi-tiet-cong-no-ca-nhan.html), công nợ tổng hợp (chi-tiet-cong-no.html), bút toán/số dư, tổng hợp, chi tiền, chốt kỳ, import Excel — để giai đoạn sau (§11.3). Giao diện công nợ hiện chỉ là nháp, chưa chốt, nên không đưa vào phạm vi & nghiệm thu đợt này.


8. Thiết lập danh mục

FR-DM-01. Thiết lập danh mục dùng chung

File: thiet-lap-danh-muc.html — menu dọc trái + bảng phải, modal thêm/sửa

3 nhóm danh mục cấu hình được (đúng theo code):

Nhóm Cột Dữ liệu mẫu
Phòng ban (6) ✾ Tên · Trưởng phòng (quản lý — ĐÚNG MỘT người) · Số nhân sự · Ghi chú Ban Giám đốc, Ban QLDA, P.Tài chính–Kế toán, P.Vật tư–Thiết bị, P.Kế hoạch–Kỹ thuật, P.Hành chính–Nhân sự
Chức vụ (8) Tên chức vụ · Ghi chú Giám đốc, Kế toán trưởng, Chỉ huy trưởng công trường, Kỹ sư dự toán, Cán bộ an toàn…
Định mức công (3) Vị trí làm việc · Cách tính (badge) · Công/tháng · Ghi chú VP Long Đỗ (Tự động theo lịch) · Linh Đàm (tự khai 26) · Yên Bái (tự khai 27)

Cách tính định mức: Tự động theo lịch (khoá ô Công/tháng) hoặc Nhân sự tự khai theo tháng (bật ô nhập). Nút: + Thêm · Tìm · Sửa ✏️ / Xoá 🗑️ (confirm); modal validate bắt buộc Tên.

Phòng ban ↔ quản lý là quan hệ MỘT–MỘT (chốt 11/08/2026)

Mỗi phòng ban / công trường có đúng một quản lý, khai ở cột Trưởng phòng của chính danh mục này. Đây là nguồn duy nhất để xác định "phòng ban của mình" trong ma trận quyền (§2 · BR-01) — không khai ngược ở hồ sơ nhân sự. Công trường cũng là một phòng ban trong danh mục này (BR-KT-ADD-BS-10).

Danh mục dùng chung còn thiếu — khoảng trống lớn

Màn này chỉ có 3 nhóm. Chưa cấu hình được: loại quyết định, hình thức khen thưởng/kỷ luật, lý do nghỉ việc, loại hợp đồng, khoản phụ cấp/khấu trừ, người ký, nơi làm việc/công trường… — hiện hard-code rải rác ở từng màn. Cần tập trung hóa thành master data (Thiết lập danh mục).


9. Đặc tả dữ liệu (gợi ý)

Hover tên cột để xem mô tả  |  4 nhóm bảng  |  Lược đồ gợi ý từ mockup — BA/Dev chốt khi thiết kế CSDL
🧑 Nhân sự & Danh mục
NhanSu

Hồ sơ nhân sự (gộp cá nhân · công việc · sức khỏe)

CộtKiểuMô tả
ma_nvSTRING PKMã NV
ho_tenSTRINGHọ tên
phong_ban_idFKPhòng ban
chuc_vu_idFKChức vụ
vai_troENUMVai trò phân quyền (4 vai trò, §2)
trang_thaiENUMTrạng thái làm việc
noi_lam_viecJSON/ARRAY≥1 địa điểm chấm công (chọn nhiều)
ho_so_*JSON/TEXTTrường hồ sơ mở rộng
ChuKyNhanVien

Chữ ký nhân viên (1 NV có nhiều bản ghi theo thời gian — tối đa 1 bản đang hiệu lực); bản ghi đã tạo không sửa, xoá là xoá mềm — giữ nguyên bản ghi, chỉ đổi trang_thai = da_xoa (BR-SIGN-17 · FR-NS-SIGN)

CộtKiểuMô tả
idPKMã chữ ký
ma_nvFKNhân sự
file_anhSTRINGẢnh chữ ký (JPG · JPEG · PNG)
trang_thaiENUMĐang hiệu lực / Đã xoá
ngay_tai,nguoi_taiDATE + FKTải lên
ngay_xoa,nguoi_xoaDATE + FKXoá (xoá mềm)
PhongBan / ChucVu / DinhMucCong

Danh mục dùng chung (FR-DM-01)

CộtKiểuMô tả
idPKMã danh mục
tenSTRINGTên
cach_tinhENUMRiêng định mức công
cong_thangINTEGERvd 24/26/27
📄 Hợp đồng · Quyết định · Khen thưởng · Kỷ luật
HopDong

Hợp đồng lao động (1 NV có nhiều HĐ theo thời gian)

CộtKiểuMô tả
ma_hdSTRING PKMã hợp đồng
ma_nvFKNhân sự
loaiENUMLoại HĐ
luong_p1DECIMALLương cơ bản
luong_p2_p3DECIMALCấu phần lương
bhxh_*DECIMALBHXH (nếu có)
trang_thaiENUMTrạng thái HĐ
tu_ngay,den_ngayDATEHiệu lực
QuyetDinh (gồm QĐ nhân sự, Khen thưởng, Kỷ luật)

Mỗi loại có prefix mã riêng; trỏ về NV hoặc tập thể. Khen thưởng/Kỷ luật gắn nhiều người → tách bảng con QuyetDinh_NguoiLienQuan (nguoi[]: ma_nv, mức khen/mức độ vi phạm, số tiền); có ky_thang (kỳ lương) khi Tiền mặt/Phạt tiền. trang_thai chỉ dùng cho QĐ nhân sự.

CộtKiểuMô tả
so_qdSTRING PKSố quyết định
nhomENUMNhóm nghiệp vụ
loaiENUMLoại theo nhóm
doi_tuongENUMĐối tượng (KT/KL)
ma_nvFKNV liên quan
so_tienDECIMALTổng tiền (tính từ con)
ky_thangSTRINGKỳ áp dụng lương
trang_thaiENUMTrạng thái duyệt — bỏ
ngay_qd,fileMIXEDNgày & tệp
💰 Lương
BangLuong

1 dòng = 1 NV × 1 kỳ

CộtKiểuMô tả
idPKMã dòng
ma_nvFKNhân sự
kySTRINGKỳ lương
cau_phan_*DECIMALĐầu vào lương
giam_tru_*DECIMALKhoản giảm trừ
phat_cham_congDECIMALPhạt chấm công — cột riêng, không gộp
phat_ky_luatDECIMALPhạt kỷ luật — cột riêng, không gộp
thuc_nhanDECIMALThực nhận
trang_thai_chi_traENUMTrạng thái chi trả

Bảng ButToanCongNo (sổ công nợ cá nhân) — để giai đoạn sau cùng nghiệp vụ Công nợ (§11.3).


10. Yêu cầu phi chức năng (tóm tắt)

  • Tính nhất quán enum: một nguồn duy nhất cho trạng thái HĐ, trạng thái quyết định/khen thưởng/kỷ luật và PAY_FLOW (xem §3, §9). Mọi badge đọc từ enum chuẩn.
  • Tính tiền chính xác: parse/format số tiền (dấu chấm ngăn nghìn, đơn vị ₫); làm tròn theo quy tắc thống nhất; công thức lương chốt với kế toán.
  • Audit log: tab Lịch sử thay đổi hợp đồng (và nên mở rộng cho lương) ghi vết người thực hiện, không sửa/xoá — gợi ý cần truy vết người dùng theo phiên đăng nhập.
  • Khoá theo trạng thái: dòng đã chuyển bậc PAY_FLOW (phần lương) phải khoá số liệu; chỉ thao tác hợp lệ mới mở lại (Trả về) — định nghĩa rõ điều kiện.
  • Xuất/Nhập Excel: các màn cần xuất file thật.
  • Hiệu năng: bảng lương rất rộng (>2000px) & nhiều NV — phân trang/ảo hoá khi danh sách lớn.

11. Vấn đề mở (cần BA chốt)

Dev KHÔNG tự quyết

  1. Phân quyền — cách gán vai trò: Admin gán qua trường "Vai trò" ở hồ sơ nhân sự hay là tài khoản hệ thống riêng? (Ma trận quyền & định nghĩa "phòng ban của mình" đã chốt — xem §2. Phân quyền Công nợ → §11.3.)
  2. Chuẩn hoá PAY_FLOW — một enum nguồn + state machine + quy tắc ai được chuyển bậc nào. Giai đoạn này chỉ tới bậc Đã ký và xác nhận; các bậc công nợ để giai đoạn sau.
  3. Công nợ — hoãn sang giai đoạn sau (chốt 17/07/2026): đợt này SRS HCNS chưa đặc tả nghiệp vụ Công nợ. Các mục FR-CN-01/02, một phần §3 PAY_FLOW và §7 liên quan công nợ để lại giai đoạn sau — ngoài phạm vi nghiệm thu đợt này. Những việc gộp vào đây: import Excel công nợ của kế toán (định dạng cột Nợ/Có, mapping NV/kỳ/TK) · quy tắc khoá khi chi tiền & Mở lại kỳ · sinh bút toán công nợ lúc chốt kỳ · luồng chuyển chứng từ Khen thưởng/Phạt tiền sang Lương – Kế toán · cờ đã-đồng-bộ chặn thưởng trùng (BR-KT-PR-05) · Sổ điều chỉnh (truy lĩnh/truy thu sau khi chốt kỳ) · phân quyền công nợ.
    Ngoại lệ đã chốt 12/08/2026 — trường Công nợ trên quyết định Nghỉ việc: tuy module Công nợ để giai đoạn sau, cách lấy số đã chốt ngay đợt này — hai trường Công nợ phải thu / phải trả là read-only, tự đổ từ Sổ công nợ, bỏ nhập tay (BR-QD-RV-02 · BR-QD-RV-05 → 08). Đặc tả sớm để Dev không phải làm hai lần; mockup dùng nguồn tạm ui-mockups/longdo-erp/web/cong-no-so-du.js, Dev thay bằng API module Công nợ khi có, giữ nguyên hình dạng dữ liệu trả về.
  4. Kỳ lương có nhiều hợp đồng — 2 điểm chưa chốt (mở 12/08/2026, kèm FR-PL-CONG): (a) Phụ cấp khi trong kỳ nhân viên chuyển thử việc → chính thức: trả nguyên khoản của hợp đồng cuối kỳ (cách tài liệu đang tạm ghi nhận) hay chia theo tỷ lệ ngày công từng đoạn? (b) Hai hợp đồng chồng ngày do dữ liệu cũ nhập lệch: chặn lập phiếu hay lấy hợp đồng có ngày bắt đầu muộn hơn + cảnh báo? (Cách tách ngày công theo loại hợp đồng thì đã chốt — BR-PL-CONG-01 → 10.)
  5. Nghỉ việc khi nhân sự KHÔNG có hợp đồng nào trên hệ thống (mở 12/08/2026, cập nhật 14/08/2026 kèm BR-QD-RV-14): dữ liệu cũ chuyển từ Excel sang có thể có nhân sự chưa nhập hợp đồng. Mockup hiện cho lưu quyết định nghỉ việc trong ca này (hiện dòng giải thích, không đối chiếu ngày, không cập nhật hợp đồng nào). Cần BA chốt: giữ như vậy, hay bắt nhập hợp đồng trước? Có cần ghi chú miễn trừ và ai duyệt ngoại lệ?
  6. Thành phần lương cố định theo mốc kỳ — 2 điểm chưa chốt (mở 11/09/2026, kèm BR-HD-CT-SL-07 → 09): (a) Đổi lương giữa tháng (vd từ 15/09, hoặc gia hạn có hiệu lực giữa tháng — BR-HD-GH-09): tài liệu tạm ghi nhận theo kỳ — mốc mới áp trọn kỳ; hay cho chọn theo ngày và chia theo ngày công trước/sau ngày đổi? (b) Phụ cấp mặc định (Ăn · Xăng xe/Điện thoại) sửa số tiền có dùng cùng cơ chế Áp dụng từ kỳ như P1/P2/P3 không? (Phụ cấp khác đã có Ngày bắt đầu – Ngày kết thúc — BR-HD-CT-SL-05.)

Đã rõ (không còn là vấn đề mở)

  • 3 nghiệp vụ Quyết định / Khen thưởng / Kỷ luật độc lập, đều trỏ về hồ sơ nhân viên.
  • Lương 3 cấu phần P1/P2/P3; phụ cấp Ăn/Xăng-ĐT/Khác; ngày công lấy từ module Chấm công.
  • Ngày công tách 3 cột theo loại hợp đồng hiệu lực từng ngày trong kỳ; một phiếu lương được phép có nhiều loại lương, mỗi loại tính theo tham số của đúng hợp đồng (FR-PL-CONG).

12. Tiêu chí nghiệm thu (chính)

AC-1 — Hợp đồng động theo loại

Given mở "Thêm hợp đồng", chọn Loại = Thử việc (hoặc Thực tập) Then ẩn Section 2 (P1/P2/P3/BHXH/Thời hạn); chỉ hiện một ô lương (Mức lương chính thức/hỗ trợ) ở Section 3.

AC-2 — Thành phần lương cố định bị khoá

Given mở tab "Thành phần lương" một hợp đồng When chọn một khoản gắn nhãn "Cố định" (P1/P2/P3/Lương thử việc/thực tập) Then chỉ cho sửa số tiền; không cho thêm/xoá hay đổi Tên/Cách tính.

AC-3 — Vòng đời chi trả phần Lương (PAY_FLOW)

Given một phiếu lương ở trạng thái da-duyet When người làm lương bấm "Gửi phiếu" → phiếu sang cho-xn-luong và chạy dây chuyền 6 bước (§3.2): nhân viên → kế toán → (ban kiểm soát + giám đốc tài chính, ký song song) → tổng giám đốc Then phiếu giữ nguyên cho-xn-luong cho tới khi chữ ký cuối cùng hoàn tất, lúc đó mới sang da-xn-luong; bất kỳ người ký nào từ chối → khong-xn-luong; "Trả về" đưa phiếu lại nhap và xoá toàn bộ chữ ký (BR-PL-KY-05). (Các bậc công nợ cho-xn-cn…da-chi để giai đoạn sau — §11.3.)

AC-4 — Công thức thực nhận

Given một dòng lương với P1+P2+P3, phụ cấp, thưởng, các khoản giảm trừ Then Thực nhận = (Lương CT + Lương TV + Lương TT + Tổng phụ cấp + Thưởng) − (Thuế TNCN + Phạt + BHXH + Tạm ứng), khớp công thức §FR-LU-01 & BR-PS-03 → 15. (BHXH có trừ, Giảm trừ gia cảnh không trừ — BR-PS-12 · BR-PS-14, chốt 11/08/2026.)

AC-5 — Khen thưởng/Kỷ luật là quyết định độc lập

Given tạo một Khen thưởng (QĐ-KT) hoặc Kỷ luật (QĐ-KL) Then sinh bản ghi riêng, trỏ về hồ sơ NV (hoặc tập thể), không tạo bản ghi trong danh sách Quyết định nhân sự. Cả hai cùng khuôn: mã QĐ · ngày QĐ · ngày hiệu lực · file · danh sách người (nguoi[]) — không có người ký/trạng thái. Khen thưởng thêm: hình thức khen + (Tiền mặt) số tiền/người + Tháng áp dụng. Kỷ luật thêm: mức độ vi phạm + (Phạt tiền) số tiền phạt/người + Tháng áp dụng.

AC-6 — Ngày công tách theo loại hợp đồng (FR-PL-CONG)

Given nhân viên có HĐ Thử việc hiệu lực tới 14/07/2026 và HĐ Xác định thời hạn từ 15/07/2026, kỳ lương 07/2026 định mức công 24, chấm công đã chốt 10 công trong 01–14/07 và 13 công trong 15–31/07 When lập (hoặc Tính lại) bảng lương kỳ 07/2026 Then phiếu của nhân viên đó có Ngày công thử việc = 10 và Ngày công chính thức = 13 (không dồn hết vào một cột); Lương TV tính theo Lương tháng của HĐ thử việc × 85%, Lương CT tính theo Lương tháng của HĐ chính thức; Tổng lương theo công = tổng hai khoản (BR-PL-CONG-01 → 07). Cột Lương tháng trên bảng công ty hiện theo HĐ cuối kỳ kèm dấu ⓘ liệt kê 2 hợp đồng; phiếu lương cá nhân có khối Chi tiết theo hợp đồng trong kỳ đủ 2 dòng.

AC-7 — Sửa lương: kỳ đã chốt giữ nguyên, kỳ chưa chốt vẫn đổi được (BR-HD-CT-SL-07 → 09)

Given nhân viên có P2 = 5.000.000 ở các kỳ 06, 07, 08/2026; kỳ 06 và 07 đã chốt, kỳ 08 chưa chốt When ngày 10/09/2026 nhân sự sửa P2 = 6.000.000 Then ô Áp dụng từ kỳ cho chọn 08/2026 trở đi, không cho chọn 07/2026 trở về trước; kỳ 06, 07 không đổi trong mọi trường hợp.

And nếu chọn 08/2026: kỳ 08 hiện nút Tính lại; bấm Tính lại → P2 kỳ 08 = 6.000.000, phiếu về nhap.

And nếu chọn 09/2026: kỳ 08 không hiện nút Tính lại vì lý do này, bấm Tính lại kỳ 08 thì P2 vẫn = 5.000.000; từ kỳ 09/2026 trở đi P2 = 6.000.000.

Lịch sử lương có dòng P2: 5.000.000 → 6.000.000 · Áp dụng từ kỳ <kỳ đã chọn>.


Phụ lục A — Bản đồ màn ↔ file mockup

Mã Màn File mockup (ui-mockups/longdo-erp/web/)
FR-NS-01 Trung tâm module / Danh sách nhân sự nhan-su.html
FR-NS-02 Chi tiết hồ sơ nhân sự (5 tab) chi-tiet-nhan-su.html
FR-NS-03 Thêm nhân viên them-nhan-vien.html
FR-NS-SIGN-01 → 04 Chữ ký nhân viên (nhóm trong Thông tin công việc) them-nhan-vien.html · chi-tiet-nhan-su.html — component dùng chung chu-ky-nhan-vien.js
FR-NS-SIGN-05 Nhân viên xem chữ ký của mình (chỉ đọc) trang-ca-nhan.html — khối Mẫu chữ ký đã có sẵn, không dựng thêm
FR-HD-01 → 07 Danh sách hợp đồng (tìm · lọc · thêm · chi tiết · Nhập/Xuất Excel) nhan-su.html#hop-dong
FR-HD-08 Chi tiết hợp đồng (3 tab) chi-tiet-hop-dong-nhan-su.html
FR-HD-09 Thêm hợp đồng them-hop-dong-nhan-su.html
FR-HD-10 Gia hạn hợp đồng chi-tiet-hop-dong-nhan-su.html — modal mở từ nút Gia hạn hợp đồng (tab Thông tin hợp đồng)
FR-HD-11 Kết thúc hợp đồng theo QĐ nghỉ việc Nhập ở them-quyet-dinh.html (loại Nghỉ việc — ô Ngày nghỉ việc); chi-tiet-hop-dong-nhan-su.html chỉ hiển thị kết quả. Nguồn HĐ dùng chung: hop-dong-data.js. (Nút & popup chấm dứt đã bỏ 14/08/2026.)
FR-QD-01 → 05 Danh sách quyết định (tìm · lọc · thêm · chi tiết) nhan-su.html#quyet-dinh
FR-QD-06 Chi tiết quyết định chi-tiet-quyet-dinh.html
FR-QD-07 Thêm quyết định them-quyet-dinh.html
FR-QD-08 Sửa quyết định them-quyet-dinh.html?ma=<số QĐ> (dùng lại màn Thêm, đổi nhãn Sửa)
FR-KT-01 Danh sách khen thưởng nhan-su.html#khen-thuong
FR-KT-02 Chi tiết khen thưởng chi-tiet-khen-thuong.html
FR-KT-03 Thêm khen thưởng them-khen-thuong.html
FR-KL-01 Danh sách kỷ luật nhan-su.html#ky-luat
FR-KL-02 Chi tiết kỷ luật chi-tiet-ky-luat.html
FR-KL-03 Thêm kỷ luật them-ky-luat.html
FR-PL-LIST-01 → 08 Danh sách bảng lương theo tháng (danh sách kỳ lương) nhan-su.html#bang-luong
FR-LU-01 Bảng lương chi tiết theo kỳ chi-tiet-bang-luong.html
FR-PL-DETAIL-01 → 12 Chi tiết bảng lương — chức năng & quy tắc (chi tiết hoá FR-LU-01) chi-tiet-bang-luong.html?ky=YYYY-MM
FR-PL-CONG-01 → 07 · BR-PL-CONG Ngày công & loại lương theo hợp đồng trong kỳ chi-tiet-bang-luong.html (3 cột ngày công · phiếu cá nhân) — ca nhiều hợp đồng chưa có dữ liệu mẫu, nguồn hợp đồng: chi-tiet-hop-dong-nhan-su.html
FR-PL-HIST-01 → 08 Lịch sử thay đổi bảng lương (sổ nhật ký các lần tính lại, chỉ-xem — không ghi nguồn Chấm công) lich-su-thay-doi-bang-luong.html?ky=YYYY-MM[&id=…]
FR-PS-01 → 07 · BR-PS-01 → 22 Chi tiết phiếu lương (phiếu lương cá nhân, chỉ-xem) chi-tiet-bang-luong.html?ky=YYYY-MM&nv=NV-xxx · NV xác nhận ở trang-ca-nhan.html
FR-CN-01 · FR-CN-02 Công nợ (cá nhân · tổng hợp) — giai đoạn sau, nháp chi-tiet-cong-no-ca-nhan.html · chi-tiet-cong-no.html
FR-DM-01 Thiết lập danh mục thiet-lap-danh-muc.html
FR-TB-01 Trung tâm thông báo (demo) thong-bao.html

File demo / công cụ nội bộ — không phải màn nghiệp vụ chốt

  • so-sanh-thao-tac.html — công cụ nội bộ so layout (5 kiểu nút Thao tác A–E để BA chọn, đang áp dụng kiểu B), không đưa vào bàn giao Dev.
  • demo-ky-luat-thong-ke.html — bản demo dải KPI thống kê đặt trên đầu danh sách Kỷ luật (điểm nóng theo phòng ban, theo lý do; tính trực tiếp từ 10 bản ghi ky-luat-data.js). Chưa gắn vào màn thật — đề xuất tăng cường, chờ BA chốt có đưa vào không.
  • thong-bao.html — bản demo Trung tâm thông báo (FR-TB-01): đưa vào SRS để chốt mô hình định tuyến thông báo & luồng tiền, nhưng bản thân màn chưa nối hệ thống thật.