05 · Kỹ thuật
Data mẫu
Bộ dữ liệu mẫu để đối chiếu khi viết unit test và acceptance test. Mọi kịch bản ở trang Kịch bản điều phối tham chiếu chính dữ liệu này.
Ma trận nhân viên × kỹ năng
Bảy nhân viên, tám kỹ năng dạng binary, kèm trạng thái runtime (lương tháng, tải, trạng thái) để dùng trực tiếp trong các kịch bản. Thang máy là kỹ năng độc nhất (chỉ NV06 sở hữu).
| Mã | Tên | ĐG | Điện CB | Điện tử | Cấp nước | Điều hòa | CCTV | PCCC | Thang máy* | Sơn | Lương (k) | Tải (h) | Trạng thái |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| NV01 | Hùng | 4.7 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 8.200 | 2.0 | available |
| NV02 | Lan | 4.1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 7.800 | 1.5 | available |
| NV03 | Minh | 4.6 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 8.000 | 1.0 | available |
| NV04 | Phúc | 3.6 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 7.600 | 1.0 | available |
| NV05 | Quân | 4.0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 7.900 | 2.5 | busy |
| NV06 | Sơn | 4.8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 8.300 | 3.0 | available |
| NV07 | Tâm | 3.4 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 7.500 | 0.5 | available |
Danh mục dịch vụ → step
| Dịch vụ | Step | Kỹ năng | Định biên | Đơn giá |
|---|---|---|---|---|
| DV-A Sửa hệ điện CN | 1 · Kiểm tra tủ điện | Điện cơ bản | 60' | 150.000đ |
| 2 · Thay thiết bị đóng cắt | Điện cơ bản | 90' | 220.000đ | |
| 3 · Đấu nối bo mạch | Điện tử | 120' | 300.000đ | |
| 4 · Nghiệm thu đo cách điện | Điện cơ bản | 30' | 80.000đ | |
| DV-B Bảo trì HVAC | 1 · Vệ sinh dàn lạnh | Điều hòa | 60' | 120.000đ |
| 2 · Nạp gas, kiểm tra áp | Điều hòa | 90' | 200.000đ | |
| DV-C Bảo trì thang máy | 1 · Kiểm tra cơ-phanh | Thang máy* | 120' | 400.000đ |
| 2 · Hiệu chỉnh tủ ĐK | Thang máy* | 90' | 350.000đ | |
| DV-D Lắp CCTV | 1 · Đi dây, gắn camera | Mạng-CCTV | 150' | 260.000đ |
| 2 · Cấu hình đầu ghi | Mạng-CCTV | 60' | 140.000đ | |
| DV-E Mở CN mới | 1 · Đấu điện tổng | Điện CB | 120' | 280.000đ |
| 2 · Lắp hệ cấp nước | Cấp nước | 150' | 300.000đ | |
| 3 · Lắp điều hòa | Điều hòa | 120' | 260.000đ | |
| 4 · Lắp CCTV | Mạng-CCTV | 120' | 240.000đ |
Data mẫu cho từng kịch bản
Mỗi kịch bản có bộ dữ liệu cụ thể theo dạng Given / When / Then để QA viết test trực tiếp. Cờ assignment.flag là kết quả gán mong đợi.
Gom cụm liền mạch
NV01 Hùng — Điện CB + Điện tử · KV Q1 · available · tải 2.0h. DV-A @ Q1 (60+90+120+30'). Trần buổi 240'.
→ dispatch(DV-A @ Q1)
Gom step 1+2 = 150'; thêm step 3 (120') = 270' > 240 → cắt. Hùng nhận cụm step 1–2; step 3–4 về hàng đợi.
Cắt cụm thiếu kỹ năng
NV03 Minh — Điện CB, không Điện tử · KV Q3 · available. DV-A @ Q3, step 3 cần Điện tử.
→ dispatch(DV-A @ Q3)
Minh gom step 1–2 (150'). Step 3 (Điện tử) thiếu KN → cắt. Step 3 về hàng đợi cho Hùng/Quân/Sơn; step 4 chờ step 3.
Band là tiêu chí ưu tiên
Phúc (3.6 · 3KN · tải 1.0 · 7.600k, lệch +100k) vs Hùng (4.7 · 5KN · tải 2.0 · 8.200k, lệch +700k). Mốc thấp nhất 7.500k.
→ chấm điểm w1=.4 w2=.1 w3=.3 w4=.5
Phúc lệch thấp hơn → w4 cao hơn → xếp #1. Hùng không bị loại, chỉ xếp sau. Tăng w1 đảo về Hùng.
Van an toàn chống pending
DV-D @ Q1 gấp deadline; người trong band đều busy. Còn NV06 Sơn — đủ CCTV · available · 8.300k (lệch +800k > band).
→ dispatch, cands lọc band = rỗng
Van an toàn: lấy bất kỳ ai đủ KN+KV rảnh → giao Sơn. Việc không pending. Gắn cờ ngoài band.
Chủ động nhận thêm
NV04 Phúc xong cụm sớm 40' · 7.600k. Hàng đợi: DV-D step 1 (CCTV — Phúc có) đang pending, không ai nhận.
→ selfPick(Phúc, DV-D s1)
Phúc tự nhận dù có thể vượt band sau khi nhận. Bỏ kiểm tra band. Gắn cờ tự nhận thêm.
Khẩn không cắt ngang
NV05 Quân đang in_progress cụm DV-B @ Q4 (còn step 2). Việc khẩn cùng CN Q4, Quân on-site. urgent_handle 120'.
→ dispatchUrgent(@ Q4)
Không cắt DV-B. Giao thêm khẩn, allowOverCap=true, max 120'. Quân có thể return step 2 → về hàng đợi; phần đã làm giữ lương.
Dự án đội bổ trợ
DV-E @ Q5 cần Điện CB + Cấp nước + Điều hòa + CCTV. Pool: Minh (3 KN đầu), Phúc (CCTV), Tâm (điện+nước).
→ dispatchBranchProject(DV-E)
Round-robin gom: Minh phủ điện+nước+ĐH → thiếu CCTV → thêm Phúc. Đội {Minh, Phúc} phủ đủ 4 KN.
Kỹ năng độc nhất
DV-C @ Q2 — cả 2 step cần Thang máy*. Chỉ NV06 Sơn có (is_unique=true).
→ dispatchBranchProject(DV-C)
Không round-robin. pinAssign(Sơn) cả 2 step, xuyên suốt. Sơn on_leave → không backup → EVENT cảnh báo HR.
Step hai người
DV-A step 3 — crew_size=2 · split_ratio [0.6, 0.4] · 300.000đ. Hai người có Điện tử: Hùng (chính) + Quân (phụ).
→ gán step 3 cho 2 người
Chia theo split_ratio: chính 300.000×0.6 = 180.000đ; phụ 300.000×0.4 = 120.000đ.
Handover khi nghỉ
NV03 Minh làm DV-E, xong step 1–3 thì status = on_leave. Backup đủ KN còn lại (vd NV07 Tâm cho điện/nước).
→ handover tại step 4
Backup nhận từ step 4. Lương: Minh hưởng step 1–3, backup hưởng step 4–7. Dự án không gián đoạn.
Demo chấm điểm (Kịch bản 3)
Minh họa band hoạt động: hai ứng viên cùng đủ điều kiện, người lương thấp được ưu tiên qua w4. Lệch lương tính từ mốc thấp nhất 7.500k.
| Ứng viên | Điểm HS | Số KN | Tải (h) | Lệch lương thấp | Kết quả |
|---|---|---|---|---|---|
| NV04 Phúc | 3.6 | 3 | 1.0 | +100k | #1 ưu tiên |
| NV01 Hùng | 4.7 | 5 | 2.0 | +700k | xếp sau, không bị cấm |
Công thức điểm = w1·HS + w2·KN − w3·Tải + w4·MAX(0, 500−lệch)/100. Với trọng số mặc định (w1=0.4, w2=0.1, w3=0.3, w4=0.5), Phúc thắng nhờ lệch lương thấp được w4 cộng điểm; Hùng lệch +700k > band nên phần w4 = 0 nhưng vẫn không bị loại. Tăng w1 ở mùa cao điểm sẽ đảo ưu tiên về Hùng. File Excel có bảng tính sống để bạn tự chỉnh trọng số.