Đặc tả Yêu cầu Phần mềm

Module Tuyển dụng
RECR
Phiên bản1.0
Hệ thốngHệ thống Quản lý Nhân sự
ModuleRECR - Tuyển dụng
Cơ sở dữ liệurecr_db
Ngày2026-07-31
Tác giảNam Nguyen
Trạng tháiBản nháp

Mục lục

1. Giới thiệu

1.1 Mục đích

Tài liệu này định nghĩa các yêu cầu phần mềm cho module Tuyển dụng của Hệ thống Quản lý Nhân sự.

1.2 Phạm vi

Module Tuyển dụng quản lý quy trình tuyển dụng từ đầu đến cuối với hệ thống vai trò hai cấp. Vai trò cấp hệ thống (user, super_admin) được quản lý bởi module AUTH. Vai trò cấp tổ chức (HR, Candidate, Employer) được quản lý trong nội bộ tổ chức. Người dùng tự đăng ký với vai trò hệ thống user và nhận vai trò cấp tổ chức khi tham gia hoặc được thêm vào một tổ chức.

1.3 Phụ thuộc Module

ModuleLoại Phụ thuộcMô tả
AUTHBắt buộcXác thực người dùng và kiểm soát truy cập dựa trên vai trò
FILEBắt buộcLưu trữ tệp cho hồ sơ xin việc và tệp đính kèm của ứng viên (URL tải lên/tải xuống presigned, quản lý metadata tệp)
LOGTùy chọnGhi nhật ký sự kiện cho truy vết kiểm toán

1.4 Định nghĩa

Thuật ngữĐịnh nghĩa
SRSĐặc tả Yêu cầu Phần mềm
FRYêu cầu Chức năng
NFRYêu cầu Phi chức năng
UCTrường hợp sử dụng
DRYêu cầu Dữ liệu
IRYêu cầu Tích hợp

1.5 Vai trò Người dùng

Vai trò Cấp hệ thống (được quản lý bởi module AUTH)

Vai tròMô tảTạo mớiQuyền hạn Chính
userVai trò mặc định cho người dùng tự đăng kýTự đăng ký qua POST /recr/auth/registerTạo tổ chức, truy cập các tính năng cơ bản
super_adminQuản trị viên hệ thốngChỉ được tạo bởi admin hiện có (không tự đăng ký)Truy cập toàn bộ hệ thống, quản lý tất cả tổ chức và người dùng

Vai trò Cấp tổ chức (được quản lý trong nội bộ tổ chức)

Vai tròMô tảTạo mớiQuyền hạn Chính
CandidateNgười tìm việc đang tìm kiếm việc làm trong một tổ chứcĐược giao bởi chủ sở hữu/quản trị viên tổ chứcDuyệt việc làm, nộp hồ sơ ứng tuyển, xem trạng thái hồ sơ, quản lý hồ sơ cá nhân
HRThành viên đội ngũ tuyển dụng nội bộ trong một tổ chứcĐược giao bởi chủ sở hữu/quản trị viên tổ chứcDuyệt hồ sơ ứng tuyển, lên lịch phỏng vấn, đánh giá ứng viên, quản lý đề nghị tuyển dụng, tạo báo cáo
EmployerChủ sở hữu/quản trị viên tổ chức đăng tin tuyển dụngĐược giao bởi chủ sở hữu/quản trị viên tổ chức (thường là người tạo tổ chức)Tạo tin tuyển dụng, xem người nộp đơn, duyệt tin tuyển dụng, xem phân tích

Lưu ý: Một người dùng có thể có các vai trò cấp tổ chức khác nhau trong các tổ chức khác nhau. Vai trò cấp hệ thống xác định những gì người dùng có thể thực hiện trên toàn hệ thống, trong khi vai trò cấp tổ chức xác định những gì người dùng có thể thực hiện trong một tổ chức cụ thể.

2. Tổng quan Module

2.1 Mô tả Module

Thuộc tínhGiá trị
Mã ModuleRECR
Tên ModuleTuyển dụng
Mô tảQuản lý tuyển dụng từ đầu đến cuối với hệ thống vai trò hai cấp: vai trò hệ thống (user, super_admin) và vai trò tổ chức (Candidate, HR, Employer). Tích hợp với module FILE để lưu trữ hồ sơ xin việc an toàn qua URL presigned.
Cơ sở dữ liệurecr_db
Bảngrecr_users, recr_candidates, recr_candidate_resumes, recr_employers, recr_hr_profiles, recr_jobs, recr_applications, recr_interviews, recr_evaluations, recr_job_requirements, recr_subscription_plans, recr_subscriptions, recr_subscription_history, recr_job_reviews, recr_candidate_reviews, recr_invitations
Công nghệNode.js, NestJS, PostgreSQL, Drizzle ORM, RabbitMQ, Elasticsearch

2.2 Sơ đồ Trường hợp sử dụng

Sơ đồ Trường hợp sử dụng
Hình 1: Sơ đồ Trường hợp sử dụng Tuyển dụng (3 Vai trò)

3. Chi tiết Đặc tả Trường hợp sử dụng

3.1 UC-09: Đăng tin Việc làm

TrườngMô tả
Mã Trường hợp sử dụngUC-09
TênĐăng tin Việc làm
Tác nhânHR, Employer
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Điều kiện thành côngViệc làm được tạo và gửi để duyệt
Kích hoạtNgười dùng nhấn "Tạo Việc làm mới"

Luồng Chính:

  1. Người dùng điều hướng đến trang quản lý việc làm
  2. Người dùng nhập chi tiết việc làm (tiêu đề, mô tả, phòng ban, địa điểm)
  3. Người dùng nhập khoảng lương và loại hình việc làm
  4. Người dùng thêm yêu cầu việc làm
  5. Hệ thống lưu việc làm dưới dạng bản nháp với người dùng là chủ sở hữu
  6. Người dùng gửi việc làm để duyệt
  7. Hệ thống cập nhật trạng thái thành "pending_approval"
  8. Hệ thống thông báo cho HR (nếu HR tạo) hoặc thông báo cho admin (nếu Employer tạo)

Lưu ý: Đăng ký là tùy chọn. Người dùng có đăng ký sẽ được các tính năng cao cấp như ưu tiên đăng tin, tin được giới thiệu.

Sơ đồ Hoạt động UC-09
Hình 2: UC-09 Đăng tin Việc làm - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-09
Hình 3: UC-09 Đăng tin Việc làm - Sơ đồ Chuỗi

3.2 UC-10: Quản lý Việc làm

TrườngMô tả
Mã Trường hợp sử dụngUC-10
TênQuản lý Việc làm
Tác nhânHR, Employer
Điều kiện tiên quyếtNgười dùng đã tạo việc làm
Điều kiện thành côngTrạng thái việc làm được cập nhật
Kích hoạtNgười dùng truy cập trang quản lý việc làm

Luồng Chính:

  1. Người dùng điều hướng đến trang quản lý việc làm
  2. Hệ thống hiển thị kho việc làm của người dùng:
  3. Người dùng có thể:
  4. Hệ thống cập nhật bản ghi việc làm

Luồng Thay thế:

3.3 UC-03: Duyệt Việc làm

TrườngMô tả
Mã Trường hợp sử dụngUC-03
TênDuyệt Việc làm
Tác nhânCandidate
Điều kiện tiên quyếtCó việc làm trong hệ thống
Điều kiện thành côngỨng viên xem danh sách việc làm
Kích hoạtỨng viên truy cập trang danh sách việc làm

Luồng Chính:

  1. Ứng viên điều hướng đến trang danh sách việc làm
  2. Hệ thống hiển thị tất cả việc làm đang mở
  3. Ứng viên áp dụng bộ lọc (địa điểm, lương, loại hình)
  4. Hệ thống trả về kết quả đã lọc
  5. Ứng viên chọn một việc làm để xem chi tiết
  6. Hệ thống hiển thị chi tiết việc làm với yêu cầu
Sơ đồ Hoạt động UC-03
Hình 4: UC-03 Duyệt Việc làm - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-03
Hình 5: UC-03 Duyệt Việc làm - Sơ đồ Chuỗi

3.4 UC-04: Nộp Hồ sơ Ứng tuyển

TrườngMô tả
Mã Trường hợp sử dụngUC-04
TênNộp Hồ sơ Ứng tuyển
Tác nhânCandidate
Điều kiện tiên quyếtỨng viên đã đăng nhập, việc làm tồn tại
Điều kiện thành côngHồ sơ ứng tuyển được tạo, nhà tuyển dụng được thông báo
Kích hoạtỨng viên nhấn "Ứng tuyển" trên danh sách việc làm

Luồng Chính:

  1. Ứng viên chọn việc làm và nhấn "Ứng tuyển"
  2. Ứng viên chọn hồ sơ hiện có từ danh sách hồ sơ của mình, hoặc tải lên hồ sơ mới (PDF/DOCX, tối đa 10MB qua module FILE)
  3. Ứng viên nhập thư xin việc
  4. Ứng viên xem lại và nộp hồ sơ
  5. Hệ thống kiểm tra hồ sơ (kiểm tra resume_file_id tồn tại trong module FILE)
  6. Hệ thống kiểm tra trùng lặp hồ sơ
  7. Hệ thống đóng băng hồ sơ bằng cách sao chép resume_file_id vào bản ghi hồ sơ (không thể thay đổi sau khi nộp)
  8. Hệ thống tạo bản ghi hồ sơ
  9. Hệ thống gửi thông báo cho nhà tuyển dụng
  10. Ứng viên thấy thông báo thành công

Luồng Thay thế:

Sơ đồ Hoạt động UC-02
Hình 6: UC-04 Nộp Hồ sơ Ứng tuyển - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-02
Hình 7: UC-04 Nộp Hồ sơ Ứng tuyển - Sơ đồ Chuỗi

3.5 UC-05: Xem Trạng thái Hồ sơ

TrườngMô tả
Mã Trường hợp sử dụngUC-05
TênXem Trạng thái Hồ sơ
Tác nhânCandidate
Điều kiện tiên quyếtỨng viên đã nộp hồ sơ
Điều kiện thành côngỨng viên xem tiến trình hồ sơ
Kích hoạtỨng viên truy cập "Hồ sơ của tôi"

