Business Rule — Quản lý Chấm công & Giải trình công (danh sách test)
Phiên bản: 0.2 — Nháp | Người viết: trangth | Mục đích: liệt kê Business Rule để dựng test case cho 2 chức năng Chấm công và Giải trình công | Nguồn: SRS Chấm công 0.7 (đã chốt 13/13 vấn đề mở)
Tài liệu liệt kê các Business Rule (BR) dạng kiểm chứng được để đội test dựng ca kiểm
thử. Mỗi BR kèm gợi ý ca biên / ca âm. Phần cuối là các điểm cần chốt trước khi test.
Đồng bộ với SRS đã chốt
Toàn bộ BR bám mô hình đã chốt trong SRS — Module Chấm công: 2 khối cố định
(Công trường / Văn phòng), geofence gắn 1 đơn vị, mỗi nhân viên thuộc 1 đơn vị, ngoài
vùng geofence chặn cứng (đã bỏ "Xin chấm công từ xa").
Bối cảnh nghiệp vụ:
- Chấm công — chia 2 khối cố định (không tự set khung giờ theo từng phòng ban):
- Khối Công trường: khung 06:00–18:00 linh hoạt, chỉ cần chấm trong khung; không có
khái niệm "Đi muộn"/phạt tiền. 4 trạng thái ngày (Đủ công · Tăng ca · Quên chấm công ·
Vắng). Giờ nghỉ trưa tự thiết lập ở Hành chính – Nhân sự.
- Khối Văn phòng: mốc chuẩn 08:00 vào / 17:30 ra, ân hạn 08:00–08:10; từ 08:10
tính Đi muộn + bắt đầu phạt. 5 trạng thái ngày (Đủ công · Đi muộn/Về sớm · Quên chấm
công · Tăng ca · Vắng/Ngày nghỉ). Nghỉ trưa 1,5 giờ cố định.
- Mỗi nhân viên thuộc 1 đơn vị (3 công trường: Linh Đàm/Đông Anh/Yên Bái · 3 phòng ban:
IT/Kế toán–HCNS/Kỹ thuật). Chấm công bằng GPS geofence của chính đơn vị đó + nhận diện
khuôn mặt (liveness). Mỗi đơn vị có 1 vị trí chấm công, bán kính tự set (không có giá
trị mặc định). Ngoài geofence → chặn cứng.
- Giải trình công — 5 loại: Nghỉ phép năm · Nghỉ không lương · Đi muộn/Về sớm · Tăng ca ·
Quên chấm công. Ràng buộc thời điểm đăng ký: không đăng ký cho ngày quá khứ; hôm nay
được (trừ Nghỉ phép năm); tương lai được (trừ Quên chấm công).
Nhóm A — Chấm công: 2 khối cố định & trạng thái ngày
| Mã |
Business Rule |
Ca cần test (đặc biệt là biên) |
| BR-CC-01 |
Trạng thái & mốc giờ tính theo khối của nhân viên (không tự set theo từng phòng ban): Văn phòng dùng mốc 08:00/17:30; Công trường dùng khung 06:00–18:00 linh hoạt. |
NV Văn phòng vs NV Công trường cùng chấm 08:15 → khác trạng thái |
| BR-CC-02 |
Văn phòng — ân hạn 08:00–08:10: vào trước 08:10 (đến 08:09) → không đi muộn, không phạt; từ 08:10 → "Đi muộn" + bắt đầu phạt. |
Vào 08:09, đúng 08:10, 08:11 |
| BR-CC-03 |
Công trường — không có "Đi muộn"/phạt: chấm bất kỳ lúc nào trong 06:00–18:00 đều hợp lệ; ngoài khung → xử lý theo quy tắc khung giờ. |
Chấm 06:00, 17:59, trước 06:00, sau 18:00 |
| BR-CC-04 |
Công thức đủ công: Văn phòng = (giờ ra − giờ vào) − 1,5 giờ nghỉ trưa cố định ≥ 8 giờ → 1 công. Công trường = (giờ ra − giờ vào) giờ thô, KHÔNG trừ nghỉ trưa > 9,5 giờ → 1 công (giờ nghỉ trưa chỉ dùng để cấu hình/hiển thị ở HCNS). |
VP: đủ 8h vs thiếu. CT: giờ thô 9h29 vs 9h31 (biên 9,5h) |
| BR-CC-05 |
Bộ trạng thái ngày khác nhau theo khối — Văn phòng 5 trạng thái, Công trường 4 trạng thái; ô đếm & nhãn thống kê phải đúng theo khối. |
Đếm trạng thái cho 1 NV mỗi khối, đối chiếu số ô |
Nhóm B — Chấm công: vị trí geofence theo đơn vị
| Mã |
Business Rule |
Ca cần test |
| BR-CC-06 |
Mỗi đơn vị có 1 vị trí chấm công = geofence (tâm + bán kính tự set, không default). NV chỉ chấm hợp lệ khi đứng trong bán kính vị trí của đơn vị mình. |
Đứng trong bán kính, đứng ngoài bán kính |
| BR-CC-07 |
Đứng ngoài bán kính → chặn cứng (đã bỏ "Xin chấm công từ xa"), chỉ cho "Thử lại" |
Cách tâm > bán kính |
| BR-CC-08 |
NV đứng trong geofence của đơn vị khác (không phải đơn vị mình) → cho hay chặn? (NV thuộc 1 đơn vị) |
NV đơn vị A đứng ở vị trí đơn vị B |
| BR-CC-09 |
Biên geofence: đứng đúng trên đường bán kính → tính trong hay ngoài |
Khoảng cách = đúng bán kính |
| BR-CC-10 |
Đơn vị chưa cấu hình vị trí chấm công (chưa có geofence) → NV đơn vị đó chấm thế nào (chốt: bắt buộc HR set, không có default) |
Chấm khi đơn vị chưa set vị trí |
| BR-CC-11 |
Vị trí bị xóa / ngừng áp dụng sau khi đã cấu hình → NV đơn vị đó còn chấm được không |
Chấm ở đơn vị vừa bị gỡ vị trí |
Nhóm C — Chấm công: chu kỳ vào/ra & xác thực
| Mã |
Business Rule |
Ca cần test |
| BR-CC-12 |
Mỗi NV mỗi ngày chỉ 1 vào + 1 ra; đã ra ca → khóa, không chấm lại (ẩn nút) |
Chấm ra xong bấm chấm lại |
| BR-CC-13 |
Chỉ có 1 trong 2 mốc (thiếu vào hoặc thiếu ra) → trạng thái "Quên chấm công" |
Chỉ chấm vào, hết ngày không chấm ra |
| BR-CC-14 |
Khi chấm, app kiểm 3 lớp: (a) khoảng cách ≤ bán kính; (b) độ chính xác GPS đủ / không mock location; (c) khuôn mặt đạt ngưỡng. Thiếu lớp nào → chặn. |
Bật giả lập vị trí; GPS nhiễu |
| BR-CC-15 |
Nhận diện khuôn mặt dưới ngưỡng / liveness fail → không lưu bản ghi, cho thử lại |
Sai mặt / ảnh tĩnh |
Nhóm D — Giải trình công: ma trận thời điểm đăng ký (trọng tâm)
Ma trận test lõi — 5 loại × 3 mốc thời gian = 15 ca:
| Loại giải trình |
Ngày quá khứ |
Ngày hôm nay |
Ngày tương lai |
| Nghỉ phép năm |
✗ chặn |
✗ chặn (trừ) |
✓ cho |
| Nghỉ không lương |
✗ chặn |
✓ cho |
✓ cho |
| Đi muộn / Về sớm |
✗ chặn |
✓ cho |
✓ cho |
| Tăng ca |
✗ chặn |
✓ cho |
✓ cho |
| Quên chấm công |
✗ chặn |
✓ cho |
✗ chặn (trừ) |
| Mã |
Business Rule |
Ca cần test |
| BR-GT-01 |
Không loại nào được đăng ký cho ngày quá khứ (cả 5 loại) |
Chọn ngày = hôm qua cho từng loại |
| BR-GT-02 |
Ngày hôm nay: cho phép mọi loại trừ Nghỉ phép năm |
Nghỉ phép năm chọn hôm nay → chặn; 4 loại kia → cho |
| BR-GT-03 |
Ngày tương lai: cho phép mọi loại trừ Quên chấm công |
Quên chấm công chọn ngày mai → chặn; 4 loại kia → cho |
| BR-GT-04 |
"Hôm nay" xác định theo ngày hệ thống (server), không theo giờ thiết bị |
Đổi giờ máy sang hôm qua/mai rồi đăng ký |
| BR-GT-05 |
Biên chuyển ngày: đăng ký lúc 23:59 hôm nay và 00:00 hôm sau phân loại đúng quá khứ/hiện tại/tương lai |
Test quanh mốc nửa đêm |
Nhóm E — Giải trình công: ràng buộc theo từng loại
| Mã |
Business Rule |
Ca cần test |
| BR-GT-06 |
Loại có khoảng ngày (Nghỉ phép năm, Nghỉ không lương): áp ràng buộc thời điểm cho từng ngày trong khoảng — nếu khoảng chứa ngày quá khứ → chặn |
Nghỉ phép từ hôm qua → mai |
| BR-GT-07 |
Ngày/giờ kết thúc < bắt đầu → chặn hoặc tự hoán đổi |
Từ 20/07 đến 18/07 |
| BR-GT-08 |
Nghỉ phép năm: trừ vào quota phép năm (12 ngày/năm, HR set theo người); chỉ hợp lệ khi Quản lý trực tiếp duyệt + HR ghi nhận (luồng 2 bước); vượt quota → cảnh báo/chặn |
Còn 1 ngày, đăng ký 3 ngày |
| BR-GT-09 |
Đi muộn/Về sớm (chỉ áp khối Văn phòng): chọn đi muộn hay về sớm, nhập giờ thực tế; mốc tính lệch theo 08:00/17:30, có ân hạn tới 08:10 (BR-CC-02) |
Nhập giờ ra sớm hơn 17:30; giờ vào 08:05 vs 08:15 |
| BR-GT-10 |
Tăng ca: nhập giờ bắt đầu → kết thúc, hệ tự tính thời lượng; Văn phòng quy đổi ra ngày công (8h/ngày), Công trường tính theo đúng giờ vào/ra đã đăng ký (không quy đổi 8h/ngày); thời lượng ≤ 0 → chặn |
Bắt đầu = kết thúc; 1 ca VP vs 1 ca CT |
| BR-GT-11 |
Quên chấm công: trỏ tới ngày thực sự thiếu mốc vào/ra; nhập bổ sung giờ vào hoặc giờ ra (được để trống 1 ô) |
Chọn ngày đã đủ công → có chặn không? |
| BR-GT-12 |
Lý do bắt buộc với mọi loại; file đính kèm tùy chọn |
Bỏ trống lý do → chặn |
Nhóm F — Giải trình công: duyệt, quyền, trùng lặp
| Mã |
Business Rule |
Ca cần test |
| BR-GT-13 |
Mỗi người chỉ tự giải trình cho bản thân; người duyệt cố định = Quản lý trực tiếp, không cho chọn. Màn duyệt đơn nằm ở web (module Hành chính – Nhân sự), không thuộc app |
Kiểm tra không sửa được người duyệt |
| BR-GT-14 |
Một ngày đã có đơn cùng loại đang Chờ duyệt / Đã duyệt → chặn tạo trùng (hay cho phép?) |
Gửi 2 đơn đi muộn cùng 1 ngày |
| BR-GT-15 |
Đơn bị Từ chối → ngày đó giữ nguyên trạng thái lệch, không tính đủ công |
Từ chối rồi kiểm tra công |
| BR-GT-16 |
Đơn Đã duyệt loại "Quên chấm công" → ngày được cộng công thường (không thành Tăng ca) |
Duyệt bổ sung giờ ra 18:30 |
⚠️ Điểm cần chốt trước khi test
- "Quá khứ chặn tất cả" xung đột với bản chất Quên chấm công / Đi muộn. Hai loại này mô tả
việc đã xảy ra. Nếu hôm nay quên chấm ra, qua ngày mai không giải trình được nữa (đã
thành quá khứ). Thực tế NV thường phát hiện hôm sau → cân nhắc cửa sổ hồi tố N ngày thay
vì chặn cứng quá khứ. (SRS §8 chưa quy định cửa sổ hồi tố — cần BA/Dev chốt.)
- "Tăng ca / Đi muộn cho ngày tương lai" = đăng ký báo trước. Cần xác nhận đúng ý, vì
tương lai chưa có giờ thực tế để đối chiếu.