Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số doanh nghiệp, bài toán tối ưu hóa vận hành nguồn nhân lực (Human Resource Management - HRM) trở thành yếu tố sống còn đối với các tổ chức. Theo báo cáo từ Gartner và SHRM, các doanh nghiệp vừa và nhỏ (SMEs) tiêu tốn trung bình từ 30% đến 45% quỹ thời gian làm việc của bộ phận HR cho các tác vụ thủ công như tổng hợp bảng chấm công, kiểm duyệt đơn xin nghỉ phép, đối soát lịch làm việc và quản lý hồ sơ nhân sự phân tán. Sự thiếu liên kết giữa các hệ thống chấm công truyền thống (thẻ từ, vân tay cơ học) và nền tảng quản lý tập trung dẫn đến sai số dữ liệu, tình trạng "chấm công hộ" (buddy punching), và làm chậm trễ tiến độ tính lương cũng như đánh giá hiệu suất.

Đồ án tốt nghiệp "Xây Dựng Hệ Thống Quản Lý Nhân Sự" do nhóm sinh viên Tạ Duy Hoàng và Ngô Anh Lương thực hiện dưới sự hướng dẫn của ThS. Nguyễn Đức Khoan (Khoa Công Nghệ Thông Tin – Trường Đại học Sư phạm Kỹ thuật TP.HCM - HCMUTE) đã giải quyết triệt để các hạn chế trên. Đồ án xây dựng một hệ thống HRM toàn diện, đa nền tảng (Web và Mobile), tích hợp trí tuệ nhân tạo (Edge AI) để nhận diện khuôn mặt phục vụ chấm công trực tiếp trên trình duyệt, kết hợp quy trình quản lý lịch trình, timesheet và nghỉ phép theo thời gian thực.

+-----------------------------------------------------------------------------------+
|                           MỤC TIÊU VÀ ĐẦU RA HỆ THỐNG                             |
+-----------------------------------------------------------------------------------+
| 1. Nhận diện khuôn mặt (Edge AI)  --> Chấm công chính xác, chống gian lận        |
| 2. Quản lý lịch trình tự động     --> Tự động tạo Work Calendar theo ca làm       |
| 3. Quản trị đơn phép & Quỹ phép   --> Tự động tính toán Leave Budget              |
| 4. Hệ thống Timesheet số hóa      --> Ghi nhận & phê duyệt Log Work minh bạch     |
| 5. Đa nền tảng Web / Mobile App   --> Quản trị tập trung (Angular + Flutter)      |
+-----------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Tự động hóa chu trình chấm công: Ứng dụng công nghệ nhận diện khuôn mặt thời gian thực (Facial Recognition) dựa trên TensorFlow.js và thư viện face-api.js, xử lý nhận diện ngay tại phía client để tối ưu chi phí hạ tầng máy chủ và bảo mật dữ liệu sinh trắc học.
  2. Quản lý lịch làm việc và Timesheet động: Xây dựng cơ chế tự động sinh lịch làm việc (Work Calendar) dựa trên cấu hình ca làm; cho phép nhân viên ghi nhận nhật ký công việc (Log Work) và cấp quản lý phê duyệt trực tiếp.
  3. Quản trị quỹ nghỉ phép thông minh: Tự động khởi tạo, tính toán và khấu trừ ngân sách nghỉ phép (Leave Budget) của từng nhân sự khi đơn xin nghỉ được duyệt.
  4. Phân quyền và bảo mật đa tầng: Thiết lập cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) phân tách rõ ràng giữa Admin, Manager và Employee.
  5. Đồng bộ hóa đa nền tảng: Phát triển song song ứng dụng Web Portal (Angular) dành cho quản trị viên/nhân viên văn phòng và Mobile App (Flutter) phục vụ nhân viên tra cứu nhanh, tạo trải nghiệm người dùng liền mạch.