Luồng Chính:

  1. Ứng viên điều hướng đến "Hồ sơ của tôi"
  2. Hệ thống hiển thị danh sách hồ sơ
  3. Ứng viên chọn một hồ sơ
  4. Hệ thống hiển thị chi tiết và trạng thái hồ sơ
  5. Ứng viên xem lịch sử trạng thái và dòng thời gian
Sơ đồ Hoạt động UC-03
Hình 8: UC-05 Xem Trạng thái Hồ sơ - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-03
Hình 9: UC-05 Xem Trạng thái Hồ sơ - Sơ đồ Chuỗi

3.6 UC-06: Duyệt Hồ sơ Ứng tuyển

TrườngMô tả
Mã Trường hợp sử dụngUC-06
TênDuyệt Hồ sơ Ứng tuyển
Tác nhânHR
Điều kiện tiên quyếtCó hồ sơ ứng tuyển trong hệ thống
Điều kiện thành côngHR duyệt và cập nhật trạng thái hồ sơ
Kích hoạtHR truy cập bảng điều khiển hồ sơ

Luồng Chính:

  1. HR điều hướng đến bảng điều khiển hồ sơ
  2. Hệ thống hiển thị tất cả hồ sơ
  3. HR áp dụng bộ lọc (việc làm, trạng thái)
  4. Hệ thống trả về kết quả đã lọc
  5. HR chọn một hồ sơ để duyệt
  6. HR xem hồ sơ ứng viên, thư xin việc và hồ sơ xin việc (qua URL tải xuống presigned từ module FILE)
  7. HR cập nhật trạng thái hồ sơ (sàng lọc/từ chối)
Sơ đồ Hoạt động UC-06
Hình 12: UC-06 Duyệt Hồ sơ Ứng tuyển - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-06
Hình 13: UC-06 Duyệt Hồ sơ Ứng tuyển - Sơ đồ Chuỗi

3.7 UC-07: Lịch phỏng vấn

TrườngMô tả
Mã Trường hợp sử dụngUC-07
TênLịch phỏng vấn
Tác nhânHR
Điều kiện tiên quyếtỨng viên đã vượt qua sàng lọc
Điều kiện thành côngPhỏng vấn được lên lịch, thông báo được gửi
Kích hoạtHR nhấn "Lên lịch phỏng vấn"

Luồng Chính:

  1. HR chọn ứng viên từ các hồ sơ đã sàng lọc
  2. HR chọn người phỏng vấn
  3. HR chọn ngày/giờ và địa điểm
  4. HR thêm liên kết họp và ghi chú
  5. Hệ thống kiểm tra lịch trống của người phỏng vấn
  6. Hệ thống tạo bản ghi phỏng vấn
  7. Hệ thống gửi lời mời lịch
  8. Hệ thống thông báo cho ứng viên và người phỏng vấn
Sơ đồ Hoạt động UC-07
Hình 14: UC-07 Lịch phỏng vấn - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-07
Hình 15: UC-07 Lịch phỏng vấn - Sơ đồ Chuỗi

3.8 UC-08: Đánh giá Ứng viên (Interviewer)

TrườngMô tả
Mã Trường hợp sử dụngUC-08
TênĐánh giá Ứng viên
Tác nhânHR
Điều kiện tiên quyếtPhỏng vấn đã hoàn thành
Điều kiện thành côngĐánh giá được ghi nhận
Kích hoạtHR truy cập chi tiết phỏng vấn

Luồng Chính:

  1. HR truy cập phỏng vấn đã hoàn thành
  2. HR xem lại hồ sơ và CV của ứng viên
  3. HR nhập điểm đánh giá (kỹ thuật, giao tiếp, phù hợp văn hóa)
  4. HR chọn đề xuất (strong_yes/yes/neutral/no/strong_no)
  5. HR thêm nhận xét
  6. Hệ thống lưu bản ghi đánh giá
  7. Hệ thống cập nhật trạng thái phỏng vấn
Sơ đồ Hoạt động UC-08
Hình 16: UC-08 Đánh giá Ứng viên - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-08
Hình 17: UC-08 Đánh giá Ứng viên - Sơ đồ Chuỗi

3.9 UC-12: Đánh giá Ứng viên (HR)

TrườngMô tả
Mã Trường hợp sử dụngUC-12
TênĐánh giá Ứng viên
Tác nhânHR, Người phỏng vấn
Điều kiện tiên quyếtPhỏng vấn đã hoàn thành
Điều kiện thành côngĐánh giá ứng viên được nộp
Kích hoạtNgười phỏng vấn nhấn "Đánh giá Ứng viên" sau phỏng vấn

Luồng Chính:

  1. Người phỏng vấn điều hướng đến phỏng vấn đã hoàn thành
  2. Người phỏng vấn nhấn "Viết Đánh giá"
  3. Người phỏng vấn đánh giá ứng viên trên nhiều chiều:
  4. Người phỏng vấn viết tiêu đề và mô tả đánh giá
  5. Người phỏng vấn chọn đề xuất (strong_yes/yes/neutral/no/strong_no)
  6. Người phỏng vấn gửi đánh giá
  7. Hệ thống lưu bản ghi đánh giá
  8. Hệ thống cập nhật điểm trung bình đánh giá của ứng viên

Luồng Thay thế:

Sơ đồ Hoạt động UC-12
Hình 18: UC-12 Đánh giá Ứng viên - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-12
Hình 19: UC-12 Đánh giá Ứng viên - Sơ đồ Chuỗi

3.10 UC-15: Quản lý Hồ sơ Xin việc

TrườngMô tả
Mã Trường hợp sử dụngUC-15
TênQuản lý Hồ sơ Xin việc
Tác nhânCandidate
Điều kiện tiên quyếtỨng viên đã đăng nhập
Điều kiện thành côngDanh sách hồ sơ của ứng viên được cập nhật
Kích hoạtỨng viên điều hướng đến trang "Hồ sơ của tôi"

Luồng Chính:

  1. Ứng viên điều hướng đến trang quản lý "Hồ sơ của tôi"
  2. Hệ thống hiển thị danh sách tất cả hồ sơ đã tải lên kèm metadata (tên tệp, loại, kích thước, ngày tải lên)
  3. Ứng viên có thể:
  4. Hệ thống kiểm tra loại tệp và kích thước
  5. Hệ thống gọi module FILE để lưu tệp và nhận file_id
  6. Hệ thống tạo bản ghi recr_candidate_resumes với tham chiếu file_id
  7. Hệ thống trả về danh sách hồ sơ đã cập nhật

Luồng Thay thế:

3.11 UC-13: Cập nhật Hồ sơ

TrườngMô tả
Mã Trường hợp sử dụngUC-13
TênCập nhật Hồ sơ
Tác nhânTất cả (Candidate, HR, Employer)
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Điều kiện thành côngHồ sơ được cập nhật thành công
Kích hoạtNgười dùng nhấn "Chỉnh sửa Hồ sơ"

Luồng Chính:

  1. Người dùng điều hướng đến trang hồ sơ
  2. Hệ thống hiển thị dữ liệu hồ sơ hiện tại
  3. Người dùng chỉnh sửa các trường hồ sơ:
  4. Người dùng gửi thay đổi
  5. Hệ thống kiểm tra dữ liệu đầu vào
  6. Hệ thống cập nhật bản ghi hồ sơ
  7. Hệ thống trả về phản hồi thành công

Luồng Thay thế:

Sơ đồ Hoạt động UC-13
Hình 10: UC-13 Cập nhật Hồ sơ - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-13
Hình 11: UC-13 Cập nhật Hồ sơ - Sơ đồ Chuỗi

3.12 UC-11: Đánh giá Việc làm

TrườngMô tả
Mã Trường hợp sử dụngUC-11
TênĐánh giá Việc làm
Tác nhânCandidate
Điều kiện tiên quyếtỨng viên đã ứng tuyển hoặc làm việc tại công ty
Điều kiện thành côngĐánh giá việc làm được nộp và hiển thị cho người dùng khác
Kích hoạtỨng viên nhấn "Đánh giá" trên danh sách việc làm

Luồng Chính:

  1. Ứng viên điều hướng đến danh sách việc làm
  2. Ứng viên nhấn "Viết Đánh giá"
  3. Ứng viên đánh giá việc làm trên nhiều chiều:
  4. Ứng viên viết tiêu đề và mô tả đánh giá
  5. Ứng viên gửi đánh giá
  6. Hệ thống lưu bản ghi đánh giá
  7. Hệ thống cập nhật điểm trung bình đánh giá của việc làm

Luồng Thay thế:

Sơ đồ Hoạt động UC-11
Hình 20: UC-11 Đánh giá Việc làm - Sơ đồ Hoạt động
Sơ đồ Chuỗi UC-11
Hình 21: UC-11 Đánh giá Việc làm - Sơ đồ Chuỗi

3.13 UC-17: Trích xuất Skills từ CV bằng AI

TrườngMô tả
Mã Trường hợp sử dụngUC-17
TênTrích xuất Tags/Skills từ CV bằng AI
Tác nhânHệ thống (kích hoạt tự động), Candidate (xem kết quả)
Điều kiện tiên quyếtCandidate đã tải CV lên (UC-15)
Điều kiện thành côngCV được gắn danh sách skills/tags có độ tin cậy
Kích hoạtSự kiện resume.uploaded (nội bộ, sau UC-15 bước 6)

Luồng Chính:

  1. Hệ thống nhận sự kiện resume.uploaded sau khi CV lưu thành công vào module FILE
  2. Hệ thống đưa job xử lý vào hàng đợi (queue) phân tích CV, trạng thái CV = processing
  3. Worker lấy nội dung CV (qua module FILE, presigned URL) và trích xuất văn bản (OCR nếu ảnh scan)
  4. Worker gọi AI (LLM) với prompt trích xuất: kỹ năng cứng, kỹ năng mềm, số năm kinh nghiệm, chức danh, trình độ học vấn
  5. AI trả về danh sách skills/tags dạng có cấu trúc (JSON) kèm điểm tin cậy (confidence score) cho từng tag
  6. Hệ thống chuẩn hóa tag (map về từ điển skill chuẩn — vd "ReactJS" và "React.js" → "React")
  7. Hệ thống lưu kết quả vào recr_resume_skills, cập nhật trạng thái CV = analyzed
  8. Candidate thấy danh sách skill được gợi ý trên trang "Hồ sơ của tôi", có thể sửa/xóa/thêm thủ công

Luồng Thay thế:

Sơ đồ Hoạt động

