Bỏ qua để đến nội dung

Quản lý Employees

Danh sách nhân viên: lọc theo trạng thái Probation/Active/Resigned, các cột mã NV, phòng ban, chức danh, ngày vào

Trang /hr/employees là bảng lọc phía client (toàn bộ people đã tải sẵn qua usePeople()), không phân trang server:

  • Tab theo stageAll / Probation / Active / Resigned, mỗi tab hiện số đếm ngay trên nhãn.
  • Lọc theo Department — dropdown liệt kê toàn bộ phòng ban.
  • Tìm kiếm — khớp theo tên hiển thị, email, mã nhân viên (employee_id) hoặc chức danh (job_title).
  • Cột hiển thị: Name (avatar + email), Employee ID, Department, Job title, Employment type, Start date, Stage (badge màu).

Không có kết quả nào khớp filter → hiện empty state kèm nút Clear filters; danh sách rỗng hoàn toàn → hiện nút Add Employee ngay tại đó.

Nút Add Employee mở employee-form-modal.vue — form tối thiểu:

Field Ghi chú
first_name Bắt buộc — nút Save chỉ bật khi có giá trị
last_name, email, phone Tuỳ chọn
department_id, employment_type_id M2O tới hr_departments / hr_employment_types
job_title, start_date Tuỳ chọn

Form gửi stage: 'probation' cố định — tạo trực tiếp một employee mới (không đi qua pipeline Talent). Backend tạo/tìm contact tương ứng theo email trước khi tạo satellite hr_people (xem Tích hợp Contacts) — form không cần chọn contact thủ công.

Mở một dòng trong danh sách vào /hr/employees/:id — trang con mặc định redirect sang tab Profile. Hồ sơ có 6 tab (route riêng từng tab, share state qua useEmployeeDetail()):

Profile

Header avatar/tên/chức danh + badge stage. Chế độ xem: 2 cột Contact (email/phone/date of birth) và Employment (employee_id, job_title, start date + số năm thâm niên tự tính). Bấm Edit chuyển sang form đầy đủ field (họ tên, liên hệ, department, employment type…).

Employment

3 khối con: Contract (loại hợp đồng, ngày bắt đầu/kết thúc, ngày hết thử việc, số lần gia hạn), Compensation (lương cơ bản, chu kỳ trả + danh sách allowance thêm/xoá được), Insurance (số sổ BHXH/BHYT + badge trạng thái đủ điều kiện, có thể override thủ công qua modal riêng).

Assets

Danh sách thiết bị đang cấp phát (laptop, điện thoại, thẻ ra vào…) — cấp mới, đánh dấu đã trả, huỷ, xem chi tiết kèm ảnh trong slideover. Thiết bị đã trả gộp vào accordion riêng bên dưới.

Provisioning

Trạng thái tài khoản trên các hệ thống bên thứ 3 (Authentik/Webhook, cấu hình ở Settings → Integrations) — mỗi provider 1 dòng: trạng thái (active/disabled/not_created/error), username, lần hành động gần nhất. Có nút Retry khi lỗi, Create account khi chưa tạo.

Offboarding

Chỉ có nội dung khi employee đang có/đã có 1 hr_offboarding case. Checklist các đầu việc rời đi (thu hồi tài sản, deprovision tài khoản, exit interview, quyết toán…), tính toán ngày phép còn lại + số tiền payout, và nút Finalize/Cancel case. Case cũ hơn xem trong mục lịch sử (đọc-only).

Activity

Timeline hoạt động trên hồ sơ + khung ghi note nội bộ (không gửi cho ai, chỉ hiển thị trong HR).

Tab Employment, Assets, Provisioning chỉ render khi stage đang ở probation/active/resigned — mở nhầm URL khi person còn ở stage talent sẽ tự redirect về tab Profile.

Khu vực Documents (đọc từ hr_documents) hiển thị danh sách file đã có trên hồ sơ — tên, danh mục, ngày tạo, badge trạng thái (generated/signed/pending/expired/archived), tải về hoặc xoá.

Theo bảng phân quyền hr:* (chi tiết đầy đủ):

  • sensitive.read — bắt buộc để thấy Compensation, Insurance và Documents. Không có quyền này (vd HR Recruiter, HR Viewer) sẽ thấy ô khoá kèm icon 🔒 thay vì dữ liệu.
  • sensitive.update — bắt buộc để sửa Compensation/Insurance/Documents; thiếu quyền này thì các khối đó hiển thị nhưng ở chế độ đọc.
  • create/update/delete — tạo/sửa/xoá employee record nói chung (Profile, Employment, Assets…). HR Recruiter không có các quyền này — họ chỉ chạm được vào Talents.