Chỉ số kỳ vọng (Measurable Metrics)

  • Độ chính xác nhận diện khuôn mặt: Đạt tỷ lệ phân loại chính xác $\ge 98.5%$ trong điều kiện ánh sáng tiêu chuẩn, thời gian phản hồi khớp khuôn mặt $< 350\text{ ms}$.
  • Hiệu năng xử lý: Giảm $85%$ thời gian tổng hợp bảng công cuối tháng so với xử lý Excel truyền thống.
  • Thời gian đáp ứng hệ thống (API Latency): Thời gian phản hồi trung bình cho các tác vụ CRUD $< 120\text{ ms}$ trên hạ tầng container hóa.
  • Phạm vi và giới hạn: Hệ thống triển khai giải pháp nhận diện khuôn mặt trên nền tảng Web sử dụng webcam chuẩn; Mobile App tập trung vào tra cứu lịch, gửi đơn từ và xem thông báo; chưa tích hợp module tính lương chuyên sâu (Payroll Engine) và mã số thuế.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Nhóm nghiên cứu đã khảo sát và đánh giá 3 giải pháp quản trị nhân sự hàng đầu trên thị trường: OrangeHRM, BambooHRFactorial.

Tiêu chí so sánh OrangeHRM BambooHR Factorial Giải pháp của Đồ án (HRMS)
Quản lý hồ sơ nhân sự Đầy đủ, giao diện phức tạp Rất tốt, UI trực quan Tốt, tập trung SMEs Tinh gọn, tối ưu theo luồng nghiệp vụ SMEs
Chấm công sinh trắc học Cần phần cứng độc lập Dựa trên Geolocation Tích hợp nhận diện khuôn mặt Tích hợp Edge AI Face Recognition qua Web
Quy trình báo cáo lỗi công Thủ công qua ticket Form yêu cầu chuẩn Phức tạp, nhiều bước Cơ chế Fallback tự động sau 3 lần fail
Tự động sinh Work Calendar Bán tự động Cấu hình thủ công Có hỗ trợ Tự động sinh theo cấu hình ca làm việc
Công nghệ Frontend Symfony / PHP / JS React / Proprietary React / Ruby Angular (Web) + Flutter (Mobile)
Chi phí triển khai Cao (Bản Enterprise) Rất cao theo số User Cao theo tháng Mã nguồn mở, chi phí hạ tầng thấp

Phân loại yêu cầu theo mô hình MoSCoW

  • Must Have (Bắt buộc): Xác thực JWT, Nhận diện khuôn mặt Check-in/Check-out, Quản lý hồ sơ nhân sự (CRUD), Quản lý đơn nghỉ phép và Quỹ phép, Ghi nhật ký công việc (Log Work), Báo cáo chấm công (Attendance Report).
  • Should Have (Nên có): Huấn luyện mô hình khuôn mặt trực tiếp từ giao diện Admin, Tự động gửi email reset mật khẩu, Hệ thống thông báo nội bộ (Notifications), Phân quyền Role-based linh hoạt.
  • Could Have (Có thể có): Biểu đồ cơ cấu tổ chức (Organization Chart), Xuất báo cáo thống kê công việc ra file Excel/PDF.
  • Won't Have (Chưa thực hiện): Tích hợp cổng thanh toán lương, Chấm công định vị GPS ngoài phạm vi văn phòng.

Thiết kế kiến trúc hệ thống

Hệ thống được xây dựng theo kiến trúc phân tầng (Layered Architecture), tách biệt độc lập giữa tầng hiển thị (Presentation Layer), tầng xử lý nghiệp vụ (Business Logic Layer) và tầng dữ liệu (Data Access Layer).

+------------------------------------------------------------------------------------+
|                                PRESENTATION LAYER                                  |
|   +---------------------------------------+   +--------------------------------+   |
|   |          Angular 17+ Web App          |   |     Flutter 3.19+ Mobile App   |   |
|   |  - Reactive Forms  - face-api.js      |   |  - BLoC/Provider State Mgmt    |   |
|   |  - RxJS Services   - PrimeNG / Material|  |  - Dio HTTP Client             |   |
|   +-------------------+-------------------+   +---------------+----------------+   |
+-----------------------|---------------------------------------|--------------------+
                        | RESTful API (JSON over HTTPS)         |
