Skip to content

Achievement - Business Rules

Mục đích

Module achievement quản lý 2 lớp nghiệp vụ riêng nhưng dùng chung khái niệm “huy hiệu”:

  • achievement_management: xem danh sách huy hiệu đã gắn cho nhân viên hoặc phòng ban, sau đó drill-down vào detail theo từng cá nhân/phòng ban.
  • program_management: tạo, sửa, xem, import và áp dụng chương trình huy hiệu cho nhân viên hoặc phòng ban.

Module chạy trên frontend Admin, route gốc là /a và chỉ hiển thị trên PLATFORM_ADMIN theo cấu hình navigation của module.

Phạm vi nghiệp vụ

NhánhMục tiêuĐối tượng dữ liệu
Quản lý huy hiệu cá nhânTheo dõi huy hiệu đã nhận của từng nhân viênachievement, employee_achievement_link, program
Quản lý huy hiệu phòng banTheo dõi huy hiệu đã nhận của từng phòng bandepartment_achievement, department_achievement_link, department_program
Quản lý chương trình cá nhânTạo và áp dụng chương trình huy hiệu cho nhân viênprogram, program_achievement_link, program_manager_link, employee_achievement_link
Quản lý chương trình phòng banTạo và áp dụng chương trình huy hiệu cho phòng bandepartment_program, department_program_achievement_link, department_program_manager_link, department_achievement_link

Màn hình chính

Màn hìnhRouteChức năng
Quản lý huy hiệu/a/achievement-managementTab cá nhân / phòng ban, danh sách huy hiệu, mở detail theo record
Chi tiết nhân viên/a/achievement-management/account/:accountCodeXem tất cả huy hiệu của 1 nhân viên, lọc theo chương trình/ngày/từ khóa
Chi tiết phòng ban/a/achievement-management/department/:departmentCodeXem tất cả huy hiệu của 1 phòng ban, lọc theo chương trình/ngày/từ khóa
Quản lý chương trình/a/achievement-programTab cá nhân / phòng ban, tạo/sửa/xem chương trình, import Excel, áp dụng huy hiệu

Vai trò và quyền

4.1 Quyền hiển thị module

Module được gắn cho các role trong role_module và có gate ở frontend:

  • it_leader
  • it_staff
  • hr_leader
  • hr_staff
  • bod
  • content_leader

4.2 Quyền thao tác

Khu vựcĐiều kiện
Menu Huy hiệuCần có module achievement và đang ở PLATFORM_ADMIN
Tab Quản lý huy hiệuCần thuộc FULL_ACHIEVEMENT_MANAGEMENT_ROLES
Tab Quản lý chương trìnhLuôn thấy trong module, nhưng dữ liệu trả về vẫn bị lọc theo manager nếu không có full-scope
Nút Tạo chương trìnhChỉ hiện cho full-scope roles
Xem danh sách chương trìnhNgười không full-scope chỉ thấy chương trình mà mình là manager

FULL_ACHIEVEMENT_MANAGEMENT_ROLES hiện gồm ITLeader, ITStaff, HRLeader, BOD, ContentLeader (diva-admin/src/modules/achievement/types.ts).

Luồng nghiệp vụ chính

5.1 Quản lý huy hiệu cá nhân / phòng ban

  1. Người dùng vào /a/achievement-management.
  2. UI mặc định mở tab cá nhân nếu query tab không được truyền.
  3. Danh sách bên trái load toàn bộ huy hiệu bằng infinite scroll + search.
  4. Chọn 1 huy hiệu để load bảng record bên phải.
  5. Click vào dòng record để mở detail theo nhân viên hoặc phòng ban.
  6. Detail screen cho phép lọc theo từ khóa, chương trình và ngày nhận huy hiệu.

5.2 Tạo / cập nhật chương trình

  1. Người dùng vào /a/achievement-program.
  2. Chọn tab cá nhân hoặc phòng ban.
  3. Nút Tạo chương trình mở form ProgramForm.
  4. Form yêu cầu: tên, thời gian bắt đầu/kết thúc, danh sách huy hiệu áp dụng, người phụ trách, mô tả.
  5. Khi lưu:
    • create: insert_program / insert_department_program kèm nested insert vào bảng link.
    • update: update_program_by_pk / update_department_program_by_pk rồi xóa và chèn lại toàn bộ link.

5.3 Áp dụng huy hiệu hàng loạt

  1. Người dùng mở dialog Áp dụng huy hiệu.
  2. Chọn chương trình.
  3. Chọn ngày áp dụng, danh sách huy hiệu trong chương trình.
  4. Chọn một số nhân viên/phòng ban hoặc chọn toàn bộ.
  5. Hệ thống tạo danh sách link và gọi mutation bulk insert.

5.4 Import Excel

  1. Người dùng mở dialog Nhập dữ liệu.
  2. Tải file .xlsx theo template.
  3. Hệ thống đọc file, kiểm tra:
    • số cột,
    • chương trình có được phép thao tác,
    • huy hiệu có thuộc chương trình,
    • nhân viên/phòng ban có tồn tại,
    • ngày hợp lệ.
  4. Nếu file hợp lệ mới cho phép import vào employee_achievement_link hoặc department_achievement_link.

Quy tắc nghiệp vụ nổi bật

Quy tắc
BR-ACH-001Chương trình phải có duration_fromduration_to, và duration_from <= duration_to.
BR-ACH-002Chương trình chỉ được áp dụng các huy hiệu nằm trong danh sách achievements của chính chương trình đó.
BR-ACH-003Import Excel chỉ chấp nhận file .xlsx có đúng 4 cột theo template.
BR-ACH-004Người không có full-scope chỉ thao tác được trên chương trình mà mình là manager.
BR-ACH-005Detail screen luôn lọc dữ liệu theo chương trình đang xem, rồi mới lọc tiếp theo keyword / phòng ban / ngày.
BR-ACH-006Phần áp dụng bulk sinh 1 record cho mỗi cặp achievement_code x account_code hoặc department_code.

Tích hợp với module khác

ModuleVai trò tích hợp
settingsCung cấp UI chọn huy hiệu (AchievementSelect, AchievementDepartmentSelect) và UI render huy hiệu (AchievementDisplay)
userCung cấp chọn nhân viên, phòng ban, avatar và các query account/department
crm-api backendCó action applyEmployeeProgram để nhân bản huy hiệu của program sang link nhân viên
controller backendLưu toàn bộ bảng chương trình, link huy hiệu, link manager và link phát hành

Rủi ro / Findings

MứcMô tả
P1Bulk import đang đọc Excel bằng sheet.eachRow(async ...) nhưng không await từng row, nên progress/result có thể kết thúc trước khi các kiểm tra async xong.
P2Cơ chế lưu userBehavior đang dùng key đọc và key ghi khác nhau giữa table và detail, nên page size có thể không được persist đúng.
P2Luồng “áp dụng cho tất cả” phụ thuộc vào data đã load đủ qua infinite scroll; nếu chưa nạp hết danh sách thì tập dữ liệu submit có thể chưa đầy đủ.