Sơ đồ Hoạt động Trích xuất Skills từ CV
Hình 24: Luồng Trích xuất Tags/Skills từ CV bằng AI

Sơ đồ Chuỗi

Sơ đồ Chuỗi Trích xuất Skills từ CV
Hình 25: Tích hợp Trích xuất Skills từ CV

3.14 UC-18: Trích xuất Skills từ JD bằng AI

TrườngMô tả
Mã Trường hợp sử dụngUC-18
TênTrích xuất Tags/Skills từ JD bằng AI
Tác nhânHệ thống (tự động), HR/Employer (xem & duyệt kết quả)
Điều kiện tiên quyếtTin tuyển dụng đã được lưu bản nháp (UC-09 bước 5)
Điều kiện thành côngJob được gắn danh sách skills/tags yêu cầu
Kích hoạtSự kiện job.draft_saved hoặc HR bấm "Gợi ý Tags bằng AI"

Luồng Chính:

  1. HR/Employer nhập xong mô tả công việc + yêu cầu (UC-09 bước 2-4), lưu nháp
  2. Hệ thống tự động (hoặc HR chủ động bấm nút) gửi job vào hàng đợi phân tích JD
  3. Worker gọi AI với nội dung JD: tiêu đề, mô tả, yêu cầu, đưa ra danh sách skill/tag bắt buộc (required) và ưu tiên (nice_to_have)
  4. Hệ thống chuẩn hóa tag theo cùng từ điển skill dùng cho CV (đảm bảo đồng nhất để matching)
  5. Hệ thống lưu vào recr_job_skills, hiển thị gợi ý cho HR dưới dạng chip có thể chọn/bỏ trước khi công bố
  6. HR xác nhận hoặc chỉnh sửa danh sách tag, lưu lại
  7. Tin tuyển dụng tiếp tục luồng gửi duyệt (UC-09 bước 6 trở đi)

Luồng Thay thế:

Lưu ý thiết kế: Vì skill trên CV và JD phải dùng chung một hệ tag/skill chuẩn hóa, cần một bảng master recr_skills_taxonomy — tránh tình trạng CV ghi "NodeJS" còn JD ghi "Node.js" thành 2 tag khác nhau, làm sai điểm matching.

Sơ đồ Hoạt động

Sơ đồ Hoạt động Trích xuất Skills từ JD
Hình 26: Luồng Trích xuất Tags/Skills từ JD bằng AI

Sơ đồ Chuỗi

Sơ đồ Chuỗi Trích xuất Skills từ JD
Hình 27: Tích hợp Trích xuất Skills từ JD

3.15 UC-19: Tính điểm Matching Ứng viên - Việc làm

TrườngMô tả
Mã Trường hợp sử dụngUC-19
TênTính điểm Matching Ứng viên - Việc làm
Tác nhânHệ thống (tự động tính), HR/Candidate (xem điểm)
Điều kiện tiên quyếtCả CV (UC-17) và Job (UC-18) đã có tags/skills
Điều kiện thành côngĐiểm matching (0-100%) được tính và hiển thị
Kích hoạtCandidate xem chi tiết job (UC-03), hoặc HR mở danh sách người nộp đơn (UC-06)

Luồng Chính:

  1. Candidate xem chi tiết một job / hoặc HR mở danh sách ứng viên đã nộp cho 1 job
  2. Hệ thống lấy danh sách tag của CV và tag của Job
  3. Hệ thống tính điểm theo công thức trọng số (vd: required skill khớp = 70%, nice-to-have khớp = 20%, kinh nghiệm/trình độ phù hợp = 10%)
  4. Hệ thống lưu kết quả vào recr_match_scores kèm breakdown (tag nào khớp, tag nào thiếu)
  5. Hệ thống hiển thị điểm % kèm chi tiết: "Khớp 8/10 kỹ năng yêu cầu, thiếu: Docker, Kubernetes"
  6. (HR) Danh sách người nộp đơn được sắp xếp mặc định theo điểm matching giảm dần

Luồng Thay thế:

Sơ đồ Hoạt động

Sơ đồ Hoạt động Tính điểm Matching
Hình 28: Luồng Tính điểm Matching Ứng viên - Việc làm

Sơ đồ Chuỗi

Sơ đồ Chuỗi Tính điểm Matching
Hình 29: Tích hợp Tính điểm Matching

3.16 UC-20: Gợi ý Ứng viên Phù hợp

TrườngMô tả
Mã Trường hợp sử dụngUC-20
TênGợi ý Ứng viên Phù hợp cho Việc làm Mới
Tác nhânHệ thống (tự động), HR (xem và hành động), Candidate (nhận thông báo mời)
Điều kiện tiên quyếtViệc làm đã được duyệt và ở trạng thái "open" (UC-10); việc làm đã có skills từ UC-18; ứng viên đã bật is_open_to_work = true trên hồ sơ (FR-052)
Điều kiện thành côngDanh sách ứng viên phù hợp và đang sẵn sàng được tạo, thông báo cho HR mà không gây trùng lặp/làm phiền ứng viên
Kích hoạtSự kiện nội bộ job.approved

Luồng Chính:

  1. Hệ thống nhận sự kiện job.approved, đưa job vào hàng đợi xử lý gợi ý ứng viên
  2. Worker lấy danh sách skill yêu cầu của việc làm từ recr_job_skills, giới hạn phạm vi ứng viên trong cùng tổ chức đăng job
  3. Worker lọc sơ bộ ứng viên bằng truy vấn có ít nhất một skill trùng với việc làm (join recr_resume_skills với recr_job_skills), chỉ lấy ứng viên có is_open_to_work = true và không ở trạng thái "hired" cho việc làm khác trong tổ chức
  4. Với từng ứng viên trong tập đã lọc, worker gọi lại hàm tính điểm phù hợp dùng chung với UC-19 (không viết thuật toán riêng)
  5. Hệ thống lọc các ứng viên có điểm phù hợp trên ngưỡng cấu hình (mặc định 70%), sắp xếp giảm dần, lấy tối đa N ứng viên đầu (mặc định 20)
  6. Hệ thống kiểm tra giới hạn tần suất: bỏ qua ứng viên đã nhận đủ số lời mời gợi ý tối đa từ tổ chức này trong khoảng thời gian cấu hình (mặc định tối đa 3 gợi ý/tuần/tổ chức)
  7. Hệ thống lưu kết quả vào recr_job_suggestions với trạng thái "new"
  8. Hệ thống gửi thông báo cho HR phụ trách: "N ứng viên phù hợp cho việc làm [tên việc làm]"
  9. HR mở danh sách gợi ý, xem chi tiết điểm phù hợp và có thể gửi lời mời ứng tuyển trực tiếp (tái sử dụng luồng mời hiện có ở module Invitation)

Luồng Thay thế:

Sơ đồ Hoạt động

Sơ đồ Hoạt động Gợi ý Ứng viên
Hình 30: Luồng Gợi ý Ứng viên Phù hợp cho Việc làm Mới

Sơ đồ Chuỗi

Sơ đồ Chuỗi Gợi ý Ứng viên
Hình 31: Tích hợp Gợi ý Ứng viên

3.17 UC-14: Xem Bảng Điều khiển

TrườngMô tả
Mã Trường hợp sử dụngUC-14
TênXem Bảng Điều khiển
Tác nhânHR, Employer
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Điều kiện thành côngNgười dùng xem bảng điều khiển phân tích
Kích hoạtNgười dùng nhấn menu "Bảng điều khiển"

Luồng Chính:

  1. Người dùng điều hướng đến trang bảng điều khiển
  2. Hệ thống truy vấn OpenSearch để lấy dữ liệu tổng hợp
  3. Hệ thống hiển thị bảng điều khiển với:
  4. Người dùng có thể lọc theo khoảng thời gian
  5. Hệ thống cập nhật bảng điều khiển với dữ liệu đã lọc

Luồng Thay thế:

3.18 UC-21: Báo cáo & Thống kê Tương tác Ứng viên

TrườngMô tả
Mã Trường hợp sử dụngUC-21
TênBáo cáo & Thống kê Tương tác Ứng viên (Candidate Activity & Application Analytics)
Tác nhânAdmin, HR Manager, Employer
Điều kiện tiên quyếtNgười dùng đã đăng nhập với vai trò Admin, HR hoặc Employer trong tổ chức
Điều kiện thành côngHệ thống hiển thị báo cáo với các chỉ số KPI, biểu đồ và bảng số liệu
Kích hoạtNgười dùng chọn menu "Báo cáo Tương tác Ứng viên"

Các chỉ số KPI cần thống kê:

Chỉ sốCông thứcMô tả
New CV UploadsCOUNT(recr_candidate_resumes) WHERE created_at IN rangeSố lượt upload CV mới trong khoảng thời gian
Updated CVsCOUNT(recr_candidate_resumes) WHERE updated_at > created_at IN rangeSố lượng CV được cập nhật/chỉnh sửa
Total Job ApplicationsCOUNT(recr_applications) WHERE created_at IN rangeSố lượt ứng tuyển công việc
Application Success RateCOUNT(applications WHERE status='offered') / COUNT(all applications) * 100Tỷ lệ ứng tuyển thành công (được nhận offer)

Bộ lọc & Phân đoạn dữ liệu:

FilterGiá trị
Khoảng thời gianNgày / Tuần / Tháng / Tùy chọn (từ-đến)
Vị trí tuyển dụngJob Title (dropdown)
Phòng ban / Chi nhánhDepartment / Branch (dropdown)
Trạng thái ứng tuyểnpending, screening, interview, offered, rejected, withdrawn

Luồng Chính:

  1. Người dùng điều hướng đến trang "Báo cáo Tương tác Ứng viên"
  2. Hệ thống hiển thị bộ lọc mặc định (30 ngày gần nhất, tất cả vị trí, tất cả phòng ban)
  3. Hệ thống truy vấn database để lấy dữ liệu thô theo bộ lọc mặc định
  4. Hệ thống tính toán các chỉ số KPI: New CV Uploads, Updated CVs, Total Job Applications, Application Success Rate
  5. Hệ thống render biểu đồ (line chart theo thời gian, bar chart theo vị trí, pie chart theo trạng thái) và bảng số liệu chi tiết
  6. Người dùng xem báo cáo, có thể hover để xem tooltip chi tiết
  7. Người dùng thay đổi bộ lọc (thời gian, vị trí, phòng ban, trạng thái)
  8. Hệ thống refresh dữ liệu và render lại biểu đồ/bảng với bộ lọc mới