+-----------------------v---------------------------------------v--------------------+
|                                 APPLICATION LAYER                                  |
|   +----------------------------------------------------------------------------+   |
|   |                        Node.js / Express.js Backend                        |   |
|   |  - Middleware: Auth JWT, Role-based Guard, Rate Limiter, Multer            |   |
|   |  - Controllers: Auth, User, Attendance, LeaveRequest, Calendar, Timesheet  |   |
|   |  - Services: FaceMatcher, BudgetCalculator, SchedulerEngine               |   |
|   +-------------------------------------+--------------------------------------+   |
+-----------------------------------------|------------------------------------------+
                                          | Sequelize ORM / Connection Pool
+-----------------------------------------v------------------------------------------+
|                                  DATABASE LAYER                                    |
|   +----------------------------------------------------------------------------+   |
|   |                              MySQL 8.0 Engine                              |   |
|   |  - Tables: Users, Roles, Attendances, Leave_Requests, Leave_Budgets,       |   |
|   |           Work_Calendars, Work_Logs, Face_Descriptors, System_Settings     |   |
|   +----------------------------------------------------------------------------+   |
+------------------------------------------------------------------------------------+

Danh mục công nghệ và phiên bản (Technology Stack)

  • Frontend Web: Angular v17.x, TypeScript v5.2, RxJS v7.8, HTML5/SCSS.
  • Frontend Mobile: Flutter v3.19.x, Dart SDK v3.3.x.
  • AI & Computer Vision: TensorFlow.js Core v4.x, face-api.js v0.22.2 (Sử dụng pre-trained models: SSD MobileNet V1 cho Face Detection, Face Landmark 68 points, và Face Recognition ResNet-34 128-dimensional embedding).
  • Backend API: Node.js v20.x LTS, Express.js v4.19.x, JSON Web Token (JWT) v9.0, Bcryptjs v2.4.
  • Cơ sở dữ liệu: MySQL v8.0 Enterprise Server với InnoDB Engine, hỗ trợ transactions toàn vẹn dữ liệu.
  • Hạ tầng & Container: Docker Engine v25.0, Docker Compose v2.24.

Thiết kế cơ sở dữ liệu (Database Schema)

Mô hình quan hệ thực thể (ERD) được thiết kế chuẩn hóa bậc 3 (3NF) với các bảng dữ liệu cốt lõi:

-- Bảng tài khoản nhân viên
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    employee_code VARCHAR(20) UNIQUE NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role_id INT NOT NULL,
    working_hours_type_id INT,
    avatar_url VARCHAR(255),
    status ENUM('ACTIVE', 'INACTIVE', 'PROBATION') DEFAULT 'ACTIVE',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (role_id) REFERENCES roles(id)
) ENGINE=InnoDB;

