Phân tích thiết kế hệ thống chức năng 休暇申請(Yêu cầu nghỉ phép)
Chức năng 休暇申請 (Yêu cầu nghỉ phép) thường được sử dụng trong các hệ thống quản lý nhân sự (HRM). Dưới đây là phân tích và thiết kế hệ thống chi tiết:
1. Yêu cầu chức năng
Chức năng chính:
- Nhân viên gửi yêu cầu nghỉ phép.
- Quản lý phê duyệt hoặc từ chối yêu cầu.
- Theo dõi lịch sử và trạng thái nghỉ phép.
Tính năng chi tiết:
- Nhân viên:
- Gửi yêu cầu nghỉ phép (chọn loại nghỉ phép, thời gian, lý do).
- Xem trạng thái yêu cầu (Chờ phê duyệt, Đã phê duyệt, Từ chối).
- Xem lịch sử nghỉ phép.
- Quản lý:
- Xem danh sách yêu cầu từ cấp dưới.
- Phê duyệt hoặc từ chối yêu cầu nghỉ phép.
- Thêm ghi chú lý do (khi từ chối).
- Hệ thống:
- Gửi thông báo email hoặc thông báo nội bộ (notification) khi có yêu cầu mới, phê duyệt hoặc từ chối.
- Tự động cập nhật số ngày nghỉ còn lại của nhân viên.
- Admin:
- Cấu hình các loại nghỉ phép (nghỉ phép có lương, không lương, nghỉ ốm…).
- Quản lý số ngày nghỉ của từng nhân viên.
2. Phân tích thiết kế hệ thống
2.1. Cơ sở dữ liệu
- Bảng
users
: Thông tin nhân viên.id
: ID của nhân viên.name
: Tên.email
: Email.role
: Vai trò (nhân viên, quản lý, admin).days_off_remaining
: Số ngày nghỉ còn lại.
- Bảng
leave_requests
: Lưu yêu cầu nghỉ phép.id
: ID của yêu cầu.user_id
: ID nhân viên gửi yêu cầu.type
: Loại nghỉ phép (có lương, không lương, nghỉ ốm…).start_date
: Ngày bắt đầu nghỉ.end_date
: Ngày kết thúc nghỉ.reason
: Lý do nghỉ phép.status
: Trạng thái (Chờ phê duyệt, Đã phê duyệt, Từ chối).manager_id
: ID của quản lý phê duyệt.manager_note
: Ghi chú từ quản lý.created_at
,updated_at
.
- Bảng
leave_types
: Các loại nghỉ phép.id
: ID loại nghỉ phép.name
: Tên loại nghỉ (nghỉ có lương, nghỉ không lương…).max_days
: Số ngày tối đa được nghỉ.
- Bảng
notifications
: Lưu thông báo.id
: ID thông báo.user_id
: ID người nhận thông báo.message
: Nội dung thông báo.is_read
: Đã đọc hay chưa.
2.2. Quy trình hoạt động
- Nhân viên gửi yêu cầu:
- Chọn loại nghỉ phép, nhập ngày bắt đầu, kết thúc và lý do.
- Hệ thống kiểm tra số ngày nghỉ còn lại. Nếu hợp lệ, lưu vào bảng
leave_requests
với trạng thái “Chờ phê duyệt”.
- Quản lý phê duyệt:
- Nhận thông báo về yêu cầu nghỉ phép.
- Xem chi tiết yêu cầu, chọn phê duyệt hoặc từ chối.
- Nếu phê duyệt, hệ thống trừ số ngày nghỉ còn lại của nhân viên. Nếu từ chối, gửi lý do.
- Hệ thống gửi thông báo:
- Khi yêu cầu được tạo, quản lý nhận thông báo.
- Khi yêu cầu được phê duyệt/từ chối, nhân viên nhận thông báo.
2.3. API
1. Gửi yêu cầu nghỉ phép
POST /api/leave-requests
Body:
{
"type": "paid_leave",
"start_date": "2024-12-01",
"end_date": "2024-12-05",
"reason": "Đi du lịch cùng gia đình"
}
JSONResponse:
- 200: “Yêu cầu nghỉ phép đã được gửi.”
- 400: “Số ngày nghỉ không hợp lệ.”
2. Phê duyệt yêu cầu
PUT /api/leave-requests/{id}/approve
Response:
- 200: “Yêu cầu đã được phê duyệt.”
- 400: “Yêu cầu không hợp lệ.”
3. Từ chối yêu cầu
PUT /api/leave-requests/{id}/reject
Body:
{
"note": "Hiện tại không đủ nhân sự, vui lòng chọn thời gian khác."
}
JSONResponse:
- 200: “Yêu cầu đã bị từ chối.”
4. Xem danh sách yêu cầu
GET /api/leave-requests
Response:
[
{
"id": 1,
"type": "paid_leave",
"start_date": "2024-12-01",
"end_date": "2024-12-05",
"status": "pending",
"reason": "Đi du lịch cùng gia đình",
"manager_note": null
}
]
JSON2.4. Giao diện người dùng
1. Nhân viên
- Form gửi yêu cầu:
- Các trường: Loại nghỉ phép, Ngày bắt đầu, Ngày kết thúc, Lý do.
- Danh sách yêu cầu:
- Hiển thị trạng thái và lịch sử.
2. Quản lý
- Danh sách yêu cầu từ cấp dưới:
- Cột: Tên nhân viên, Loại nghỉ phép, Thời gian, Lý do, Trạng thái.
- Modal chi tiết yêu cầu:
- Nút phê duyệt/từ chối.
2.5. Quy tắc nghiệp vụ
- Kiểm tra số ngày nghỉ:
Số ngày yêu cầu <= Số ngày còn lại
.
- Không cho phép trùng lịch:
start_date
hoặcend_date
không được trùng với các yêu cầu “Đã phê duyệt” trước đó.
- Thời gian yêu cầu tối thiểu:
- Phải gửi yêu cầu trước ít nhất X ngày (có thể cấu hình).