Luồng Thay thế:

Luồng Ngoại lệ:

Quy tắc Nghiệp vụ:

Quy tắcChi tiết
Application Success RateChỉ tính ứng viên có status = offered. Không tính pending, screening, interview đang chạy
Phân quyền xemEmployer: xem dữ liệu tổ chức mình. HR: xem dữ liệu phòng ban mình. Admin: xem toàn bộ hệ thống
Tần suất cập nhậtDữ liệu cập nhật real-time cho Application. CV uploads cập nhật mỗi 5 phút (batch). Dashboard cache TTL = 5 phút
Khoảng thời gian tối đaKhông quá 12 tháng cho 1 lần query. Nếu chọn > 12 tháng, hệ thống cảnh báo và gợi ý chia kỳ
Xuất fileGiới hạn 10,000 dòng mỗi file. Nếu vượt quá, hệ thống cảnh báo và gợi ý thu hẹp bộ lọc

Yêu cầu Phi chức năng:

Yêu cầuMục tiêu
Thời gian tải báo cáo< 3 giây (p95) cho dataset ≤ 100,000 records
Đồng thờiHỗ trợ 50+ user xem báo cáo cùng lúc
Xuất fileGenerate file < 10 giây cho ≤ 10,000 dòng
CacheRedis cache TTL 5 phút, invalidate khi có dữ liệu mới

FR Liên quan: FR-054, FR-055, FR-056

Sơ đồ Chuỗi

Sơ đồ Chuỗi UC-21
Hình 32: UC-21 Báo cáo & Thống kê Tương tác Ứng viên - Sơ đồ Chuỗi

3.19 UC-01: Mua Gói Đăng ký

TrườngMô tả
Mã Trường hợp sử dụngUC-01
TênMua Gói Đăng ký
Tác nhânTất cả (Candidate, HR, Employer)
Điều kiện tiên quyếtNgười dùng đã đăng nhập, chưa có gói đăng ký
Điều kiện thành côngGói đăng ký được kích hoạt, người dùng có thể truy cập tính năng cao cấp
Kích hoạtNgười dùng nhấn "Đăng ký gói"

Luồng Chính:

  1. Người dùng điều hướng đến trang đăng ký gói
  2. Hệ thống hiển thị các gói có sẵn:
  3. Người dùng chọn gói
  4. Hệ thống tính toán giá cuối cùng với giảm giá
  5. Người dùng xem lại tóm tắt đơn hàng
  6. Người dùng hoàn thành thanh toán
  7. Hệ thống tạo bản ghi đăng ký
  8. Hệ thống kích hoạt đăng ký
  9. Người dùng nhận xác nhận
  10. Người dùng có thể truy cập tính năng cao cấp (khác nhau tùy vai trò)

Lợi ích Đăng ký theo Vai trò:

Luồng Thay thế:

3.20 UC-02: Quản lý Gói Đăng ký

TrườngMô tả
Mã Trường hợp sử dụngUC-02
TênQuản lý Gói Đăng ký
Tác nhânTất cả (Candidate, HR, Employer)
Điều kiện tiên quyếtNgười dùng có gói đăng ký (đang hoạt động hoặc đã hết hạn)
Điều kiện thành côngTrạng thái gói đăng ký được cập nhật
Kích hoạtNgười dùng truy cập trang quản lý đăng ký

Luồng Chính:

  1. Người dùng điều hướng đến trang quản lý đăng ký
  2. Hệ thống hiển thị trạng thái đăng ký hiện tại:
  3. Employer có thể:
  4. Hệ thống xử lý yêu cầu
  5. Hệ thống cập nhật bản ghi đăng ký

3.21 UC-16: Cấu hình Webhook Cá nhân

TrườngMô tả
Mã Trường hợp sử dụngUC-16
TênCấu hình Webhook Cá nhân
Tác nhânHR / Employer
Điều kiện tiên quyếtNgười dùng đã đăng nhập
Điều kiện thành côngWebhook được lưu và kích hoạt/vô hiệu hóa thành công
Kích hoạtNgười dùng truy cập "Cài đặt" > "Tích hợp Webhook"

Luồng Chính:

  1. Người dùng điều hướng đến trang Cài đặt > Webhook
  2. Người dùng nhập URL webhook (endpoint đích)
  3. Người dùng chọn các sự kiện muốn nhận. Mặc định chỉ có application.submitted
  4. Người dùng bật công tắc "Kích hoạt Webhook"
  5. Hệ thống xác thực định dạng URL (phải là HTTPS)
  6. Hệ thống gửi một sự kiện test (webhook.test) đến URL để xác minh endpoint phản hồi 2xx
  7. Hệ thống lưu cấu hình webhook cho người dùng
  8. Người dùng thấy thông báo thành công kèm trạng thái "Đang hoạt động"

Luồng Thay thế:

Sơ đồ Hoạt động

Sơ đồ Hoạt động Cấu hình Webhook
Hình 33: Luồng Cấu hình Webhook Cá nhân

Sơ đồ Chuỗi

Sơ đồ Chuỗi Cấu hình Webhook
Hình 34: Tích hợp Cấu hình Webhook

3.22 UC-22: Đăng tin Hot Job

TrườngMô tả
Mã Trường hợp sử dụngUC-22
TênĐăng tin Hot Job
Tác nhânHR, Employer
Điều kiện tiên quyếtNgười dùng có gói đăng ký Premium/Enterprise
Điều kiện thành côngViệc làm được đánh dấu là Hot Job, hiển thị ưu tiên
Kích hoạtNgười dùng nhấn "Đặt Hot Job" trên việc làm

Luồng Chính:

  1. HR/Employer chọn việc làm cần đẩy Hot
  2. Hệ thống hiển thị tùy chọn Hot Job:
  3. Người dùng chọn thời hạn và thanh toán
  4. Hệ thống cập nhật việc làm: is_hot = true, hot_expires_at = now + duration
  5. Việc làm hiển thị nhãn "HOT" và ưu tiên trong kết quả tìm kiếm
  6. Hệ thống gửi thông báo khi Hot Job sắp hết hạn

Luồng Thay thế:

3.23 UC-23: Mua Quảng cáo Job (Ads Job)

TrườngMô tả
Mã Trường hợp sử dụngUC-23
TênMua Quảng cáo Job (Ads Job)
Tác nhânHR, Employer
Điều kiện tiên quyếtNgười dùng đã tạo việc làm, có thanh toán
Điều kiện thành côngJob được quảng cáo trên trang chủ và kết quả tìm kiếm
Kích hoạtNgười dùng nhấn "Quảng cáo Job" trên việc làm

Luồng Chính:

  1. HR/Employer chọn việc làm cần quảng cáo
  2. Hệ thống hiển thị tùy chọn quảng cáo:
  3. Người dùng chọn gói và ngân sách quảng cáo
  4. Hệ thống tính toán chi phí dựa trên gói và thời hạn
  5. Người dùng hoàn thành thanh toán
  6. Hệ thống tạo bản ghi quảng cáo (recr_job_ads)
  7. Job được gắn nhãn "Ad" và hiển thị ưu tiên
  8. Hệ thống theo dõi lượt hiển thị và lượt nhấp

Luồng Thay thế:

3.24 UC-24: Ứng tuyển qua Link HR

TrườngMô tả
Mã Trường hợp sử dụngUC-24
TênỨng tuyển qua Link HR
Tác nhânCandidate
Điều kiện tiên quyếtHR đã chia sẻ link job, việc làm đang mở
Điều kiện thành côngHồ sơ ứng tuyển được tạo, HR nhận thông báo
Kích hoạtỨng viên truy cập link job từ HR

Luồng Chính:

  1. Ứng viên nhận link job từ HR (qua email, Zalo, LinkedIn...)
  2. Ứng viên truy cập link → Hệ thống hiển thị chi tiết job
  3. Ứng viên nhấn "Ứng tuyển ngay"
  4. Nếu chưa đăng nhập: Hệ thống yêu cầu đăng ký/đăng nhập
  5. Ứng viên chọn hồ sơ hoặc tải lên mới
  6. Ứng viên nhập thư xin việc
  7. Hệ thống gắn source = "hr_link" để track hiệu quả recruitment link
  8. Hệ thống tạo bản ghi ứng tuyển
  9. Hệ thống gửi thông báo cho HR: "Có ứng viên mới qua link chia sẻ"

Lợi ích:

3.25 UC-25: HR Chia sẻ Link Job

TrườngMô tả
Mã Trường hợp sử dụngUC-25
TênHR Chia sẻ Link Job
Tác nhânHR
Điều kiện tiên quyếtHR đã tạo việc làm, việc làm đang mở
Điều kiện thành côngLink được tạo, HR có thể chia sẻ
Kích hoạtHR nhấn "Chia sẻ Link" trên việc làm

Luồng Chính:

  1. HR chọn việc làm cần chia sẻ
  2. Hệ thống tạo link rút gọn: recr.com/j/{job_id}?ref={hr_id}
  3. HR thấy Preview card của job (tiêu đề, lương, địa điểm)
  4. HR chọn kênh chia sẻ:
  5. Hệ thống ghi nhận hr_job_links (hr_id, job_id, channel, created_at)
  6. HR có thể xem thống kê lượt click từ link

3.26 UC-26: Tính Hoa hồng HR

TrườngMô tả
Mã Trường hợp sử dụngUC-26
TênTính Hoa hồng HR
Tác nhânHệ thống, Admin
Điều kiện tiên quyếtỨng viên được hiring, HR đã tạo/refer ứng viên
Điều kiện thành côngHoa hồng được tính và ghi nhận
Kích hoạtỨng viên cập nhật trạng thái "hired"

Luồng Chính:

  1. Ứng viên được đánh giá "hired" bởi Employer
  2. Hệ thống kiểm tra HR nào đã:
  3. Hệ thống tính hoa hồng dựa trên:
  4. Hệ thống tạo bản ghi hoa hồng (recr_hr_commissions)
  5. Admin xem danh sách hoa hồng chờ thanh toán
  6. Admin xác nhận thanh toán hoa hồng
  7. Hệ thống cập nhật trạng thái: pending → paid

Công thức tính:

commission_amount = gross_salary × commission_rate
commission_rate = job_type == "IT" ? 0.10 : 0.08
payment_date = hired_date + 30 days