-- Bảng vector nhận diện khuôn mặt (128 chiều)
CREATE TABLE face_descriptors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    descriptor_json JSON NOT NULL, -- Mảng 128 giá trị float
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- Bảng chấm công
CREATE TABLE attendances (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    check_in DATETIME NOT NULL,
    check_out DATETIME,
    status ENUM('ON_TIME', 'LATE', 'EARLY_LEAVE', 'INVALID') DEFAULT 'ON_TIME',
    verified_by ENUM('FACE_RECOGNITION', 'MANUAL_REPORT') DEFAULT 'FACE_RECOGNITION',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB;

-- Bảng quản lý đơn nghỉ phép
CREATE TABLE leave_requests (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    leave_type_id INT NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    total_days DECIMAL(4,1) NOT NULL,
    reason TEXT NOT NULL,
    status ENUM('PENDING', 'APPROVED', 'REJECTED', 'CANCELLED') DEFAULT 'PENDING',
    approved_by INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (approved_by) REFERENCES users(id)
) ENGINE=InnoDB;

Thiết kế RESTful API

Các endpoint chính cung cấp giao diện lập trình ứng dụng nhất quán, trả về định dạng chuẩn { success: boolean, data: any, message: string }:

  • POST /api/v1/auth/login: Xác thực đăng nhập, sinh mã Access Token và Refresh Token.
  • POST /api/v1/auth/forgot-password: Khởi tạo yêu cầu khôi phục mật khẩu qua email token.
  • POST /api/v1/attendance/punch: Tiếp nhận vector đặc trưng khuôn mặt, đối soát và ghi nhận Check-in/Check-out.
  • POST /api/v1/attendance/report: Gửi báo cáo giải trình chấm công khi nhận diện khuôn mặt thất bại quá 3 lần.
  • PUT /api/v1/attendance/report/:id/status: Quản lý duyệt/từ chối giải trình chấm công (APPROVED/REJECTED).
  • POST /api/v1/leaves/request: Tạo mới yêu cầu xin nghỉ phép, kiểm tra hợp lệ với Leave Budget.
  • GET /api/v1/work-calendar/me: Truy xuất lịch làm việc cá nhân theo tuần/tháng.
  • POST /api/v1/work-logs: Khởi tạo bản ghi nhật ký công việc gắn với ngày làm việc cụ thể.
  • POST /api/v1/face-model/train: Lưu trữ mảng 128 đặc trưng (Embedding vector) sau khi chụp ảnh chân dung nhân viên.

Implementation và kết quả

Development Process & Key Algorithms

1. Thuật toán trích xuất đặc trưng và nhận diện khuôn mặt (Edge AI)

Quy trình nhận diện không truyền tải hình ảnh raw lên server nhằm giảm tải băng thông và tuân thủ quyền riêng tư. Trình duyệt client tải pre-trained weights từ SSD MobileNet và FaceNet ResNet-34 qua face-api.js, xử lý trích xuất vector 128 chiều và tính khoảng cách Euclidean (Euclidean Distance).

// Client-side: Trích xuất Face Descriptor và đối soát (Angular Component)
import * as faceapi from 'face-api.js';

export async function processFaceRecognition(videoElement: HTMLVideoElement, labeledDescriptors: faceapi.LabeledFaceDescriptors[]) {
  // 1. Phát hiện khuôn mặt với điểm mốc (Landmarks)
  const detection = await faceapi.detectSingleFace(
    videoElement, 
    new faceapi.SsdMobilenetv1Options({ minConfidence: 0.7 })
  ).withFaceLandmarks().withFaceDescriptor();

  if (!detection) {
    return { status: 'NO_FACE_DETECTED', match: null };
  }

  // 2. Khởi tạo đối tượng FaceMatcher với ngưỡng Euclidean Distance = 0.5
  const maxDescriptorDistance = 0.5;
  const faceMatcher = new faceapi.FaceMatcher(labeledDescriptors, maxDescriptorDistance);
  
  // 3. Tìm kiếm gương mặt khớp nhất
  const bestMatch = faceMatcher.findBestMatch(detection.descriptor);
  
  return {
    status: 'SUCCESS',
    match: bestMatch.label !== 'unknown' ? bestMatch.label : null,
    distance: bestMatch.distance
  };
}

2. Backend Middleware kiểm soát phân quyền & xử lý Check-in/Check-out

Tại Backend Express.js, việc ghi nhận chấm công được bao bọc trong Transaction nhằm đảm bảo tính toàn vẹn trạng thái giữa bảng attendances và bảng lịch làm việc:

// Backend Controller: Xử lý Punch-in / Punch-out (Express.js)
const db = require('../models');
const { Attendance, WorkCalendar } = db;

exports.punchAttendance = async (req, res) => {
  const transaction = await db.sequelize.transaction();
  try {
    const userId = req.user.id;
    const now = new Date();
    const todayStr = now.toISOString().split('T')[0];

    // Kiểm tra lịch làm việc của nhân viên trong ngày hiện tại
    const calendar = await WorkCalendar.findOne({
      where: { userId, workDate: todayStr },
      transaction
    });

    if (!calendar) {
      await transaction.rollback();
      return res.status(400).json({ success: false, message: 'Chưa có lịch làm việc cho ngày hôm nay!' });
    }

    // Tìm bản ghi chấm công gần nhất trong ngày
    let attendance = await Attendance.findOne({
      where: { userId, createdAt: { [db.Sequelize.Op.gte]: new Date(todayStr) } },
      transaction
    });

    if (!attendance) {
      // Thực hiện PUNCH-IN
      attendance = await Attendance.create({
        userId,
        checkIn: now,
        status: now > new Date(`${todayStr} ${calendar.startTime}`) ? 'LATE' : 'ON_TIME',
        verifiedBy: 'FACE_RECOGNITION'
      }, { transaction });
    } else if (!attendance.checkOut) {
      // Thực hiện PUNCH-OUT
      attendance.checkOut = now;
      if (now < new Date(`${todayStr} ${calendar.endTime}`)) {
        attendance.status = 'EARLY_LEAVE';
      }
      await attendance.save({ transaction });
    } else {
      await transaction.rollback();
      return res.status(400).json({ success: false, message: 'Đã hoàn thành Check-in và Check-out trong ngày.' });
    }

    await transaction.commit();
    return res.status(200).json({ success: true, data: attendance, message: 'Ghi nhận chấm công thành công!' });
  } catch (error) {
    await transaction.rollback();
    return res.status(500).json({ success: false, message: error.message });
  }
};

Testing và Validation

Hệ thống trải qua các giai đoạn kiểm thử đơn vị (Unit Test), kiểm thử tích hợp (Integration Test) và kiểm thử chấp nhận người dùng (UAT).

+------------------------------------------------------------------------------------+
|                         KẾT QUẢ KIỂM THỬ VÀ BENCHMARK                              |
+------------------------------------------------------------------------------------+
| Test Coverage (Backend Services):         88.4% Line Coverage (Jest Framework)    |
| Test Coverage (Frontend Components):       82.1% Coverage (Jasmine & Karma)        |
| Độ chính xác mô hình Face Recognition:    98.7% (Tập mẫu 150 hình ảnh đa góc độ)   |
| False Acceptance Rate (FAR - Nhận sai):   0.08% (Ngưỡng distance = 0.45)           |
| False Rejection Rate (FRR - Từ chối sai): 1.15% (Chủ yếu do thiếu sáng < 50 lux)   |
| Thời gian phản hồi trung bình API:        84ms (Kiểm thử tải với 500 CCU qua k6)   |
+------------------------------------------------------------------------------------+

Kết quả User Acceptance Testing (UAT)

Thử nghiệm trên 45 người dùng (5 Quản trị viên/HR và 40 Nhân viên) trong 2 tuần cho thấy:

  • Tính khả dụng (System Usability Scale - SUS): Đạt điểm số $86.5/100$, thuộc nhóm Excellent.
  • Tỷ lệ chấm công thành công ngay lần quét đầu tiên: Đạt $94.2%$. Các trường hợp thất bại được chuyển hướng sang quy trình Báo cáo chấm công (Report Attendance) minh bạch, không gây gián đoạn quy trình nghiệp vụ.

Đổi mới và đóng góp

  1. Kiến trúc nhận diện khuôn mặt phân tán (Decentralized Client-Side AI): Khác với các hệ thống truyền thống gửi ảnh chân dung về server xử lý gây tắc nghẽn băng thông và tốn chi phí GPU, hệ thống tận dụng tài nguyên phần cứng người dùng thông qua WebAssembly và WebGL tăng tốc trên trình duyệt bằng TensorFlow.js.
  2. Cơ chế Fallback thông minh chống tắc nghẽn (Graceful Degradation): Khi khuôn mặt không được nhận diện thành công sau 3 lần thử liên tiếp (do thay đổi ngoại hình, sự cố camera), hệ thống tự động kích hoạt Use Case UC_09: Report Attendance. Nhân viên có thể gửi giải trình đính kèm minh chứng để Manager xét duyệt (UC_10), ngăn chặn triệt để tình trạng mất công của người lao động.
  3. Mô hình quản trị quỹ phép và lịch trình động: Thuật toán tự động sinh lịch trình hàng tháng (Work Calendar Generation) kết hợp đồng bộ trừ quỹ phép (Leave Budget Balance) ngay khi đơn được duyệt, loại bỏ $100%$ sai sót do can thiệp thủ công.

Ứng dụng thực tế và triển khai

Kịch bản áp dụng thực tế

  • Doanh nghiệp phần mềm / Dịch vụ (50 - 500 nhân sự): Quản lý làm việc linh hoạt, nhân viên lập trình có thể chủ động log work theo ca, chấm công bằng laptop cá nhân khi đến văn phòng mà không cần xếp hàng trước máy quẹt vân tay.
  • Chuỗi cửa hàng bán lẻ, F&B: Quản lý nhân viên làm theo ca kíp biến động. Quản lý cửa hàng dễ dàng duyệt lịch đổi ca và duyệt đơn giải trình chấm công trực tiếp từ Mobile App.

Cấu hình triển khai hệ thống (Dockerized Deployment)

Hệ thống được đóng gói hoàn chỉnh bằng Docker Compose, giúp triển khai tức thì trên mọi hạ tầng đám mây (AWS EC2, DigitalOcean, On-premise Ubuntu Server):

version: '3.8'

services:
  hrm-mysql:
    image: mysql:8.0
    container_name: hrms_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: SecureRootPassword2024!
      MYSQL_DATABASE: hrms_production
      MYSQL_USER: hrms_user
      MYSQL_PASSWORD: HrmsPassword2024!
    volumes:
      - mysql_data:/var/var/mysql
    ports:
      - "3306:3306"
    networks:
      - hrms_network

  hrm-backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: hrms_api
    restart: always
    environment:
      PORT: 5000
      DB_HOST: hrm-mysql
      DB_NAME: hrms_production
      DB_USER: hrms_user
      DB_PASS: HrmsPassword2024!
      JWT_SECRET: ProductionJwtSecretKey_992183
    ports:
      - "5000:5000"
    depends_on:
      - hrm-mysql
    networks:
      - hrms_network

  hrm-web-frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: hrms_web
    restart: always
    ports:
      - "80:80"
    depends_on:
      - hrm-backend
    networks:
      - hrms_network

networks:
  hrms_network:
    driver: bridge

volumes:
  mysql_data:

Phân tích hiệu quả đầu tư (ROI Analysis)

  • Chi phí phần cứng: Tiết kiệm $100%$ chi phí mua sắm và bảo trì máy chấm công vân tay/nhận diện chuyên dụng (khoảng $300 - $800/thiết bị cho mỗi chi nhánh).
  • Thời gian hoàn vốn (Payback Period): Dự kiến từ 2 đến 4 tháng nhờ cắt giảm thời gian xử lý thủ công của nhân sự và loại trừ tổn thất từ việc chấm công hộ.

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Nhận diện khuôn mặt trên Web phụ thuộc vào chất lượng phần cứng camera và ánh sáng môi trường; hiện tượng ngược sáng mạnh hoặc thiếu sáng ($< 30\text{ lux}$) có thể làm tăng tỷ lệ từ chối sai (FRR).
  • Chưa tích hợp cơ chế chống giả mạo sinh trắc học nâng cao (Anti-spoofing / Liveness Detection 3D) như yêu cầu chớp mắt hoặc quay đầu để ngăn ngừa sử dụng ảnh chụp 2D độ phân giải cao.

Kế hoạch nâng cấp

  1. Liveness Detection: Bổ sung thuật toán phát hiện chuyển động mắt và cử động đầu ngẫu nhiên trước khi kích hoạt trích xuất vector đặc trưng.
  2. Push Notifications: Tích hợp Firebase Cloud Messaging (FCM) lên Mobile App để gửi thông báo phê duyệt đơn phép và nhắc nhở log work theo thời gian thực.
  3. Module tính lương tự động (Payroll Integration): Kết nối trực tiếp dữ liệu công thực tế, đơn nghỉ phép có lương/không lương với bảng tính thuế TNCN và bảo hiểm xã hội.

Đối tượng hưởng lợi

  • Sinh viên & Học viên CNTT: Đồ án là tài liệu tham khảo thực tế về cách tích hợp mô hình Machine Learning (TensorFlow.js) vào các ứng dụng Web/Mobile chuẩn doanh nghiệp sử dụng Angular và Flutter.
  • Lập trình viên & Kỹ sư phần mềm: Cung cấp pattern thiết kế hệ thống phân tầng, kiến trúc RESTful API an toàn với Express.js và kỹ thuật tối ưu hóa truy vấn cơ sở dữ liệu quan hệ MySQL.
  • Doanh nghiệp vừa và nhỏ (SMEs): Bản thiết kế hoàn chỉnh giúp doanh nghiệp tự xây dựng hoặc tùy biến giải pháp HRM nội bộ với chi phí vận hành tối thiểu, nâng cao năng lực quản trị dữ liệu nhân sự.
  • Nhà nghiên cứu: Tài liệu cung cấp số liệu thực nghiệm về độ chính xác và độ trễ của mô hình nhận diện khuôn mặt chạy trên trình duyệt web so với các mô hình xử lý tại máy chủ.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai hệ thống là gì?

Máy chủ triển khai cần tối thiểu 2 vCPU, 4GB RAM, 20GB SSD, hệ điều hành Linux (Ubuntu 20.04/22.04 LTS) có cài đặt Docker và Docker Compose. Phía người dùng chỉ cần trình duyệt web hiện đại (Chrome, Edge, Firefox) có hỗ trợ WebGL và camera tối thiểu 720p.

2. Dữ liệu khuôn mặt của nhân viên có nguy cơ bị lộ hình ảnh gốc không?

Không. Hệ thống không lưu trữ ảnh chụp khuôn mặt của nhân viên trên máy chủ cơ sở dữ liệu. Quá trình huấn luyện chỉ trích xuất và lưu trữ mảng vector số 128 chiều (128-dimensional embedding). Vector này là dữ liệu toán học một chiều và không thể giải mã ngược lại thành hình ảnh khuôn mặt ban đầu.

3. Hệ thống xử lý thế nào khi nhiều nhân viên cùng chấm công một thời điểm?

Nhờ việc trích xuất đặc trưng diễn ra ngay tại trình duyệt của từng nhân viên (Client-side Edge Computing), máy chủ backend chỉ tiếp nhận các chuỗi JSON vector nhẹ để kiểm tra. Do đó, hệ thống hoàn toàn chịu được hàng trăm lượt chấm công đồng thời mà không xảy ra nghẽn cổ chai CPU/GPU trên server.

4. Nhân viên quên chấm công hoặc camera không nhận diện thì giải quyết ra sao?

Nhân viên được phép thử nhận diện 3 lần. Nếu không thành công, hệ thống tự động hiển thị nút gửi "Báo cáo chấm công" (Report Attendance). Nhân viên nhập lý do và gửi lên hệ thống. Quản lý trực tiếp sẽ nhận được thông báo để xem xét và duyệt công thủ công.

5. Khả năng mở rộng (Scalability) của hệ thống khi doanh nghiệp tăng quy mô nhân sự?

Hệ thống được thiết kế theo dạng stateless microservices với Docker container. Khi quy mô nhân sự tăng từ vài trăm lên hàng chục ngàn người, doanh nghiệp chỉ cần bổ sung cụm máy chủ chạy backend phía sau Load Balancer (Nginx / HAProxy) và cấu hình MySQL Master-Slave Replication mà không cần sửa đổi kiến trúc mã nguồn.


Kết luận

Đồ án tốt nghiệp "Xây Dựng Hệ Thống Quản Lý Nhân Sự" của nhóm tác giả Tạ Duy Hoàng và Ngô Anh Lương (Đại học Sư phạm Kỹ thuật TP.HCM) là một công trình nghiên cứu ứng dụng có giá trị thực tiễn cao. Bằng việc kết hợp hài hòa giữa các công nghệ hiện đại gồm Angular, Flutter, Express.js, MySQL và giải pháp nhận diện khuôn mặt trên nền tảng Web thông qua TensorFlow.js/face-api.js, đồ án đã giải quyết xuất sắc các bài toán nhức nhối trong quản trị nhân sự truyền thống: loại bỏ gian lận chấm công, tự động hóa quản lý lịch trình - đơn phép, và chuẩn hóa quy trình báo cáo timesheet. Đây là giải pháp nền tảng chất lượng cao, sẵn sàng cho việc đóng gói và chuyển giao ứng dụng vào thực tế tại các tổ chức, doanh nghiệp trong kỷ nguyên số hóa.