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).

TênĐG Điện CBĐiện tửCấp nướcĐiều hòaCCTVPCCCThang máy*Sơn Lương (k)Tải (h)Trạng thái
NV01Hùng4.7110110008.2002.0available
NV02Lan4.1101001017.8001.5available
NV03Minh4.6111100008.0001.0available
NV04Phúc3.6100010017.6001.0available
NV05Quân4.0010111007.9002.5busy
NV06Sơn4.8111111118.3003.0available
NV07Tâm3.4101000017.5000.5available
Kỹ năng độc nhấtThang máy chỉ có NV06 (Sơn) sở hữu → tách flow điều phối, cảnh báo HR đào tạo dự phòng. Lương tháng thấp nhất là 7.500k (NV07 Tâm) — band ±500k tính từ mốc này.

Danh mục dịch vụ → step

Dịch vụStepKỹ 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ản60'150.000đ
2 · Thay thiết bị đóng cắtĐiện cơ bản90'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ản30'80.000đ
DV-B
Bảo trì HVAC
1 · Vệ sinh dàn lạnhĐiều hòa60'120.000đ
2 · Nạp gas, kiểm tra ápĐiều hòa90'200.000đ
DV-C
Bảo trì thang máy
1 · Kiểm tra cơ-phanhThang máy*120'400.000đ
2 · Hiệu chỉnh tủ ĐKThang máy*90'350.000đ
DV-D
Lắp CCTV
1 · Đi dây, gắn cameraMạng-CCTV150'260.000đ
2 · Cấu hình đầu ghiMạng-CCTV60'140.000đ
DV-E
Mở CN mới
1 · Đấu điện tổngĐiện CB120'280.000đ
2 · Lắp hệ cấp nướcCấp nước150'300.000đ
3 · Lắp điều hòaĐiều hòa120'260.000đ
4 · Lắp CCTVMạng-CCTV120'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.

1

Gom cụm liền mạch

Given · When

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)

Then · flag auto_in_band

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.

2

Cắt cụm thiếu kỹ năng

Given · When

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)

Then · flag auto_in_band

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.

3

Band là tiêu chí ưu tiên

Given · When

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

Then · flag auto_in_band

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.

4

Van an toàn chống pending

Given · When

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

Then · flag auto_out_of_band

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.

5

Chủ động nhận thêm

Given · When

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)

Then · flag self_picked

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.

6

Khẩn không cắt ngang

Given · When

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)

Then · flag urgent

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.

7

Dự án đội bổ trợ

Given · When

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)

Then

Round-robin gom: Minh phủ điện+nước+ĐH → thiếu CCTV → thêm Phúc. Đội {Minh, Phúc} phủ đủ 4 KN.

8

Kỹ năng độc nhất

Given · When

DV-C @ Q2 — cả 2 step cần Thang máy*. Chỉ NV06 Sơn có (is_unique=true).
dispatchBranchProject(DV-C)

Then

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.

9

Step hai người

Given · When

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

Then · flag auto_in_band

Chia theo split_ratio: chính 300.000×0.6 = 180.000đ; phụ 300.000×0.4 = 120.000đ.

10

Handover khi nghỉ

Given · When

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

Then

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 HSSố KNTải (h)Lệch lương thấpKết quả
NV04 Phúc3.631.0+100k#1 ưu tiên
NV01 Hùng4.752.0+700kxế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ố.

Tải file Excel để dùng bảng tính chấm điểm sống và đầy đủ 4 sheet. Excel