3.27 UC-27: Tạo Tổ chức (Organization)

TrườngMô tả
Mã Trường hợp sử dụngUC-27
TênTạo Tổ chức
Tác nhânEmployer / HR
Điều kiện tiên quyếtNgười dùng đã đăng nhập, chưa có tổ chức nào sở hữu
Điều kiện thành côngTổ chức được tạo, người dùng trở thành Owner, có thể đăng tin tuyển dụng
Kích hoạtNgười dùng nhấn "Tạo Tổ chức" hoặc truy cập lần đầu với vai trò Employer/HR

Luồng Chính:

  1. Người dùng điều hướng đến trang "Tạo Tổ chức"
  2. Hệ thống hiển thị form tạo tổ chức:
  3. Người dùng nhập thông tin và nhấn "Tạo"
  4. Hệ thống kiểm tra:
  5. Hệ thống tạo bản ghi tổ chức (status: active)
  6. Hệ thống tạo bản ghi thành viên với role: owner
  7. Người dùng thấy thông báo thành công và được chuyển đến trang tổ chức
  8. Người dùng có thể bắt đầu đăng tin tuyển dụng

Luồng Thay thế:

3.28 UC-28: Quản lý Tổ chức

TrườngMô tả
Mã Trường hợp sử dụngUC-28
TênQuản lý Tổ chức
Tác nhânOwner, HR
Điều kiện tiên quyếtNgười dùng là Owner hoặc HR của tổ chức
Điều kiện thành côngThông tin tổ chức được cập nhật, thành viên được quản lý
Kích hoạtOwner truy cập trang quản lý tổ chức

Luồng Chính:

  1. Owner truy cập trang quản lý tổ chức
  2. Hệ thống hiển thị thông tin tổ chức:
  3. Owner có thể:
  4. HR được mời nhận email và chấp nhận
  5. HR trở thành thành viên của tổ chức, có thể đăng tin tuyển dụng

3.29 UC-29: Đăng tin Việc làm (Draft → Publish)

TrườngMô tả
Mã Trường hợp sử dụngUC-29
TênĐăng tin Việc làm
Tác nhânOwner, HR
Điều kiện tiên quyếtNgười dùng là Owner hoặc HR của tổ chức active
Điều kiện thành côngViệc làm được đăng và hiển thị trên trang tìm kiếm
Kích hoạtNgười dùng nhấn "Đăng tin tuyển dụng"

Luồng Chính:

  1. Người dùng nhấn "Tạo tin tuyển dụng mới"
  2. Hệ thống kiểm tra OrgGuard: người dùng thuộc tổ chức active
  3. Hệ thống hiển thị form tạo việc làm
  4. Bước 1 - Lưu nháp:
  5. Bước 2 - Chỉnh sửa:
  6. Bước 3 - Đăng tin:
  7. Nếu validate thành công: status → pending_approval
  8. Admin/HR duyệt tin → status → open
  9. Việc làm hiển thị trên trang tìm việc

Luồng Thay thế:

4. Yêu cầu Chức năng

4.1 Yêu cầu Ứng viên

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-001 RECR Đăng ký Người dùng UC-01 Cao Người dùng có thể đăng ký tài khoản với email, mật khẩu và thông tin hồ sơ cơ bản. Tạo người dùng với vai trò hệ thống user. Các vai trò cấp tổ chức (HR, Candidate, Employer) được giao trong nội bộ tổ chức.
FR-002 RECR Đăng nhập UC-02 Cao Tất cả người dùng có thể đăng nhập bằng email/mật khẩu và nhận JWT token
FR-003 RECR Duyệt Việc làm UC-03 Cao Ứng viên có thể duyệt và tìm kiếm việc làm với bộ lọc (địa điểm, lương, loại hình)
FR-004 RECR Nộp Hồ sơ Ứng tuyển UC-04 Cao Ứng viên có thể nộp hồ sơ với hồ sơ được chọn (từ danh sách hồ sơ) hoặc hồ sơ mới tải lên, kèm thư xin việc. resume_file_id được đóng băng tại thời điểm nộp và trở nên không thể thay đổi trên bản ghi hồ sơ.
FR-005 RECR Xem Trạng thái Hồ sơ UC-05 Cao Ứng viên có thể theo dõi tiến trình hồ sơ qua các giai đoạn tuyển dụng
FR-006 RECR Cập nhật Hồ sơ Ứng viên UC-13 Trung bình Ứng viên có thể cập nhật hồ sơ, kỹ năng và kinh nghiệm
FR-007 RECR Tải lên Hồ sơ UC-15 Cao Ứng viên có thể tải lên và quản lý nhiều tệp hồ sơ (PDF/DOCX, tối đa 10MB mỗi tệp) qua module FILE. Tệp được lưu tại {candidate_user_id}/resumes/{uuid}.pdf. Metadata được lưu trong bảng recr_candidate_resumes với tham chiếu file_id đến sys_files.
FR-057 RECR Quản lý Hồ sơ Ứng viên UC-15 Cao Ứng viên có thể liệt kê, tải lên, đặt chính và xóa hồ sơ từ danh sách hồ sơ. Xóa hồ sơ chỉ được phép khi hồ sơ chưa được liên kết với bất kỳ hồ sơ ứng tuyển nào.
FR-058 RECR Liên kết Hồ sơ Ứng tuyển UC-04 Cao Khi ứng viên nộp hồ sơ, hồ sơ được chọn được liên kết bằng cách sao chép resume_file_id vào bản ghi hồ sơ. Tham chiếu tệp này không thể thay đổi sau khi nộp (đóng băng tại thời điểm nộp).
FR-059 RECR Trích xuất Skills từ CV UC-17 Trung bình Hệ thống tự động trích xuất kỹ năng, chức danh, trình độ học vấn từ CV sau khi tải lên. Kết quả được lưu vào recr_resume_skills. Candidate có thể chỉnh sửa/thêm/xóa tags thủ công (is_manual_override).

4.3a Yêu cầu HR/Employer — AI & Matching

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-049 RECR Trích xuất Skills từ JD UC-18 Trung bình Hệ thống tự động (hoặc HR chủ động) trích xuất skills từ JD: required và nice_to_have. HR có thể chọn/bỏ trước khi lưu. Luồng đăng tin không bị chặn nếu AI lỗi.
FR-050 RECR Tính điểm Matching UC-19 Cao Hệ thống tự động tính điểm matching (0-100%) giữa CV và Job theo công thức trọng số. Hiển thị breakdown chi tiết. Lazy re-calculation khi tag thay đổi.
FR-051 RECR Từ điển Skills chuẩn UC-17, UC-18 Cao Bảng master recr_skills_taxonomy đảm bảo tag đồng nhất giữa CV và JD, hỗ trợ matching chính xác.
FR-052 RECR Mở để tìm việc UC-20 Trung bình Candidate có thể bật/tắt is_open_to_work trên hồ sơ. Khi bật, ứng viên xuất hiện trong danh sách gợi ý cho HR.
FR-053 RECR Gợi ý Ứng viên cho Job mới UC-20 Cao Hệ thống tự động gợi ý ứng viên phù hợp khi job được duyệt. Lọc theo skill trùng, điểm matching ≥ 70%, giới hạn tần suất 3 gợi ý/tuần/tổ chức. Lưu vào recr_job_suggestions.

4.2 Yêu cầu HR

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-008 RECR Duyệt Hồ sơ Ứng tuyển UC-06 Cao HR có thể duyệt hồ sơ, lọc theo việc làm, trạng thái và trình độ ứng viên. Xem hồ sơ xin việc qua URL tải xuống presigned từ module FILE.
FR-009 RECR Sàng lọc Ứng viên UC-06 Cao HR có thể sàng lọc ứng viên và chuyển họ qua các giai đoạn tuyển dụng
FR-010 RECR Lên lịch Phỏng vấn UC-07 Cao HR có thể lên lịch phỏng vấn với ngày/giờ, địa điểm, liên kết họp
FR-011 RECR Đánh giá Ứng viên UC-08 Cao HR có thể gửi đánh giá với điểm số và đề xuất
FR-012 RECR Từ chối Ứng viên UC-06 Cao HR có thể từ chối ứng viên với lý do tùy chọn
FR-013 RECR Theo dõi Quy trình UC-06 Cao HR có thể xem quy trình tuyển dụng với số lượng ứng viên theo giai đoạn
FR-014 RECR Tạo Báo cáo UC-06 Trung bình HR có thể tạo báo cáo chỉ số và phân tích tuyển dụng
FR-028 RECR HR Đăng tin Việc làm UC-09 Cao HR có thể tạo tin tuyển dụng cho tổ chức của mình
FR-029 RECR HR Quản lý Việc làm UC-10 Cao HR có thể chỉnh sửa, đóng hoặc lưu trữ tin tuyển dụng
FR-032 RECR Cập nhật Hồ sơ HR UC-13 Trung bình HR có thể cập nhật phòng ban, chức vụ và thông tin cá nhân
FR-047 RECR Cấu hình Webhook UC-16 Trung bình Người dùng (HR/Employer) có thể cấu hình một URL webhook đích và bật/tắt trạng thái gửi sự kiện. Mỗi người dùng chỉ có một cấu hình webhook. Khi tắt (is_active = false), hệ thống ngừng gửi mọi sự kiện đến URL đó nhưng vẫn giữ lại cấu hình.

4.3 Yêu cầu Nhà tuyển dụng

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-015 RECR Đăng ký Nhà tuyển dụng UC-01 Cao Nhà tuyển dụng có thể đăng ký tài khoản công ty với thông tin công ty
FR-016 RECR Đăng tin Việc làm UC-09 Cao Nhà tuyển dụng có thể tạo tin tuyển dụng với yêu cầu và khoảng lương
FR-017 RECR Quản lý Tin tuyển dụng UC-10 Cao Nhà tuyển dụng có thể chỉnh sửa, đóng hoặc lưu trữ tin tuyển dụng
FR-018 RECR Xem Người nộp đơn UC-10 Cao Nhà tuyển dụng có thể xem người nộp đơn cho việc làm đã đăng
FR-019 RECR Duyệt Tin tuyển dụng UC-09 Trung bình Nhà tuyển dụng có thể gửi việc làm để HR duyệt trước khi công bố. Nhà tuyển dụng cũng có thể xem hồ sơ xin việc qua URL tải xuống presigned từ module FILE khi xem người nộp đơn cho tin tuyển dụng.
FR-020 RECR Xem Phân tích UC-10 Trung bình Nhà tuyển dụng có thể xem phân tích tuyển dụng cho tin tuyển dụng
FR-033 RECR Cập nhật Hồ sơ Nhà tuyển dụng UC-13 Trung bình Nhà tuyển dụng có thể cập nhật thông tin công ty, mô tả và branding

