Bỏ qua

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

Phiên bản: 0.5 — Nháp  |  Người viết: trangth  |  Cập nhật: 21/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.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 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 (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ò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 Đã 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ố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ìnhnhâ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ê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ìnhTrang 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ớ

  • 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.13).
  • 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:

# 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ậnTrang cá nhân (cho-xn-luong → da-xn-luong)
5 khong-xn-luong Không xác nhận lương đỏ NV từ chốiTrang 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:

  1. Mọi bản ghi = Đã xác nhận lương → badge kỳ = Hoàn tất xác nhận.
  2. 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.
  3. 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ụcFR-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 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ềnBusiness 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

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 Excelmodal 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}

Quy tắc
BR-01 Phạm vi hiển thị theo vai trò: Nhân sự & Admintoà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ênkhô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ạitự đổ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ạitự đổ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}

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)

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)

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)

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.

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=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 (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):

  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 đồngFR-HD-03. 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 — 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.
  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ấnNgoạ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""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
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
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ỉ xemkhô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 sheetHợ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 file1 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ệcbá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ê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-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 Excelmodal 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-xxx3 tab

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

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-03FR-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 định QĐ-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.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" (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àyloạ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 chung khen-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 đị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ứcDanh sách người được khen (bảng) → Lý do & đợtThông tin quyết địnhTệ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ảngNhâ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=đ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.jstheo đú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 (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ật3 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 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) — đã 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 đị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ậtDanh sách người bị kỷ luật (bảng) → Lý doThông tin quyết địnhTệ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=đ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.htmlbả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áoquy 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 (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/ĐTKhá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 ứngBHXH 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 ý)

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
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ừ
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.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

  1. 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.)
  2. 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).
  3. 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".
  4. 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ụ.
  5. 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.
  6. 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".
  7. 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.)
  8. (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.
  9. (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".
  10. 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.
  11. 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.
  12. Đố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.
  13. 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§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-duyet trong 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ượt cho-xn-luong → da-xn-luong; mỗi bậc khoá số liệu tương ứng; "Trả về" đưa lại nhap. (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à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.htmlcô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.htmlbả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.