SRS — Module Hành chính – Nhân sự (Longdo ERP 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.13). 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.13).
1.2 Phạm vi¶
| Trong phạm vi | Ngoà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 (xem §11.11) |
| 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.13) |
| 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òng | Nhâ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ường | Nhâ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ương | Một tháng (vd 2026-06). Mọi tính toán lương gắn theo kỳ. |
| P1 / P2 / P3 | Ba 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 Đã xác nhận lương); 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ống | Phạm vi & quyền |
|---|---|
| Admin | Toà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 · lương. Không sửa, không thấy phòng ban khác. |
| Nhân viên | Khô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 · ⬇️ 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) | 👁➕🗑️⬇️ | 👁➕🗑️⬇️ | 👁 | — |
| Chi tiết hợp đồng (FR-HD-02) | 👁✏️ | 👁✏️ | 👁 | — |
| Thêm hợp đồng (FR-HD-03) | ➕✏️ | ➕✏️ | — | — |
| ③ Quyết định nhân sự | ||||
| Danh sách quyết định (FR-QD-01) | 👁➕🗑️⬇️ | 👁➕🗑️⬇️ | 👁 | — |
| Chi tiết quyết định (FR-QD-02) | 👁✏️ | 👁✏️ | 👁 | — |
| Thêm quyết định (FR-QD-03) | ➕✏️ | ➕✏️ | — | — |
| ④ 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) | 👁➕✏️🗑️ | 👁➕✏️🗑️ | — | — |
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. 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.
Cần nhớ
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ờ nhân viên xác nhận | hổ phách | Người làm lương Gửi NV (da-duyet → cho-xn-luong); chờ NV phản hồi |
| 4 | da-xn-luong |
Đã xác nhận lương | xanh lá | NV xác nhận ở Trang cá nhân (cho-xn-luong → da-xn-luong) |
| 5 | khong-xn-luong |
Không xác nhận lương | đỏ | NV từ chối ở Trang cá nhân; người làm lương Trả về → nhap để sửa lại |
Nhân viên xác nhận ở Trang cá nhân
Ở bậc Chờ nhân viên xác nhận, NV vào Trang cá nhân để Xác nhận lương (→ Đã xác nhận lương) hoặc Không xác nhận (→ Không xác nhận lương, kèm lý do). Màn Bảng lương chỉ theo dõi tiến độ xác nhận, không xác nhận thay NV.
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, 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 lấy xác nhận | hổ phách | Đã có ≥ 1 bản ghi gửi cho NV (đạt Chờ nhân viên 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ộ đã Đã xác nhận lương |
| Hoàn tất xác nhận | xanh lá | Toàn bộ bản ghi trong kỳ = da-xn-luong (Đã xác nhận lương) |
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:
- Mọi bản ghi = Đã xác nhận lương → badge kỳ = Hoàn tất xác nhận.
- Ngược lại, có bất kỳ bản ghi ≠ Đã xác nhận lương nhưng đã có ≥ 1 phiếu gửi cho NV → Đang lấy xác nhận.
- 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.
Mốc lật Đang tính → Đang lấy xác nhận
Kỳ giữ badge Đang tính cho tới khi người làm lương Gửi NV phiếu đầ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 lấy 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 được NV xác nhận.
Bản ghi Không xác nhận lương
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 lấy xác nhận (không tụt về Đang tính), và không đạt Hoàn tất xác nhận cho tới
khi phiếu đó được Trả về, sửa, gửi lại và NV xác nhận.
Bộ lọc danh sách kỳ lương
Panel Bảng lương (nhan-su.html#bang-luong) có bộ lọc Trạng thái với đúng 3 lựa
chọn = 3 badge kỳ ở trên: Đang tính · Đang lấy xác nhận · Hoàn tất 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ụ.
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.13).
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).
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-03) |
| Quyết định | Quyết định | 16 | Thêm quyết định (FR-QD-03) |
| 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-LU-01) |
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 · 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
manhân viên cho link chi tiết. Ô tìm kiếm/Xuất Excel chưa gắn logic. - Mockup
nhan-su.htmlcò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 | Ngày vào làm | Ngày bắt đầu làm việc |
| 5 | 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 (5 cột trên) |
| 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ơ. Cột lương chỉ vai trò Nhân sự/Kế toán (BR-03). |
Business Rule (BR) {#br-hs}
| 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; 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) {#dr-hs}
| 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-03. 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-02. Chi tiết hồ sơ nhân sự¶
File:
chi-tiet-nhan-su.html?ma=NV-xxx(mặc định NV-001);&edit=1bậ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 (4 kỳ mẫu), 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):
- 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>".
- 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-03. Phụ đề đếm số HĐ của NV. - 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.
- Thông tin công việc — 3 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.
- 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.
- 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.)
Bất nhất enum trạng thái hợp đồng — cần chuẩn hoá
Khối Hợp đồng (trong tab Hồ sơ) ở màn này dùng "Còn hiệu lực / Sắp hết hạn / Hết hiệu lực" và tên loại HĐ "Không thời hạn / Xác định 12 tháng", trong khi danh sách + màn chi tiết HĐ dùng "Đang hiệu lực / Hết hạn" và "Không xác định thời hạn / Xác định thời hạn / Thử việc / Khoán việc". Xem §11.3.
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).
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 | ✓ | |
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 | |||
| 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 |
| Lịch làm việc / Ca | select | Ca hành chính / Linh hoạt | |
| 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.
5. Hợp đồng lao động¶
FR-HD-01. Danh sách hợp đồng¶
File: panel "Hợp đồng nhân sự" trong
nhan-su.html#hop-dong
| Thành phần | Ghi chú |
|---|---|
| Ô tìm | mã HĐ / mã NV / tên |
| Lọc Loại HĐ | Tất cả / Không xác định thời hạn / Xác định thời hạn / Thử việc (thiếu Khoán việc) |
| Lọc Phòng ban · Lọc Trạng thái | Trạng thái: Tất cả / Nháp / Đang hiệu lực / Sắp hết hạn / Hết hạn |
| 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-03) |
| 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).
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-03. 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 · Giá trị khoán · 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/KXĐ → P1/P2/P3/BHXH; Thử việc → Lương thử việc; Thực tập → Lương thực tập; Khoán việc → Giá trị khoán).
- Không xác định thời hạn → bỏ trống Ngày kết thúc & Thời hạn. 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ênthì 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-02). 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.
FR-HD-02. Chi tiết hợp đồng¶
File:
chi-tiet-hop-dong-nhan-su.html?ma=NV-xxx— 3 tab
Loại hợp đồng (4 loại):
| Mã | Tên hiển thị |
|---|---|
khong-xac-dinh |
Không xác định thời hạn |
xac-dinh |
Xác định thời hạn |
thu-viec |
Thử việc |
khoan-viec |
Khoán việc / Thời vụ |
Tab "Thông tin hợp đồng" — khối Lương & phụ cấp đổ động theo loại HĐ:
- Thử việc: Mức lương thử việc · Thời gian thử việc · Người quản lý trực tiếp.
- Khoán việc: Giá trị khoán · Hình thức trả lương · Khối lượng/Phạm vi công việc · Phụ cấp.
- Xác định / Không xác định: P1 Lương cơ bản · P2 (năng lực) · P3 (hiệu quả) · Hình thức trả lương · Thời hạn HĐ (nếu có) · Phụ cấp (Xăng xe/ĐT, Ăn, Khác).
Tab "Thành phần lương": 3 thẻ (Tổng thu nhập / Tổng khấu trừ / Thực nhận dự kiến) + bảng Thành phần · Cách tính · Số tiền · Thao tác; nút + Thêm thành phần (modal: Tên · Cách tính [Số tiền cố định / Theo % lương cơ bản] · Số tiền/Tỷ lệ % · Ghi chú).
Quy tắc thành phần lương (quan trọng)
Khoản lương cố định (P1, P2, P3, Giá trị khoán, Lương thử việc) gắn nhãn "Cố định" → chỉ sửa số tiền, không thêm/xoá, khoá Tên & Cách tính. Phụ cấp → thêm/sửa/xoá tự do. Tab này không dựng BHXH/BHYT/BHTN.
Tab "Lịch sử thay đổi" (audit log, chỉ đọc): Thời điểm · Người thực hiện · Nhân sự bị tác động · Thao tác (Thêm=emerald / Sửa=amber / Xoá=rose) · Trường thay đổi · Giá trị trước → sau. Hệ thống tự ghi, không sửa/xoá, mới nhất lên trước.
FR-HD-03. 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Đ
Section 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 / Không xác định thời hạn / Khoán việc–thời vụ.
Section 2 — Thông tin theo loại (hiện/ẩn động):
| Loại | Trường đặc thù |
|---|---|
| Thử việc | (ẩn Section 2) — chỉ có Mức lương thử việc ở Section 3 |
| Xác định thời hạn | P1 (✓) · P2 · P3 · ☑ Tham gia BHXH bắt buộc → mở ô Mức lương đóng BHXH · Hình thức trả lương (✓) · Thời hạn HĐ (✓, text vd "24 tháng") · Phụ cấp |
| Không xác định thời hạn | như trên nhưng không có Thời hạn HĐ |
| Khoán việc / thời vụ | Giá trị khoán (✓) · Hình thức trả lương (✓: Một lần sau nghiệm thu / Theo đợt / Theo ngày công) · Khối lượng/Phạm vi · Phụ cấp · không P2/P3/BHXH |
Section 3 — Thông tin chung: Mức lương thử việc (✓ khi loại=Thử việc; "tối thiểu 85% lương chính thức") · Ngày bắt đầu (✓) · Ngày kết thúc (khoá & xoá khi loại=Không xác định thời hạn) · Mã HĐ ("để trống sẽ tự sinh theo loại & mã NV") · Trạng thái (✓): Nháp / Đang hiệu lực (mặc định) / Sắp hết hạn / Hết hạn · File đính kèm (PDF/DOCX/ảnh ≤ 10 MB) · 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. Chưa validate ngày bắt đầu < kết thúc, chưa kiểm 85% lương thử việc,
chưa tự sinh mã HĐ thật. Checkbox BHXH chỉ khoá/mở ô input (không xoá field).
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-02 · 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 (§11.6).
FR-QD-01. Danh sách quyết định¶
Panel
nhan-su.html#quyet-dinh— lọc loại Bổ nhiệm / Miễn nhiệm / Tạm nghỉ / Nghỉ việc
Bảng: Số QĐ · Loại · Nhân viên · Phòng ban · Ngày hiệu lực · Thao tác. Mã mẫu: QĐ-BN/2026/01,
QĐ-MN/2026/01, QĐ-TN/2026/01, QĐ-NV/2026/01. Nhấn một dòng → mở chi tiết theo số QĐ.
FR-QD-02. Chi tiết quyết định¶
File:
chi-tiet-quyet-dinh.html?ma=...(mặc địnhQĐ-BN/2026/01)
Thẻ tiêu đề (mã QĐ) → card "Thông tin chung" (Loại + Nhân viên) → card theo loại → Tệp đính kèm:
- Bổ/Miễn nhiệm: card 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ừ–đến).
- Tạm nghỉ: card Thông tin tạm nghỉ — Thời gian tạm nghỉ (từ ngày bắt đầu → đến ngày dự kiến quay lại) · Lý do tạm nghỉ · Bàn giao công việc cho ai · Lý do chi tiết/Ghi chú.
- Nghỉ việc: Ngày nghỉ, Lý do, Bàn giao, Công nợ phải thu/phải trả.
Loại quyết định (badge): Bổ nhiệm (emerald) · Miễn nhiệm (amber) · Tạm nghỉ (sky) · Nghỉ việc (rose).
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 = sửa tại chỗ (đồng nhất mọi loại)
Nút Sửa (#qd-edit) và mở kèm ?edit=1 không nhảy sang form khác mà bật chế độ sửa tại
chỗ (detail-edit.js): các trường thành combobox/ô nhập trùng danh sách chọn với màn Thêm mới
(loại QĐ, lý do, bàn giao, ngày từ–đến). Đây là cách "dùng lại màn thêm mới, chỉ đổ dữ liệu
hiện tại lên" cho cả 4 loại.
Dev lưu ý
- 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; xem §11.11).
- Mockup
chi-tiet-quyet-dinh.htmlhiện còn trườngtrangThai(Đã 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" (chưa sửa được do cây đang kẹt merge, xử lý sau). Form Thêm đã không có field trạng thái (đúng).
FR-QD-03. 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 (hiện chỉ 1 lựa chọn; mở rộng danh mục sau) |
| [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 | ✓ | |
| [Nghỉ việc] Lý do | select | ✓ | Thôi việc tự nguyện / Hết hạn HĐ / 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ả | text ₫ | NV nợ công ty / công ty nợ NV | |
| File đính kèm | file | bản scan QĐ đã ký, ≤ 10 MB |
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 hiện chỉ Thai sản (do BHXH chi trả); khi mở rộng thêm lý do khác sẽ bổ sung cách xử lý lương – BHXH tương ứng vào danh mục dùng chung.
Chức vụ sai nghĩa trong dữ liệu mẫu
Form Thêm đã dùng đúng danh mục chức vụ, nhưng dữ liệu mẫu màn chi tiết (cvCu/cvMoi trong
chi-tiet-quyet-dinh.html) còn để IT / Hành chính - kế toán (phòng/địa điểm, không phải chức
vụ) — cần chuẩn hoá theo danh mục Chức vụ (§11.4).
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ờ chốt ở §11.11.
FR-KT-01. Danh sách khen thưởng¶
File: panel "Khen thưởng" trong
nhan-su.html#khen-thuong— render từ nguồn chungkhen-thuong-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 khen thưởng (→ FR-KT-03) — đã bỏ Xuất Excel: công ty không dùng |
| 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á) |
Cột Đối tượng — hiển thị loại đối tượ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>. (Chi tiết từng người xem ở màn Chi tiết.)
Cột Số tiền = tổng số tiền các người (chỉ khi Hình thức = Tiền mặt), còn lại —.
Hình thức: Tiền mặt / Bằng khen (mã lưu trong KT_HINHTHUC; Tiền mặt =
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 "7 đợt". Mọi bản ghi khen thưởng đều có Ngày hiệu lực (điền đủ, hiển thị ở danh sách).
FR-KT-02. Chi tiết khen thưởng¶
File:
chi-tiet-khen-thuong.html?ma=...(mặc địnhQĐ-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ể.
- 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
- 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ỗ).
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.
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 (§11.7).
FR-KL-01. Danh sách kỷ luật¶
File: panel "Kỷ luật" trong
nhan-su.html#ky-luat— render từ nguồn chungky-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) — đã bỏ Xuất Excel: công ty không dùng |
| 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".
Đã 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).
FR-KL-02. Chi tiết kỷ luật¶
File:
chi-tiet-ky-luat.html?ma=...(mặc địnhQĐ-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.
- 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
- 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ỗ).
Mức độ vi phạm (badge): Nhẹ (emerald) · Trung bình (amber) · Nghiêm trọng (rose).
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.
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 / HR | Trạng thái quyết định (đã ký / đã ban hành). |
| Lãnh đạo ký duyệt | Cá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 (cần BA chốt, §11.6):
- 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¶
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ông thức (chốt từ code):
Lương tháng = P1 + P2 + P3
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 × 0.85)
Thu nhập tổng = Lương CT + Lương TV + (Phụ cấp Ăn + Xăng/ĐT + Khác)
Cộng (giảm) = Thuế TNCN + Phạt + Tạm ứng kỳ này
Thực nhận = Thu nhập tổng − Cộng
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 (mặc định 24) · 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 · Lương chính (Lương CT · Lương TV · Thu nhập tổng — tính) · Giảm trừ (Giảm trừ gia cảnh · Thuế TNCN · Phạt · 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õ (v0.5)
Phiếu lương cá nhân (?nv=NV-xxx, chỉ-xem) tách khối Phụ cấp thành từng khoản: Ăn ca ·
Xăng xe · Điện thoại · Phụ cấp khác · Tổng phụ cấp. Phụ cấp khác liệt kê từng khoản có
tên, lấy từ Thành phần lương → mục "Phụ cấp khác" của nhân viên (các khoản ngoài Ăn/Xăng
xe/Điện thoại); NV không có → hiện "Không có khoản phụ cấp khác". Tổng phụ cấp = Ăn + Xăng xe
+ Điện thoại + 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ũ.)
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, 24 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 · Lương CT/TV ·
Thu nhập tổng · GTGC · Thuế TNCN · Phạ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, gtgc, thuế, BHXH, định mức |
| Duyệt | nhap |
→ da-duyet |
| Gửi NV | 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ế/BHXH/Định mức) + giá trị + Áp dụng | ghi đè cùng giá trị mọi NV chọn |
| Header "Gửi N bảng lương cho NV" | mọi NV da-duyet |
→ cho-xn-luong |
Khu "Xác nhận của nhân viên": progress bar % đã xác nhận + đếm theo nhóm trạng thái + chip danh sách NV đang chờ/đã xác nhận/không xác nhận. (NV xác nhận thực tế ở Trang cá nhân; màn này chỉ theo dõi.)
BHXH không trừ vào Thực nhận — cần xác nhận
Code: Cộng = Thuế TNCN + Phạt + Tạm ứng — BHXH là cột nhập tay nhưng KHÔNG bị trừ vào
Thực nhận; Giảm trừ gia cảnh cũng không tham gia công thức nào. Thuế TNCN & BHXH nhập
tay (không tự tính). Rất có thể là thiếu sót nghiệp vụ (§11.5).
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.13). 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 · 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.
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 (§11.10).
9. Đặc tả dữ liệu (gợi ý)¶
Hồ sơ nhân sự (gộp cá nhân · công việc · sức khỏe)
| Cột | Kiểu | Mô tả |
|---|---|---|
| ma_nv | STRING PK | Mã NV |
| ho_ten | STRING | Họ tên |
| phong_ban_id | FK | Phòng ban |
| chuc_vu_id | FK | Chức vụ |
| vai_tro | ENUM | Vai trò phân quyền (4 vai trò, §2) |
| trang_thai | ENUM | Trạng thái làm việc |
| noi_lam_viec | JSON/ARRAY | ≥1 địa điểm chấm công (chọn nhiều) |
| ho_so_* | JSON/TEXT | Trường hồ sơ mở rộng |
Danh mục dùng chung (FR-DM-01)
| Cột | Kiểu | Mô tả |
|---|---|---|
| id | PK | Mã danh mục |
| ten | STRING | Tên |
| cach_tinh | ENUM | Riêng định mức công |
| cong_thang | INTEGER | vd 24/26/27 |
Hợp đồng lao động (1 NV có nhiều HĐ theo thời gian)
| Cột | Kiểu | Mô tả |
|---|---|---|
| ma_hd | STRING PK | Mã hợp đồng |
| ma_nv | FK | Nhân sự |
| loai | ENUM | Loại HĐ |
| luong_p1 | DECIMAL | Lương cơ bản |
| luong_p2_p3 | DECIMAL | Cấu phần lương |
| bhxh_* | DECIMAL | BHXH (nếu có) |
| trang_thai | ENUM | Trạng thái HĐ |
| tu_ngay,den_ngay | DATE | Hiệu lực |
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ột | Kiểu | Mô tả |
|---|---|---|
| so_qd | STRING PK | Số quyết định |
| nhom | ENUM | Nhóm nghiệp vụ |
| loai | ENUM | Loại theo nhóm |
| doi_tuong | ENUM | Đối tượng (KT/KL) |
| ma_nv | FK | NV liên quan |
| so_tien | DECIMAL | Tổng tiền (tính từ con) |
| ky_thang | STRING | Kỳ áp dụng lương |
| trang_thai | ENUM | |
| ngay_qd,file | MIXED | Ngày & tệp |
1 dòng = 1 NV × 1 kỳ
| Cột | Kiểu | Mô tả |
|---|---|---|
| id | PK | Mã dòng |
| ma_nv | FK | Nhân sự |
| ky | STRING | Kỳ lương |
| cau_phan_* | DECIMAL | Đầu vào lương |
| giam_tru_* | DECIMAL | Khoản giảm trừ |
| thuc_nhan | DECIMAL | Thực nhận |
| trang_thai_chi_tra | ENUM | Trạ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.13).
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
- Phân quyền theo màn — đã chốt (17/07/2026): 4 vai trò Admin / Nhân sự / Quản lý / Nhân viên + ma trận quyền ở §2. Quản lý xem hồ sơ · hợp đồng · quyết định · khen thưởng/kỷ luật · lương của chính mình + NV thuộc phòng ban mình. Còn chờ chốt: (a) định nghĩa "phòng ban của mình" khi Quản lý phụ trách nhiều phòng/công trường; (b) Admin gán qua trường "Vai trò" ở hồ sơ hay là tài khoản hệ thống riêng. (Phân quyền Công nợ → §11.13.)
- Chuẩn hoá
PAY_FLOW— một enum nguồn + state machine + quy tắc ai chuyển bậc nào (giai đoạn này chỉ tới bậc Đã xác nhận lương; các bậc công nợ giai đoạn sau, §11.13). - Bất nhất enum & tên loại hợp đồng — "Còn hiệu lực/Hết hiệu lực" vs "Đang hiệu lực/Hết hạn"; "Không thời hạn/Xác định 12 tháng" vs bộ chuẩn 4 loại; bộ lọc danh sách thiếu "Khoán việc".
- Danh mục "Chức vụ" sai dữ liệu mẫu — form Thêm quyết định đã dùng đúng chức vụ; còn dữ liệu
mẫu màn chi tiết (
cvCu/cvMoi) để IT / Hành chính–kế toán (phòng/địa điểm). Chuẩn lại theo danh mục Chức vụ. - BHXH & Giảm trừ gia cảnh không vào công thức Thực nhận; Thuế/BHXH nhập tay. Xác nhận đúng nghiệp vụ hay là thiếu sót; chốt công thức & lương thử việc 85% / định mức mặc định 24.
- Liên kết Khen thưởng (tiền) / Phạt tiền kỷ luật → Lương/Kế toán — nay đã có trường Tháng áp dụng (kỳ lương) ở cả hai (điểm neo để cộng "Thưởng" / khấu trừ "Phạt" vào Bảng lương) và màn demo Trung tâm thông báo minh hoạ định tuyến "Đưa vào bảng lương" / "Khấu trừ vào lương", nhưng luồng chuyển chứng từ chưa nối thật: cần trường tham chiếu chứng từ, quy tắc "chỉ Kế toán/Lương nhận khi có dòng tiền", và trạng thái "NLĐ đã xác nhận nhận quyết định".
- Kỷ luật thu gọn còn 2 hình thức & bỏ trục duyệt — màn Thêm/Chi tiết Kỷ luật đã bỏ 3 hình thức (Kéo dài nâng lương / Cách chức / Sa thải) và các trường Trạng thái · Người ký · Thời hạn kỷ luật; mức độ vi phạm không còn tự gợi ý theo hình thức. Cần BA xác nhận: có giữ mô hình gọn này (kỷ luật = bản ghi quyết định, không duyệt) hay khôi phục hình thức nặng + luồng ký/duyệt? (Gợi ý số tiền thưởng theo danh hiệu ở khen thưởng cũng đã bỏ khi thiết kế lại màn Thêm.)
- (Công nợ — giai đoạn sau, gộp vào §11.13) Import Excel công nợ của kế toán: định dạng cột Nợ/Có, mapping NV/kỳ/TK.
- (Công nợ — giai đoạn sau, gộp vào §11.13) Quy tắc khoá khi chi tiền & chốt kỳ: "Chi tiền không hoàn tác" vs kỳ đã chốt có "Mở lại".
- Tập trung hóa danh mục dùng chung — màn Thiết lập danh mục mới có 3 nhóm; bổ sung: loại quyết định, hình thức khen thưởng/kỷ luật, lý do nghỉ, loại hợp đồng, khoản phụ cấp/khấu trừ, người ký, nơi làm việc.
- Tuyển dụng — "Quyết định tuyển dụng" (không gắn người) có thuộc cùng thực thể Quyết định hay tách module Tuyển dụng riêng? Màn chi tiết hiện chưa hỗ trợ loại này.
- Đối tượng Tập thể lưu bằng chuỗi (phòng ban + nơi làm việc), chưa có ID — cần định danh quan hệ với master phòng ban/công trường.
- Công nợ — hoãn sang giai đoạn sau (chốt 17/07/2026): giai đoạn này SRS HCNS chưa đặc tả
nghiệp vụ Công nợ (sổ chi tiết, tổng hợp, import Excel, phân quyền công nợ, phần công nợ trong
PAY_FLOW). Các mục FR-CN-01/02, một phần §3 PAY_FLOW và §7 liên quan công nợ hiện để lại làm giai đoạn sau — không nằm trong phạm vi nghiệm thu đợt này.
Đã 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.
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 = Không xác định thời hạn Then ô Ngày kết thúc bị khoá & xoá giá trị; ẩn trường Thời hạn HĐ; vẫn yêu cầu P1.
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/Giá trị khoán/Lương thử việc) 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 NV ở trạng thái
da-duyettrong bảng lương When người làm lương bấm "Gửi NV" → NV xác nhận lương Then trạng thái lần lượtcho-xn-luong → da-xn-luong; mỗi bậc khoá số liệu tương ứng; "Trả về" đưa lạinhap. (Các bậc công nợcho-xn-cn…da-chiđể giai đoạn sau — §11.13.)
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, các khoản giảm trừ Then Thực nhận = (Lương CT + Lương TV + tổng phụ cấp) − (Thuế TNCN + Phạt + Tạm ứng), khớp công thức §FR-LU-01. (BHXH/Gtgc: theo quyết định §11.5.)
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.
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-HD-01 | Danh sách hợp đồng | nhan-su.html#hop-dong |
| FR-HD-02 | Chi tiết hợp đồng (3 tab) | chi-tiet-hop-dong-nhan-su.html |
| FR-HD-03 | Thêm hợp đồng | them-hop-dong-nhan-su.html |
| FR-QD-01 | Danh sách quyết định | nhan-su.html#quyet-dinh |
| FR-QD-02 | Chi tiết quyết định | chi-tiet-quyet-dinh.html |
| FR-QD-03 | Thêm quyết định | them-quyet-dinh.html |
| 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-LU-01 | Bảng lương chi tiết theo kỳ | chi-tiet-bang-luong.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 ghiky-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.