4.4 Yêu cầu Đăng ký

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-021 RECR Gói Đăng ký UC-01 Cao Hệ thống cung cấp 3 gói đăng ký: 1 tháng, 6 tháng (giảm 10%), 1 năm (2 tháng miễn phí)
FR-022 RECR Mua Đăng ký UC-01 Trung bình Tất cả người dùng (Candidate, HR, Employer) có thể tùy chọn mua đăng ký cho tính năng cao cấp
FR-023 RECR Kiểm soát Truy cập Đăng ký UC-01, UC-02 Cao Hệ thống kiểm tra trạng thái đăng ký để cung cấp tính năng cao cấp
FR-024 RECR Xác thực Đăng ký UC-02 Cao Hệ thống kiểm tra trạng thái đăng ký trước khi cho phép truy cập tính năng bị giới hạn
FR-025 RECR Gia hạn Đăng ký UC-02 Trung bình Tất cả người dùng có thể gia hạn hoặc nâng cấp đăng ký
FR-026 RECR Lịch sử Đăng ký UC-02 Thấp Tất cả người dùng có thể xem lịch sử đăng ký và hóa đơn thanh toán

4.5 Yêu cầu Đánh giá

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-030 RECR Đánh giá Việc làm UC-11 Trung bình Ứng viên có thể đánh giá việc làm với điểm số và mô tả
FR-031 RECR Đánh giá Ứng viên UC-12 Trung bình Người phỏng vấn có thể đánh giá ứng viên với điểm số và đề xuất

4.6 Yêu cầu Phân tích

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-034 RECR Phân tích Đăng ký Người dùng UC-14 Trung bình Theo dõi và hiển thị thống kê đăng ký người dùng (tổng, hàng ngày, hàng tuần, hàng tháng)
FR-035 RECR Phân tích Đăng nhập Người dùng UC-14 Trung bình Theo dõi và hiển thị thống kê đăng nhập người dùng (tần suất, thời điểm cao điểm, số lần thất bại)
FR-036 RECR Xem Bảng điều khiển UC-14 Trung bình Hiển thị bảng điều khiển phân tích tổng hợp với biểu đồ và bộ lọc
FR-054 RECR Phân tích Tương tác Ứng viên UC-21 Cao Hệ thống thống kê số lượt upload CV mới (New CV Uploads), CV cập nhật (Updated CVs), lượt ứng tuyển (Total Job Applications) theo khoảng thời gian và bộ lọc (vị trí, phòng ban, trạng thái)
FR-055 RECR Tỷ lệ Ứng tuyển Thành công UC-21 Cao Hệ thống tính và hiển thị tỷ lệ ứng tuyển thành công (Application Success Rate = offered / total * 100) với breakdown chi tiết theo giai đoạn tuyển dụng
FR-056 RECR Xuất Báo cáo Ứng viên UC-21 Trung bình Hệ thống cho phép xuất báo cáo ra file Excel/CSV với đầy đủ dữ liệu KPI và chi tiết từng ứng viên. Giới hạn 10,000 dòng mỗi file

4.7 Yêu cầu Lời mời

Mã Yêu cầu Module Yêu cầu Trường hợp SD Ưu tiên Mô tả
FR-039 RECR Gửi Lời mời UC-19 Cao HR/Employer có thể gửi lời mời đến ứng viên hoặc HR qua email với vai trò tổ chức được giao
FR-040 RECR Tạo Token Lời mời UC-19 Cao Hệ thống tạo token ngẫu nhiên an toàn, lưu băm SHA-256, đưa token gốc vào URL lời mời
FR-041 RECR Gửi Email Lời mời UC-19 Cao Hệ thống phát sự kiện RabbitMQ tới module EMAIL để gửi email lời mời
FR-042 RECR Xác minh Token Lời mời UC-20 Cao Hệ thống xác thực token lời mời khi nhấp, kiểm tra hết hạn và trạng thái
FR-043 RECR Chấp nhận Lời mời UC-21 Cao Hệ thống cập nhật trạng thái lời mời thành ACCEPTED và phát sự kiện cho module AUTH
FR-044 RECR Thu hồi Lời mời UC-22 Trung bình HR/Employer có thể hủy lời mời đang chờ
FR-045 RECR Liệt kê Lời mời UC-19 Trung bình Hệ thống cho phép xem tất cả lời mời với bộ lọc và phân trang
FR-046 RECR Gửi lại Lời mời UC-22 Trung bình Hệ thống tạo token mới cho lời mời hết hạn hoặc bị thu hồi và gửi lại email

5. Mô hình Dữ liệu

5.1 Sơ đồ Quan hệ Thực thể

Sơ đồ ERD
Hình 22: ERD Tuyển dụng (3 Vai trò)

5.2 Yêu cầu Dữ liệu

Mã Yêu cầu Thực thể Mô tả FR Liên quan
DR-001recr_usersTài khoản người dùng với xác thực dựa trên vai tròFR-001, FR-002, FR-016
DR-002recr_candidatesHồ sơ ứng viên với kỹ năng (resume_link được thay bằng tham chiếu file_id qua recr_candidate_resumes)FR-006, FR-007
DR-002arecr_candidate_resumesDanh sách hồ sơ ứng viên với tham chiếu file_id module FILE (hỗ trợ nhiều hồ sơ mỗi ứng viên)FR-007, FR-008, FR-009
DR-003recr_employersHồ sơ công ty nhà tuyển dụngFR-016
DR-004recr_jobsTin tuyển dụng với yêu cầuFR-017, FR-018
DR-005recr_applicationsHồ sơ ứng tuyển liên kết ứng viên với việc làm, với tham chiếu resume_file_id đóng băng tới module FILEFR-004, FR-005, FR-009
DR-006recr_interviewsLên lịch và trạng thái phỏng vấnFR-010
DR-007recr_evaluationsĐiểm đánh giá phỏng vấnFR-011
DR-008recr_hr_profilesHồ sơ người dùng HR-
DR-009recr_job_requirementsYêu cầu việc làmFR-016, FR-017
DR-010recr_subscription_plansĐịnh nghĩa gói đăng kýFR-021
DR-010recr_subscriptionsĐăng ký người dùngFR-023, FR-024
DR-011recr_subscription_historyLịch sử thay đổi đăng kýFR-027
DR-012recr_job_reviewsĐánh giá việc làm từ ứng viênFR-030
DR-013recr_candidate_reviewsĐánh giá ứng viên từ người phỏng vấnFR-031
DR-014recr_invitationsBản ghi lời mời với xác minh dựa trên tokenFR-039, FR-042, FR-043, FR-044
DR-015recr_webhook_configsCấu hình webhook cá nhân — mỗi người dùng có tối đa 1 cấu hìnhFR-047
DR-016recr_resume_skillsTags/skills được trích xuất từ CV bằng AI, kèm confidence score và trạng tháiFR-010
DR-017recr_job_skillsTags/skills yêu cầu cho JD, phân loại required/nice_to_haveFR-049
DR-018recr_skills_taxonomyTừ điển skill chuẩn hóa — master data cho matchingFR-051
DR-019recr_match_scoresĐiểm matching giữa CV và Job kèm breakdown chi tiếtFR-050
DR-020recr_job_suggestionsDanh sách gợi ý ứng viên phù hợp cho job mớiFR-053

5.3 Chi tiết Bảng — recr_webhook_configs

Cột Kiểu Mô tả
idUUIDKhóa chính
user_idUUIDFK đến người dùng (1 người dùng = 1 config)
webhook_urlVARCHARURL đích, bắt buộc HTTPS
is_activeBOOLEANBật/tắt gửi webhook
subscribed_eventsJSON/ARRAYDanh sách sự kiện đăng ký (vd: ["application.submitted"])
secret_keyVARCHARDùng để ký HMAC payload, xác thực nguồn gửi
statusENUMverified / unverified / failed
last_triggered_atTIMESTAMPLần bắn gần nhất
created_byUUIDNgười tạo (audit)
created_atTIMESTAMPThời điểm tạo (audit)
updated_atTIMESTAMPThời điểm cập nhật (audit)

5.4 Chi tiết Bảng — recr_resume_skills

Cột Kiểu Mô tả
idUUIDKhóa chính
resume_idUUIDFK đến recr_candidate_resumes
skill_idUUIDFK đến recr_skills_taxonomy
confidence_scoreFLOATĐiểm tin cậy từ AI (0.0 – 1.0)
sourceENUMai / manual
is_manual_overrideBOOLEANTrue nếu Candidate chỉnh sửa thủ công (không bị ghi đè)
created_atTIMESTAMPThời điểm tạo (audit)
updated_atTIMESTAMPThời điểm cập nhật (audit)

5.5 Chi tiết Bảng — recr_job_skills

Cột Kiểu Mô tả
idUUIDKhóa chính
job_idUUIDFK đến recr_jobs
skill_idUUIDFK đến recr_skills_taxonomy
requirement_levelENUMrequired / nice_to_have
sourceENUMai / manual
created_atTIMESTAMPThời điểm tạo (audit)
updated_atTIMESTAMPThời điểm cập nhật (audit)

5.6 Chi tiết Bảng — recr_skills_taxonomy

Cột Kiểu Mô tả
idUUIDKhóa chính
nameVARCHARTên chuẩn hóa (vd: "React", "Node.js")
categoryENUMtechnical / soft / domain
aliasesJSON/ARRAYCác tên gọi khác để chuẩn hóa (vd: ["ReactJS", "React.js"])

5.7 Chi tiết Bảng — recr_match_scores

Cột Kiểu Mô tả
idUUIDKhóa chính
candidate_idUUIDFK đến recr_candidates
job_idUUIDFK đến recr_jobs
application_idUUIDFK đến recr_applications (nếu có)
scoreINTEGERĐiểm matching (0-100)
matched_skillsJSON/ARRAYSkills khớp (vd: ["React", "TypeScript"])
missing_skillsJSON/ARRAYSkills thiếu (vd: ["Docker", "K8s"])
calculated_atTIMESTAMPThời điểm tính điểm

5.8 Chi tiết Bảng — recr_job_suggestions

Cột Kiểu Mô tả
idUUIDKhóa chính
job_idUUIDFK đến recr_jobs
candidate_idUUIDFK đến recr_candidates
match_scoreINTEGERĐiểm matching (0-100)
matched_skillsJSON/ARRAYSkills khớp
missing_skillsJSON/ARRAYSkills thiếu
statusENUMnew / contacted / dismissed
created_atTIMESTAMPThời điểm tạo
updated_atTIMESTAMPThời điểm cập nhật

6. Đặc tả API

6.1 Tổng quan Endpoint

Endpoint Xác thực (Tất cả Vai trò)

Phương thức Đường dẫn Mô tả Mã Yêu cầu
POST/recr/auth/registerĐăng ký người dùng mới với vai trò hệ thống userFR-001
POST/recr/auth/loginĐăng nhập bằng email/mật khẩuFR-002

Endpoint Ứng viên

Phương thức Đường dẫn Mô tả Mã Yêu cầu
GET/recr/jobsDuyệt tin tuyển dụngFR-003
POST/recr/applicationsNộp hồ sơ ứng tuyểnFR-004, FR-009
GET/recr/candidate/applicationsXem hồ sơ của tôiFR-005
PATCH/recr/candidate/profileCập nhật hồ sơFR-006
POST/recr/candidate/resumeTải lên hồ sơ (qua module FILE)FR-007, FR-008
GET/recr/candidate/resumesLiệt kê hồ sơ của tôiFR-008
DELETE/recr/candidate/resumes/:idXóa hồ sơFR-008
GET/recr/candidate/applications/:id/resumeLấy URL tải xuống presigned cho hồ sơ ứng tuyểnFR-009
POST/recr/candidate/reviews/jobsĐánh giá việc làmFR-030
GET/recr/candidate/reviews/jobs/:jobIdLấy đánh giá việc làmFR-030
POST/recr/candidate/resumes/:id/analyzeTrigger phân tích lại CV bằng AI (thủ công)FR-010
GET/recr/candidate/resumes/:id/skillsLấy danh sách skill của 1 CVFR-010
PATCH/recr/candidate/resumes/:id/skillsSửa/thêm/xóa skill thủ côngFR-010
GET/recr/candidate/jobs/:id/match-scoreXem điểm matching của Candidate hiện tại với 1 jobFR-050

Endpoint HR

Phương thức Đường dẫn Mô tả Mã Yêu cầu
GET/recr/hr/applicationsDuyệt hồ sơ ứng tuyểnFR-008
PATCH/recr/hr/applications/:id/statusCập nhật trạng thái hồ sơFR-009
POST/recr/hr/interviewsLên lịch phỏng vấnFR-010
POST/recr/hr/evaluationsGửi đánh giáFR-011
GET/recr/hr/pipelineXem quy trình tuyển dụngFR-013
GET/recr/hr/reportsTạo báo cáoFR-014
POST/recr/hr/jobsTạo tin tuyển dụngFR-028
GET/recr/hr/jobsLiệt kê việc làm của tôiFR-029
PATCH/recr/hr/jobs/:idCập nhật tin tuyển dụngFR-029
GET/recr/hr/jobs/:id/applicantsXem người nộp đơn cho việc làmFR-029
POST/recr/hr/reviews/candidatesĐánh giá ứng viênFR-031
GET/recr/hr/reviews/candidates/:candidateIdLấy đánh giá ứng viênFR-031
GET/recr/settings/webhookLấy cấu hình webhook hiện tạiFR-047
PUT/recr/settings/webhookTạo/cập nhật URL + bật/tắtFR-047
POST/recr/settings/webhook/testGửi sự kiện test xác minh URLFR-047
POST/recr/hr/jobs/:id/analyzeTrigger AI gợi ý tag cho JDFR-049
GET/recr/hr/jobs/:id/skillsXem danh sách skill yêu cầu của JobFR-049
PATCH/recr/hr/jobs/:id/skillsSửa danh sách skill yêu cầu của JobFR-049
GET/recr/hr/jobs/:id/applicants?sort=match_scoreDanh sách người nộp đơn kèm điểm matching, sắp theo độ phù hợpFR-050
GET/recr/hr/jobs/:id/suggestionsDanh sách gợi ý ứng viên phù hợp cho jobFR-053
PATCH/recr/hr/suggestions/:idCập nhật trạng thái gợi ý (contacted/dismissed)FR-053

Endpoint Candidate — Open to Work

Phương thức Đường dẫn Mô tả Mã Yêu cầu
PATCH/recr/candidate/profile/open-to-workBật/tắt trạng thái "Mở để tìm việc"FR-052

Endpoint Đăng ký (Tất cả Vai trò)

Phương thức Đường dẫn Mô tả Mã Yêu cầu
GET/recr/subscription/plansLiệt kê gói đăng kýFR-021
POST/recr/subscription/purchaseMua đăng kýFR-022
GET/recr/subscription/statusLấy trạng thái đăng kýFR-024
POST/recr/subscription/renewGia hạn đăng kýFR-025
GET/recr/subscription/historyXem lịch sử đăng kýFR-026

Endpoint Lời mời

Phương thức Đường dẫn Mô tả Mã Yêu cầu
POST/recr/invitations/sendGửi lời mời đến ứng viên/HRFR-039, FR-040, FR-041
GET/recr/invitations/verifyXác minh token lời mời (Công khai)FR-042
POST/recr/invitations/acceptChấp nhận lời mờiFR-043
GET/recr/invitationsLiệt kê lời mờiFR-045
DELETE/recr/invitations/:idThu hồi lời mờiFR-044
POST/recr/invitations/:id/resendGửi lại lời mờiFR-046

Endpoint Nhà tuyển dụng

Phương thức Đường dẫn Mô tả Mã Yêu cầu
POST/recr/employer/jobsTạo tin tuyển dụngFR-016
GET/recr/employer/jobsLiệt kê việc làm của tôiFR-017
PATCH/recr/employer/jobs/:idCập nhật tin tuyển dụngFR-017
GET/recr/employer/jobs/:id/applicantsXem người nộp đơnFR-018
PATCH/recr/employer/jobs/:id/submitGửi để duyệtFR-019
GET/recr/employer/analyticsXem phân tíchFR-020

7. Tích hợp

7.1 Sơ đồ Chuỗi

Sơ đồ Chuỗi
Hình 23: Luồng Ứng tuyển Ứng viên

7.2 Sự kiện Webhook

7.2.1 Webhook Nội bộ (RabbitMQ)

Giao tiếp giữa các module trong hệ thống, dùng RabbitMQ làm message broker.

Sự kiệnHướngMô tả
application.submittedĐi raĐược kích hoạt khi ứng viên nộp hồ sơ
interview.scheduledĐi raĐược kích hoạt khi phỏng vấn được lên lịch
job.submitted_for_approvalĐi raĐược kích hoạt khi HR/Employer gửi việc làm để duyệt
subscription.purchasedĐi raĐược kích hoạt khi người dùng mua đăng ký
file.deletedĐi vàoNhận từ module FILE khi tệp bị xóa; RECR dọn dẹp tham chiếu trong recr_candidate_resumes và recr_applications
invitation.createdĐi raĐược kích hoạt khi lời mời được tạo
invitation.acceptedĐi raĐược kích hoạt khi lời mời được chấp nhận
resume.analyzedĐi raCV đã được AI phân tích xong, có skills
job.skills_suggestedĐi raJD đã được AI gợi ý tag xong
match.calculatedĐi raĐiểm matching mới được tính cho 1 cặp CV-Job
job.approvedĐi raViệc làm được duyệt, kích hoạt gợi ý ứng viên phù hợp
candidate.suggestedĐi raGợi ý ứng viên phù hợp đã được tạo cho job

7.2.2 Webhook Ngoài (HTTP POST — Tính năng mới)

Người dùng (HR/Employer) cấu hình URL đích để nhận sự kiện từ hệ thống ra bên ngoài (ATS, Slack, CRM...). Được ký bằng HMAC secret_key để xác thực nguồn gửi.

Sự kiệnMô tảVí dụ sử dụng
application.submittedỨng viên nộp hồ sơ ứng tuyểnPush sang ATS / CRM
job.submitted_for_approvalViệc làm được gửi duyệtThông báo Slack cho quản lý
interview.scheduledPhỏng vấn được lên lịchTạo sự kiện trên Google Calendar
subscription.purchasedNgười dùng mua gói đăng kýGhi nhận trên hệ thống kế toán
webhook.testSự kiện test khi cấu hình webhookXác minh endpoint phản hồi 2xx

Lưu ý: Mặc định khi tạo webhook, sự kiện application.submitted được chọn sẵn. HR có thể bổ sung thêm sự kiện sau đó.

7.3 API Webhook

Endpoint Method Mô tả
/recr/settings/webhookGETLấy cấu hình webhook hiện tại
/recr/settings/webhookPUTTạo/cập nhật URL + bật/tắt
/recr/settings/webhook/testPOSTGửi sự kiện test xác minh URL

7.4 Tích hợp AI Trích xuất Skills

Luồng xử lý tự động khi Candidate tải CV lên:

BướcThành phầnGiao thứcMô tả
1RECR ServiceRabbitMQPhát sự kiện resume.uploaded
2Resume WorkerRabbitMQNhận job, lấy CV qua module FILE (presigned URL)
3Resume WorkerOCR / Text ExtractTrích xuất văn bản từ CV (PDF/DOCX/hình ảnh)
4Resume WorkerHTTP (AI LLM)Gọi AI service với prompt trích xuất skills
5Resume WorkerPostgreSQLLưu kết quả vào recr_resume_skills
6RECR ServiceRabbitMQPhát sự kiện resume.analyzed (thông báo Candidate)

7.5 Tích hợp AI Trích xuất Skills từ JD

Luồng xử lý khi HR/Employer lưu nháp job:

BướcThành phầnGiao thứcMô tả
1RECR ServiceRabbitMQPhát sự kiện job.draft_saved (hoặc HR bấm nút)
2JD WorkerRabbitMQNhận job, lấy nội dung JD
3JD WorkerHTTP (AI LLM)Gọi AI với prompt trích xuất skills từ JD
4JD WorkerPostgreSQLChuẩn hóa tag qua recr_skills_taxonomy, lưu recr_job_skills
5RECR ServiceRabbitMQPhát sự kiện job.skills_ready (hiển thị gợi ý cho HR)

7.6 Tích hợp Matching Score

Luồng tính điểm khi Candidate xem job hoặc HR xem danh sách ứng viên:

BướcThành phầnGiao thứcMô tả
1RECR ServiceHTTPNhận request xem job / danh sách ứng viên
2RECR ServicePostgreSQLLấy tags từ recr_resume_skills + recr_job_skills
3RECR ServiceInternalTính điểm theo trọng số: required (70%) + nice_to_have (20%) + experience (10%)
4RECR ServicePostgreSQLLưu kết quả vào recr_match_scores kèm breakdown
5RECR ServiceHTTPTrả về điểm % + chi tiết matched/missing skills

7.7 Tích hợp Gợi ý Ứng viên (UC-20)

Luồng tự động khi job được duyệt:

BướcThành phầnGiao thứcMô tả
1RECR ServiceRabbitMQPhát sự kiện job.approved
2Suggestion WorkerRabbitMQNhận job, lấy recr_job_skills
3Suggestion WorkerPostgreSQLLọc ứng viên: skill trùng + is_open_to_work = true + chưa hired trong tổ chức
4Suggestion WorkerInternalTính điểm matching (tái sử dụng UC-19)
5Suggestion WorkerPostgreSQLLọc ngưỡng ≥ 70%, kiểm tra tần suất (3/tuần/tổ chức)
6Suggestion WorkerPostgreSQLLưu recr_job_suggestions (status: new)
7RECR ServiceRabbitMQGửi thông báo cho HR

8. Yêu cầu Phi chức năng

Mã Yêu cầu Danh mục Yêu cầu Mục tiêu
NFR-001Hiệu suấtThời gian phản hồi API cho truy vấn danh sách< 500ms (p95)
NFR-002Hiệu suấtXử lý nộp hồ sơ ứng tuyển< 2s
NFR-003Khả năng mở rộngHỗ trợ người dùng đồng thời500+ người dùng đồng thời
NFR-004Khả dụngThời gian hoạt động hệ thống99.9%
NFR-005Bảo mậtKiểm soát truy cập dựa trên vai tròCác vai trò Candidate, HR, Employer
NFR-006Dữ liệuLưu trữ tệp hồ sơ qua module FILEModule FILE quản lý lưu trữ tệp (tương thích S3), tối đa 10MB mỗi tệp, truy cập qua URL presigned
NFR-007Tìm kiếmKhả năng tìm kiếm việc làmTìm kiếm toàn văn trong 500ms

9. Ma trận Truy cập Hồ sơ RBAC

Hành động Ứng viên (Chủ sở hữu) HR (Tổ chức) Nhà tuyển dụng (Tổ chức)
Tải lên Hồ sơ Chỉ của mình Không cho phép Không cho phép
Liệt kê Hồ sơ của mình Chỉ của mình Không cho phép Không cho phép
Xóa Hồ sơ Chỉ của mình (nếu chưa liên kết với hồ sơ ứng tuyển) Không cho phép Không cho phép
Xem Hồ sơ Ứng tuyển Hồ sơ của mình Hồ sơ của tổ chức Hồ sơ của tổ chức
Tải xuống Hồ sơ Chỉ của mình Qua URL presigned (hồ sơ của tổ chức) Qua URL presigned (hồ sơ của tổ chức)

Lưu ý: Tất cả việc tải hồ sơ của HR và Nhà tuyển dụng đều thực hiện qua URL presigned có thời hạn được tạo bởi module FILE. Truy cập tệp trực tiếp không bao giờ được hiển thị.

10. Ma trận Truy xuất Yêu cầu

Mã Yêu cầu Yêu cầu Vai trò Phần TDS Bảng CSDL Endpoint API
FR-001Đăng ký Ứng viênCandidate3.1recr_users, recr_candidatesPOST /recr/auth/register
FR-002Đăng nhập Ứng viênCandidate3.1recr_usersPOST /recr/auth/login
FR-003Duyệt Việc làmCandidate3.1recr_jobsGET /recr/jobs
FR-004Nộp Hồ sơ Ứng tuyểnCandidate3.1recr_applicationsPOST /recr/applications
FR-005Xem Trạng thái Hồ sơCandidate3.1recr_applicationsGET /recr/candidate/applications
FR-006Cập nhật Hồ sơCandidate3.1recr_candidatesPATCH /recr/candidate/profile
FR-007Tải lên Hồ sơCandidate3.1recr_candidate_resumes, sys_filesPOST /recr/candidate/resume
FR-008Duyệt Hồ sơ Ứng tuyểnHR3.2recr_applicationsGET /recr/hr/applications
FR-009Sàng lọc Ứng viênHR3.2recr_applicationsPATCH /recr/hr/applications/:id/status
FR-010Lên lịch Phỏng vấnHR3.2recr_interviewsPOST /recr/hr/interviews
FR-011Đánh giá Ứng viênHR3.2recr_evaluationsPOST /recr/hr/evaluations
FR-012Từ chối Ứng viênHR3.2recr_applicationsPATCH /recr/hr/applications/:id/status
FR-013Theo dõi Quy trìnhHR3.2recr_applicationsGET /recr/hr/pipeline
FR-014Tạo Báo cáoHR3.2recr_applicationsGET /recr/hr/reports
FR-015Đăng ký Nhà tuyển dụngEmployer3.1recr_employersPOST /recr/auth/register
FR-016Đăng tin Việc làm (Employer)Employer3.3recr_jobsPOST /recr/employer/jobs
FR-017Quản lý Tin tuyển dụngEmployer3.3recr_jobsGET/PATCH /recr/employer/jobs
FR-018Xem Người nộp đơnEmployer3.3recr_applicationsGET /recr/employer/jobs/:id/applicants
FR-019Duyệt Tin tuyển dụngEmployer3.3recr_jobsPATCH /recr/employer/jobs/:id/submit
FR-020Xem Phân tíchEmployer3.3recr_jobsGET /recr/employer/analytics
FR-021Gói Đăng kýTất cả4.4recr_subscription_plansGET /recr/subscription/plans
FR-022Mua Đăng kýTất cả4.4recr_subscriptionsPOST /recr/subscription/purchase
FR-023Kiểm soát Truy cập Đăng kýTất cả4.4recr_subscriptions-
FR-024Xác thực Đăng kýHệ thống4.4recr_subscriptionsGET /recr/subscription/status
FR-025Gia hạn Đăng kýTất cả4.4recr_subscriptionsPOST /recr/subscription/renew
FR-026Lịch sử Đăng kýTất cả4.4recr_subscription_historyGET /recr/subscription/history
FR-028HR Đăng tin Việc làmHR3.2recr_jobsPOST /recr/hr/jobs
FR-029HR Quản lý Việc làmHR3.2recr_jobsGET/PATCH /recr/hr/jobs
FR-030Đánh giá Việc làmCandidate3.3recr_job_reviewsPOST /recr/candidate/reviews/jobs
FR-031Đánh giá Ứng viênHR3.3recr_candidate_reviewsPOST /recr/hr/reviews/candidates
FR-008Quản lý Hồ sơ Ứng viênCandidate3.1recr_candidate_resumes, sys_files (FILE)GET/POST/DELETE /recr/candidate/resumes
FR-009Liên kết Hồ sơ Ứng tuyểnCandidate3.1recr_applications, sys_files (FILE)POST /recr/applications, GET /recr/candidate/applications/:id/resume
FR-039Gửi Lời mờiHR/Employer3.18recr_invitationsPOST /recr/invitations/send
FR-040Tạo TokenHệ thống3.18recr_invitationsPOST /recr/invitations/send
FR-041Gửi Sự kiện EmailHệ thống3.18-POST /recr/invitations/send (RabbitMQ)
FR-042Xác minh TokenCandidate3.19recr_invitationsGET /recr/invitations/verify
FR-043Chấp nhận Lời mờiCandidate3.20recr_invitationsPOST /recr/invitations/accept
FR-044Thu hồi Lời mờiHR/Employer3.21recr_invitationsDELETE /recr/invitations/:id
FR-045Liệt kê Lời mờiHR/Employer3.18recr_invitationsGET /recr/invitations
FR-046Gửi lại Lời mờiHR/Employer3.21recr_invitationsPOST /recr/invitations/:id/resend
FR-047Cấu hình WebhookHR/Employer3.16recr_webhook_configsGET/PUT /recr/settings/webhook
FR-010Trích xuất Skills từ CVCandidate / Hệ thống3.17recr_resume_skillsGET/POST/PATCH/DELETE .../resumes/:id/skills
FR-049Trích xuất Skills từ JDHR/Employer / Hệ thống3.18recr_job_skills, recr_skills_taxonomyPOST .../hr/jobs/:id/analyze
FR-050Tính điểm MatchingHệ thống / HR / Candidate3.19recr_match_scoresGET .../jobs/:id/match-score
FR-051Từ điển Skills chuẩnHệ thống3.17, 3.18recr_skills_taxonomyGET /recr/skills/taxonomy
FR-052Mở để tìm việcCandidate3.20recr_candidatesPATCH /recr/candidate/profile/open-to-work
FR-053Gợi ý Ứng viên cho Job mớiHệ thống / HR3.20recr_job_suggestionsGET/PUT .../hr/jobs/:id/suggestions
FR-054Phân tích Tương tác Ứng viênAdmin, HR, Employer3.21recr_candidate_resumes, recr_applicationsGET /recr/analytics/candidate-activity
FR-055Tỷ lệ Ứng tuyển Thành côngAdmin, HR, Employer3.21recr_applicationsGET /recr/analytics/application-success-rate
FR-056Xuất Báo cáo Ứng viênAdmin, HR, Employer3.21recr_candidate_resumes, recr_applicationsGET /recr/analytics/export
NFR-001Thời gian Phản hồi APITất cả6.1--
NFR-002Xử lý Hồ sơTất cả6.1--
NFR-003Người dùng Đồng thờiTất cả6.1--
NFR-004Thời gian Hoạt động Hệ thốngTất cả6.1--
NFR-005RBACTất cả6.1recr_users-
NFR-006Lưu trữ Hồ sơTất cả6.1sys_files (FILE)API module FILE (URL presigned)
NFR-007Tìm kiếm Việc làmTất cả6.1recr_jobsGET /recr/jobs