Bỏ qua

SRS — Trạng thái làm việc, Giải trình Đi công tác & Chấm công ngoài phạm vi (test)

Phiên bản: 1.8 — Nháp  |  Người viết: trangth  |  Cập nhật: 10/09/2026  |  Mục đích: đặc tả để dựng ca kiểm thử (test)  |  Nguồn: bộ mockup mới sửa của app Chấm công (app-longdo-erp/pace-1/cham-cong/) + mockup web web/chi-tiet-don-giai-trinh.html + bảng FR/BR nội bộ + Business Rule bản 0.3 (19/08/2026)

Tài liệu đặc tả đúng 8 phần, không viết lại toàn bộ phần mềm:

  1. Trạng thái làm việc — nhân viên khai đang làm ở đâu trong ngày (§2).
  2. Giải trình loại Đi công tác — loại đơn mới (§3.2).
  3. Chấm công khi ở ngoài phạm vi vị trí chấm công — chấm công tại chỗ với lý do Đi công tác (§4). (Bản 0.5 bỏ lối tắt Giải trình đi công tác ngay tại màn chấm công — xem §4.1.)
  4. Chi tiết công của ngày có đơn Đi công tác — màn Công tháng, dùng chung cho nhân viên và nhân sự (§4.5). Mới bổ sung bản 0.5.
  5. Phiên chấm công theo vị trí & cách cộng công của ngày hỗn hợp — đổi vị trí thì reset phiên chấm công (chấm vào/ra lại như ngày mới), công ngày lấy theo vị trí làm việc và cộng thêm giờ ở nơi công tác khi đơn được duyệt (§4.6). Mới bổ sung bản 0.6.
  6. Trạng thái Công tác là cổng mở chấm công đi công tác — nút Chấm công đi công tác ở màn ngoài phạm vi chỉ hiện khi nhân viên đã đổi trạng thái làm việc sang Công tác; khi đổi trạng thái, nơi công tác tự điền theo đơn Đi công tác đã đăng ký cho ngày đó (§2.5 · §4.0). Ngày đã chấm công đi công tác nhưng chưa tạo đơn hiển thị ở Giải trình trong ngày giống ngày Đi muộn chưa giải trình — mốc giờ theo giờ đã chấm + nút Giải trình ngay (tổ hợp ⓪ ở §4.5.1). Mới bổ sung bản 1.1. ✿ Bản 1.5 siết lại nhánh "đã có đơn": nơi công tác điền sẵn theo đơn thì khoá, không cho sửa tại màn trạng thái (§2.5 trường hợp A · BR-25 · FR-25).
  7. ✸ Đồng bộ Business Rule bản 0.3 — ba nhóm luật mới của Business Rule — Quản lý Chấm công & Giải trình công (bản 0.3, quyết định BA 19/08/2026) được đưa hẳn vào tài liệu này để đội test chỉ đọc một chỗ: hạn giải trình 7 ngày (§3.1.1), loại đơn Khác (§3.6), phiên chấm công khối Công trường (§4.7). Mới bổ sung bản 1.2.
  8. ✸ Gộp nốt phần còn lại của Business Rule 0.3 — luật chung của 8 loại đơn (§3.7) · Công trường bỏ khung giờ cùng bốn luật cũ bị thay (§4.7.1) · ba sheet thống kê tháng & màn thống kê HR (§4.7.4). Mới bổ sung bản 1.3.
  9. ✾ Đăng ký giải trình ở khối Công trường — bắt buộc chọn phiên (§3.8): bốn loại đơn bám giờ chấm — Thiếu giờ công · Quên chấm công · Đi công tác (Phạm vi Theo giờ) · Khác — phải chọn Phiên 1 hay Phiên 2 trước khi khai giờ; Đi công tác khai Theo ngày và toàn bộ khối Văn phòng thì không hỏi phiên. Mới bổ sung bản 1.6.

Phạm vi hiện tại — đã cắt gọn

Bản 0.2 còn có Chấm công & công ngày (định mức theo khối, cách tính công ngày, bộ ca CASE-01…CASE-15) và 6 loại giải trình cũ (nghỉ phép, nghỉ không lương, đi muộn/về sớm, thiếu giờ công, quên chấm công, tăng ca). Bản này đã bỏ hết — tra ở SRS — App Chấm công và Business Rule — Chấm công & Giải trình.

Quan hệ với các tài liệu đã có

  • SRS — App Chấm công (bản 0.8) là đặc tả gốc theo màn hình. Tài liệu này không thay thế, chỉ đặc tả sâu 3 phần trên theo hướng kiểm thử.
  • Business Rule — Quản lý Chấm công & Giải trình công (test) bản 0.3 (19/08/2026) bổ sung 3 nhóm luật liên quan trực tiếp tới tài liệu này: Nhóm G (Công trường chấm công nhiều phiên, định mức 8 giờ) · Nhóm H (loại đơn Khác) · BR-GT-18 (hạn giải trình 7 ngày). ✸ Bản 1.2 đã kéo cả ba vào đây — §3.1.1 · §3.6 · §4.7 — và sửa BR-GT-09 · BR-GT-12 · FR-GT-11 (bỏ cửa sổ "hết tháng") cùng định mức Văn phòng ở §4.6.3 (8g30 → 8 giờ làm thực). Ba điểm còn hở khi ghép hai tài liệu: §6.4.
  • ✸ Bản 1.3 gộp nốt phần còn lại của Business Rule 0.3: Nhóm E · Nhóm F → §3.7 (tăng ca · bù 1 mốc · đơn trùng · thiếu giờ công · duyệt muộn & kỳ lương); Nhóm A · Nhóm C → §4.7.1 (Công trường bỏ khung giờ; bốn luật cũ BR-CC-01 · BR-CC-03 · BR-CC-04 · BR-CC-12 · BR-CC-13 bị thay); FR-CTP-08 · FR-CTP-10 · FR-CTP-12 → §4.7.4. ⚠ Bốn mã BR-GT-09 → BR-GT-12 trùng nhau nhưng khác nghĩa ở hai tài liệu — bảng đối chiếu ở §3.7.
  • Chốt 05/08/2026: ở tất cả những chỗ tài liệu này khác hai tài liệu trên, tài liệu này là chuẩn — hai tài liệu cũ sẽ được cập nhật theo, không bàn lại từng điểm. Phần ngoài phạm vi §1.1 thì vẫn tra ở hai tài liệu cũ.

1. Phạm vi & thuật ngữ

1.1 Phạm vi

Trong phạm viNgoài phạm vi
Khai & đổi trạng thái làm việc của bản thân; xem trạng thái toàn công ty trong ngàyĐăng nhập, phân quyền hệ thống
Lịch sử thay đổi trạng thái theo ngày quá khứChấm công & công ngày — định mức theo khối, cách tính công (xem SRS 0.8)
Tạo đơn giải trình loại Đi công tácLuồng tạo / sửa đơn của 6 loại giải trình cũ trên app — nghỉ phép, nghỉ không lương, đi muộn/về sớm, thiếu giờ công, quên chấm công, tăng ca (xem SRS 0.8)
Ràng buộc nhập liệu & dải tóm tắt của loại đơn mớiCấu hình quy trình duyệt — ai duyệt bước nào (module Hành chính – Nhân sự)
Màn Chi tiết đơn giải trình — bản web cho người duyệt: hiển thị đủ trường của cả 8 loại đơn, khối đối chiếu chấm công và 2 mốc đổi trạng thái Công tác, thao tác duyệt / từ chối (§3.5)—
✸ Danh sách đơn giải trình & danh sách đơn nghỉ phép — bản web (don-giai-trinh.html · don-nghi-phep.html): lọc theo nhân viên · tháng · loại đơn · trạng thái; mở kèm tham số ?nv&ten&ky thì lọc sẵn đúng nhân viên trong đúng tháng lương (dựng 15/09/2026, trước đó ghi ngoài phạm vi)Phân trang thật — hai màn danh sách hiện dựng 1 trang, chưa đặc tả phân trang / xuất Excel
✾ Màn Thay đổi do giải trình (thay-doi-do-giai-trinh.html — §3.10): của một nhân viên trong một kỳ lương, liệt kê từng ngày bị đơn giải trình Đã duyệt làm đổi — giờ vào / ra trước duyệt → sau duyệt, trạng thái trước → sau, công trước → sau (dựng 15/09/2026)Xuất Excel bảng thay đổi — chưa đặc tả
Chấm công ngoài phạm vi — chấm công tại chỗ với lý do Đi công tác (§4)Cách đo vị trí & chống giả mạo GPS (thuật toán geofence, mock location — xem SRS 0.8 §4.7)
Chi tiết công 1 ngày của ngày có đơn Đi công tác — nhãn ngày, công ngày, khối đơn kèm theo (§4.5)Cách tính công của các loại ngày khác (đi muộn, thiếu giờ, nghỉ… — xem SRS 0.8)
Phiên chấm công theo vị trí — quy tắc vào/ra khi đổi vị trí trong ngày và cách cộng công của ngày vừa có chấm ở nơi làm việc vừa có chấm ở nơi công tác (§4.6)Tăng ca — phần giờ vượt định mức của ngày hỗn hợp vẫn theo luồng đơn tăng ca cũ (xem SRS 0.8)
✸ Hạn nộp đơn giải trình — 7 ngày kể từ ngày xảy ra sự việc, áp mọi loại đơn và cả hai khối (§3.1.1)Quy trình bù trừ khi kỳ lương đã chốt — truy lĩnh ở kỳ kế tiếp, do Nhân sự xử lý trên web HCNS (BR-GT-20)
✸ Giải trình loại Khác — loại đơn mở: trường dữ liệu, ràng buộc, cách hợp nhất giờ với phiên đã chấm, quan hệ với Đi công tác và trạng thái làm việc (§3.6)Màn duyệt đơn trên web của loại Khác — chỉ nêu yêu cầu hiển thị, không đặc tả luồng duyệt
✸ Phiên chấm công khối Công trường — tối đa 2 phiên / ngày, nghỉ trưa nằm giữa hai phiên, định mức 8 giờ làm thực (§4.7)Nhãn & cách tính của 5 trạng thái ngày khối Công trường (xem SRS 0.8 · Business Rule 0.3)
✸ Luật chung của 8 loại đơn — tăng ca tính riêng theo giờ, bù đúng 1 mốc của Quên chấm công, chặn đơn trùng, Thiếu giờ công (chỉ CT), đơn duyệt muộn & kỳ lương (§3.7)Luồng chốt kỳ lương & tính lại phiếu lương — thuộc module Hành chính – Nhân sự
✸ Ba sheet thống kê tháng & màn thống kê HR của khối Công trường — Ngày thiếu giờ, Giờ tăng ca (OT), Ngày nghỉ & vắng bị phạt (§4.7.4)Báo cáo xuất file (Excel/PDF) của các sheet trên
✾ Chọn phiên khi đăng ký giải trình (khối Công trường) — loại đơn nào hỏi phiên, khối trên form, luồng 6 bước, phiên đã chọn dùng vào đâu (§3.8)Sửa phiên trên đơn đã gửi — không có thao tác này; sai thì người duyệt từ chối, nhân viên gửi đơn mới
—Chốt bảng lương, xuất bảng công cuối kỳ

1.2 Thuật ngữ

Thuật ngữÝ nghĩa
Trạng thái làm việcNơi làm việc tự khai trong ngày (Văn phòng / công trường / Công tác / Ra ngoài / Nghỉ). Không phải trạng thái chấm công.
Đơn giải trìnhĐơn gắn với đúng 1 trường hợp, duyệt độc lập từng cái.
Phạm vi khai báoCủa loại đơn mới: Theo ngày (khoảng ngày + buổi) hoặc Theo giờ (1 ngày + khoảng giờ) — §3.2.
Giải trình trước ngày điNgày công tác đã có đơn Đi công tác nộp từ trước. Khi đổi trạng thái sang Công tác, Nơi công tác được điền sẵn theo đơn và KHOÁ — không sửa được (§2.5 trường hợp A).
Giải trình sau ngày điNgày công tác chưa có đơn lúc nhân viên khai trạng thái — đi trước, nộp đơn bù sau (trong hạn 7 ngày). Nơi công tác nhập tay (§2.5 trường hợp B).
Dải tóm tắtDòng nền xanh dưới các trường ngày/giờ, tự cập nhật theo dữ liệu vừa nhập và quy đổi số công.
Phiên chấm côngMột cặp Vào – Ra gắn với đúng một vị trí trong ngày. Một ngày có thể có nhiều phiên: đổi vị trí thì mở phiên mới (§4.6).
Ngày hỗn hợpNgày vừa có phiên chấm công tại vị trí làm việc (trong phạm vi) vừa có phiên tại nơi công tác (ngoài phạm vi) — cách cộng công ở §4.6.3.

2. Trạng thái làm việc

2.0 Nguồn màn hình — bộ mockup mới sửa

Toàn bộ đặc tả §2 đọc trực tiếp từ bộ mockup mới dựng / mới sửa của app Chấm công (ui-mockups/longdo-erp/app-longdo-erp/pace-1/cham-cong/):

File mockupVai trò
trang-thai-lam-viec.htmlMàn chính — thẻ trạng thái của tôi + bảng chọn đổi trạng thái + danh sách toàn công ty (tìm / lọc / đếm)
trang-thai-nhan-su.htmlTrạng thái nhân sự trong ngày (góc nhìn theo dõi)
lich-su-trang-thai.htmlLịch sử thay đổi trạng thái — chọn ngày quá khứ, xem trạng thái cuối ngày của từng người và diễn biến theo giờ (§2.4)

2.1 Danh mục trạng thái

Mã Nhãn Nhóm hiển thị Trường bắt buộc kèm theo Màu nhóm
van-phong Văn phòng Đang làm việc — Xanh dương #0369A1
ct-linh-dam Linh Đàm Đang làm việc — Xanh lá #1A7D44
ct-yen-bai Yên Bái Đang làm việc — Xanh lá #1A7D44
ct-dong-anh H08 Đông Anh Đang làm việc — Xanh lá #1A7D44
cong-tac Công tác Ngoài nơi làm việc Nơi công tác — bắt buộc Tím #7C3AED
ra-ngoai Ra ngoài Ngoài nơi làm việc Lý do — không bắt buộc Vàng #B06A00 (nền chip #FBE7C6)
nghi Nghỉ · Nghỉ phép · Nghỉ không lương Khác — Xám #5B5B66

Nhãn của trạng thái Nghỉ (BR-08) — nhãn đơn thay thế nhãn nền

Trạng thái nghi là một trạng thái, nhưng nhãn hiển thị đổi theo nguồn ghi nhận:

Nguồn ghi nhận Nhãn hiển thị Phạm vi Có giờ?
Có đơn nghỉ đã duyệt, loại Nghỉ phép Nghỉ phép Theo buổi trong đơn Không
Có đơn nghỉ đã duyệt, loại Nghỉ không lương Nghỉ không lương Theo buổi trong đơn Không
Không có đơn — chỉ do không phát sinh chấm công Nghỉ (nền mặc định) Cả ngày, tới khi có trạng thái khác Không

Bộ lọc (FR-10) vẫn chỉ có một lựa chọn Nghỉ, gộp cả ba nhãn trên.

Quan trọng (BR-22 · BR-23): nhãn theo đơn thay thế nhãn nền Nghỉ, không cộng thêm vào. Vì vậy không bao giờ có chuỗi "Nghỉ → Nghỉ phép", và không bao giờ có Nghỉ phép kèm giờ (vd ~~"10:15 · Nghỉ phép"~~). (Chốt 05/08/2026 — bản 0.9)

Trạng thái làm việc ≠ chấm công (BR-13)

Khai trạng thái không tạo bản ghi chấm công và không tự sinh công — hai nghiệp vụ chạy độc lập. Nhân viên tự khai trạng thái nhưng cả ngày không chấm công → màn hình giữ trạng thái tự khai (vd Văn phòng), không đổi thành Nghỉ (BR-09, chốt 03/08/2026); phần thiếu chấm công xử lý ở nghiệp vụ chấm công / giải trình.

2.2 Yêu cầu chức năng (Function Requirement)

Mã Tên Mô tả Ghi chú kiểm thử
FR-01 Hiển thị trạng thái làm việc hiện tại Hệ thống hiển thị trạng thái làm việc mới nhất của nhân viên trong ngày. Đổi nhiều lần → chỉ thấy lần cuối
FR-02 Hiển thị người đang đăng nhập trong danh sách là "bạn" Dòng của chính người đang đăng nhập hiển thị dạng Nguyễn Văn An (bạn) để dễ nhận biết. Nhãn (bạn) chỉ xuất hiện đúng 1 dòng
FR-03 Hiển thị trạng thái tổng quan Hiển thị 12/12 người = số nhân viên đang hiển thị (sau tìm/lọc) / tổng số nhân viên toàn công ty. Không có phạm vi giới hạn — mọi nhân viên đều xem được toàn bộ danh sách (BR-10). (Chốt 03/08/2026 — CC-12) Đếm lại sau khi tìm / lọc
FR-04 Chuyển đổi trạng thái của bản thân Người dùng bấm Đổi để mở màn hình đổi trạng thái. Chỉ tác động lên bản thân (BR-11)
FR-05 Hiển thị thời điểm bắt đầu trạng thái Tiền tố giờ đổi theo nhóm trạng thái — xem bảng quy tắc ngay dưới bảng FR. Kiểm đủ 3 nhóm
FR-07 Hiển thị lý do với trạng thái có lý do Không nhập lý do → hiển thị Không lý do. Có nhập → hiển thị Lý do: <nội dung lý do>. Áp cho Ra ngoài
FR-08 Hiển thị khi không có lý do Với trạng thái cho phép bỏ trống lý do, màn hình vẫn hiển thị đầy đủ dòng phụ (không để trống dòng). Xem cặp với FR-07
FR-09 Trạng thái Nghỉ khi chưa chấm công Hiển thị trạng thái là Nghỉ khi nhân viên chưa chấm công hôm nay. Dòng nhân viên đang Nghỉ không có dòng phụ: loại nghỉ (Nghỉ · Nghỉ phép · Nghỉ không lương) hiển thị ngay trên badge trạng thái, không hiện thêm dòng "Theo đơn đã duyệt" hay mã đơn giải trình. (Chốt 04/08/2026) Xem BR-08; đối chiếu: dòng Nghỉ phép chỉ có tên · chức vụ · badge
FR-10 Lọc theo trạng thái Cho phép lọc theo từng trạng thái, tách riêng từng địa điểm: Tất cả · Văn phòng · Linh Đàm · Yên Bái · H08 Đông Anh · Công tác · Ra ngoài · Nghỉ. Lọc lần lượt từng trạng thái, kết quả phải khớp
FR-11 Tìm kiếm Cho phép tìm theo Họ tên. Tìm + lọc áp đồng thời
FR-12 Tự động làm mới Danh sách cập nhật khi: (a) người dùng kéo xuống (Pull to Refresh); (b) có dữ liệu mới từ máy chủ. Giữ nguyên bộ lọc/tìm sau khi refresh
FR-13 Sắp xếp danh sách Hệ thống tự sắp xếp: ① người đang đăng nhập luôn ở đầu danh sách — kể cả khi đang ở trạng thái Nghỉ (luật "bản thân lên đầu" thắng luật "Nghỉ xuống cuối"); ② chỉ nhân viên khác có trạng thái Nghỉ mới bị đẩy xuống cuối — mọi trạng thái còn lại (Văn phòng · các công trường · Công tác · Ra ngoài) giữ nguyên thứ tự danh sách, không bị xếp sau nhóm Nghỉ. (Chốt 03/08/2026 — CC-11; làm rõ 04/08/2026) Đăng nhập bằng tài khoản đang Nghỉ: dòng của mình vẫn ở đầu. Người đang làm việc phải nằm trên mọi người đang Nghỉ

Quy tắc hiển thị giờ theo nhóm trạng thái (FR-05)

Nhóm trạng thái Trạng thái Cách hiển thị Ví dụ
Đang làm việc Văn phòng · Linh Đàm · Yên Bái · H08 Đông Anh Vào + giờ Vào 07:58
Ngoài nơi làm việc Công tác · Ra ngoài Từ + giờ Từ 09:20
Khác Nghỉ Hiển thị Nghỉ, không kèm giờ Nghỉ

Vì sao tách tiền tố

Vào gắn với thời điểm có mặt tại nơi làm việc (khớp ngôn ngữ chấm công vào/ra), còn Từ gắn với thời điểm rời đi / bắt đầu ở ngoài. Trạng thái Nghỉ không có mốc bắt đầu nên không hiển thị giờ.

Bổ sung từ mockup — hành vi màn hình đã dựng, chưa có trong danh sách trên:

Mã Yêu cầu Ghi chú
FR-14 Bấm Đổi mở bảng chọn (bottom sheet) gồm 3 nhóm: Đang làm việc · Ngoài nơi làm việc · Khác; chọn kiểu radio, mỗi lần 1 trạng thái. trang-thai-lam-viec.html
FR-15 Chọn Công tác → hiện ô Nơi công tác; bỏ trống thì nút Xác nhận bị vô hiệu. Chọn Ra ngoài → ô Lý do được phép để trống. Chọn Nghỉ → chỉ chuyển trạng thái sang Nghỉ, không có ô nhập và không có dải nhắc nào. Ràng buộc chặn duy nhất là Nơi công tác
FR-16 Bấm Xác nhận → hộp hỏi lại "Đổi trạng thái làm việc từ A sang B?" kèm nơi đến / lý do vừa nhập. Huỷ → giữ nguyên và không mất dữ liệu đã nhập. Xác nhận 2 bước
FR-17 Bấm Đồng ý → ghi trạng thái + giờ bắt đầu, hiện toast "Trạng thái của bạn: …". Chọn lại đúng trạng thái đang có → đóng bảng chọn, không hỏi, không ghi log. Tránh rác lịch sử
FR-18 Dòng nhân viên trạng thái Nghỉ hiển thị mờ; không có kết quả tìm/lọc → dòng "Không có nhân viên nào khớp." Hiển thị
FR-25 ✥✿ Chọn Công tác → hệ thống tra đơn Đi công tác phủ ngày hôm nay của chính người đó (§2.5):
· ✿ Có đơn (đã đăng ký giải trình trước) → ô Nơi công tác tự điền sẵn địa chỉ khai trong đơn và KHOÁ — không nhập / không sửa được: ô nền xám, không nhận focus, gõ / dán / xoá đều không đổi được giá trị. Dưới ô hiện dòng chú thích "Lấy theo đơn <mã đơn> — sửa nơi công tác thì sửa ở đơn.". Không hiện dải nhắc vàng. Nút Xác nhận mở sẵn vì trường đã có giá trị.
· Không có đơn (giải trình bù sau) → ô trống, nhập bình thường, kèm dải nhắc vàng + liên kết Tạo đơn; nút Xác nhận vô hiệu cho tới khi nhập.
· Đơn được sửa / thay rồi mở lại bảng chọn → ô điền sẵn theo giá trị mới nhất (BR-26). (Sửa 03/09/2026 — bản 1.5, khoá lại ô ở nhánh có đơn; thay luật "vẫn sửa được" của bản 1.4.)
Bật / tắt đơn của hôm nay rồi mở lại bảng chọn: có đơn → ô xám sẵn địa chỉ của đơn, bấm vào không có con trỏ, gõ không ăn, có dòng "Lấy theo đơn…"; không đơn → ô trống, gõ được + dải nhắc vàng
FR-26 ✥ Sau khi đổi sang Công tác, thẻ trạng thái của tôi hiện dòng nhắc "Đã mở nút Chấm công đi công tác khi bạn ở ngoài phạm vi"; toast báo "Trạng thái của bạn: Công tác — đã mở nút Chấm công đi công tác". Đổi sang trạng thái khác → dòng nhắc biến mất

✥ FR-25 · FR-26 — bổ sung ở bản 1.1 (quyết định BA 20/08/2026), xem §2.5 và §4.0.   ✿ FR-25 — sửa ở bản 1.5 (quyết định BA 03/09/2026): nhánh có đơn khoá ô Nơi công tác, thay luật "vẫn sửa được" của bản 1.4.

2.3 Business Rule

Mã Tên Nội dung
BR-01 Chỉ có một trạng thái hiện tại Một nhân viên chỉ có duy nhất 01 trạng thái làm việc hiện hành tại một thời điểm.
BR-02 Trạng thái hiển thị là trạng thái mới nhất Nếu nhân viên đổi trạng thái nhiều lần trong ngày, màn hình hiển thị lần đổi gần nhất; các lần trước chỉ còn trong lịch sử.
BR-03 Thời gian hiển thị Thời gian hiển thị là thời điểm bắt đầu của trạng thái hiện tại (lấy theo giờ hệ thống, không lấy giờ thiết bị).
BR-05 Trạng thái Ra ngoài Trạng thái Ra ngoài không bắt buộc nhập lý do.
BR-06 Trạng thái Công tác Trạng thái Công tác phải hiển thị địa điểm công tác.
BR-08 ✾ Trạng thái Nghỉ Ghi nhận Nghỉ khi nhân viên có đơn nghỉ đã được duyệt, hoặc trong ngày không phát sinh dữ liệu chấm công VÀ cũng không tự khai trạng thái làm việc. Trường hợp có đơn đã duyệt thì nhãn lấy theo loại giải trình của đơn — Nghỉ phép hoặc Nghỉ không lương, thay thế nhãn nền Nghỉ, phạm vi theo buổi khai trong đơn và không kèm giờ (BR-23); không có đơn (chỉ do không chấm công) thì ghi chung là Nghỉ.
BR-09 † Tự khai thắng "chưa chấm công" Nhân viên đã tự khai trạng thái (vd Văn phòng) nhưng cả ngày không chấm công → màn hình hiển thị trạng thái tự khai, không chuyển thành Nghỉ — vì người dùng đã tác động lên hệ thống, BR-02 "mới nhất thắng" được ưu tiên. Việc thiếu chấm công vẫn bị xử lý ở nghiệp vụ chấm công / giải trình (BR-13), không thể hiện ở trạng thái làm việc. (Chốt 03/08/2026 — CC-13)
BR-10 Phạm vi xem Màn hình dùng cho tất cả nhân viên trong công ty: nhân viên thuộc các phòng ban khác nhau đều nhìn thấy trạng thái làm việc của nhau. Không có phạm vi giới hạn, không ai cấu hình phạm vi — mọi tài khoản xem toàn bộ danh sách. (Chốt 03/08/2026 — CC-12)
BR-21 † Reset trạng thái qua ngày 00:00 mỗi ngày, hệ thống tự reset trạng thái làm việc của mọi nhân viên về Nghỉ — không giữ trạng thái cuối của hôm trước. Trạng thái ngày mới bắt đầu khi nhân viên chấm công hoặc tự khai trạng thái; các mốc của ngày cũ vẫn giữ nguyên trong Lịch sử thay đổi trạng thái. Ngoại lệ: ngày đã có đơn đã duyệt thì hệ thống đặt sẵn trạng thái theo đơn — Đi công tác → Công tác (BR-GT-07), đơn nghỉ → Nghỉ phép / Nghỉ không lương (BR-08). (Chốt 03/08/2026 — CC-14)

† BR-09 · BR-21 — bổ sung theo quyết định của BA ngày 03/08/2026.

(Mã BR-21 dùng thay cho BR-14 từ 04/08/2026 — tránh trùng với BR-14 “Lịch sử chỉ đọc” ở §2.4.2.) | BR-11 | Quyền đổi trạng thái | Nút Đổi chỉ thay đổi trạng thái của chính người đang đăng nhập; không được đổi trạng thái của nhân viên khác. | | BR-13 | Đồng bộ với chấm công | Đổi trạng thái làm việc không thay thế dữ liệu chấm công — chấm công và trạng thái làm việc là hai nghiệp vụ độc lập. | | BR-25 ✥✿ | Có đơn thì ô Nơi công tác điền sẵn theo đơn và KHOÁ | Đã đăng ký giải trình trước (hôm nay đã có đơn Đi công tác phủ ngày, Chờ duyệt hoặc Đã duyệt): chọn trạng thái Công tác → hệ thống tự điền ô Nơi công tác theo nơi công tác khai trong đơn (§2.5 trường hợp A) và KHOÁ ô — nhân viên không sửa được tại màn trạng thái.
✿ Đơn là nguồn sự thật duy nhất của nơi công tác trong ngày: trạng thái làm việc chỉ sao chép giá trị từ đơn, không giữ giá trị riêng. Cho sửa tại đây sẽ sinh hai địa chỉ khác nhau cho cùng một ngày — người duyệt và nhân sự không biết lấy cái nào — nên khoá cứng một chiều đơn → trạng thái.
✿ Muốn đổi nơi đến → sửa đơn ở màn Đơn của tôi (đơn Chờ duyệt sửa được; đơn Đã duyệt thì nộp đơn mới), rồi mở lại bảng chọn trạng thái — ô điền sẵn theo giá trị mới (BR-26). Không có đường nào sửa nơi công tác từ màn trạng thái.
✿ Ô khoá vẫn là trường có giá trị — BR-06 (bắt buộc có nơi công tác) coi như đã thoả, nút Xác nhận mở sẵn.
Giải trình SAU ngày đi (chưa có đơn nào phủ ngày): ô trống, nhân viên nhập bình thường, ràng buộc bắt buộc vẫn giữ (BR-06); giá trị nhập chỉ ghi vào trạng thái làm việc, không tự sinh đơn (BR-VT-03). (Chốt 20/08/2026 — bản 1.1; sửa 27/08/2026 — bỏ khoá ô; ✿ sửa 03/09/2026 — bản 1.5, khoá lại ô, thay hẳn luật "vẫn sửa được".) | | BR-26 ✥ | Chọn đơn khi có nhiều đơn phủ cùng ngày | Nhiều đơn Đi công tác cùng phủ ngày hôm nay → lấy nơi công tác của đơn Đã duyệt gần nhất; không có đơn nào Đã duyệt thì lấy đơn tạo gần nhất. (Chốt 20/08/2026 — bản 1.1) |

✥ BR-25 · BR-26 — bổ sung ở bản 1.1 (quyết định BA 20/08/2026). Luật cổng trạng thái cho nút Chấm công đi công tác nằm ở BR-VT-28.   ✿ BR-25 — sửa ở bản 1.5 (quyết định BA 03/09/2026): khoá ô Nơi công tác ở nhánh đã có đơn; đơn là nguồn sự thật duy nhất, muốn đổi thì sửa đơn.

Lưu ý đánh mã

Bộ FR-01…FR-26 / BR-01…BR-27 ở mục này chỉ áp cho Trạng thái làm việc. Nhóm Giải trình (§3) dùng tiền tố riêng — FR-GT-xx / BR-GT-xx cho phần mới; nhóm Chấm công ngoài phạm vi (§4) dùng FR-VT-xx / BR-VT-xx; và giữ nguyên BR-CC-xx cho các luật đã có trong bảng FR/BR nội bộ.

2.4 Lịch sử thay đổi trạng thái

Màn: lich-su-trang-thai.html — vào từ màn Trạng thái làm việc qua dòng "Xem toàn bộ lịch sử" ở cuối danh sách. Dùng chung cho mọi vai trò (nhân viên và nhân sự cùng quyền xem).

2.4.1 Yêu cầu chức năng

Mã Tên Mô tả Ghi chú kiểm thử
FR-19 Xem lịch sử theo ngày Xem lại trạng thái làm việc của toàn bộ nhân viên cho bất kỳ ngày nào trong quá khứ. Mặc định mở ở ngày gần nhất có dữ liệu
FR-20 Chọn ngày bằng bảng lịch Icon lịch trên thanh tiêu đề → mở bảng lịch tháng; ngày đã có dữ liệu được đánh dấu chấm; ngày tương lai bị vô hiệu hoá. Chuyển tháng bằng mũi tên ‹ ›
FR-21 Danh sách theo ngày Mỗi nhân viên một dòng, hiển thị trạng thái cuối cùng trong ngày kèm thông tin đi kèm (nơi công tác / lý do / loại nghỉ). Không liệt kê chuỗi mọi lần đổi ở ngoài danh sách
FR-22 Tìm kiếm nhân viên Icon kính lúp trên thanh tiêu đề → ô tìm theo Họ tên, lọc ngay trong ngày đang xem. Màn này không có bộ lọc theo trạng thái
FR-23 ✾ Chi tiết theo nhân viên Bấm một dòng → mở bảng chi tiết: diễn biến trong ngày của người đó. Mốc làm việc hiển thị giờ · trạng thái; mốc nghỉ hiển thị trạng thái · buổi — không có giờ (BR-19 · BR-23). Ngày chỉ có nhãn nền Nghỉ → đúng một dòng Nghỉ, không kèm dòng giải nghĩa nào. (Sửa 05/08/2026 — bản 0.9: bỏ câu "Nghỉ là trạng thái mặc định hệ thống đặt đầu ngày…" khỏi giao diện; đây là luật nội bộ (BR-22), không cần giải thích cho người xem.) Đóng bằng nút Đóng
FR-24 Ngày chưa có dữ liệu Ngày không có nhân viên nào phát sinh trạng thái → hiển thị "Chưa có lịch sử thay đổi trạng thái." Phân biệt với "Không có nhân viên nào khớp." khi tìm kiếm không ra

2.4.2 Business Rule

Mã Tên Nội dung
BR-14 Lịch sử chỉ đọc Bản ghi lịch sử không sửa, không xoá trên app; mọi thay đổi phải sinh mốc mới.
BR-15 Trạng thái đại diện cho ngày Trạng thái hiển thị ở danh sách ngoài là mốc cuối cùng trong ngày của nhân viên đó.
BR-16 ✾ Nội dung kèm theo từng mốc Chỉ hai nhóm có nội dung kèm theo: Công tác → nơi công tác; Ra ngoài → lý do hoặc Không lý do.
Mọi mốc nghỉ đều KHÔNG có dòng mô tả — cả nhãn nền Nghỉ lẫn Nghỉ phép / Nghỉ không lương: hai nhãn này chỉ sinh ra từ đơn Đã duyệt (BR-23) nên ghi thêm "Đã duyệt" là thừa, và mã đơn thì tra ở màn đơn giải trình. Dòng mốc chỉ gồm <nhãn> · <buổi>. (Sửa 05/08/2026 — bản 0.9: bỏ cả mã đơn lẫn trạng thái duyệt khỏi giao diện.) Các trạng thái nơi làm việc (Văn phòng, Linh Đàm, Yên Bái, H08 Đông Anh) chỉ hiển thị trạng thái và thời gian, không kèm mô tả.
BR-17 ✾ Giá trị của trạng thái Nghỉ Nhóm nghỉ có đúng 3 nhãn, loại trừ nhau: Nghỉ (nền mặc định) · Nghỉ phép · Nghỉ không lương. Nhãn theo đơn thay thế nhãn nền — không hiển thị kiểu "Nghỉ kèm Nghỉ phép".
BR-18 ✾ Chỉ đơn đã duyệt mới đổi nhãn nghỉ Chỉ đơn giải trình ở trạng thái Đã duyệt mới đổi nhãn thành Nghỉ phép / Nghỉ không lương. Đơn Chờ duyệt hoặc Từ chối → giữ nhãn nền Nghỉ.
BR-19 ✾ Mốc không có giờ Mốc không kèm giờ gồm: (a) trạng thái nền Nghỉ do hệ thống tự ghi đầu ngày; (b) mốc nghỉ theo đơn đã duyệt — hiển thị tên nhãn + buổi (vd "Nghỉ phép · Buổi sáng"). Chỉ lần đổi trạng thái thật mới có giờ.
BR-20 Không xem ngày tương lai Bảng lịch chặn chọn ngày sau ngày hiện tại — lịch sử chỉ tồn tại cho ngày đã qua và ngày hôm nay.
BR-22 ✾ Nghỉ là trạng thái nền, không phải một lần đổi trạng thái 00:00 hệ thống đặt mọi nhân viên về Nghỉ (BR-21). Mốc này là nền của ngày, không được tính là "một lần đổi trạng thái":
· Cả ngày không có gì khác → lịch sử hiển thị đúng một dòng Nghỉ, không giờ.
· Có đơn nghỉ đã duyệt → nhãn nền đổi thẳng thành Nghỉ phép / Nghỉ không lương (BR-23), không sinh thêm mốc và không ghi chuỗi "Nghỉ → Nghỉ phép".
· Sau đó nhân viên đi làm / khai trạng thái khác → mới thành chuỗi, vd "Nghỉ phép → 13:05 Văn phòng".
Ngoại lệ: nhân viên tự khai Nghỉ khi đang ở trạng thái khác (vd đang Văn phòng rồi khai Nghỉ lúc 15:00) — đây là một lần đổi trạng thái thật, ghi có giờ: "08:00 Văn phòng → 15:00 Nghỉ". (Chốt 05/08/2026 — bản 0.9)
BR-23 ✾ Nghỉ phép / Nghỉ không lương lấy từ đơn, tính theo buổi, không có giờ Nguồn duy nhất của hai nhãn này là đơn giải trình Đã duyệt; phạm vi lấy đúng buổi khai trong đơn — Cả ngày · Buổi sáng · Buổi chiều — không quy về mốc giờ. Lịch sử hiển thị <nhãn> · <buổi>, không kèm giờ. Giờ duyệt đơn không phải mốc trạng thái: đơn duyệt trước ngày hay trong ngày đều cho cùng một kết quả trên lịch sử. (Chốt 05/08/2026 — bản 0.9; sửa lỗi mockup hiển thị "10:15 · Nghỉ phép")
BR-24 ✾ Lịch sử chỉ ghi lần đổi trạng thái thật Chuỗi mốc của một ngày = trạng thái nền (nghỉ, không giờ) + các lần đổi trạng thái thật (có giờ, từ chấm công / tự khai / nhân sự cập nhật). Việc duyệt đơn hay hệ thống đặt nhãn không sinh mốc mới. Đúng: Nghỉ phép · Buổi sáng → 13:05 Văn phòng. Sai: ~~Nghỉ → 09:40 Nghỉ phép → 13:05 Văn phòng~~. (Chốt 05/08/2026 — bản 0.9)

| BR-27 ✸ | Đơn giải trình nào mới đổi được trạng thái | Chỉ hai nguồn làm đổi trạng thái / nhãn trong lịch sử:
· Đi công tác Đã duyệt → hệ thống tự đặt trạng thái Công tác cho mọi ngày trong đơn (BR-GT-07);
· Nghỉ phép năm / Nghỉ không lương Đã duyệt → đổi nhãn nền Nghỉ theo buổi (BR-18 · BR-23).
Mọi loại đơn còn lại — gồm ✸ Khác, Quên chấm công, Thiếu giờ công, Tăng ca, Đi muộn / Về sớm — KHÔNG đổi trạng thái làm việc và KHÔNG sinh mốc lịch sử, dù ở trạng thái Đã duyệt (BR-GTK-18 · BR-24). Chúng chỉ tác động lên công ngày.
Chấm công cũng không sinh mốc trạng thái: mở phiên mới ở khối Công trường (§4.7) hay đổi vị trí chấm (BR-VT-14) không tự ghi mốc — trừ khi nhân viên tự khai trạng thái mới. (Chốt 20/08/2026 — bản 1.2, đồng bộ Business Rule 0.3.) |

✾ BR-08 · BR-17 · BR-18 · BR-19 — sửa lại và BR-22 → BR-24 — bổ sung ở bản 0.9 (quyết định BA 05/08/2026): Nghỉ là trạng thái nền, nghỉ phép lấy từ đơn và tính theo buổi, bỏ hẳn mốc Nghỉ phép kèm giờ duyệt của bản 0.8.

Chưa chốt — cần quyết trước khi Dev code

  • Thời hạn lưu lịch sử: giữ bao nhiêu tháng? Có xoá/đóng băng sau khi chốt kỳ lương không?
  • Quyền xem lịch sử người khác: hiện dùng chung một quyền cho mọi vai trò (theo BR-10). Nếu sau này siết lại thì màn này phải phân quyền theo phòng ban.
  • Ghi nguồn thay đổi (chấm công / tự đổi / nhân sự cập nhật) đã bỏ khỏi giao diện theo yêu cầu, nhưng vẫn nên lưu ở CSDL để phục vụ tra soát tranh chấp.

2.4.3 Dữ liệu mẫu — nhóm nghỉ trong lịch sử

Mockup lich-su-trang-thai.html — dựng riêng để Dev thấy đủ mọi biến thể của nhóm nghỉ. (Bổ sung 05/08/2026 — bản 0.9)

Ngày 27/07/2026 — nghỉ phép cả ngày (ca gốc của luật BR-23)

NV Tình huống Chuỗi mốc trong bảng chi tiết Luật
NV007 Đỗ Quang Huy Nghỉ phép cả ngày, đơn Đã duyệt Đúng 1 dòng: Nghỉ phép · Cả ngày — không dòng mô tả, không giờ, không mốc Nghỉ đứng trước BR-22 · BR-23 · BR-24

Ba lỗi của bản 0.8 đã sửa ở ca này

~~Nghỉ (00:00) → 10:15 · Nghỉ phép~~ — sai ba chỗ cùng lúc: (1) coi nhãn nền Nghỉ là một mốc rồi ghi thành chuỗi đổi trạng thái; (2) gắn giờ duyệt đơn 10:15 vào trạng thái nghỉ phép, trong khi nghỉ phép tính theo buổi; (3) sinh hai mốc cho một tình trạng duy nhất. Ngày này chỉ được hiển thị Nghỉ phép.

Ngày 21/07/2026 — nửa buổi nghỉ, nửa buổi đi làm (4 biến thể)

NV Tình huống Chuỗi mốc trong bảng chi tiết Luật
NV001 Nguyễn Văn An Sáng nghỉ, đơn chưa duyệt / không có đơn Nghỉ (nền, không giờ, không mô tả) → 13:02 · Văn phòng BR-18 · BR-22
NV002 Trần Thị Bình Nghỉ không lương buổi sáng, đơn đã duyệt Nghỉ không lương · Buổi sáng → 12:58 · Văn phòng BR-23
NV004 Phạm Thị Dung Nghỉ phép buổi sáng, đơn duyệt trước ngày Nghỉ phép · Buổi sáng → 13:05 · Văn phòng BR-23
NV008 Bùi Ngọc Lan Sáng đi làm, nghỉ phép buổi chiều, đơn duyệt trong ngày 07:56 · Văn phòng → Nghỉ phép · Buổi chiều — trạng thái cuối ngày là Nghỉ phép BR-15 · BR-23

NV008 chứng minh điều gì

Đơn được duyệt trong ngày nhưng lịch sử không có mốc nào mang giờ duyệt — kết quả y hệt như đơn duyệt trước ngày (BR-23). Đồng thời cho thấy mốc nghỉ không bắt buộc đứng đầu: nghỉ buổi chiều thì đứng sau mốc chấm công buổi sáng, và vì là mốc cuối nên danh sách ngoài hiển thị Nghỉ phép (BR-15).

Các ngày còn lại

Ngày NV Tình huống Hiển thị
29/07 NV007 Chưa chấm công, chưa khai gì Nghỉ — 1 dòng, kèm dòng giải nghĩa trạng thái mặc định
25/07 NV004 Nghỉ phép cả ngày, đơn đã duyệt Nghỉ phép · Cả ngày
24/07 NV008 Tự khai Nghỉ lúc 15:30 sau khi đã đi làm — ngoại lệ BR-22 07:58 · Văn phòng → 15:30 · Nghỉ (có giờ, vì là lần đổi trạng thái thật)
23/07 NV004 Có đơn nghỉ phép nhưng Chờ duyệt Nghỉ (giữ nhãn nền — BR-18)
22/07 NV007 Nghỉ không lương cả ngày, đơn đã duyệt Nghỉ không lương · Cả ngày

2.5 Đổi trạng thái sang Công tác — hai trường hợp

Màn: trang-thai-lam-viec.html — bảng chọn trạng thái (bottom sheet), mục Ngoài nơi làm việc → Công tác. Mới ở bản 1.1 (quyết định BA 20/08/2026).

Trạng thái Công tác là cửa vào của luồng chấm công đi công tác (§4.0). Nghiệp vụ có đúng 2 kiểu giải trình đi công tác, phân biệt theo thời điểm nộp đơn so với ngày đi:

Kiểu giải trìnhÔ Nơi công tác khi đổi trạng thái
A — Giải trình TRƯỚC ngày đi công tác
Nhân viên đã nộp đơn Đi công tác phủ ngày hôm nay từ trước
Chờ duyệt hoặc Đã duyệt
✿ Tự điền sẵn theo Nơi công tác khai trong đơn và KHOÁ — không sửa được tại màn trạng thái. Dưới ô có dòng chú thích "Lấy theo đơn <mã đơn> — sửa nơi công tác thì sửa ở đơn.". Không có dải nhắc vàng (dải đó chỉ dành cho trường hợp B)
B — Giải trình SAU ngày đi công tác
Hôm nay chưa có đơn nào phủ ngày — nhân viên đi trước, giải trình bù sau
không có đơn
Để trống, nhân viên nhập bình thường (vẫn bắt buộc — BR-06 · FR-15). Hiện dải nhắc vàng: "Chưa có đơn Đi công tác cho hôm nay — bạn tự nhập nơi công tác và giải trình bù sau. Phải có đơn Đã duyệt thì giờ chấm ngoài phạm vi mới được tính công." kèm liên kết Tạo đơn.

✿ Trường hợp A — điền sẵn và khoá ô (đổi ở bản 1.5)

Đã có đơn thì hệ thống điền sẵn nơi công tác của đơn vào ô và khoá ô lại — nhân viên không sửa được tại màn trạng thái (BR-25 · FR-25). Ô hiển thị dạng nền xám, không con trỏ, không focus, kèm dòng chú thích "Lấy theo đơn <mã đơn> — sửa nơi công tác thì sửa ở đơn."

Vì sao khoá: đơn là căn cứ duyệt và tính công (BR-VT-31). Cho sửa tại màn trạng thái sinh ra hai địa chỉ khác nhau cho cùng một ngày — một ở đơn, một ở trạng thái — khiến người duyệt và nhân sự không biết lấy cái nào. Khoá ô ép một nguồn sự thật duy nhất là đơn.

Muốn đổi nơi đến → sửa đơn ở màn Đơn của tôi: đơn Chờ duyệt còn sửa được, đơn Đã duyệt thì nộp đơn mới. Sửa đơn xong quay lại màn trạng thái → ô điền sẵn theo giá trị mới (BR-26 — nhiều đơn thì lấy đơn duyệt gần nhất).

Đổi ngược so với bản 1.4

Bản 1.4 (sửa 27/08/2026) bỏ khoá ô và cho sửa tự do tại màn trạng thái. Bản 1.5 khôi phục khoá ô (quyết định BA 03/09/2026). Ca TC-TT-23 và mockup trang-thai-lam-viec.html đã sửa theo.

Trường hợp B — nhập tay, và không tự sinh đơn

Nơi công tác nhập ở trường hợp B chỉ ghi vào trạng thái làm việc; hệ thống không tự tạo đơn Đi công tác từ giá trị này (BR-VT-03). Nhân viên vẫn phải tự tạo đơn (giải trình bù) trong hạn 7 ngày thì ngày đó mới được tính công — chưa có đơn duyệt thì ngày vẫn ghi Vắng và bị phạt tạm tính (BR-VT-27).

Nhiều đơn phủ cùng một ngày

Nếu có nhiều hơn 1 đơn Đi công tác phủ ngày hôm nay, hệ thống lấy nơi công tác của đơn được duyệt gần nhất; chưa có đơn nào Đã duyệt thì lấy đơn tạo gần nhất (BR-26).


3. Giải trình

Màn: giai-trinh-cong-form.html (form tạo đơn) · don-cua-toi.html (danh sách đơn) · giai-trinh-thanh-cong.html (màn báo gửi thành công).

3.1 Loại đơn trong phạm vi tài liệu

Ô Loại giải trình là trường bắt buộc và là trường đầu tiên của form — chưa chọn loại thì toàn bộ phần còn lại của form và nút Gửi đơn đều bị ẩn (BR-GT-01).

Loại đơn Mã Khối áp dụng Đặc tả
Đi công tác di-cong-tac Cả hai (Văn phòng · Công trường) §3.2
✸ Khác khac Cả hai (Văn phòng · Công trường) §3.6

Hai loại này không bị lọc theo khối

Form nhận khối qua tham số ?khoi=vp|ct và ẩn / hiện một số loại đơn cũ theo khối. Đi công tác và ✸ Khác luôn hiện ở cả hai khối (BR-GT-02 · BR-GTK-01).

Đủ 8 loại — nhưng tài liệu này chỉ đặc tả 2 loại

Danh mục đầy đủ 8 loại (bản Business Rule 0.3): Nghỉ phép năm (chỉ VP) · Nghỉ không lương · Đi muộn / Về sớm (chỉ VP) · Thiếu giờ công (chỉ CT) · Quên chấm công · Tăng ca · Đi công tác · ✸ Khác. Sáu loại cũ đặc tả ở SRS 0.8; tài liệu này đặc tả Đi công tác (§3.2) và Khác (§3.6). Hạn nộp đơn thì áp chung cả 8 loại — §3.1.1.

Hai luật khung áp cho mọi đơn, giữ nguyên mã cũ để truy vết:

Mã Business Rule
BR-CC-10 Đơn có 4 trạng thái: Chưa giải trình · Chờ duyệt · Đã duyệt · Từ chối. Duyệt theo từng đơn, không duyệt gộp cả ngày.
BR-CC-10b Người duyệt cố định, nhân viên không được chọn: Quản lý trực tiếp + Nhân sự (HR) — duyệt song song, cần đủ 2 bên. Áp dụng chung cho cả hai khối: ở Công trường, chỉ huy trưởng chính là quản lý trực tiếp nên không tách quy tắc theo khối. (Chốt 03/08/2026 — đóng điểm GT-3 ở §6.2; khớp mockup.)

3.1.1 Hạn giải trình — 7 ngày kể từ ngày xảy ra sự việc ✸

✸ Mới ở bản 1.2 — đồng bộ BR-GT-18 của Business Rule 0.3 (quyết định BA 19/08/2026). Thay hẳn cửa sổ hồi tố "hết tháng" của bản 0.8 ở BR-GT-09 · BR-GT-12 · FR-GT-11.

Gọi D = ngày cần giải trình. Đơn gửi được tới hết 23:59 ngày D+7; từ 00:00 ngày D+8 ngày D đóng hẳn cho cả 8 loại — không mở form, chặn gửi, báo "Đã quá hạn giải trình — quá 7 ngày kể từ ngày xảy ra".

Loại giải trình Ngày sự việc quá 7 ngày Ngày sự việc trong 7 ngày Ngày hôm nay Ngày tương lai
Nghỉ phép năm ✗ chặn ✗ chặn ✗ chặn ✓ cho
Nghỉ không lương ✗ chặn ✗ chặn ✓ cho ✓ cho
Đi muộn / Về sớm ✗ chặn ✓ cho ✓ cho ✓ cho
Thiếu giờ công ✗ chặn ✓ cho ✓ cho ✗ chặn
Tăng ca ✗ chặn ✓ cho ✓ cho ✓ cho
Quên chấm công ✗ chặn ✓ cho ✓ cho ✗ chặn
Đi công tác ✗ chặn ✓ cho ✓ cho ✓ cho
✸ Khác ✗ chặn ✓ cho ✓ cho ✓ cho

Đọc ngang bảng thấy 2 nhóm. Nghỉ phép năm · Nghỉ không lương là đơn xin nghỉ trước nên không khai lùi cho ngày đã qua dưới bất kỳ hình thức nào; sáu loại còn lại là giải trình cho việc đã xảy ra nên khai lùi được nhưng chỉ trong 7 ngày.

Bốn điểm dễ sai khi test hạn 7 ngày

  1. Đếm 7 ngày lịch trượt — không trừ thứ Bảy, Chủ nhật, ngày lễ hay ngày nghỉ của cá nhân. Không phải 7 ngày làm việc, cũng không phải tuần lịch.
  2. 7 ngày là hạn NỘP, không phải hạn DUYỆT. Đơn nộp đúng hạn thì người duyệt bấm lúc nào cũng có hiệu lực — hệ thống không tự huỷ / tự từ chối đơn quá 7 ngày chưa duyệt. Thời điểm duyệt chỉ ảnh hưởng kỳ ghi nhận công (BR-GT-20 ở Business Rule 0.3).
  3. Cửa sổ được phép vắt sang tháng sau — sự việc 29/08 thì hạn là hết 05/09, dù kỳ công tháng 8 đã chốt 31/08.
  4. Mốc "hôm nay" và D+7 lấy theo ngày hệ thống (server), không theo giờ thiết bị; đơn đang mở form mà qua nửa đêm rồi mới bấm Gửi → chặn tại thời điểm gửi.

Quá hạn thì không có đường vòng

Hết 7 ngày, nhân viên không tự nộp được nữa và không có nút xin gia hạn trong app — mọi lối vào form (lịch · nút gợi ý ở chi tiết ngày · Đơn của tôi) đều phải chặn. Trường hợp đặc biệt do Nhân sự xử lý tay trên web HCNS (điều chỉnh công), không đi qua luồng đơn của nhân viên.

Áp vào loại Đi công tác (phạm vi tài liệu này): đơn khai Theo ngày có cả khoảng ngày → chỉ cần 1 ngày trong khoảng bị chặn là chặn cả đơn, nên thực tế ngày đầu khoảng phải còn trong 7 ngày. Đăng ký trước chuyến đi thì không vướng hạn này (BR-GT-12).

3.2 Loại mới: Đi công tác

Dùng khi nhân viên đi làm việc ở địa điểm khác (khách hàng, công trường khác, đối tác…) nên không chấm công tại nơi làm việc thường ngày.

3.2.1 Trường dữ liệu

TrườngKiểuMô tả
Phạm viChọn 1 trong 2Bắt buộc. Theo ngày (mặc định) hoặc Theo giờ — quyết định nhóm trường bên dưới
Từ ngày + BuổiNgày + BuổiBắt buộc khi Phạm vi = Theo ngày. Buổi mặc định Sáng
Đến ngày + BuổiNgày + BuổiBắt buộc khi Phạm vi = Theo ngày. Buổi mặc định Chiều
Ngày · Từ giờ · Đến giờNgày + 2 mốc giờBắt buộc khi Phạm vi = Theo giờ. Vắng mặt một khoảng giờ trong cùng một ngày
Nơi công tácVăn bảnBắt buộc. Nhập tự do — chỉ có ở loại Đi công tác
Nội dung công tácVăn bản dàiBắt buộc. Gợi ý: "Công việc thực hiện tại nơi công tác…"
File đính kèmTệpKhông bắt buộc. Ảnh / video / tệp

3.2.2 Quy tắc quy đổi số công (hiển thị trên dải tóm tắt)

Trường hợp (Phạm vi = Theo ngày) Số công hiển thị
Sáng ngày N → Chiều ngày N 1 công
Sáng ngày N → Sáng ngày N 0,5 công
Chiều ngày N → Chiều ngày N 0,5 công
Sáng ngày N → Chiều ngày N+2 3 công
Chiều ngày N → Sáng ngày N+2 2 công

Công thức: số công = (số ngày trong khoảng) − 0,5 nếu bắt đầu từ Chiều − 0,5 nếu kết thúc ở Sáng, tối thiểu 0,5 công.

Với Phạm vi = Theo giờ, dải tóm tắt chỉ hiển thị khoảng giờ, không quy đổi số công.

3.3 Yêu cầu chức năng — chỉ áp cho loại mới

Mã Yêu cầu Ghi chú kiểm thử
FR-GT-01 Chọn Đi công tác → hiện đúng nhóm trường khoảng thời gian của loại này; nhóm trường của các loại đơn khác ẩn hoàn toàn. Đổi qua lại, không nhóm nào sót lại
FR-GT-02 Ô chọn loại hiển thị icon tương ứng. Đi công tác = icon ghim vị trí
FR-GT-03 Đổi Phạm vi giữa Theo ngày ↔ Theo giờ → tráo nhóm trường ngày ↔ nhóm trường giờ và đổi dòng gợi ý bên dưới. Dữ liệu đã nhập ở nhóm kia không bị mang sang
FR-GT-04 Dải tóm tắt cập nhật ngay khi đổi bất kỳ trường nào (ngày, buổi, giờ, nơi công tác). Nơi công tác bỏ trống → tóm tắt hiển thị —
FR-GT-05 Ô Nơi công tác chỉ hiện với Đi công tác; chuyển sang loại đơn khác → ẩn ô này. Kiểm cả chiều ngược lại
FR-GT-06 Nhãn + gợi ý của ô mô tả đổi theo loại đơn (§3.2.1). Nội dung công tác (Đi công tác) ↔ Lý do (loại còn lại)
FR-GT-07 Khối File đính kèm, khối Người duyệt và nút Gửi đơn chỉ hiện sau khi đã chọn loại. Mở form lần đầu: không có nút Gửi
FR-GT-08 Bấm Gửi đơn → hiện toast "Đã gửi đơn giải trình" rồi quay lại màn trước. —
FR-GT-09 † Đơn Đi công tác bỏ trống Nơi công tác → nút Gửi đơn bị vô hiệu hoá (không gửi được), ô Nơi công tác tô đỏ kèm dòng lỗi "Vui lòng nhập nơi công tác". Nhập vào → nút mở lại ngay (BR-GT-03). Bỏ trống: bấm Gửi không có phản hồi gửi; nhập 1 ký tự: nút sáng lại
FR-GT-10 † Validate khoảng thời gian (BR-GT-11): Theo ngày — Đến ngày ≥ Từ ngày, cùng ngày thì buổi Đến không được trước buổi Từ; Theo giờ — Đến giờ > Từ giờ. Sai → dòng lỗi đỏ dưới ô + khoá nút Gửi đơn; sửa đúng → mở lại ngay. Thông báo mẫu: "Đến ngày phải từ Từ ngày trở đi" · "Đến giờ phải sau Từ giờ"
FR-GT-11 †✽✸ Chặn khai ngày quá 7 ngày (phía quá khứ) (BR-GT-09 · BR-GT-12 · §3.1.1): lịch chọn ngày làm mờ mọi ngày cũ hơn hôm nay − 7 ngày (không bấm được); hôm nay · 7 ngày liền trước · mọi ngày tương lai đều chọn được. Nếu ô ngày vẫn mang giá trị quá hạn → dòng lỗi "Đã quá hạn giải trình — quá 7 ngày kể từ ngày xảy ra" + khoá nút Gửi đơn. Không giới hạn số ngày tối đa và không chặn tương lai xa.
· Đơn Theo ngày: soát ngày đầu khoảng — 1 ngày trong khoảng quá hạn là chặn cả đơn.
· Mốc tính theo ngày hệ thống; qua nửa đêm mới bấm Gửi → chặn tại thời điểm gửi. (Sửa 20/08/2026 — bản 1.2, thay cửa sổ "trong tháng" của bản 0.8)
Hôm nay 19/08: chọn 12/08 (= D+7) → được; 11/08 → mờ / báo lỗi; 25/08 → được. Mở form 23:58 ngày D+7, bấm Gửi 00:01 → chặn

† FR-GT-09 → FR-GT-11 — bổ sung theo yêu cầu BA ngày 03/08/2026 (đóng các điểm GT-5 · GT-6 · GT-7 ở §5).   ✽ FR-GT-11 — sửa ở bản 0.8: cận dưới đổi từ hôm nay sang ngày 01 của tháng hiện tại.   ✸ FR-GT-11 — sửa tiếp ở bản 1.2 (20/08/2026): cận dưới là hôm nay − 7 ngày (§3.1.1 — đồng bộ BR-GT-18 của Business Rule 0.3).

3.4 Business Rule cho loại mới

Mã Tên Nội dung
BR-GT-01 Loại đơn là trường mở khoá form Chưa chọn Loại giải trình thì form không hiện trường nào khác và không gửi được.
BR-GT-02 Không lọc theo khối Đi công tác hiện ở cả hai khối (Văn phòng · Công trường).
BR-GT-03 Nơi công tác là bắt buộc Đơn Đi công tác phải có nơi công tác. Bỏ trống → chặn gửi đơn: nút Gửi đơn bị vô hiệu hoá cho tới khi nhập (FR-GT-09). (Chốt 03/08/2026)
BR-GT-04 Hai cách khai loại trừ nhau Một đơn chỉ dùng một phạm vi: Theo ngày hoặc Theo giờ, không khai cả hai.
BR-GT-05 Khai theo giờ gói trong một ngày Phạm vi Theo giờ chỉ áp cho đúng 1 ngày; vắng mặt qua đêm phải khai Theo ngày.
BR-GT-06 Quy đổi công theo buổi Mỗi ngày trong khoảng = 1 công; bắt đầu từ Chiều trừ 0,5; kết thúc ở Sáng trừ 0,5; sàn 0,5 công (§3.2.2).
BR-GT-07 Quan hệ với trạng thái làm việc Đơn Đi công tác đã duyệt và trạng thái làm việc Công tác (§2.1) vẫn là hai bản ghi khác nhau — đơn để tính công, trạng thái để cả công ty nhìn thấy trong ngày — nhưng hệ thống tự sinh: đơn Đi công tác chuyển Đã duyệt → tự đặt trạng thái làm việc = Công tác cho mọi ngày trong đơn, nhân viên không phải tự khai. Nguồn ghi nhận là hệ thống, lưu ở Lịch sử thay đổi trạng thái (giao diện không hiện mã đơn — BR-16); nhân viên vẫn được đổi tay sang trạng thái khác trong ngày nếu thực tế thay đổi (BR-02 mới nhất thắng). (Chốt 03/08/2026 — GT-4)
BR-GT-09 †✽✸ Thời hạn nộp đơn — 7 ngày kể từ ngày xảy ra sự việc Đơn chỉ gửi được tới hết 23:59 ngày D+7 (D = ngày cần giải trình); từ 00:00 ngày D+8 ngày D đóng hẳn: không mở form / chặn gửi, hiện "Đã quá hạn giải trình — quá 7 ngày kể từ ngày xảy ra".
· Áp mọi loại đơn và cả hai khối, không loại nào được miễn (§3.1.1).
· Đếm 7 ngày lịch trượt — không trừ ngày nghỉ, ngày lễ.
· Cửa sổ được phép vắt sang tháng sau (sự việc 29/08 → hạn hết 05/09); đơn duyệt sau khi kỳ công đã chốt vẫn tính vào chính kỳ đó nếu bảng lương chưa chốt, ngược lại đi theo truy lĩnh kỳ sau (BR-GT-20 ở Business Rule 0.3).
· 7 ngày là hạn NỘP, không phải hạn DUYỆT — đơn nộp đúng hạn thì duyệt lúc nào cũng có hiệu lực, hệ thống không tự huỷ.
· Ngày tương lai không chịu luật này — đăng ký trước bao xa cũng được (BR-GT-12).
· Quá hạn thì không có đường vòng: không có nút xin gia hạn; trường hợp đặc biệt do Nhân sự xử lý tay trên web HCNS. (Sửa 20/08/2026 — bản 1.2, thay luật "hạn cuối là hết tháng" của bản 0.8; đồng bộ BR-GT-18 · BR-GT-19 · BR-GT-20 của Business Rule 0.3.)
BR-GT-10 † Đi công tác được tính công, không phụ cấp Đơn Đi công tác ở trạng thái Đã duyệt → những ngày trong đơn được tính công theo quy đổi ở §3.2.2 (không cần bằng chứng làm việc kèm theo — đơn đã duyệt là căn cứ). Không phát sinh phụ cấp công tác đi kèm. Đơn Chờ duyệt / Từ chối → không tính công. (Chốt 03/08/2026 — GT-1)
Bổ sung 04/08/2026: nếu ngày trong đơn có bản ghi chấm công (kể cả bản ghi ngoài phạm vi lý do Đi công tác) thì công ngày tính theo giờ chấm thực tế, thay cho quy đổi buổi — xem BR-VT-10.
Bổ sung 20/08/2026: giờ chấm thực tế không bị cắt theo khoảng giờ / buổi khai trong đơn — đủ định mức là đủ công, kể cả khi giờ chấm lệch khung đã đăng ký (BR-VT-31).
BR-GT-11 † Ràng buộc thứ tự ngày / giờ Khoảng khai phải hợp lệ về thời gian, hệ thống validate & chặn gửi:
· Theo ngày: Đến ngày ≥ Từ ngày (cùng ngày hợp lệ, phân biệt bằng buổi). Cùng ngày thì buổi Đến không được trước buổi Từ — Chiều → Sáng cùng ngày là không hợp lệ.
· Theo giờ: Đến giờ > Từ giờ (cùng một ngày, BR-GT-05).
Sai → hiện thông báo lỗi đỏ ngay dưới ô và vô hiệu hoá nút Gửi đơn cho tới khi sửa. (Chốt 03/08/2026 — GT-5)
BR-GT-12 †✽✸ Giới hạn khoảng khai báo Không giới hạn số ngày tối đa của một đơn và không chặn khai tương lai xa. Ràng buộc duy nhất là cận dưới: ngày sớm nhất khai được là hôm nay − 7 ngày (BR-GT-09 · §3.1.1). Đơn Theo ngày có khoảng → soát từng ngày trong khoảng, chỉ cần ngày đầu khoảng quá hạn là chặn cả đơn. (Chốt 03/08/2026 — GT-7; cận dưới sửa 05/08/2026 — bản 0.8, sửa tiếp 20/08/2026 — bản 1.2)

† BR-GT-09 → BR-GT-12 — bổ sung theo quyết định của BA ngày 03/08/2026.   ✽ BR-GT-09 · BR-GT-12 — sửa ở bản 0.8 (quyết định BA 05/08/2026): mở giải trình cho quá khứ trong tháng, hạn cuối là ngày cuối cùng của tháng.   ✸ BR-GT-09 · BR-GT-12 — sửa ở bản 1.2 (20/08/2026): cửa sổ hồi tố đổi từ hết tháng sang 7 ngày kể từ ngày xảy ra sự việc, đồng bộ BR-GT-18 của Business Rule 0.3. Xem §3.1.1.

3.5 Màn Chi tiết đơn giải trình (bản web) — dành cho người duyệt

Bản web của một bản ghi đơn giải trình: người duyệt (Quản lý trực tiếp · Nhân sự (HR)) mở từ danh sách đơn để xem đủ nội dung nhân viên đã khai trên app rồi duyệt / từ chối. Màn chỉ đọc phần nội dung đơn — không sửa đơn của người khác.

Mockup:

  • ui-mockups/longdo-erp/web/chi-tiet-don-giai-trinh.html — bản phủ cả 8 loại đơn, dựng trong khung web có rail + menu module.
  • ❈ ui-mockups/longdo-erp/web/chi-tiet-don-giai-trinh-cong-tac-khac.html (dựng 05/09/2026 — bản 1.8) — bản bám đúng bố cục màn đang chạy: thanh trên cùng rộng hết trang (không có rail + menu module), nội dung căn giữa, hai cột. Phủ 2 loại × 2 khối: Đi công tác và Khác cho Văn phòng và Công trường. Mở thẳng một biến thể bằng query: ?loai=cong-tac|khac&khoi=vp|ct&pv=ngay|gio&tt=cho|duyet|tuchoi.

(Bảng chọn mẫu ở đầu trang chỉ để duyệt các biến thể — không có trong màn thật.)

3.5.1 Bố cục

KhốiVị tríNội dung
Thanh trên cùngTrên cùng, rộng hết trangNút quay lại · đường dẫn · tên màn · mã đơn · trạng thái đơn (Chờ duyệt · Đã duyệt · Từ chối). Mã đơn và trạng thái chỉ hiện ở đây, không lặp lại bên dưới
Thẻ đầu trang ✦Dưới thanh trên cùngẢnh đại diện · họ tên · Đề xuất <ngày gửi> · nhóm tóm tắt bên phải. Không có dòng mã NV · chức vụ · phòng ban · khối (bỏ 10/09/2026)
Thông tin đơnCột tráiĐúng bộ trường nhân viên khai trên app (§3.5.2) — không thêm trường nào khác
Tiến trình duyệtCột trái, dướiThẻ viền riêng: tiêu đề + thẻ trạng thái, bên trong là 3 mốc ngang — xem Luồng duyệt dưới
Xử lý đơn ✦Cột trái, cuốiChỉ hiện khi đơn đang Chờ duyệt (FR-GT-15), ngăn với phần trên bằng đường kẻ, gồm: tiêu đề Xử lý đơn · dòng vai trò "Bạn đang duyệt với tư cách <vai trò>, đơn cần đủ 2 bên duyệt." (vai trò = bước đang chờ trong Tiến trình duyệt — đơn Chờ duyệt ở dữ liệu mẫu đang chờ Nhân sự) · ô Ghi chú (tùy chọn), placeholder "Nhập ghi chú…", kéo cao được · hai nút Phê duyệt / Từ chối. Đơn Đã duyệt / Từ chối → không có khối này, chỉ còn dòng báo không còn thao tác. (Dựng lại 10/09/2026 cho khớp FR-GT-15 — bản rút gọn sáng 10/09 đã bỏ nhầm tiêu đề, dòng vai trò và ô Ghi chú.)
Đối chiếu chấm công ✦Cột phải, trên — chỉ đơn Đi công tácChấm công thực tế của ngày cần giải trình — Giờ vào · Giờ ra (FR-GT-13) · Mốc đổi trạng thái Công tác (§3.5.3 · FR-GT-14). Đây là số liệu hệ thống, không phải trường của đơn nên tách khỏi Thông tin đơn. ✦ Thẻ chỉ còn 4 ô giờ chia hai nhóm bằng đường kẻ: bỏ hai dòng tiêu đề "Chấm công thực tế ngày <dd/mm/yyyy>" · "Trạng thái làm việc trong ngày <dd/mm/yyyy>" — ngày đã có ở Thông tin đơn · bỏ dòng phụ "Từ trạng thái / Sang trạng thái" (sửa 10/09/2026, áp cho mọi trạng thái đơn)
Ảnh, video & tệp đính kèm ✦Cột phải, dướiLưới ảnh/video (bấm để phóng to) + danh sách tệp kèm dung lượng & nút Tải về. Không có tệp → trạng thái rỗng "Đơn này không có ảnh, video hay tệp đính kèm.", căn giữa theo chiều cao thẻ. Thẻ này giãn để cột phải cao bằng cột trái (Thông tin đơn) — đơn Khác không có Đối chiếu chấm công nên thẻ chiếm trọn cột. (Sửa 10/09/2026)

Một kiểu trình bày cho mọi biến thể ✦ (quyết định BA 09/09/2026, mở rộng 10/09/2026) — lúc đầu chỉ đơn Đi công tác · Theo ngày dùng kiểu màn đơn nghỉ đang chạy trên UAT; từ 10/09/2026 áp cho cả ba biến thể (Đi công tác · Theo ngày, Đi công tác · Theo giờ, Khác) để màn chi tiết đơn đồng nhất, người duyệt không phải đọc hai kiểu bố cục. Bộ trường của từng loại không đổi (vẫn đúng §3.5.2 — đúng những gì nhân viên khai trên app), chỉ thống nhất cách trình bày:

Điểm khácCách trình bày
Nhóm tóm tắt ✦Bên phải thẻ đầu trang, 4 ô — hai ô cuối giống nhau ở mọi biến thể: Loại giải trình (chữ màu, cỡ chữ bằng các ô giá trị khác — Đi công tác hổ phách · Khác xám; đổi 10/09/2026, trước là thẻ tròn) · Trạng thái (thẻ tròn, ngay cạnh Loại giải trình). Hai ô đầu đổi theo biến thể:
· Theo ngày → Khoảng nghỉ (từ ngày — đến ngày, dòng phụ là số công quy đổi) · Buổi (buổi bắt đầu — buổi kết thúc);
· Theo giờ & Khác → Ngày · Khoảng giờ (giờ vào — giờ ra).
Màu nhãn: Buổi · Khoảng giờ · Loại giải trình dùng chữ đen (chốt 10/09/2026 — trước là chàm và hổ phách); Khoảng nghỉ · Ngày · Trạng thái giữ xám nhạt. Riêng giá trị của Loại giải trình (chữ màu) và Trạng thái (thẻ tròn) vẫn giữ màu (hổ phách / lục / hồng / xám) — màu ở đây mang nghĩa nghiệp vụ, không phải trang trí. Sửa 10/09/2026: giá trị ô Loại giải trình bỏ thẻ tròn, để chữ màu (ô Trạng thái vẫn là thẻ tròn); nhãn Khoảng giải trình đổi thành Khoảng nghỉ; trạng thái đơn lặp lại ở đây để người duyệt thấy ngay trong tầm mắt, thanh trên cùng vẫn giữ
Thông tin đơnNhãn trường: chữ nhỏ, tất cả màu đen — không còn tô màu theo nhóm trường (chốt 10/09/2026: bỏ chàm ở nhóm ngày–giờ và hổ phách ở nhóm buổi–phiên). Giá trị chia hai kiểu: trường ngắn (Phạm vi · Ngày · Từ ngày · Đến ngày · Buổi bắt đầu · Buổi kết thúc · Phiên cần giải trình · Từ giờ · Đến giờ · Giờ vào · Giờ ra) để chữ to, đậm vừa — dùng nét chữ 500 (font-medium) chứ không phải 600, đủ nổi hơn nhãn mà không bị nặng khi cả thẻ toàn ngày–giờ (sửa 10/09/2026); trường đoạn văn (Nơi công tác · Nội dung công tác · Lý do) để chữ thường, KHÔNG bôi đậm — cùng cỡ chữ nhưng không đậm cho dễ đọc (chốt 10/09/2026). Cặp trường cùng nghĩa xếp hai cột một hàng (Từ ngày / Đến ngày — Buổi bắt đầu / Buổi kết thúc — Từ giờ / Đến giờ — Giờ vào / Giờ ra). Đường ngăn trước nhóm mô tả cuối (Nơi công tác + Nội dung công tác / Lý do). Không có dòng Loại giải trình đầu thẻ — đã có ở nhóm tóm tắt
Luồng duyệtTiến trình duyệt — thẻ viền riêng, tiêu đề kèm thẻ trạng thái, bên trong là 3 mốc ngang nối bằng đường: Đã gửi → Quản lý trực tiếp duyệt → Nhân sự duyệt. Mỗi mốc có dấu tròn (✓ xong · ⏱ chờ · ✕ từ chối · – không xét) và tên người; bỏ dòng giờ & ngày duyệt (sửa 10/09/2026 — mốc chỉ trả lời “ai”, không trả lời “lúc nào”). Thay hẳn danh sách Lịch sử duyệt ở mọi biến thể (mở rộng 10/09/2026)
Cột phải ✦Số thẻ đổi theo biến thể, nhưng thẻ cuối cùng luôn giãn để cột phải cao bằng cột trái:
· Đi công tác · Theo ngày → chỉ Đối chiếu chấm công (không có thẻ tệp đính kèm), thẻ này chiếm trọn cột;
· Đi công tác · Theo giờ → Đối chiếu chấm công + Ảnh, video & tệp đính kèm (thẻ tệp giãn);
· Khác → chỉ Ảnh, video & tệp đính kèm, chiếm trọn cột. (Sửa 10/09/2026)

Đối chiếu web ↔ form app ✦ (rà 10/09/2026) — màn web phải hiện đủ những gì nhân viên khai ở form giai-trinh-cong-form.html, không thiếu trường nào:

Biến thểKhối form appTrường app → chỗ hiển thị trên web
Đi công tác · Theo ngàyg-khoangLoại giải trình → chữ màu ở nhóm tóm tắt · Phạm vi · Từ ngày · Buổi bắt đầu · Đến ngày · Buổi kết thúc · Nơi công tác → Thông tin đơn · Nội dung công tác → ô mô tả cuối · File đính kèm → không hiển thị ở biến thể này
Đi công tác · Theo giờg-khoangNhư trên, nhưng cụm ngày–giờ là Ngày · Từ giờ · Đến giờ; khối Công trường có thêm Phiên cần giải trình (FR-PHI-09) · File đính kèm → thẻ Ảnh, video & tệp đính kèm cột phải
Khác ✦g-khacLoại giải trình → chữ màu ở nhóm tóm tắt · Ngày → Thông tin đơn · Phiên cần giải trình → chỉ khối Công trường, nằm ngay dưới Ngày và trên cặp giờ, đúng thứ tự của form app · Giờ vào · Giờ ra → một hàng hai cột · Lý do → ô mô tả cuối · File đính kèm → thẻ Ảnh, video & tệp đính kèm cột phải · dòng Người duyệt: Quản lý trực tiếp + Nhân sự → thẻ Tiến trình duyệt

Số công quy đổi (chỉ Theo ngày) là số hệ thống tự tính — trên app nằm ở dòng tóm tắt, trên web nằm ở dòng phụ của ô Khoảng nghỉ, không đặt thành một trường của đơn. Đối chiếu chấm công chỉ áp cho đơn Đi công tác (cả hai phạm vi, đã bỏ ô Công ngày); đơn Khác không có khối này.

3.5.2 Trường hiển thị theo loại đơn

Đúng bộ trường nhân viên khai ở form giải trình trên app (app-longdo-erp/pace-1/cham-cong/giai-trinh-cong-form.html) — web chỉ hiển thị lại, không thêm bớt:

Loại giải trìnhTrường hiển thịÔ mô tả
Nghỉ phép nămTừ ngày + buổi · Đến ngày + buổi · Số ngày nghỉ · Chế độ · Phép năm còn lạiLý do
Nghỉ không lươngTừ ngày + buổi · Đến ngày + buổi · Số ngày nghỉ · Chế độLý do
Đi muộn / Về sớmLoại (Đi muộn / Về sớm) · Loại lý do (cá nhân / công việc) · Ngày · Phiên · Vắng từ giờ · Đến giờ · Thời lượng vắngLý do hoặc Nội dung công việc (khi Loại lý do = công việc)
Thiếu giờ côngNgày · Phiên · Giờ vào thực tế · Giờ ra thực tế · Thời lượng đề nghị ghi nhậnLý do
Quên chấm côngLoại (Quên chấm vào / ra) · Ngày quên chấm · Phiên · Giờ khai lạiLý do
Tăng caTừ ngày · Đến ngày · Giờ bắt đầu · Giờ kết thúc · Tổng giờ tăng caNội dung công việc
Đi công tácPhạm vi · (Theo ngày: Từ ngày, Đến ngày, Buổi bắt đầu, Buổi kết thúc) hoặc (Theo giờ: Ngày, Phiên, Từ giờ, Đến giờ) · Nơi công tác. Số công quy đổi là số hệ thống tự tính, hiển thị ở nhóm tóm tắtNội dung công tác
KhácNgày · Phiên · Giờ vào · Giờ raLý do

Trường Phiên cần giải trình

Chỉ hiện với nhân viên khối Công trường — đúng như form app: 2 nút Phiên 1 / Phiên 2, nhân viên bấm chọn đang giải trình cho phiên nào. Không kèm khoảng giờ và không cố định khung giờ cho từng phiên (FR-CTP-11 · BR-CTP-11). Hiện với Quên chấm công · Thiếu giờ công · Khác, và với Đi công tác chỉ khi Phạm vi = *Theo giờ (Phạm vi Theo ngày → không có trường này). Nhân viên Văn phòng* không có trường này.

3.5.3 Hai trường mới — mốc đổi trạng thái Công tác

Người duyệt cần đối chiếu đơn với thực tế nhân viên khai trạng thái làm việc trong ngày, nên màn web bổ sung 2 trường chỉ đọc, lấy từ Lịch sử thay đổi trạng thái của ngày cần giải trình:

TrườngKiểuMô tả
Giờ đổi sang trạng thái Công tácGiờ (HH:mm)Chỉ đọc. Giờ của mốc đầu tiên trong ngày chuyển từ trạng thái khác → Công tác. Chỉ hiện giờ — dòng phụ "Từ trạng thái: …" đã bỏ 10/09/2026 (người duyệt chỉ đối chiếu mốc giờ)
Giờ đổi từ Công tác sang trạng thái khácGiờ (HH:mm)Chỉ đọc. Giờ của mốc cuối cùng trong ngày chuyển từ Công tác → trạng thái khác. Chỉ hiện giờ — dòng phụ "Sang trạng thái: …" đã bỏ 10/09/2026

3.5.4 Yêu cầu chức năng & Business Rule của màn web

Mã Nội dung Ghi chú kiểm thử
FR-GT-12 Màn hiển thị đúng bộ trường của loại đơn (§3.5.2); trường của loại khác không hiện. Mở lần lượt 8 loại đơn, đối chiếu với form app
FR-GT-13 ✦ Khối Chấm công thực tế hiển thị Giờ vào · Giờ ra của ngày cần giải trình — hai ô, người duyệt chỉ cần đối chiếu giờ chấm thực tế; ô Công ngày đã bỏ 10/09/2026 (số công là kết quả tính lại sau khi duyệt, không phải căn cứ duyệt). Khối này chỉ có ở đơn Đi công tác: đơn nghỉ phép / nghỉ không lương và ✦ đơn Khác không có khối này — đơn Khác do nhân viên tự khai khoảng giờ, việc ghép với bản ghi chấm công là bước tính công sau khi duyệt (BR-GTK-06), không phải thứ người duyệt đọc trên màn. (Bỏ khối ở đơn Khác — 10/09/2026.) Mở đơn nghỉ hoặc đơn Khác: khối biến mất hoàn toàn
FR-GT-14 ✦ Hiển thị 2 mốc trạng thái Công tác (§3.5.3) — ✦ chỉ hai ô giờ, không kèm dòng phụ "Từ trạng thái / Sang trạng thái" (bỏ 10/09/2026). Không có mốc → hiển thị “—” + dòng phụ giải thích (ca này giữ dòng phụ vì hai dấu “—” tự nó không nói gì). Nằm trong khối Đối chiếu chấm công nên cũng chỉ có ở đơn Đi công tác (FR-GT-13). Ngày không đi công tác: cả 2 ô là “—”
FR-GT-15 Nút Duyệt / Từ chối + ô Ghi chú chỉ hiện khi đơn đang Chờ duyệt; đơn Đã duyệt / Từ chối chỉ còn dòng "Đơn đã kết thúc luồng duyệt". Đổi trạng thái đơn, kiểm cả 3
FR-GT-16 Lịch sử duyệt liệt kê theo thứ tự thời gian: Đề xuất → từng bên duyệt, mỗi dòng có người + thời điểm; bên chưa xử lý hiện Chờ duyệt. Duyệt song song 2 bên: thiếu 1 bên → đơn vẫn Chờ duyệt
BR-GT-13 2 mốc trạng thái Công tác là dữ liệu tham chiếu, chỉ đọc — sửa ở màn Lịch sử thay đổi trạng thái, không sửa được trên màn đơn; sửa mốc trạng thái không làm đổi nội dung đơn (BR-25 — dữ liệu chảy một chiều).
BR-GT-14 Trong ngày có nhiều lượt vào/ra trạng thái Công tác → lấy mốc sang Công tác sớm nhất và mốc rời Công tác muộn nhất của ngày đó.

3.6 Loại mới: Khác ✸

✸ Mới ở bản 1.2 — đồng bộ Nhóm H của Business Rule 0.3 (quyết định BA 19/08/2026). Màn đã dựng: giai-trinh-cong-form.html (loại Khác trong ô Loại giải trình) · don-cua-toi.html (3 đơn mẫu ở 3 trạng thái duyệt).

Đưa vào tài liệu này vì Khác dùng chung ba thứ với Đi công tác: hạn nộp 7 ngày (§3.1.1), cách hợp nhất giờ với phiên chấm công (§4.6 · §4.7) và quan hệ với trạng thái làm việc (§3.6.6).

3.6.1 Dùng khi nào — nguyên tắc loại cuối cùng

Khác là loại đơn mở: nhân viên thực tế có làm việc / có lý do chính đáng nhưng tình huống không khớp 7 loại còn lại. Nhân viên tự khai khoảng giờ cần được ghi nhận và giải thích bằng lý do + bằng chứng.

Khác KHÔNG thay thế loại chuyên biệt

Tình huống khớp một loại có sẵn (Quên chấm công · Thiếu giờ công · Tăng ca · Đi công tác · Nghỉ phép năm / Nghỉ không lương · Đi muộn / Về sớm) thì bắt buộc dùng loại đó. Dùng Khác để né ràng buộc của loại chuyên biệt là sai quy trình — người duyệt từ chối kèm lý do "Đã có loại đơn phù hợp" (BR-GTK-02).

#Nhóm tình huốngCase cụ thểLoại đơn đúng
1Không chấm công được vì thiết bị / hệ thốngĐiện thoại hết pin · hỏng · mất · quên mang máy · đổi máy chưa đăng ký lại khuôn mặt · app lỗi · công trường mất sóng · GPS không bắt được · nhận diện khuôn mặt fail liên tục · tài khoản bị khoáKhác ✔ — có mặt nhưng không tạo được bản ghi
2Có mặt làm việc nhưng ngoài mô hình chấm côngHọp · đào tạo · huấn luyện ATLĐ ở nơi khác · đi làm thủ tục cho công ty · điều động sang công trường khác giữa ngày · làm việc tại nhà theo phân côngĐi công tác nếu là đi làm ở địa điểm khác (§3.2); Khác ✔ chỉ khi không phải đi công tác (vd làm tại nhà)
3Ngừng việc / bất khả khángMưa bão · mất điện · sự cố công trường phải dừng thi công · chờ vật tư · tai nạn lao động phải sơ cứu · phong toả, cấm đường · cách ly y tếKhác ✔ — có mặt nhưng không làm đủ giờ vì lý do khách quan
4Chế độ cá nhân chưa có loại đơn riêngKhám thai · con ốm · khám sức khoẻ định kỳ · tiêm chủng · hiếu hỉ nghỉ vài giờ rồi quay lại làm · khám bệnh đột xuất giữa buổiKhác ✔ nếu nghỉ theo giờ; nghỉ trọn buổi / trọn ngày → Nghỉ phép năm / Nghỉ không lương
5Sai sót dữ liệu chấm côngBấm nhầm chấm ra lúc 14:00 rồi vẫn làm tới 17:00 · quên cả 2 mốc của phiên chiều · GPS trôi khỏi geofence làm phiên bị tách nhầm · bản ghi trùng / lỗi đồng bộThiếu 1 mốc → Quên chấm công; thiếu cả 2 mốc hoặc sai dữ liệu → Khác ✔
6Ca / giờ đặc thùTrực đêm, ca vắt qua nửa đêm · trực ứng cứu ngoài giờ · làm bù ngày nghỉ, ngày lễTăng ca nếu là làm thêm ngoài định mức; Khác ✔ nếu chỉ để ghi nhận đúng khoảng giờ trong định mức
7Dùng sai — phải chặn hoặc từ chốiĐi muộn ở VP nhưng khai Khác để né phạt · nghỉ cả ngày khai Khác để né trừ phép · khai Khác cho ngày đã Đủ công để cộng thêm giờ · khai khoảng giờ chồng lấn phiên đã chấm để nhân đôi công❌ Không phải Khác — hệ thống chặn hoặc người duyệt từ chối (BR-GTK-02 · BR-GTK-06)

3.6.2 Trường dữ liệu

TrườngKiểuMô tả
NgàyNgàyBắt buộc. Một đơn Khác chỉ khai cho đúng 1 ngày (BR-GTK-03)
Giờ vàoTIMEBắt buộc. Mốc bắt đầu khoảng giờ đề nghị ghi nhận
Giờ raTIMEBắt buộc. Phải > Giờ vào, cùng ngày (BR-GTK-04)
Lý doVăn bản dàiBắt buộc. Ô nhập để trống, không có placeholder gợi ý. Tối thiểu 10 ký tự
File đính kèmTệp✧ Không bắt buộc — áp luật chung của cả 8 loại đơn (BR-GT-12 · BR-GTK-14). Ảnh / video / tệp. (Sửa 27/08/2026 — bỏ luật "file bắt buộc" chốt 19/08/2026.)
Người duyệtChỉ đọcCố định Quản lý trực tiếp + Nhân sự, duyệt song song, cần đủ 2 bên (BR-CC-10b)

3.6.3 Yêu cầu chức năng

Mã Yêu cầu Ghi chú kiểm thử
FR-GTK-01 Loại Khác hiện ở cả hai khối; chọn Khác → hiện đúng 4 trường: Ngày · Giờ vào · Giờ ra · Lý do (ô Lý do trống, không placeholder), kèm khối File đính kèm và Người duyệt. Đổi từ Đi công tác sang Khác: nhóm trường cũ ẩn hoàn toàn
FR-GTK-02 Ô chọn loại hiển thị icon riêng cho Khác (gợi ý: icon ghi chú / ba chấm). Đối chiếu icon với 7 loại còn lại — không trùng
FR-GTK-03 Form Khác dùng đúng bộ trường như các loại đơn khác, không thêm phần tử: Loại giải trình · Ngày · Giờ vào · Giờ ra · (dòng lỗi đỏ) · Lý do · File đính kèm · Người duyệt · nút Gửi đơn. Không có dải tóm tắt "Đề nghị ghi nhận…" — khác FR-GT-04 của Đi công tác. Đối chiếu form Khác với form Thiếu giờ công: cùng bố cục, cùng số khối
FR-GTK-04 Validate tại chỗ: Giờ ra ≤ Giờ vào → dòng lỗi đỏ "Giờ ra phải sau Giờ vào" + khoá nút Gửi đơn; sửa đúng → mở lại ngay. 15:00 → 15:00 · 15:00 → 14:00
FR-GTK-05 Bỏ trống Lý do hoặc < 10 ký tự → khoá nút Gửi đơn, ô tô đỏ kèm "Vui lòng mô tả rõ lý do (tối thiểu 10 ký tự)". Nhập ok → vẫn khoá
FR-GTK-06 Lịch chọn ngày: làm mờ mọi ngày cũ hơn hôm nay − 7 ngày; hôm nay · 7 ngày liền trước · ngày tương lai đều chọn được (§3.1.1). Hôm nay 19/08: 12/08 chọn được · 11/08 mờ · 25/08 chọn được
FR-GTK-07 Form không hiển thị dải nhắc "Ngày này đã có N phiên…" và không đọc dữ liệu chấm công của ngày — nhân viên tự khai, hệ thống đối chiếu khi tính công (BR-GTK-06). Mở form Khác cho ngày đã có 2 phiên → không thấy dải nhắc nào
FR-GTK-08 Form không cảnh báo chồng lấn với phiên đã chấm — việc hợp nhất giờ, không cộng trùng do server xử lý khi tính công. Khai 10:00–13:00 cho ngày đã có phiên 07:00–11:30 → gửi bình thường; sau khi duyệt, công tính theo 07:00–13:00 = 6g
FR-GTK-09 Đơn Khác Đã duyệt cho ngày đã qua / hôm nay → công ngày tự tính lại ngay; chi tiết ngày hiện dòng phụ "Giải trình khác: HH:mm – HH:mm · <lý do rút gọn>". Đơn Chờ duyệt / Từ chối → không cộng công, dòng phụ hiện không kèm giờ. Đơn Đã duyệt cho ngày tương lai → dòng phụ kèm chú thích "đã duyệt — đối chiếu khi ngày diễn ra", công ngày chưa đổi (BR-GTK-15). Duyệt đơn 2 giờ cho ngày đã qua 6g → lên 8g, chuyển Đủ công. Duyệt đơn cho ngày mai → công ngày mai chưa đổi
FR-GTK-10 Màn duyệt đơn (web HCNS) hiển thị đủ Giờ vào · Giờ ra · Lý do · File đính kèm và đối chiếu với bản ghi chấm công thực tế của ngày để người duyệt quyết định (§3.5). Mở đơn Khác trên web: thấy cả dữ liệu chấm công gốc
FR-GTK-11 ✧ Khối File đính kèm của loại Khác giống hệt 7 loại còn lại: nhãn không có dấu *, bỏ trống không khoá nút Gửi đơn. Đính kèm thì hiện chip tên file (có nút gỡ); gỡ hết → nút Gửi vẫn sáng (BR-GTK-14). (Sửa 27/08/2026.) Loại Khác: nhãn không có *; không đính kèm gì vẫn gửi được. Đối chiếu Tăng ca — giống nhau
FR-GTK-12 Ngày được chọn có phiên chưa chấm ra → hiện cảnh báo vàng "Ngày này có phiên chưa chấm ra — hãy dùng loại Quên chấm công để bù mốc giờ ra" + nút tắt Chuyển sang Quên chấm công (giữ nguyên ngày đã chọn); không khoá nút Gửi. Màn duyệt web hiện thêm dòng đỏ "Ngày còn phiên hở mốc — duyệt đơn này không chốt được công" (BR-GTK-15 · BR-GTK-16). Chọn ngày có phiên 13:00 → — → thấy cảnh báo + nút chuyển loại; vẫn gửi được
FR-GTK-13 ✪ Đơn Khác được duyệt đủ 2 bên cho ngày còn phiên hở mốc → hệ thống gửi thông báo cho nhân viên: "Ngày <dd/mm> vẫn chưa chốt đủ công vì thiếu mốc chấm ra. Gửi đơn Quên chấm công trước hết ngày <D+7>.", bấm vào mở thẳng form Quên chấm công đúng ngày đó. Chi tiết công ngày hiện dòng nhắc cùng nội dung + nút Giải trình ngay. (Bổ sung 28/08/2026 — phương án C.) Duyệt đơn Khác cho ngày có phiên 08:00 → —: nhân viên nhận được thông báo; bấm vào ra form Quên chấm công đã điền sẵn ngày
#### 3.6.4 Business Rule
Mã Tên Nội dung
BR-GTK-01 Phạm vi áp dụng Loại Khác có ở cả hai khối, không lọc theo khối — giống Đi công tác (BR-GT-02).
BR-GTK-02 Khác là loại cuối cùng Chỉ dùng khi không khớp 7 loại còn lại. Khớp loại chuyên biệt → phải dùng loại đó; người duyệt từ chối đơn Khác dùng sai kèm lý do "Đã có loại đơn phù hợp".
BR-GTK-03 Một đơn = một ngày Chỉ khai cho đúng 1 ngày; vắng mặt qua đêm hoặc nhiều ngày → tách thành nhiều đơn (khác Đi công tác — loại đó khai được khoảng ngày, BR-GT-04).
BR-GTK-04 Ràng buộc thứ tự giờ Giờ ra > Giờ vào, cả hai trong cùng ngày đã chọn. Bằng nhau hoặc ngược → chặn gửi. Biên: 08:00→08:01 cho · 08:00→08:00 chặn.
BR-GTK-05 Thời điểm khai Khai được cho ngày đã qua trong 7 ngày · hôm nay · ngày tương lai; quá 7 ngày → chặn (§3.1.1). Đơn cho ngày tương lai là đăng ký báo trước (giống Tăng ca · Đi công tác) và không cộng công ngay — xem BR-GTK-15.
BR-GTK-06 Hợp nhất khoảng giờ — không cộng trùng Đơn Khác Đã duyệt được coi như một phiên làm việc hợp lệ. Khi tính công ngày, hệ thống hợp nhất (union) khoảng giờ của đơn với các phiên đã chấm: phần chồng lấn chỉ tính MỘT lần. Ví dụ: phiên 07:00–11:30 (4g30) + đơn Khác 10:00–13:00 → tổng 07:00–13:00 = 6g00, không phải 7g30. Chi tiết 9 dạng lệch: §3.6.5.
BR-GTK-07 Trần 1 công Sau khi cộng đơn Khác, công ngày tối đa 1 công; phần vượt định mức không tự thành Tăng ca (BR-VT-19).
BR-GTK-08 Chỉ Đã duyệt mới tính công Đơn Chờ duyệt / Từ chối → không cộng giờ; ngày giữ nguyên trạng thái & công cơ sở từ các phiên đã chấm, không ghi Vắng nếu ngày đã có ít nhất một lần chấm (BR-VT-17).
BR-GTK-09 Nhiều đơn Khác trong một ngày Cho phép nhiều đơn Khác cùng ngày nếu các khoảng giờ không chồng nhau; chồng nhau giữa hai đơn Khác → chặn tạo đơn thứ hai. 08:00–10:00 + 14:00–16:00 → cho; 08:00–10:00 + 09:00–11:00 → chặn.
BR-GTK-10 Giờ khai ngoài ca chuẩn — chỉ khối Văn phòng VP: giờ khai ngoài ca chuẩn 08:00–17:30 → vẫn gửi được nhưng phần ngoài ca không cộng vào công; muốn tính phải đi đơn Tăng ca. CT: không có khung giờ nên mọi giờ khai trong ngày đều được cộng, không cắt xén (§4.7).
BR-GTK-11 Ngày Vắng hoàn toàn Ngày không có bản ghi chấm công nào mà có đơn Khác Đã duyệt → ngày thoát nhãn Vắng, tính công theo khoảng giờ đã duyệt và không bị phạt vắng không phép.
BR-GTK-12 Ảnh hưởng tới trạng thái ngày Sau khi cộng đơn Khác: CT — tổng ≥ 8g → Đủ công, < 8g → Thiếu giờ công (§4.7.1); VP — vẫn xét mốc 08:00 / 17:30 và định mức 8 giờ làm thực sau khi trừ nghỉ trưa.
BR-GTK-13 Duyệt & bằng chứng Đi theo luồng duyệt chung: Quản lý trực tiếp + Nhân sự, song song, đủ 2 bên (BR-CC-10b). Người duyệt thấy lý do + file đính kèm + dữ liệu chấm công gốc.
BR-GTK-14 ✧ File đính kèm là TÙY CHỌN Đơn Khác không bắt buộc đính kèm file — áp đúng luật chung BR-GT-12 cho cả 8 loại đơn. Bỏ trống → vẫn gửi được.
⚠ Hệ quả: Khác không bám vào bất kỳ dữ liệu chấm công nào, nên bỏ ràng buộc file thì căn cứ duyệt chỉ còn lý do nhân viên khai + bản ghi chấm công gốc người duyệt tự đối chiếu (FR-GTK-10); rủi ro khai khống (dạng lệch L-9 / L-8 §3.6.5) từ nay chỉ chặn được ở khâu duyệt. (Sửa 27/08/2026 theo quyết định BA — thay luật "bắt buộc ít nhất 1 file" chốt 19/08/2026.)
BR-GTK-15 ✪ Đơn Khác KHÔNG đóng được phiên hở mốc — nhưng KHÔNG khoá việc chốt công Ngày còn phiên chưa chấm ra (BR-VT-17 · §4.7):
· Đơn Khác Đã duyệt chỉ cộng khoảng giờ của chính nó, không được lấy Giờ ra của đơn làm mốc đóng phiên hở — khoảng giữa giờ chấm vào thực tế và giờ vào khai trong đơn không có căn cứ nào, đóng phiên bằng đơn Khác là cộng khống.
· Phiên hở đóng góp 0 giờ, nhưng KHÔNG làm ngày treo: công ngày vẫn chốt được theo giờ đã chứng minh (BR-GTK-24).
· Ca chuẩn: phiên 08:00 → — + đơn Khác 10:00–17:30 Đã duyệt (CT, định mức 8g) → Tổng giờ 7g30, nhãn ngày Quên chấm công, công tạm tính 0,9 — không còn để —. Gửi thêm đơn Quên chấm công bù mốc ra 17:30 → phiên đóng 08:00–17:30 = 9g30, đơn Khác nằm gọn bên trong nên cộng thêm 0 phút → Đủ công · 1 công (BR-GTK-17).
(Chốt 28/08/2026 — phương án C, thay hướng "treo công —" đề xuất 19/08/2026: giữ nguyên nguyên tắc chống cộng khống, nhưng bỏ ngày treo.)
BR-GTK-16 Nắn về đúng loại khi ngày có phiên hở Thiếu 1 mốc là địa hạt của Quên chấm công; Khác chỉ dùng khi thiếu cả 2 mốc hoặc sai dữ liệu. Hệ thống cảnh báo ở form và ở màn duyệt (FR-GTK-12) nhưng không chặn gửi; người duyệt có quyền từ chối theo BR-GTK-02.
BR-GTK-17 Nhiều loại đơn khác nhau trong cùng một ngày Cho phép 1 đơn Quên chấm công + 1 đơn Khác cùng ngày. Thứ tự tính công: ① đóng phiên hở bằng giờ ra của đơn Quên chấm công đã duyệt → ② union khoảng của đơn Khác với các phiên đã đóng (BR-GTK-06) → ③ chốt trạng thái ngày, trần 1 công. BR-GTK-09 chỉ chặn chồng lấn giữa hai đơn Khác; chồng lấn giữa Khác và loại khác → không chặn tạo đơn, chỉ không cộng trùng.
BR-GTK-24 ✪ Nhãn ngày và công ngày là HAI chỉ số độc lập Nguyên tắc gốc của phương án C — áp cho mọi ngày còn phiên hở mốc, không riêng loại Khác:
· Nhãn ngày = cảnh báo dữ liệu chấm công còn thiếu (Quên chấm công, ô lịch vàng) → nhắc nhân viên vẫn còn quyền giải trình thêm.
· Công ngày = số chốt được từ bằng chứng hiện có = tổng giờ của các phiên đủ 2 mốc + khoảng của đơn đã duyệt (union — BR-GTK-06), cắt theo ca chuẩn nếu là VP (BR-GTK-10), trần 1 công (BR-GTK-07).
· Trong thời hạn giải trình còn mở (tới hết D+7 — §3.1.1) số này hiển thị là công tạm tính, có dấu hiệu tạm tính trên giao diện; đơn giải trình duyệt thêm → tính lại ngay.
· Ngày không có nguồn giờ hợp lệ nào (chỉ đúng một phiên hở, chưa có đơn nào duyệt) → giữ nguyên công — theo BR-VT-17 — chưa có gì để chốt thì không chốt.
Lý do tách hai chỉ số: buộc nhãn ngày và công ngày vào nhau sinh ra "ngày treo" — ô công — không bao giờ chốt được nếu nhân viên lỡ hạn giải trình, trong khi bảng công tháng và phiếu lương không nhận ô —. (Chốt 28/08/2026 — phương án C.)
BR-GTK-25 ✪ Hết hạn 7 ngày mà phiên vẫn hở → CHỐT theo dữ liệu có được Qua 00:00 ngày D+8, ngày D không còn nhận đơn giải trình (BR-GT-09). Lúc đó:
· Công tạm tính của BR-GTK-24 thành công chốt — bỏ dấu hiệu tạm tính; ngày không treo tiếp.
· Nhãn ngày giữ nguyên Quên chấm công (dữ liệu vẫn thiếu mốc — đây là vết để tra cứu, không phải lỗi cần sửa).
· KHÔNG tính phạt vắng không phép — ngày đã phát sinh chấm công (BR-VT-17).
· Sau mốc này muốn sửa công thì đi điều chỉnh tay của Nhân sự trên web HCNS, cùng cơ chế truy lĩnh của BR-GT-20 — không mở lại form giải trình. (Chốt 28/08/2026 — phương án C.)
> ✪ BR-GTK-15 viết lại · BR-GTK-24 · BR-GTK-25 · FR-GTK-13 mới — bản 1.4 (quyết định BA
> 28/08/2026, chốt phương án C cho điểm hở BR-3 ở §6.4): ngày còn
> phiên hở mốc vẫn chốt được công theo giờ đã chứng minh, thay vì treo ô công —.
> Đơn Khác vẫn không được đóng phiên hở — nguyên tắc chống cộng khống giữ nguyên.
> Ca kiểm thử: TC-GTK-12 · TC-GTK-13 · TC-GTK-24 · TC-GTK-25.

3.6.5 Đối chiếu giờ khai với giờ chấm thực tế — 10 dạng lệch

Nguyên tắc gốc là BR-GTK-06 — hợp nhất (union), phần trùng chỉ tính MỘT lần. Bảng dưới là danh mục đội test phải phủ đủ khi ghép đơn Khác với dữ liệu chấm công.

Dạng Phiên đã chấm trong ngày Đơn Khác khai Xử lý khi đơn Đã duyệt Truy vết
L-1 — Rời hẳn, không giao nhau 07:00–11:30 (đã đóng) 13:00–15:00 Cộng thêm đủ 2g00 → tổng 6g30 BR-GTK-06
L-2 — Chồng một phần 07:00–11:30 10:00–13:00 Union 07:00–13:00 = 6g00 (không phải 7g30) BR-GTK-06 · FR-GTK-08
L-3 — Đơn bao trùm phiên 08:00–10:00 07:00–17:00 Lấy trọn khoảng của đơn = 10g00; phần vượt không thành Tăng ca, trần 1 công BR-GTK-06 · BR-GTK-07
L-4 — Đơn nằm gọn bên trong phiên 07:00–17:00 09:00–11:00 Cộng thêm 0 phút — công ngày không đổi; chi tiết ngày vẫn hiện dòng phụ Giải trình khác để lưu vết BR-GTK-06 · FR-GTK-09
L-10 ✾ — Trùng khít hoàn toàn 13:00–15:00 13:00–15:00 Cộng thêm 0 phút — công ngày lấy đúng bản ghi chấm công, đơn Khác coi như thừa: không cộng gì, chỉ lưu vết ở chi tiết ngày (BR-GTK-22) BR-GTK-06 · BR-GTK-22
L-5 — Ngày trắng, không bản ghi nào (không có) 07:00–15:00 Ngày thoát nhãn Vắng, tính công theo đơn, không phạt BR-GTK-11
L-6 — Ngày đã Đủ công 07:00–16:00 = 8g 16:00–18:00 Tổng 10g nhưng vẫn 1 công; muốn tính làm thêm phải đi đơn Tăng ca BR-GTK-07
L-7 — Khai ngoài ca chuẩn (chỉ VP) VP 08:00–17:30 06:00–09:00 VP: cắt phần trước 08:00, chỉ 08:00–09:00 vào công. CT: không cắt, cộng đủ BR-GTK-10
L-8 — Khai sớm hơn giờ chấm vào thực tế CT 08:00–17:00 06:00–08:00 CT cộng thêm 2g00 (không có khung giờ). ⚠ Rủi ro khai khống — ✧ file đính kèm không còn bắt buộc (27/08/2026), chốt chặn duy nhất là người duyệt đối chiếu bản ghi gốc. VP cùng khoảng → bị cắt hết BR-GTK-06 · BR-GTK-10 · BR-GTK-14
L-9 ✪ — Phiên hở mốc (chỉ có giờ vào) 08:00 → — 10:00–17:30 Đơn không đóng phiên hở: giờ của đơn (7g30) vào Tổng giờ; ngày giữ nhãn Quên chấm công nhưng vẫn chốt được công — 0,9 công tạm tính (CT, định mức 8g), không để —. Có thêm đơn Quên chấm công bù mốc ra → lên 1 công. Form + màn duyệt đều cảnh báo BR-GTK-15 · BR-GTK-24 · BR-GTK-16 · FR-GTK-12

L-9 — vì sao phải tách thành luật riêng

Đây là chỗ hai luật đá nhau nếu không chốt: phiên hở mốc không được tính giờ và ngày chưa chốt được công (BR-VT-17); trong khi BR-GTK-06 lại coi đơn Khác đã duyệt là một phiên hợp lệ. Phiên 08:00 → — không có độ dài nên không union được với khoảng của đơn.

Ví dụ VP — chấm vào 08:00, quên chấm ra, đơn Khác 10:00–17:30:

Kịch bản Tổng giờ Trạng thái ngày Công
Chỉ đơn Khác 10:00–17:30 Đã duyệt 7g30 Quên chấm công — chưa chốt —
Chỉ đơn Quên chấm công bù giờ ra 17:30 Đã duyệt 9g30 thô → 8g làm thực Đủ công 1
Cả hai đơn Đã duyệt 9g30 — đơn Khác nằm gọn bên trong, cộng thêm 0 phút (L-4) Đủ công 1

⇒ Đúng loại đơn cho tình huống này là Quên chấm công, không phải Khác (BR-GTK-16).

3.6.7 Hai trường hợp theo thời điểm nộp đơn so với ngày xảy ra sự việc ✾

Cùng một đơn giải trình, nộp trước hay nộp sau ngày xảy ra sự việc thì cách ghép với dữ liệu chấm công khác nhau — vì ở thời điểm duyệt, có hay chưa có bản ghi chấm công thực tế là khác. Đây là cặp trường hợp song song với §2.5 của loại Đi công tác, nhưng nói về cộng công, không phải về nơi công tác.

Trường hợpCách hệ thống xử lý
A — Giải trình TRƯỚC ngày xảy ra sự việc
Đơn nộp khi ngày đó chưa diễn ra
đăng ký báo trước
Ghi nhận dữ liệu của đơn trước — đơn được treo sẵn ở ngày đó, công ngày chưa đổi (BR-GTK-15). Khi ngày đó tới và có bản ghi chấm công, hệ thống mới đem khoảng giờ của đơn ghép với các phiên đã chấm theo 3 nhánh ở bảng dưới
B — Giải trình SAU ngày xảy ra sự việc
Ngày đã qua, bản ghi chấm công đã có sẵn
giải trình bù
Đối chiếu ngay với bản ghi chấm công thực tế của ngày. Đơn Đã duyệt → ghi nhận giờ khai trong đơn vào ngày đó; phần đã được phiên thực tế phủ thì không đếm lại (BR-GTK-06)
Trường hợp A — ba nhánh khi ghép đơn với giờ chấm thực tế
Nhánh Quan hệ hai khoảng giờ Cách tính công Dạng lệch
A-1 — Chồng nhau một phần Có phần chung, có phần riêng Phần chung chỉ tính MỘT lần, phần riêng cộng gộp — tức hợp nhất (union) hai khoảng. Vd phiên 07:00–11:30 + đơn 10:00–13:00 → 07:00–13:00 = 6g00 L-2
A-2 — Khác biệt hoàn toàn (rời nhau) Không có phút nào chung Cộng gộp cả hai khoảng. Vd phiên 07:00–11:30 (4g30) + đơn 13:00–15:00 (2g00) → 6g30 L-1
A-3 — Khớp nhau hoàn toàn (trùng khít) Hai khoảng y hệt nhau Chỉ lấy bản ghi chấm công; đơn giải trình lúc này coi như thừa — không cộng thêm gì, chỉ lưu vết ở chi tiết ngày L-10

Ba nhánh trên là một luật duy nhất viết rõ ra

Cả A-1, A-2, A-3 đều là BR-GTK-06 — hợp nhất (union), phần trùng chỉ tính một lần. Tách ra ba nhánh vì đội test cần ba bộ dữ liệu khác nhau để phủ, và vì A-3 hay bị hiểu nhầm thành "được cộng đôi".

Trạng thái đơn — điều kiện cần của mọi trường hợp
Mã Tên Nội dung
BR-GTK-21 ✾ Thời điểm nộp đơn quyết định thời điểm cộng công Đơn nộp trước ngày xảy ra sự việc: duyệt xong chưa cộng công ngay, phải đợi ngày đó diễn ra rồi mới ghép với giờ chấm thực tế theo A-1 / A-2 / A-3 (BR-GTK-15). Đơn nộp sau ngày xảy ra sự việc (trong hạn 7 ngày — §3.1.1): bản ghi chấm công đã có sẵn, duyệt xong tính ngay, ghi nhận giờ khai trong đơn đối chiếu với bản ghi thực tế. (Chốt 28/08/2026.)
BR-GTK-22 ✾ Trùng khít hoàn toàn → đơn là thừa Khoảng giờ khai trong đơn trùng khít khoảng giờ đã chấm → công ngày lấy đúng bản ghi chấm công, đơn không cộng thêm phút nào. Đơn vẫn được lưu và vẫn hiện ở chi tiết ngày để lưu vết lý do, nhưng không ảnh hưởng số công. Người duyệt không cần từ chối đơn dạng này — duyệt hay không thì công vẫn thế. (Chốt 28/08/2026.)
BR-GTK-23 ✾ Chỉ đơn Đã duyệt mới vào công Áp cho cả hai trường hợp A và B và cho mọi loại đơn giải trình: đơn ở trạng thái Chờ duyệt hoặc Từ chối → KHÔNG cộng công, không ghép với giờ chấm, không làm đổi nhãn trạng thái ngày. Ngày chỉ đổi khi đơn chuyển sang Đã duyệt. (Chốt 28/08/2026.)

3.6.6 Quan hệ với Đi công tác, phiên chấm công & trạng thái làm việc

Ba ranh giới phải giữ để hai loại đơn không giẫm chân nhau — đây là phần riêng của tài liệu này, không có trong Business Rule 0.3:

Mã Tên Nội dung
BR-GTK-18 ✸ Đơn Khác KHÔNG sinh trạng thái làm việc, KHÔNG ghi mốc lịch sử Chỉ đơn Đi công tác Đã duyệt mới tự đặt trạng thái làm việc = Công tác cho các ngày trong đơn (BR-GT-07). Đơn Khác — dù Đã duyệt — không đổi trạng thái làm việc, không sinh mốc trong Lịch sử thay đổi trạng thái (BR-24 — lịch sử chỉ ghi lần đổi trạng thái thật), và không mở nút Chấm công đi công tác (BR-VT-28 — cổng đó chỉ mở bằng trạng thái Công tác). Nhân viên muốn đổi trạng thái thì tự khai ở màn Trạng thái làm việc.
BR-GTK-19 ✸ ⚠ Không dùng Khác để cứu công cho giờ chấm ngoài phạm vi Giờ chấm ngoài phạm vi chỉ vào công khi ngày đó có đơn Đi công tác Đã duyệt (BR-VT-09 · BR-VT-16). Vì vậy ngày Đi công tác mà đơn Chờ duyệt / Từ chối / chưa có thì không được dùng đơn Khác khai đúng khoảng giờ đó để lấy công — đây là case dùng sai thuộc nhóm #2 / #7 (§3.6.1), người duyệt từ chối theo BR-GTK-02. Khác vẫn dùng được cho phần không phải đi công tác của ngày (vd làm tại nhà buổi sáng).
⚠ Chưa chốt — xem §6.4 mục BR-2.
BR-GTK-20 ✸ Đơn Khác gắn với một phiên — chỉ khối Công trường Form khối Công trường bắt buộc chọn Phiên 1 hay Phiên 2 trước khi gửi — ✾ không kèm khoảng giờ, không có nhánh hệ thống tự xác định. (Sửa 27/08/2026 — bỏ khoảng giờ của từng phiên, chỉ chọn Phiên 1 / Phiên 2.) Khối Văn phòng không có bước này. Áp cho 3 loại bám giờ chấm: Quên chấm công · Thiếu giờ công · Khác — và ✾ Đi công tác chỉ khi Phạm vi = *Theo giờ* (§4.7.2 — BR-CTP-11).

✸ BR-GTK-18 → BR-GTK-20 — mới ở bản 1.2, suy ra từ BR-GT-07 · BR-VT-16 · BR-VT-28 và BR-CTP-11 của Business Rule 0.3. Hai mục đánh ⚠ cần BA xác nhận (§6.4).

3.7 Luật chung của 8 loại đơn — đồng bộ Business Rule 0.3 ✸

✸ Mới ở bản 1.3 — kéo nốt phần Nhóm E · Nhóm F của Business Rule 0.3 mà bản 1.2 chưa đưa sang. Đây là luật áp cho cả 8 loại đơn, không riêng Đi công tác hay Khác, nhưng quyết định cách chốt công ở §4.6 và §4.7 nên phải có mặt trong tài liệu này.

⚠ TRÙNG MÃ giữa hai tài liệu — đọc trước khi dựng test

Bốn mã BR-GT-09 → BR-GT-12 mang hai nghĩa khác nhau ở hai tài liệu. Khi ghi truy vết cho ca kiểm thử bắt buộc ghi kèm nguồn:

Mã Nghĩa trong tài liệu này (§3.4) Nghĩa trong Business Rule 0.3
BR-GT-09 Hạn nộp đơn 7 ngày Đi muộn / Về sớm — chỉ khối Văn phòng
BR-GT-10 Đi công tác được tính công, không phụ cấp Tăng ca — tính riêng theo giờ
BR-GT-11 Ràng buộc thứ tự ngày / giờ Quên chấm công — bù đúng 1 mốc
BR-GT-12 Giới hạn khoảng khai báo Lý do bắt buộc, file tuỳ chọn

Bảng dưới dùng ký hiệu BR-GT-nn ⟨0.3⟩ cho mã của Business Rule 0.3 để không đụng mã của §3.4. Mã gốc giữ nguyên để truy vết ngược về tài liệu Business Rule.

Mã Tên Nội dung Nối vào đâu trong tài liệu này
BR-GT-10 ⟨0.3⟩ ✸ Tăng ca — tính riêng theo GIỜ, KHÔNG quy đổi ra ngày công Nhập giờ bắt đầu → giờ kết thúc, hệ tự tính thời lượng (giờ : phút).
· Áp chung cả hai khối — Văn phòng và Công trường giống nhau, không tách quy tắc.
· Giờ tăng ca đứng riêng một chỉ số (ô Giờ tăng ca ở thẻ tổng tháng · cột riêng khi xuất báo cáo): không cộng vào số công và không quy đổi ra ngày công theo bất kỳ định mức nào (không chia 8g/ngày ở VP, không chia định mức 8g ở CT). Phần giờ vượt định mức chỉ thành giờ tăng ca khi có đơn Tăng ca Đã duyệt, và đi vào bảng lương theo đơn giá giờ tăng ca.
· Thời lượng ≤ 0 → chặn gửi đơn. (Sửa 19/08/2026 — bỏ luật cũ "Văn phòng quy đổi ra ngày công 8h/ngày".)
Đây là lý do gốc của trần 1 công ở BR-VT-19 · BR-GTK-07 · BR-CTP-05, và là lý do FR-CTP-09 loại bản ghi Tăng ca khỏi khối Sự kiện & giải trình. Sheet OT: §4.7.4
BR-GT-11 ⟨0.3⟩ ✸ Quên chấm công — bù đúng 1 mốc Đơn trỏ tới ngày / phiên thực sự thiếu mốc vào hoặc ra; nhập bổ sung giờ vào hoặc giờ ra — đúng một mốc. Thiếu cả 2 mốc của một phiên → không dùng loại này, chuyển sang Khác (BR-GTK-02 · §3.6.1 case #5). Là loại đơn duy nhất đóng được phiên hở mốc — BR-GTK-15 · BR-GTK-16 · BR-CTP-04 · BR-VT-17. Ở khối CT, phiên được bù là phiên nhân viên chọn ở FR-CTP-11
BR-GT-12 ⟨0.3⟩ ✸✧ Lý do bắt buộc — file đính kèm tuỳ chọn Lý do bắt buộc với mọi loại đơn (Tăng ca · Đi công tác dùng ô Nội dung công việc / công tác); bỏ trống → chặn gửi. File đính kèm là tuỳ chọn với cả 8 loại. ✧ Không còn ngoại lệ — loại Khác cũng tuỳ chọn file từ 27/08/2026 (BR-GTK-14 · FR-GTK-11). Ca đối chứng: TC-GTK-05
BR-GT-14 ⟨0.3⟩ ✸ Chặn đơn trùng trong một ngày Một ngày đã có đơn CÙNG LOẠI đang Chờ duyệt hoặc Đã duyệt → chặn tạo đơn trùng. Loại Khác đi luật riêng: chặn theo khoảng giờ chồng lấn giữa hai đơn Khác (BR-GTK-09), còn Khác ghép được với loại đơn khác trong cùng ngày (BR-GTK-17)
BR-GT-17 ⟨0.3⟩ ✸ Thiếu giờ công — chỉ khối Công trường Ngày mang nhãn Thiếu giờ công → nhân viên nhập Giờ vào thực tế · Giờ ra thực tế; đơn Đã duyệt → tính lại tổng giờ theo BR-CTP-03. Khối Văn phòng không có loại này (VP dùng Đi muộn / Về sớm). Hai ô giờ này chính là nguồn của dòng phụ trên thẻ Thiếu giờ công — FR-CTP-13. Ngày CT có 2 phiên thì đơn phải gắn với một phiên (BR-CTP-11 · BR-GTK-20)
BR-GT-20 ⟨0.3⟩ ✸ Đơn duyệt muộn vẫn được tính, chừng nào BẢNG LƯƠNG của kỳ CHƯA CHỐT Cửa sổ 7 ngày (§3.1.1) được phép vắt sang tháng sau — sự việc 29/08 có hạn nộp tới hết 05/09, trong khi kỳ công tháng 8 đã chốt 31/08. Luật xử lý:
· Duyệt sau ngày chốt kỳ công nhưng bảng lương kỳ đó CHƯA chốt → vẫn tính vào công của chính kỳ đó; hệ thống tính lại công tháng và phiếu lương (cơ chế tính lại phiếu lương của module Hành chính – Nhân sự).
· Bảng lương đã chốt → kỳ đó không sửa được nữa; phần chênh đi theo điều chỉnh ở kỳ lương kế tiếp (truy lĩnh), do Nhân sự xử lý trên web HCNS.
· Hạn nộp đơn không bị rút ngắn vì lý do chốt kỳ — vẫn đủ 7 ngày.
Là hệ quả trực tiếp của điểm 2 · 3 trong hộp "Bốn điểm dễ sai khi test hạn 7 ngày" (§3.1.1); ca TC-HAN-07 · TC-HAN-09

✸ BR-GT-10 ⟨0.3⟩ → BR-GT-20 ⟨0.3⟩ — mới ở bản 1.3 (27/08/2026), lấy nguyên văn từ Nhóm E · Nhóm F của Business Rule 0.3. Các mã còn lại của hai nhóm đó đã có mặt sẵn trong tài liệu này: BR-GT-06 · BR-GT-07 → BR-GT-11 · BR-GT-12; BR-GT-13 → BR-CC-10b; BR-GT-15 · BR-GT-16 → BR-GTK-08 · BR-CTP-04; BR-GT-18 · BR-GT-19 → §3.1.1.

3.8 Đăng ký giải trình ở khối Công trường — bắt buộc chọn phiên ✾

✾ Mới ở bản 1.6 (03/09/2026) — theo yêu cầu BA: đặc tả luồng đăng ký giải trình của khối Công trường cho bốn loại đơn bám giờ chấm — Thiếu giờ công · Quên chấm công · Đi công tác (Phạm vi Theo giờ) · Khác — phải chọn phiên trước khi khai giờ.

Nguồn màn hình: ui-mockups/longdo-erp/app-longdo-erp/pace-1/cham-cong/giai-trinh-cong-form.html mở với ?khoi=ct (khối Phiên cần giải trình, xem SLOT_PHIEN · capNhatPhien()). Luật gốc: FR-CTP-11 · BR-CTP-11 (§4.7.2) và BR-GTK-20. Mục này không đặt luật mới trái với ba mã đó — chỉ đặc tả màn hình & luồng thao tác để đội test đọc một chỗ.

Vì sao phải chọn phiên. Ngày công của khối Công trường ghép từ tối đa 2 phiên (Phiên 1 trước nghỉ trưa · Phiên 2 sau nghỉ trưa — BR-CTP-01). Bốn loại đơn trên bám vào giờ chấm của một cặp Vào–Ra cụ thể, nên nếu không biết đơn khai cho phiên nào thì hệ thống không xác định được phải bù mốc / cộng giờ vào đâu. Khối Văn phòng chỉ có 1 phiên / ngày nên không có bước này — form ?khoi=vp không bao giờ hiện khối phiên.

3.8.1 Ma trận đủ 8 loại đơn — loại nào hỏi phiên

# Loại đơn Có ở khối Công trường? Hỏi phiên? Vì sao
1 Thiếu giờ công ✓ (chỉ CT) ✓ Bắt buộc Khai lại Giờ vào / Giờ ra thực tế của một phiên (BR-GT-17 ⟨0.3⟩)
2 Quên chấm công ✓ ✓ Bắt buộc Bù đúng 1 mốc vào hoặc ra — mốc đó thuộc một phiên (BR-GT-11 ⟨0.3⟩)
3 Đi công tác — Phạm vi Theo giờ ✓ ✓ Bắt buộc Đơn chỉ phủ một khoảng giờ trong ngày → phải biết khoảng đó thuộc phiên nào
3′ Đi công tác — Phạm vi Theo ngày ✓ ✗ Không hỏi Đơn phủ trọn buổi / trọn ngày, không bám vào một cặp Vào–Ra cụ thể
4 ✸ Khác ✓ ✓ Bắt buộc Khai Giờ vào – Giờ ra để hợp nhất với phiên đã chấm (BR-GTK-06 · BR-GTK-20)
5 Tăng ca ✓ ✗ Không bám giờ chấm — tính riêng theo giờ (BR-GT-10 ⟨0.3⟩)
6 Nghỉ không lương ✓ ✗ Đơn xin nghỉ theo buổi / ngày, không bám phiên
7 Nghỉ phép năm ✗ (chỉ VP) — Khối CT không có loại này (§3.1)
8 Đi muộn / Về sớm ✗ (chỉ VP) — CT không có khung giờ nên không có loại này (§4.7.1)

Đọc dọc cột Hỏi phiên — nguyên tắc một câu

Đơn bám vào giờ chấm của một cặp Vào–Ra thì hỏi phiên; đơn khai theo buổi / theo ngày / theo thời lượng thì không. Đi công tác nằm ở cả hai nhóm nên tách theo Phạm vi khai báo (§3.2.1) — đây là loại duy nhất đổi qua đổi lại trong cùng một lần mở form.

3.8.2 Khối Phiên cần giải trình trên form

TrườngKiểuMô tả
Phiên cần giải trìnhChọn 1 trong 2Bắt buộc (nhãn có dấu *). Hai nút Phiên 1 / Phiên 2 dạng segmented, mặc định Phiên 1. ✾ Nút chỉ có tên phiên — KHÔNG kèm khoảng giờ; hệ thống không cố định khung giờ cho từng phiên

Vị trí khối — giống nhau ở mọi loại đơn: đứng ngay dưới ô Ngày và TRÊN các ô giờ của loại đơn đó → chọn phiên trước, khai giờ sau.

Loại đơnÔ ngày phía trênÔ giờ phía dướiChỗ đỗ trong mockup
Quên chấm côngNgày quên chấmGiờ vào / Giờ ra thực tế (đúng 1 ô theo lựa chọn Loại)#phien-slot-quen
Thiếu giờ côngNgàyGiờ vào thực tế · Giờ ra thực tế#phien-slot-thieu
✸ KhácNgàyGiờ vào · Giờ ra#phien-slot-khac
Đi công tác — Theo giờNgàyTừ giờ · Đến giờ#phien-slot-ct
Các loại còn lại——Về chỗ đỗ mặc định và bị ẩn

Riêng Quên chấm công — ô ngày và ô giờ tách hai dòng

Ở các loại khác, ô ngày và ô giờ có thể nằm chung một hàng. Với Quên chấm công, ô Ngày quên chấm và ô Giờ khai lại phải tách thành hai dòng riêng để khối phiên chen vào giữa — nếu để chung hàng thì thứ tự chọn phiên trước, khai giờ sau bị phá (FR-CTP-11).

3.8.3 Luồng đăng ký — 6 bước

Bước Nhân viên làm Màn hình phản ứng
1 Mở form giải trình từ Công tháng (nút Giải trình ngay) hoặc từ Đơn của tôi Form mở với ?khoi=ct (kèm ?ngay=YYYY-MM-DD nếu vào từ chi tiết ngày); danh sách loại đơn ẩn Nghỉ phép năm và Đi muộn / Về sớm, hiện Thiếu giờ công
2 Chọn Loại giải trình Chưa chọn thì không hiện trường nào (BR-GT-01). Chọn xong → hiện nhóm trường của loại đó
3 (hệ thống) Loại thuộc 4 loại bám giờ chấm → khối Phiên cần giải trình chuyển vào chỗ ngay dưới ô Ngày và hiện ra, mặc định Phiên 1. Loại khác → khối ẩn
4 Chọn Phiên 1 hoặc Phiên 2 Nút được chọn nổi nền trắng + chữ đậm màu brand; nút kia trở về nền xám
5 Khai giờ ở các ô ngay bên dưới Validate tại chỗ theo từng loại (thứ tự giờ, đủ mốc…) — sai thì khoá nút Gửi đơn
6 Bấm Gửi đơn Đơn lưu kèm số phiên đã chọn; hiện toast "Đã gửi đơn giải trình" rồi quay lại màn trước

Nhánh riêng của Đi công tác — đổi Phạm vi ngay giữa chừng:

Thao tác Kết quả
Chọn Đi công tác → Phạm vi mặc định Theo ngày Khối phiên không hiện; form hiện Từ ngày + Buổi · Đến ngày + Buổi
Bấm sang Theo giờ Khối phiên hiện ra ngay, nằm giữa ô Ngày và cặp Từ giờ / Đến giờ, mặc định Phiên 1
Bấm ngược lại Theo ngày Khối phiên tự ẩn; lựa chọn phiên không được gửi kèm đơn

3.8.4 Yêu cầu chức năng

Mã Yêu cầu Ghi chú kiểm thử
FR-PHI-01 ✾ Khối Phiên cần giải trình chỉ tồn tại ở khối Công trường (?khoi=ct). Mở ?khoi=vp (hoặc không truyền tham số) → không bao giờ thấy khối này ở bất kỳ loại đơn nào. Mở ?khoi=vp rồi lần lượt chọn cả 8 loại: không loại nào có khối phiên
FR-PHI-02 ✾ Khối hiện với 4 loại: Thiếu giờ công · Quên chấm công · Khác · Đi công tác (Phạm vi Theo giờ); ẩn với Tăng ca · Nghỉ không lương · Đi công tác (Theo ngày). Đổi loại lần lượt, đối chiếu ma trận §3.8.1
FR-PHI-03 ✾ Khối gồm đúng 2 nút — Phiên 1 / Phiên 2 — không hiển thị khoảng giờ của phiên, không có nút thứ ba, không có dòng nhắc dữ liệu chấm công. Mở form ở ngày bất kỳ (2 phiên · 1 phiên · ngày Vắng chưa chấm) → luôn đúng 2 nút, không có giờ kèm theo
FR-PHI-04 ✾ Luôn hiện đủ 2 nút, không phụ thuộc dữ liệu chấm công của ngày. Hệ thống không tự xác định thay nhân viên, kể cả khi ngày chỉ có 1 phiên. Ngày chỉ có 07:00–11:30 → vẫn có cả nút Phiên 2 và bấm chọn được
FR-PHI-05 ✾ Mặc định chọn Phiên 1 mỗi khi khối hiện ra. Chọn Khác → Phiên 1 sáng sẵn; nút Gửi không bị khoá vì lý do chưa chọn phiên
FR-PHI-06 ✾ Khối luôn nằm ngay dưới ô Ngày và trên các ô giờ của loại đang chọn (§3.8.2) — đổi loại thì khối di chuyển theo, không nhân bản. Đổi Quên chấm công → Khác → Đi công tác (Theo giờ): mỗi màn đúng 1 khối, luôn đúng vị trí
FR-PHI-07 ✾ Đi công tác — đổi Phạm vi thì khối hiện / ẩn ngay: Theo giờ → hiện; Theo ngày → ẩn. Bấm qua lại 3 lần: trạng thái khối bám đúng, không kẹt
FR-PHI-08 ✾ Đổi ngày ở ô Ngày → khối giữ nguyên (không nạp lại theo phiên của ngày mới), phiên đang chọn không bị reset. Chọn Phiên 2 rồi đổi ngày → vẫn là Phiên 2
FR-PHI-09 ✾ Đơn gửi đi mang theo số phiên đã chọn; màn Chi tiết đơn giải trình (web) (§3.5) hiển thị Phiên 1 / Phiên 2 cho 4 loại này, và không hiển thị dòng phiên với đơn Đi công tác khai Theo ngày hay đơn của khối Văn phòng. Mở đơn CT loại Khác trên web: thấy dòng Phiên; mở đơn VP cùng loại: không có dòng đó

3.8.5 Business Rule

Mã Tên Nội dung
BR-PHI-01 ✾ Bốn loại đơn bắt buộc gắn phiên — chỉ khối CT Thiếu giờ công · Quên chấm công · Khác · Đi công tác (Theo giờ) của khối Công trường phải mang đúng một giá trị phiên: 1 hoặc 2. Đơn thiếu giá trị này là dữ liệu không hợp lệ — server từ chối nhận. Luật gốc: BR-CTP-11 · BR-GTK-20 (riêng loại Khác).
BR-PHI-02 ✾ Phiên không gắn khung giờ cố định Hệ thống không quy định Phiên 1 = buổi sáng, Phiên 2 = buổi chiều theo mốc giờ nào — CT không có khung giờ (§4.7.1). Phiên chỉ là thứ tự cặp Vào–Ra trong ngày; giờ thực tế do nhân viên khai ở các ô giờ của đơn.
BR-PHI-03 ✾ Không tự suy phiên thay nhân viên Kể cả khi ngày chỉ có 1 phiên hoặc chỉ có 1 phiên đang hở mốc, hệ thống vẫn để nhân viên tự chọn — không tự điền, không khoá nút còn lại. Lý do: dữ liệu chấm công của ngày có thể thiếu đúng phần mà đơn đang đi giải trình.
BR-PHI-04 ✾ Chọn phiên không bị dữ liệu chấm công chặn Nhân viên chọn được Phiên 2 cho ngày chưa có phiên 2, thậm chí cho ngày chưa chấm công lần nào (ngày Vắng). Form không cảnh báo, không chặn gửi — tính hợp lý là việc của người duyệt (BR-CC-10b).
BR-PHI-05 ✾ Đi công tác chia hai nhánh theo Phạm vi Theo giờ → bắt buộc chọn phiên. Theo ngày → không hỏi phiên, và đơn không lưu giá trị phiên nào — kể cả khi nhân viên đã lỡ chọn trước lúc đổi Phạm vi.
BR-PHI-06 ✾ Khối Văn phòng không có khái niệm phiên trong đơn VP 1 phiên / ngày (BR-CTP-01) → đơn VP không mang trường phiên; mọi hiển thị Phiên 1 / Phiên 2 trên app và web chỉ áp cho đơn của khối CT.
BR-PHI-07 ✾ Phiên đã chọn là căn cứ áp dụng khi tính công Đơn Đã duyệt áp đúng vào phiên đã chọn (§3.8.6); chọn sai phiên thì kết quả tính công sai theo — người duyệt đối chiếu bản ghi chấm công gốc trước khi duyệt, sai thì từ chối kèm lý do, nhân viên gửi đơn mới (nếu còn trong hạn 7 ngày — §3.1.1). Không có thao tác sửa phiên trên đơn đã gửi.

3.8.6 Phiên đã chọn được dùng vào đâu

Loại đơn Khi đơn Đã duyệt, phiên đã chọn quyết định Hiển thị lại ở đâu
Quên chấm công Mốc bù (vào hoặc ra) được ghi vào đúng phiên đó → phiên đóng lại, giờ của nó mới được cộng (BR-CTP-04 · BR-GT-11 ⟨0.3⟩) Thẻ Quên chấm công ở chi tiết ngày — dòng phụ ghi "Phiên 1" / "Phiên 2" (FR-CTP-17); dòng phiên tương ứng có chip bổ sung theo đơn
Thiếu giờ công Cặp Giờ vào / Giờ ra thực tế thay cho giờ của phiên đó, tổng giờ ngày tính lại theo BR-CTP-03 Thẻ Thiếu giờ công — dòng phụ "Giờ vào HH:mm · Giờ ra HH:mm" (FR-CTP-13)
✸ Khác Khoảng giờ của đơn được hợp nhất (union) với các phiên đã đóng, phần chồng lấn chỉ tính một lần (BR-GTK-06); phiên đã chọn là ngữ cảnh đối chiếu cho người duyệt — đơn Khác vẫn không đóng được phiên hở mốc (BR-GTK-15) Dòng phụ "Giải trình khác: HH:mm – HH:mm · <lý do rút gọn>" (FR-GTK-09)
Đi công tác (Theo giờ) Khoảng giờ công tác được ghi nhận thuộc phiên đó khi cộng công của ngày hỗn hợp (§4.6.3) Thẻ Đi công tác ở khối Sự kiện & giải trình

Ba điểm dễ sai khi test phần chọn phiên

  1. Đừng kỳ vọng form gợi ý phiên. Không có dải nhắc "Ngày này đã có N phiên…", không có khoảng giờ trên nút, không có nhánh hệ thống tự xác định — mọi bản dựng cũ có các thứ này đều đã bỏ (sửa 27/08/2026).
  2. Đi công tác là loại duy nhất khối phiên bật / tắt giữa chừng — theo Phạm vi, không theo loại đơn. Ca kiểm thử phải bấm qua lại chứ không chỉ chọn một chiều.
  3. Phiên là dữ liệu của đơn, không phải của ngày. Đổi ngày không reset phiên đang chọn (FR-PHI-08); và một ngày có thể có hai đơn khác loại trỏ hai phiên khác nhau (BR-GTK-17).

3.9 Màn Danh sách đơn (bản web) ✾

Hai màn danh sách trên web, mỗi loại đơn một màn — đơn nghỉ phép là loại đơn riêng nên không trộn vào danh sách đơn giải trình:

  • ui-mockups/longdo-erp/web/don-giai-trinh.html — Đơn giải trình (đi muộn · về sớm · quên chấm công · đi công tác).
  • ui-mockups/longdo-erp/web/don-nghi-phep.html — Đơn nghỉ phép (nghỉ có lương).

Hai màn dùng chung mã dựng bảng don-danh-sach.js và chung nguồn dữ liệu don-tu-data.js với khối Đối chiếu số liệu của bảng lương, nên số đơn ghi trên phiếu lương và số đơn ở hai màn này luôn khớp.

Lối vào — chờ BA chốt

Từ 15/09/2026, khối Đối chiếu số liệu kỳ này trong hộp Luồng ký & xác nhận đã bỏ hàng liên kết Đơn giải trình · Đơn nghỉ phép · Tính lại (FR-PL-KY-08) — mỗi mục nay có nút mở chi tiết riêng ở góc phải. Vì vậy hai màn danh sách đơn hiện chưa có lối vào nào khác trong bộ mockup. Chờ BA chốt: đưa vào menu trái (rail) hay bỏ hẳn hai màn này.

MãYêu cầuNội dung
FR-DS-01Bộ lọcTìm (tên nhân viên · mã nhân viên · mã đơn) · Tháng · Loại đơn (chỉ màn giải trình — nghỉ phép chỉ một loại nên ẩn ô này) · Trạng thái (Đã duyệt · Chờ duyệt · Từ chối).
FR-DS-02 ✾Mở màn là lọc sẵnMở kèm tham số ?nv=<mã NV>&ten=<tên>&ky=<YYYY-MM> (thêm &dm · &cong để bộ đơn khớp đúng định mức & số công của phiếu lương) → màn lọc sẵn đúng nhân viên trong đúng tháng, mặc định chỉ đơn Đã duyệt (đơn đã vào công của kỳ). Cơ chế lọc sẵn này giữ nguyên để dùng cho bất kỳ lối vào nào được chốt sau này (FR-PL-KY-08).
FR-DS-03Dải đang lọcĐang lọc theo nhân viên thì đầu màn có dải xanh: Đang lọc theo <tên> (<mã>) · Tháng M/YYYY · chỉ đơn đã duyệt, kèm nút Xoá lọc nhân viên — bỏ lọc là thấy đơn của cả kỳ (màn vẫn là danh sách, không phải màn của một người).
FR-DS-04Cột bảngGiải trình: Mã đơn · Ngày gửi · Nhân viên (kèm mã · phòng ban) · Loại đơn · Ngày áp dụng · Giờ vào–ra · Kết quả sau khi duyệt · Người duyệt · Trạng thái.
Nghỉ phép: Mã đơn · Ngày gửi · Nhân viên · Ngày nghỉ · Số ngày · Kết quả sau khi duyệt · Người duyệt · Trạng thái.
FR-DS-05Mở chi tiếtBấm một dòng → mở màn Chi tiết đơn giải trình (§3.5) (chi-tiet-don-giai-trinh.html?so=<mã đơn>). Không có cột Thao tác — duyệt / từ chối làm ở màn chi tiết.
BR-DS-01Đếm khớp phiếu lươngChỉ đơn Đã duyệt mới vào công của kỳ nên chỉ đơn đó được đếm trên phiếu lương; đơn Chờ duyệt · Từ chối vẫn nằm trong danh sách nhưng không tính vào con số ở khối Đối chiếu số liệu. Ngày Chưa giải trình không phải đơn → không có dòng nào trong hai màn này.
BR-DS-02Mã đơnĐơn giải trình GT-<yy><mm>-<số>; đơn nghỉ phép NP-<yy><mm>-<số> — nhìn mã là biết loại đơn và kỳ phát sinh.

Chưa làm ở bản này

Phân trang thật và xuất Excel chưa đặc tả — hai màn hiện dựng một trang, chân bảng chỉ có khung phân trang tĩnh để giữ đúng bố cục màn thật.


3.10 Màn Thay đổi do giải trình ✾

ui-mockups/longdo-erp/web/thay-doi-do-giai-trinh.html — của MỘT nhân viên trong MỘT kỳ lương. Trả lời đúng một câu hỏi của người ký phiếu lương: “vì sao Ngày công trên phiếu khác số máy chấm ghi nhận?”

Mở từ nút xem chi tiết của mục Giải trình trong hộp Luồng ký & xác nhận (FR-PL-KY-10). Dùng chung nguồn dữ liệu don-tu-data.js với khối Đối chiếu số liệu và hai màn danh sách đơn (§3.9), nên từng ngày · từng giờ · từng số đơn đều khớp giữa các màn.

MãYêu cầuNội dung
FR-TDG-01Phạm vi liệt kêMỗi dòng = một ngày bị đơn giải trình Đã duyệt làm đổi. Đơn Chờ duyệt · Từ chối không đổi công nên không có dòng; đơn nghỉ phép nằm ở màn riêng nên cũng không liệt kê ở đây.
FR-TDG-02 ✾Giờ vào / ra trước – sau duyệtBảng có hai cột giờ tách bạch: Giờ vào / ra trước duyệt = đúng giờ máy chấm công ghi nhận (— = mốc đó không có lượt chấm nào) và Giờ vào / ra sau duyệt = giờ được công nhận sau khi đơn đã duyệt. Cột trước duyệt gạch ngang khi đơn có khai bù giờ, để thấy ngay mốc nào bị thay. (Thêm 15/09/2026 — trước đó chỉ có một cột “giờ thực tế”.)
BR-TDG-01 ✾Loại đơn nào mới đổi giờChỉ loại đơn khai bù giờ làm đổi giờ được công nhận: Quên chấm công (bù mốc còn thiếu) · Đi công tác (khai giờ làm ngoài phạm vi). Đi muộn · Về sớm giữ nguyên giờ máy chấm — đơn chỉ đổi trạng thái và tiền phạt, không sửa giờ. Bám BR-27: đơn không được viết lại dữ liệu chấm công đã ghi.
FR-TDG-03Trạng thái & công trước → sauMỗi dòng còn hiện trạng thái ngày trước duyệt → sau duyệt (thẻ đỏ → thẻ xanh, kèm dòng phụ giải thích) và công trước → sau kèm chênh lệch. Ba số tổng đầu màn: đơn đã áp dụng · ngày bị thay đổi · công thay đổi.
FR-TDG-04Mở màn là lọc sẵnMở kèm ?nv&ten&ky&dm&cong → đúng nhân viên, đúng kỳ, đúng định mức & số công của phiếu lương. Nút quay lại và Mở phiếu lương đều trỏ về đúng phiếu đó.

4. Chấm công khi ở ngoài phạm vi vị trí chấm công

Màn: kiem-tra-vi-tri-a.html (màn kiểm tra vị trí — phương án A, bản đồ toàn màn) → cham-cong-khuon-mat.html?ngoai=1 → cham-cong-thanh-cong.html?ngoai=1.

Bối cảnh: nhân viên bấm Chấm công nhưng vị trí đo được nằm ngoài bán kính cho phép của mọi vị trí chấm công gán cho mình. Trước đây hệ thống chặn cứng, chỉ có nút Thử lại (SRS 0.8 §4.7 mục 3 · FR-05c) — nhân viên đang ở ngoài thật thì bế tắc. Bản 0.4 mở 2 lối đi; bản 0.5 rút còn đúng 1 lối đi: vẫn cho chấm công tại chỗ, bản ghi mang lý do Đi công tác và chỉ được chấp thuận khi có đơn Đi công tác đã duyệt cho ngày đó.

Đổi ở bản 0.5 — bỏ lối tắt Giải trình đi công tác tại màn chấm công

Bảng chọn cũ có 2 thẻ (Chấm công tại đây / Chỉ tạo đơn đi công tác). Thẻ thứ hai — lối tắt mở thẳng form giải trình — đã bỏ khỏi màn chấm công (quyết định BA 04/08/2026). Nhân viên vẫn tạo đơn Đi công tác như thường ở màn Công tháng → Giải trình / Đăng ký (§3); chỉ là không đi tắt từ màn chấm công nữa. Hệ quả: FR-VT-05 · FR-VT-06 · BR-VT-03 và TC-VT-06 · TC-VT-07 được viết lại.

4.0 Điều kiện tiên quyết — trạng thái làm việc Công tác

Mới ở bản 1.1 (quyết định BA 20/08/2026). Đây là thay đổi lớn nhất của bản này với §4: ngoài phạm vi không còn tự động mở lối chấm công đi công tác.

Nút Chấm công đi công tác (FR-VT-03) chỉ hiển thị khi hội đủ 3 điều kiện cùng lúc — thiếu một điều là không hiện nút:

#Điều kiệnKhông đạt thì sao
①Phép đo tại thời điểm bấm cho kết quả ngoài mọi vùng chấm công gán cho nhân viên (BR-VT-02)Trong vùng → luồng chấm công thường
② ✥Trạng thái làm việc hiện tại của nhân viên là Công tác (§2.5 · BR-VT-28)Không hiện nút — ✾ chỉ còn Thử lại, màn giữ nguyên như bản cũ (FR-VT-23)
③Khoảng cách lệch trong ngưỡng Nhân sự cấu hình (BR-VT-22)Không hiện nút — chỉ còn Thử lại + dòng "Bạn ở quá xa mọi vị trí chấm công — liên hệ Nhân sự"

Vì sao lấy trạng thái làm việc làm cổng

Trước bản 1.1, mọi lần đứng ngoài vùng đều hiện nút Chấm công đi công tác — kể cả khi nhân viên chỉ đi muộn, ra ngoài việc riêng hay chưa tới nơi làm việc. Nút hiện sẵn thành lời mời bấm, tạo hàng loạt bản ghi ngoài phạm vi không có đơn đi kèm, mà theo BR-VT-09 thì không bản nào thành công cả. Bắt nhân viên khai trạng thái Công tác trước là một hành động có chủ đích — vừa lọc bớt bản ghi rác, vừa cho cả công ty nhìn thấy ngay người đó đang đi công tác (§2), vừa là chỗ tự điền nơi công tác từ đơn (§2.5).

Hai chiều không đối xứng — đừng nhầm với BR-VT-07

  • Trạng thái → chấm công: trạng thái Công tác mở nút chấm công đi công tác (BR-VT-28) — chiều mới của bản 1.1.
  • Chấm công → trạng thái: chấm công đi công tác không tự đổi trạng thái làm việc (BR-VT-07) — giữ nguyên, vì đến bước đó trạng thái đã là Công tác rồi.

✿ Cổng áp cho cả bảng xác nhận, không chỉ ở chỗ hiện nút (mới ở bản 1.5)

Nút và bảng xác nhận là hai lần chạm khác nhau — giữa hai lần đó trạng thái có thể đã đổi (đổi ở máy khác, hoặc hệ thống tự đổi theo đơn Đi công tác Đã duyệt — BR-GT-07). Vì vậy hệ thống kiểm lại trạng thái ở cả hai mốc: khi bấm nút (mở bảng) và khi bấm Xác nhận chấm công (trước khi sang nhận diện khuôn mặt). Không còn là Công tác → không mở bảng / đóng bảng, không ghi bản ghi nào (BR-VT-32 · §4.1 bước ③).

4.1 Luồng màn hình

BướcHệ thống làm gì
① Nhân viên bấm Chấm côngĐo lại vị trí ngay lúc bấm (không dùng kết quả đo lúc mở màn)
② Kết quả: ngoài phạm viChip trạng thái đổi đỏ — "Bạn đang không trong phạm vi chấm công"; thẻ dưới đổi sang "Vị trí hiện tại của bạn" + địa chỉ thực; nút Chấm công chính ẩn hẳn.
✿ Nút Chấm công đi công tác CHỈ hiển thị khi trạng thái làm việc của nhân viên là Công tác — mọi trạng thái khác (Văn phòng · các công trường · Ra ngoài · Nghỉ) thì không hiện nút này, màn chỉ còn Thử lại (§4.0 · BR-VT-28 · FR-VT-03). Xem hai nhánh ②a / ②b ngay dưới
②a ✥ Trạng thái ≠ Công tác✾ Màn ngoài phạm vi như bản cũ: chip đỏ + thẻ Vị trí hiện tại của bạn + dòng nhắc xám "…vượt quá bán kính cho phép… hãy di chuyển đến gần rồi bấm Thử lại." + 1 nút Thử lại rộng cả hàng. Không khối vàng, không nút Đổi trạng thái làm việc, không nút Chấm công đi công tác (FR-VT-23)
②b ✥ Trạng thái = Công tácHiện dải tím "Trạng thái làm việc: Công tác · <nơi công tác>" + đúng 1 nút Chấm công đi công tác rộng cả hàng. ❂ Không nút Thử lại ở nhánh này (bỏ 05/09/2026 — bản 1.7): người đang công tác vốn ở xa vị trí chấm công, đo lại vị trí không đổi được kết quả nên nút chỉ làm loãng thao tác cần làm
③ Bấm Chấm công đi công tác
✿ chỉ tới được bước này khi trạng thái làm việc = Công tác
✿ Điều kiện mở bảng: bảng xác nhận chỉ mở khi trạng thái làm việc hiện hành của nhân viên là Công tác (§4.0 · BR-VT-28). Trạng thái khác thì nút không tồn tại nên không có đường nào mở được bảng này — kể cả quay lại màn cũ, bấm nút vật lý Back hay mở lại app (BR-VT-32).
Bảng xác nhận (bottom sheet) hiện: "Bạn đang ngoài phạm vi chấm công — Vẫn chấm công được tại vị trí hiện tại, với lý do Đi công tác." + đúng 2 khối nội dung: dải nơi công tác lấy theo trạng thái đang khai (FR-VT-24) và dòng nhắc "Bản ghi chấm công này là dự tính cần quản lý và nhân sự duyệt đơn." — ✾ không còn thẻ mô tả "Ghi nhận vị trí hiện tại + ảnh khuôn mặt…" + nút Xác nhận chấm công / Huỷ. Không còn lối tắt sang form giải trình
④ Bấm Xác nhận chấm côngĐi tiếp nhận diện khuôn mặt như luồng thường, bản ghi được gắn cờ ngoài phạm vi + lý do Đi công tác kèm vị trí thực
⑤ Màn biên nhậnHiện chip đỏ "Ngoài phạm vi" + "Vị trí hiện tại của bạn" + địa chỉ thực. Không lặp lại chú thích lý do / điều kiện tính công — đã nêu ở bảng xác nhận bước ③ (FR-VT-09)

✿ Bước ② · bước ③ — viết lại ở bản 1.5 (quyết định BA 03/09/2026): luật "nút Chấm công đi công tác chỉ hiện khi trạng thái làm việc là Công tác" nay ghi thẳng trong bảng luồng, không còn chỉ trỏ sang §4.0; và cổng đó áp cho cả bước mở bảng xác nhận (BR-VT-32).

4.2 Nội dung bảng xác nhận

Bảng xác nhận chỉ còn hai khối nội dung ✾

Ngoài tiêu đề và hai nút, bảng chỉ hiện: dải nơi công tác (✈️ "Trạng thái làm việc: Công tác · <nơi công tác>") và dòng nhắc điều kiện ("Bản ghi chấm công này là dự tính cần quản lý và nhân sự duyệt đơn.").

Bỏ hẳn thẻ mô tả "Ghi nhận vị trí hiện tại + ảnh khuôn mặt — bản ghi được đánh dấu ngoài phạm vi · lý do Đi công tác, kèm toạ độ, địa chỉ thực và khoảng cách lệch." Nội dung đó mô tả việc hệ thống tự làm, không phải điều nhân viên phải quyết — và những gì được lưu đã ghi ở dòng Nút chính bên dưới cùng BR-VT-04 · BR-VT-06. (Sửa 27/08/2026.)

Thành phần Nội dung hiển thị Kết quả
Tiêu đề "Bạn đang ngoài phạm vi chấm công" + "Vẫn chấm công được tại vị trí hiện tại, với lý do Đi công tác." —
Dải nơi công tác ✥ "Trạng thái làm việc: Công tác · <nơi công tác>" — lấy từ trạng thái đang khai (§2.5) Cho nhân viên soát lại nơi đến ngay trước khi chấm; không có ô nhập (FR-VT-24 · BR-VT-20). (Mới 20/08/2026 — bản 1.1)
Dòng nhắc điều kiện ✾ "Bản ghi chấm công này là dự tính cần quản lý và nhân sự duyệt đơn." Nêu BR-VT-05 ngay tại điểm bấm. Đây là nơi duy nhất nêu điều kiện tính công trong luồng — màn biên nhận không lặp lại (FR-VT-09). (Sửa 05/08/2026 — bản 0.9, rút gọn câu dài của bản 0.8)
Nút chính — Xác nhận chấm công ✾ Sang màn nhận diện khuôn mặt (?ngoai=1) Bản ghi được lưu kèm toạ độ + địa chỉ thực + khoảng cách lệch + ảnh khuôn mặt + lý do Đi công tác, ở trạng thái chờ đơn Đi công tác được duyệt (BR-VT-05)
Nút Huỷ / chạm nền mờ Đóng bảng Giữ nguyên trạng thái ngoài vùng, không ghi gì

Vì sao chỉ còn một lối đi

Người đứng ngoài vùng vẫn đang làm việc thật — việc cần làm ngay là giữ bằng chứng có mặt (ảnh khuôn mặt + toạ độ + giờ). Việc khai đơn là nghiệp vụ giấy tờ, làm sau cũng được và đã có lối vào riêng ở màn Công tháng. Gộp hai việc vào một bảng chọn khiến nhân viên tưởng phải chọn một trong hai — trong khi thực tế cần cả hai: chấm công để có bằng chứng, và có đơn đã duyệt thì bản ghi mới thành công ngày.

4.3 Yêu cầu chức năng

Mã Yêu cầu Ghi chú kiểm thử
FR-VT-01 Bấm Chấm công → hệ thống đo lại vị trí tại thời điểm bấm, không dùng kết quả đo cũ. Đứng ngoài vùng rồi bấm: phải ra kết quả ngoài vùng
FR-VT-02 Ngoài phạm vi → chip trạng thái chuyển đỏ kèm đúng câu "Bạn đang không trong phạm vi chấm công"; thẻ thông tin dưới đổi từ tên địa điểm chấm công sang "Vị trí hiện tại của bạn" + địa chỉ thực; khoảng cách hiển thị theo số đo thực (mockup đang để cách 1,2 km). Đối chiếu chip xanh khi trong vùng
FR-VT-03 ✾✥✿❂ Ngoài phạm vi → nút Chấm công chính ẩn hẳn (không phải làm mờ), thay bằng đúng 1 nút Chấm công đi công tác rộng cả hàng — ❂ (bỏ nút Thử lại đi kèm — 05/09/2026, bản 1.7), kèm dải tím ghi "Trạng thái làm việc: Công tác · <nơi công tác>". Nhãn nút nói thẳng loại chấm công sắp thực hiện để nhân viên hiểu bản ghi này gắn với đơn Đi công tác, không phải chấm công thường. (Sửa 05/08/2026 — bản 0.9, đổi nhãn từ "Chấm công tại đây".)
✿ Chỉ hiển thị nút Chấm công đi công tác khi nhân viên có trạng thái làm việc ngày hôm đó là Công tác (§4.0 · BR-VT-28). Trạng thái khác → chỉ còn 1 nút Thử lại, xem FR-VT-23. ❂ Dù ở nhánh nào, màn ngoài phạm vi luôn chỉ có một nút — Chấm công đi công tác (đang Công tác) hoặc Thử lại (trạng thái khác).
✿ Mốc lấy trạng thái: trạng thái hiện hành tại thời điểm bấm Chấm công — một ngày đổi trạng thái nhiều lần thì lấy lần đổi gần nhất (BR-02 mới nhất thắng), không lấy trạng thái đầu ngày. Đổi khỏi Công tác giữa ngày → nút đóng lại; các bản ghi đã chấm giữ nguyên (BR-VT-28 · BR-VT-32). (Cổng trạng thái thêm 20/08/2026 — bản 1.1; viết lại 03/09/2026 — bản 1.5)
Khi đang đỏ và đang Công tác: không còn nút chấm công thường; nhãn nút đọc đúng Chấm công đi công tác. Sáng khai Công tác → chiều đổi sang Văn phòng → bấm Chấm công: không còn nút đi công tác
FR-VT-04 ❂ Bấm Thử lại → đo lại vị trí; nếu đã vào vùng thì chip về xanh và nút Chấm công mở lại. ❂ Nút này chỉ có ở nhánh trạng thái ≠ Công tác (FR-VT-23) — nhánh Công tác không còn Thử lại (05/09/2026 — bản 1.7). Vào vùng rồi Thử lại: quay về luồng thường
FR-VT-05 ‡✾ Bấm Chấm công đi công tác → mở bảng xác nhận (§4.2): mô tả bản ghi sẽ ghi nhận + dòng nhắc điều kiện tính công + nút Xác nhận chấm công / Huỷ. Bấm Huỷ / chạm nền mờ → đóng bảng, giữ nguyên trạng thái ngoài vùng, không ghi gì. Huỷ nhiều lần không sinh bản ghi
FR-VT-06 ‡✾ Màn chấm công không còn lối tắt sang form giải trình: bảng xác nhận chỉ có 1 hành động là Xác nhận chấm công. Muốn tạo đơn Đi công tác, nhân viên vào Công tháng → Giải trình / Đăng ký như các loại đơn khác. Trong bảng xác nhận không có thẻ "Chỉ tạo đơn đi công tác", không có link tới giai-trinh-cong-form.html
FR-VT-07 ✾ Bấm Xác nhận chấm công → đi tiếp nhận diện khuôn mặt (bắt buộc, không được bỏ qua) — cùng bộ bước liveness như luồng trong vùng. Không có đường tắt bỏ qua khuôn mặt
FR-VT-08 Ở màn nhận diện khuôn mặt của luồng này, chip vị trí hiển thị đỏ kèm địa chỉ thực (vd "Ngoài phạm vi · 123 Phố Láng Hạ") thay cho tên địa điểm chấm công. So với luồng thường: chip xanh + tên địa điểm
FR-VT-09 ‡✾ Chấm công xong → màn biên nhận hiển thị "Vị trí hiện tại của bạn" + địa chỉ thực và chip đỏ "Ngoài phạm vi". Bỏ khối lý do "Lý do: Đi công tác — chưa được tính công — ngày ghi Vắng…": nội dung đó đã nêu ở bảng xác nhận trước khi chấm (§4.2), lặp lại ở biên nhận là thừa và làm màn xác nhận-thành-công mang sắc thái cảnh báo. Biên nhận chỉ báo đã chấm công xong + nơi chấm. (Sửa 05/08/2026 — bản 0.9) Mở cham-cong-thanh-cong.html?ngoai=1: có chip đỏ Ngoài phạm vi + địa chỉ thực, không còn khối lý do màu đỏ
FR-VT-10 ‡ Bản ghi ngoài phạm vi hiển thị ở màn theo dõi của Nhân sự kèm dòng cảnh báo dạng "Chấm ngoài phạm vi <khoảng cách> · lý do Đi công tác — đã ghi nhận kèm ảnh, chưa tính công, chờ đơn Đi công tác được duyệt đủ 2 bên". Màn trang-thai-nhan-su.html
FR-VT-23 ✥✾ Ngoài phạm vi mà trạng thái làm việc ≠ Công tác → không hiện nút Chấm công đi công tác; ✾ màn giữ nguyên như bản mockup cũ của trạng thái ngoài phạm vi: chip đỏ "Bạn đang không trong phạm vi chấm công" + thẻ Vị trí hiện tại của bạn (địa chỉ thực · khoảng cách · độ chính xác GPS) + dòng nhắc xám "Bạn cách <địa điểm> <khoảng cách> — vượt quá bán kính cho phép (<bán kính>). Hãy di chuyển đến gần rồi bấm Thử lại." + 1 nút Thử lại rộng cả hàng.
✾ Bỏ hẳn: khối hướng dẫn vàng "Chưa mở chấm công đi công tác…" và nút Đổi trạng thái làm việc. Lý do: người không đi công tác đứng ngoài vùng chỉ cần biết mình đang ở xa và đi lại gần — không cần bị mời vào một luồng nghiệp vụ không phải của mình. Ai thực sự đi công tác thì đổi trạng thái ở màn Trạng thái làm việc (vào từ Trang chủ) rồi quay lại; lúc đó nút Chấm công đi công tác hiện ra ngay mà không phải đo lại vị trí. (Sửa 27/08/2026 — bỏ khối vàng và nút Đổi trạng thái làm việc; giữ nguyên màn ngoài phạm vi như bản cũ.)
Lần lượt để trạng thái Văn phòng · Ra ngoài · Nghỉ · công trường: đều không có nút chấm công đi công tác, không khối vàng, không nút Đổi trạng thái — chỉ Thử lại
FR-VT-24 ✥ Bảng xác nhận (§4.2) hiển thị thêm dải nơi công tác — "Trạng thái làm việc: Công tác · <nơi công tác>" — lấy thẳng từ trạng thái đang khai, không có ô nhập lại (BR-VT-20 giữ nguyên: màn chấm công không bắt nhập gì). Chưa khai nơi đến → hiển thị "Chưa khai nơi đến". Đổi nơi công tác ở màn trạng thái → mở lại bảng xác nhận: dải đổi theo

‡ FR-VT-05 · FR-VT-06 · FR-VT-09 · FR-VT-10 — sửa theo quyết định BA ngày 04/08/2026 (bỏ lối tắt giải trình tại màn chấm công; gắn lý do Đi công tác vào bản ghi).

✱ BR-VT-12 — sửa ở bản 0.7 (quyết định BA 04/08/2026): ngày Vắng có đơn chưa được duyệt → vẫn bị phạt (đảo luật cũ, đóng điểm mở VT-6).

✾ FR-VT-03 · FR-VT-05 · FR-VT-06 · FR-VT-07 · FR-VT-09 · FR-VT-12 · FR-VT-18 · BR-VT-11 — sửa ở bản 0.9 (quyết định BA 05/08/2026): ① nút ngoài phạm vi đổi nhãn "Chấm công tại đây" → "Chấm công đi công tác"; ② dòng nhắc trong bảng xác nhận rút gọn thành "Bản ghi chấm công này là dự tính cần quản lý và nhân sự duyệt đơn."; ③ bỏ khối lý do ở màn biên nhận (chống lặp); ④ BỎ cơ chế "gửi đơn Đi công tác → hệ thống tự điền giờ vào / giờ ra" của bản 0.7. Luật mới: Giờ vào / Giờ ra chỉ hiện khi đơn Đi công tác Đã duyệt VÀ ngày đó đã phát sinh chấm công; đơn giải trình không sinh ra dữ liệu chấm công.

✥ FR-VT-03 sửa · FR-VT-23 · FR-VT-24 bổ sung — bản 1.1 (quyết định BA 20/08/2026): nút Chấm công đi công tác chỉ mở khi trạng thái làm việc là Công tác (§4.0 · BR-VT-28).   ✿ FR-VT-03 — viết lại ở bản 1.5 (quyết định BA 03/09/2026): gộp lại thành một câu duy nhất "ngoài phạm vi → ẩn nút chính, thay bằng 2 nút" rồi nêu điều kiện trạng thái thành ý riêng, và ghi rõ mốc lấy trạng thái là thời điểm bấm Chấm công (không phải trạng thái đầu ngày — BR-02).   ❂ FR-VT-03 · FR-VT-04 sửa — bản 1.7 (quyết định BA 05/09/2026): nhánh Công tác bỏ nút Thử lại, chỉ còn một nút Chấm công đi công tác rộng cả hàng. Lý do: nhân viên đang công tác thì đo lại vị trí không thể đưa họ vào vùng, hai nút cạnh nhau chỉ làm mờ thao tác cần làm. Nhánh trạng thái khác giữ nguyên một nút Thử lại (FR-VT-23).

4.4 Business Rule

Mã Tên Nội dung
BR-VT-01 ‡ Ngoài phạm vi không còn chặn cứng Vị trí ngoài bán kính cho phép → hệ thống không khoá hẳn nghiệp vụ như SRS 0.8 §4.7 mục 3, mà cho chấm công tại chỗ với lý do Đi công tác. Nút Chấm công thường vẫn ẩn hẳn — bắt buộc đi qua bảng xác nhận (§4.2).
BR-VT-02 Chỉ hiện khi thật sự ngoài phạm vi Hai nút chỉ xuất hiện khi phép đo tại thời điểm bấm cho kết quả ngoài mọi vùng chấm công gán cho nhân viên đó. Trong vùng → không hiện. Từ bản 1.1, đây mới là điều kiện ① — còn phải đủ BR-VT-28 và BR-VT-22 (§4.0).
BR-VT-28 ✥ Trạng thái làm việc Công tác là cổng mở luồng chấm công đi công tác Nút Chấm công đi công tác chỉ hiện khi trạng thái làm việc hiện hành của nhân viên là Công tác (§2.1). Mọi trạng thái khác — Văn phòng · các công trường · Ra ngoài · Nghỉ — đứng ngoài phạm vi thì chỉ có Thử lại — ✾ màn giữ nguyên như bản cũ, không khối hướng dẫn, không lối tắt đổi trạng thái (FR-VT-23); không có đường nào khác vào luồng này. Trạng thái được lấy tại thời điểm bấm Chấm công; nhân viên đổi trạng thái xong quay lại thì nút hiện ngay. Nhân viên đang Công tác mà đổi sang trạng thái khác giữa ngày → nút đóng lại, các bản ghi đã chấm giữ nguyên (không xoá, vẫn ghép đơn theo BR-VT-09). (Chốt 20/08/2026 — bản 1.1)
BR-VT-29 ✥ Cổng trạng thái không thay cho đơn đã duyệt Đã khai Công tác không làm bản ghi thành hợp lệ: điều kiện tính công vẫn là đơn Đi công tác Đã duyệt (BR-VT-05 · BR-VT-09) và ngày chưa có đơn duyệt vẫn ghi Vắng + phạt (BR-VT-12 · BR-VT-27). Trạng thái Công tác chỉ là cửa vào thao tác, không phải căn cứ duyệt công. (Chốt 20/08/2026 — bản 1.1)
BR-VT-03 ‡ Chấm công không tự sinh đơn, đơn không tự sinh chấm công Chấm công ngoài phạm vi chỉ tạo bản ghi chấm công — hệ thống không tự tạo đơn Đi công tác thay nhân viên. Ngược lại, đơn Đi công tác đã duyệt không tự sinh bản ghi chấm công. Hai thứ ghép với nhau theo ngày khi tính công (BR-VT-09). (Chốt 04/08/2026 — bỏ lối tắt tạo đơn tại màn chấm công.)
BR-VT-04 ✾ Chấm công đi công tác vẫn phải nhận diện khuôn mặt Ngoài phạm vi không làm giảm yêu cầu xác thực: vẫn bắt buộc khuôn mặt + liveness, và ghi kèm ảnh khuôn mặt · toạ độ · giờ · độ khớp như bản ghi thường (SRS 0.8 §4.8).
BR-VT-05 ‡ Bản ghi ngoài phạm vi = ghi nhận có điều kiện Bản ghi được lưu với cờ ngoài phạm vi + lý do Đi công tác + khoảng cách lệch + địa chỉ thực, ở trạng thái chờ chấp thuận. Điều kiện chấp thuận là có đơn Đi công tác ở trạng thái Đã duyệt (đủ 2 bên) phủ ngày đó — không phải một thao tác xác nhận riêng của HR. Chưa có đơn duyệt → bản ghi không được coi là chấm công hợp lệ, ngày ghi Vắng. (Chốt 04/08/2026 — đóng VT-1 · VT-2 ở §6.3.)
BR-VT-06 Vị trí ghi nhận là vị trí thực, không phải địa điểm gán Với bản ghi ngoài phạm vi, hệ thống lưu & hiển thị toạ độ + địa chỉ nơi nhân viên đang đứng, không gán về tên vị trí chấm công gần nhất.
BR-VT-07 ✥ Không tự sinh trạng thái làm việc Chọn Chấm công đi công tác không tự đổi trạng thái làm việc (§2) sang Công tác — trạng thái vẫn do nhân viên tự khai hoặc do đơn đã duyệt sinh ra (BR-GT-07 · BR-13). Từ bản 1.1 luật này gần như không còn tình huống áp dụng: muốn bấm được nút thì trạng thái đã phải là Công tác rồi (BR-VT-28) — giữ lại để khẳng định chiều chấm công → trạng thái vẫn không tự động.
BR-VT-08 Vị trí giả mạo vẫn chặn tuyệt đối Phát hiện mock location → không cho chấm công tại chỗ, chặn như SRS 0.8 §4.7 mục 2. Lối đi này chỉ dành cho trường hợp vị trí thật nhưng ngoài vùng.
BR-VT-09 ‡ Ghép bản ghi chấm công với đơn Đi công tác theo ngày Khi tính công một ngày, hệ thống ghép bản ghi chấm công ngoài phạm vi (lý do Đi công tác) với đơn Đi công tác phủ ngày đó: đơn Đã duyệt → bản ghi được chấp thuận, tính công theo BR-VT-10; đơn Chờ duyệt / Từ chối / không có đơn → bản ghi không được chấp thuận, ngày ghi Vắng, công ngày = 0. (Chốt 04/08/2026)
BR-VT-10 ‡✾ Công ngày của ngày Đi công tác Đơn Đã duyệt: (a) ngày đó có bản ghi chấm công → công tính theo giờ chấm thực tế so với định mức ngày của khối — ✸ chốt bản 1.2: 8 GIỜ LÀM THỰC cho cả hai khối (BR-CC-04 bản 0.3), chỉ cộng thêm khung nghỉ trưa khi một phiên bao trọn khung nghỉ trưa (mẫu 1,5g → 9,5g — §4.7.1); bỏ cặp số cũ VP 8g30 · CT 9g30 — tối đa 1 công — đủ giờ thì nhãn Đủ định mức, thiếu giờ thì nhãn Thiếu định mức / Thiếu giờ công; giờ khai trong đơn KHÔNG cắt phần giờ đã chấm (BR-VT-31); (b) ngày đó không có bản ghi chấm công (và ngày đã diễn ra) → công tính theo quy đổi buổi trong đơn (§3.2.2 · BR-GT-10). (Chốt 04/08/2026)
Bổ sung bản 0.9 ✾: nhánh (b) chỉ áp cho ngày đã diễn ra. Ngày tương lai đã duyệt mà chưa chấm công → chưa tính công, hiển thị như ngày Vắng với cả 3 ô , không phạt (§4.5.1).
Bổ sung bản 0.6: luật này áp cho ngày mà mọi bản ghi đều ngoài phạm vi. Ngày hỗn hợp (có cả phiên trong phạm vi) tính theo BR-VT-18 — cộng dồn giờ hai nơi, trần 1 công.
BR-VT-11 ✾ Chấm công là bằng chứng có mặt; giờ chỉ công bố khi đơn đã duyệt Bản ghi chấm công (giờ · toạ độ · ảnh khuôn mặt) luôn được lưu ngay khi nhân viên chấm và tra được ở hồ sơ bản ghi chấm công để làm bằng chứng có mặt khi duyệt đơn. Nhưng ở chi tiết công của ngày, 3 ô Giờ vào / Giờ ra chỉ được hiển thị khi đơn Đi công tác Đã duyệt VÀ ngày đó đã phát sinh chấm công (FR-VT-12). ✥ Bổ sung bản 1.1: giờ đã chấm vẫn được cho nhân viên thấy ở khối Giải trình trong ngày dưới dạng dòng Vào · Ra kèm chú thích "chưa được tính công" (FR-VT-25) — hai chỗ hiển thị mang hai ý nghĩa khác nhau: 3 ô = giờ được công nhận, khối giải trình = giờ đã chấm. Lý do: khi đơn chưa duyệt / bị từ chối, giờ chấm chưa được công nhận là giờ làm việc — hiện lên sẽ khiến người xem tưởng ngày đó đã có công. Hệ thống không sinh dữ liệu chấm công từ đơn giải trình — đơn là căn cứ duyệt công, không phải nguồn tạo giờ vào / giờ ra; đơn Đã duyệt mà không chấm công thì 2 ô giờ vẫn —, công tính theo quy đổi buổi trong đơn (BR-VT-10b). Công ngày vẫn 0 và nhãn ngày vẫn Vắng cho tới khi đơn Đã duyệt; đơn chuyển Đã duyệt → ngày tự tính lại công và giờ hiện ra, không cần chấm lại. (Sửa 05/08/2026 — bản 0.9: bỏ cơ chế tự đổ giờ khi gửi đơn của bản 0.7)
BR-VT-12 ✱ Ngày Vắng do đơn chưa được duyệt → vẫn bị phạt Mọi ngày ghi Vắng mà đơn giải trình kèm theo chưa được duyệt đều bị tính tiền phạt vắng không phép — áp chung cho cả 3 loại đơn: Nghỉ phép · Nghỉ không lương · Đi công tác. Chưa được duyệt gồm chưa giải trình · chờ duyệt · từ chối; chỉ đơn Đã duyệt đủ 2 bên mới miễn phạt. Đơn đang chờ duyệt mà được duyệt sau → khoản phạt của ngày đó được gỡ khi hệ thống tính lại công. Mức phạt lấy theo phạt vắng không phép đang áp (BR cũ; mockup đang để 1.200.000 đ/ngày).
Phạm vi tính phạt theo mốc thời gian: ngày tương lai (chưa diễn ra) không tính phạt dù đơn đang Chờ duyệt; ngày hôm nay và ngày đã qua thì tính — khoản phạt là tạm tính, được gỡ ngay khi đơn chuyển Đã duyệt. (Chốt 04/08/2026 — bản 0.7, đảo lại luật của bản 0.5 và đóng điểm mở VT-6.)
BR-VT-26 ✦ Tách riêng LUỒNG CHẤM CÔNG ĐI CÔNG TÁC khỏi luồng chấm công thường Hai luồng không trộn vào nhau ở bất kỳ màn nào:
· Luồng thường — chấm trong phạm vi vị trí làm việc: giờ được chấp thuận ngay, vào Tổng giờ công, hiển thị dưới tiêu đề “Phiên chấm công”.
· Luồng đi công tác — chấm ngoài phạm vi với lý do Đi công tác: giờ ở trạng thái chờ chấp thuận (BR-VT-05), và chỉ vào công khi đơn Đã duyệt. ✾ Bỏ tiêu đề riêng “Chấm công tại nơi công tác” (20/08/2026) — bảng phiên không có đầu đề ở mọi trường hợp; ngày đi công tác nhận ra qua thẻ Đi công tác ở khối giải trình.
· ✾ Ngày chỉ có chấm ngoài phạm vi mà đơn chưa duyệt → chi tiết ngày hiển thị y như ngày Vắng không có bản ghi chấm công nào: nhãn Vắng, 3 ô — / 0, không khối phiên chấm công (BR-VT-11) và không dòng tóm tắt nào. Dòng “Chấm công tại nơi công tác — đơn chưa được duyệt” của bản 19/08/2026 đã bỏ (20/08/2026): giờ chấm chưa được công nhận thì ngày phải trông như ngày chưa có công. Giờ đã chấm vẫn cho nhân viên thấy ở thẻ Đi công tác trong khối giải trình (FR-VT-25) — dòng Vào HH:mm · Ra HH:mm, kèm nút Giải trình ngay khi chưa có đơn (FR-VT-26).
· Ngày đơn Đã duyệt: giờ được công bố và hiện thành bảng phiên bình thường, không có đầu đề riêng nào phía trên.
BR-VT-27 ✦ Đơn Đi công tác chưa được duyệt → VẮNG + PHẠT, kể cả khi đã chấm công đủ giờ Khẳng định lại và giữ nguyên BR-VT-12 sau khi rà soát: ngày mà toàn bộ bản ghi đều ngoài phạm vi, đơn ở trạng thái chưa tạo đơn · Chờ duyệt · Từ chối, và là ngày hôm nay hoặc ngày đã qua:
· Nhãn ngày = Vắng (ô lịch xám), công = 0, hai ô Giờ vào · Giờ ra để —.
· Bị phạt vắng không phép (mẫu 1.200.000 đ/ngày) — khoản phạt là tạm tính, tự gỡ khi đơn chuyển Đã duyệt.
· Ngày đó vẫn hiện trong thống kê “Ngày nghỉ & vắng bị phạt”, dưới nhãn Vắng (không gọi là “ngày nghỉ”, cũng không gọi là “Đi công tác”), bấm vào mở đơn đi công tác tương ứng.
· Ngày tương lai → không phạt (chưa diễn ra).
· Lý do giữ luật: giờ chấm ngoài phạm vi chưa phải giờ làm việc được công nhận — đơn đã duyệt mới là căn cứ. Khác với BR-VT-17 (ngày thiếu mốc chấm trong phạm vi — không ghi Vắng, không phạt) và khác BR-VT-24 (ngày hỗn hợp — vẫn có công cơ sở, không ghi Vắng). (Chốt 19/08/2026.)
BR-VT-13 ‡ Đơn không chứa dữ liệu chấm công Chi tiết đơn giải trình chỉ chứa các trường do nhân viên khai trên form (§3.2.1) — không nhắc lại giờ vào / giờ ra / khoảng cách lệch / công ngày. Các số liệu đó thuộc chi tiết công của ngày (§4.5) và đã hiển thị ngay bên ngoài đơn; lặp lại trong đơn gây hai nguồn số liệu dễ lệch nhau. Ngược lại, ✥ bản 1.1 làm rõ chiều còn lại: khối sự kiện của ngày KHÔNG hiển thị Nơi công tác nữa — nơi công tác là trường của đơn, chỉ xem trong Xem đơn ›. Thẻ sự kiện chỉ giữ mốc giờ Vào – Ra (FR-VT-25) vì đó là dữ liệu chấm công, không phải nội dung đơn. Nhờ vậy mỗi số liệu chỉ có đúng một chỗ hiển thị. (Chốt 04/08/2026; viết lại 20/08/2026)
BR-VT-20 ✽✾ Chấm công đi công tác không đòi thêm căn cứ nào khác Ngoài khuôn mặt + liveness (BR-VT-04), hệ thống không bắt nhập lý do và không bắt chụp ảnh hiện trường. Bảng xác nhận (§4.2) chỉ có 1 hành động xác nhận, không có ô nhập. Căn cứ để duyệt / từ chối là đơn Đi công tác (nội dung công tác nhân viên khai trong đơn), không phải dữ liệu nhập tại màn chấm công. (Chốt 05/08/2026 — đóng VT-3, bản 0.8)
BR-VT-21 ✽ Không giới hạn số lần chấm ngoài phạm vi Hệ thống không đếm, không cảnh báo, không khoá sau N lần chấm ngoài phạm vi trong tháng. Rủi ro lạm dụng chặn ở khâu duyệt đơn: không có đơn Đi công tác Đã duyệt thì bản ghi không thành công (BR-VT-09) — chấm bao nhiêu lần cũng vậy. (Chốt 05/08/2026 — đóng VT-4, bản 0.8)
BR-VT-22 ✽✾ Khoảng cách tối đa — do Nhân sự cấu hình Chấm công đi công tác có ngưỡng khoảng cách tối đa so với vị trí chấm công gần nhất. Ngưỡng là tham số cấu hình do Nhân sự đặt trên web HCNS — không hardcode trong app, đổi được mà không cần phát hành bản mới. Đo được trong ngưỡng → hiện nút Chấm công đi công tác như FR-VT-03; vượt ngưỡng → không hiện nút đó, chỉ còn Thử lại kèm dòng "Bạn ở quá xa mọi vị trí chấm công — liên hệ Nhân sự". (Chốt 05/08/2026 — đóng VT-5, bản 0.8. Giá trị mặc định của ngưỡng do Nhân sự đặt khi cấu hình hệ thống — tài liệu không ấn định con số.)
BR-VT-30 ✸ Đơn Đi công tác Đã duyệt KHÔNG tự điền dữ liệu chấm công của ngày Chi tiết công của ngày chỉ được điền từ bản ghi chấm công thật, không suy ra từ đơn:
· Đơn Đã duyệt và ngày đã phát sinh chấm công → 3 ô Giờ vào · Giờ ra · Công ngày điền theo giờ đã chấm (BR-VT-10a · FR-VT-12).
· Đơn Đã duyệt nhưng ngày chưa phát sinh chấm công — điển hình là ngày tương lai đăng ký trước (vd 26/06) → KHÔNG tự động điền bất kỳ giờ nào từ đơn: 3 ô để —, nhãn ngày Vắng, không phạt (ngày chưa diễn ra). Hệ thống không lấy khung ca chuẩn của khối, cũng không lấy từ giờ – đến giờ khai trong đơn để điền vào 3 ô.
· Quy đổi buổi trong đơn (BR-VT-10b) chỉ cho ra con số công của ngày đã diễn ra mà không có lần chấm nào — vẫn không kèm giờ vào / giờ ra.
Lý do: giờ vào / giờ ra là dữ liệu chấm công (kèm toạ độ · ảnh khuôn mặt làm bằng chứng có mặt). Điền giờ từ đơn sẽ sinh ra dữ liệu chấm công không có bằng chứng và khiến người xem tưởng nhân viên đã có mặt trong khi ngày còn chưa diễn ra. (BA chốt 20/08/2026 — bản 1.2; khẳng định lại FR-VT-12 · BR-VT-11 của bản 0.9, bác phương án tự điền giờ theo đơn.)
BR-VT-31 ✸ Công ngày Đi công tác lấy theo GIỜ CHẤM THỰC TẾ — KHÔNG cắt theo giờ đăng ký trong đơn Áp cả hai khối (Văn phòng · Công trường). Ngày có đơn Đi công tác Đã duyệt và đã phát sinh chấm công:
· Căn cứ tính công là tổng giờ chấm thực tế của ngày (các phiên đã đóng — BR-VT-23), đem so định mức ngày của khối (BR-CC-04 · BR-CTP-03): đủ định mức → 1 công, nhãn Đủ định mức; thiếu → công lẻ = Tổng ÷ Định mức, nhãn Thiếu định mức, trần 1 công (BR-VT-10a).
· Khoảng giờ / buổi khai trong đơn (Từ giờ – Đến giờ hoặc Từ buổi – Đến buổi, §3.2.1) KHÔNG được dùng để cắt, giới hạn hay đối chiếu với giờ chấm: chấm ngoài khoảng khai vẫn tính đủ; chấm ít hơn khoảng khai không được bù cho đủ. Đơn chỉ trả lời "ngày này có được đi công tác hay không" — là căn cứ duyệt, không phải nguồn giờ (BR-VT-13 · BR-VT-30).
· Khác hẳn loại Khác: loại đó hợp nhất (union) khoảng giờ khai với phiên đã chấm và VP còn bị cắt theo ca chuẩn (BR-GTK-06 · BR-GTK-10 · §3.6.5). Ngày Đi công tác không áp cơ chế đó — không có bảng đối chiếu lệch giờ.
· Văn phòng — không xét mốc ca 08:00 / 17:30 cho ngày đi công tác: không sinh nhãn Đi muộn · Về sớm, chỉ có Đủ định mức / Thiếu định mức; nghỉ trưa vẫn trừ theo BR-CC-04 khi nằm trong phiên.
· Ngày không phát sinh lần chấm nào thì mới quay về quy đổi buổi trong đơn (BR-VT-10b) — nhánh này giữ nguyên.
Lý do: giờ khai trong đơn là dự kiến trước khi đi, thực tế đi công tác co giãn theo công việc; lấy giờ khai cắt công sẽ phạt oan người làm đủ giờ nhưng lệch khung khai. Bằng chứng có mặt vẫn đủ chặt vì mỗi lần chấm đều kèm toạ độ + khuôn mặt (BR-VT-04 · BR-VT-06). (BA chốt 20/08/2026 — bản 1.2)
BR-VT-32 ✿ Bảng xác nhận chấm công đi công tác cũng chỉ mở khi trạng thái = Công tác Cổng trạng thái của BR-VT-28 không dừng ở việc ẩn nút — nó áp cho cả bước mở bảng xác nhận (§4.1 bước ③):
· Kiểm lại trạng thái ngay tại thời điểm bấm nút. Trạng thái ≠ Công tác → không mở bảng, quay về màn ngoài phạm vi bản cũ (FR-VT-23) kèm dòng nhắc "Trạng thái làm việc của bạn không còn là Công tác — hãy khai lại trạng thái rồi thử lại."
· Kiểm lần nữa khi bấm Xác nhận chấm công (bước ④): trạng thái đã đổi trong lúc bảng đang mở (đổi ở máy khác, hoặc hệ thống tự đổi theo đơn — BR-GT-07) → đóng bảng, không sang nhận diện khuôn mặt, không ghi bản ghi nào.
· Không có đường vòng: không mở được bảng bằng liên kết trực tiếp, nút Back, khôi phục phiên hay mở lại app. Bảng không phải một màn độc lập — nó chỉ là bước tiếp của nút đã qua cổng.
· Trạng thái đổi sau khi bản ghi đã lưu thì không hồi tố: bản ghi giữ nguyên, vẫn ghép đơn theo BR-VT-09 (BR-VT-28).
Lý do: nút và bảng là hai lần chạm khác nhau, giữa hai lần đó trạng thái có thể đã đổi. Chỉ chặn ở chỗ hiện nút thì vẫn lọt bản ghi ngoài phạm vi của người không đi công tác — đúng thứ §4.0 muốn loại bỏ. (BA chốt 03/09/2026 — bản 1.5)

‡ BR-VT-01 · BR-VT-03 · BR-VT-05 · BR-VT-08 → BR-VT-13 — bổ sung / sửa theo quyết định của BA ngày 04/08/2026.   ✱ BR-VT-12 — sửa tiếp ở bản 0.7 (xem ghi chú §4.3); luật phạt này giữ nguyên ở bản 0.9, BA xác nhận lại 05/08/2026.   ✽ BR-VT-20 → BR-VT-22 — bổ sung ở bản 0.8 (quyết định BA 05/08/2026), đóng VT-3 · VT-4 · VT-5.   ✾ BR-VT-10 — bản 0.9: nhánh quy đổi buổi chỉ áp cho ngày đã diễn ra; ngày tương lai đã duyệt mà chưa chấm công thì hiển thị như ngày Vắng, chưa tính công, không phạt.   ✾ BR-VT-04 · BR-VT-07 · BR-VT-20 · BR-VT-22 — bản 0.9 (05/08/2026): chỉ đổi tên nút Chấm công tại đây → Chấm công đi công tác, nội dung luật giữ nguyên.   ✥ BR-VT-28 · BR-VT-29 bổ sung · BR-VT-02 · BR-VT-07 ghi chú lại — bản 1.1 (quyết định BA 20/08/2026): trạng thái làm việc Công tác là cổng mở nút Chấm công đi công tác (§4.0).   ✸ BR-VT-30 — bổ sung ở bản 1.2 (quyết định BA 20/08/2026): đơn Đã duyệt mà chưa phát sinh chấm công thì không tự điền giờ vào / giờ ra / công ngày — giữ nguyên luật FR-VT-12 · BR-VT-11.   ✸ BR-VT-31 — bổ sung ở bản 1.2 (quyết định BA 20/08/2026): ngày Đi công tác đã chấm công thì công lấy theo giờ chấm thực tế so định mức khối, không cắt / đối chiếu theo giờ đăng ký trong đơn — đủ định mức là đủ công, áp cả hai khối.   ✿ BR-VT-32 — bổ sung ở bản 1.5 (quyết định BA 03/09/2026): cổng trạng thái Công tác áp cho cả bảng xác nhận ở §4.1 bước ③, kiểm lại tại thời điểm bấm nút và tại thời điểm bấm Xác nhận — mở rộng BR-VT-28 vốn chỉ nói tới việc hiện nút.

Mockup cần dựng bổ sung theo BR-VT-22

✿ (cập nhật 03/09/2026) Màn kiem-tra-vi-tri-a.html đã dựng đúng cổng trạng thái — nút Chấm công đi công tác chỉ hiện khi trạng thái làm việc là Công tác (BR-VT-28 · BR-VT-32); câu cũ "luôn hiện nút khi ngoài phạm vi" là mô tả của bản 0.8, đã hết hiệu lực. Còn chưa dựng: trạng thái vượt ngưỡng khoảng cách của BR-VT-22 — khi đó chỉ còn Thử lại + dòng "Bạn ở quá xa mọi vị trí chấm công — liên hệ Nhân sự", kể cả đang ở trạng thái Công tác. Cần dựng bổ sung trước khi test giao diện. Ngưỡng cũng cần 1 trường cấu hình ở màn quản lý địa điểm chấm công trên web HCNS.

§4 đã chốt hết điểm mở

5 điểm còn lại của §4 — VT-3 · VT-4 · VT-5 (§4.4) và VT-7 · VT-8 (§4.6) — đã chốt 05/08/2026, xem BR-VT-20 → BR-VT-24 và bảng truy vết §6.3. (VT-1 · VT-2 chốt 04/08/2026 — xem BR-VT-05; VT-6 chốt 04/08/2026 — vẫn phạt, xem BR-VT-12.)

4.5 Chi tiết công của ngày có đơn Đi công tác

Màn: Công tháng — cong-thang.html (khối Văn phòng) · cong-thang-cong-truong.html (khối Công trường). Dùng chung một màn cho 2 vai trò: nhân viên mở từ Cá nhân → Công tháng; nhân sự mở từ nhan-su.html → cùng màn kèm ?role=hr (chỉ đọc — ẩn nút Giải trình / Đăng ký và lối vào Đơn của tôi).

Bấm một ngày trên lịch → mở khối chi tiết ngày gồm: Giờ vào · Giờ ra · Công ngày, nhãn ngày (badge) và danh sách sự kiện / đơn giải trình của ngày đó kèm trạng thái đơn.

4.5.1 Ma trận hiển thị — 6 tổ hợp

Phạm vi của ma trận (bản 0.6)

6 tổ hợp dưới đây chỉ áp cho ngày mà toàn bộ bản ghi chấm công đều ngoài phạm vi — tức nhân viên không chấm công lần nào tại vị trí làm việc trong ngày đó. Ngày hỗn hợp (có ít nhất một phiên trong phạm vi) tính & hiển thị theo §4.6.3 — vẫn có công cơ sở, không ghi Vắng.

Trường hợpNhãn ngày (badge)Công ngàyKhối đơn trong ngày
⓪ ✥ CHƯA có đơn Đi công tác — nhân viên đã đổi trạng thái làm việc sang Công tác và đã chấm công đi công tác Vắng — ô lịch màu xám 0 Đi công tác · chip Chưa giải trình (đỏ) · dòng giờ Vào HH:mm · Ra HH:mm theo giờ đã chấm · nút Giải trình ngay. Không hiện nơi công tác / khoảng cách lệch
① Có đơn Đi công tác Chờ duyệt (đã hoặc chưa chấm công) Vắng — ô lịch màu xám 0 Đi công tác · chip Chờ duyệt (vàng) · dòng giờ Vào · Ra theo giờ đã chấm (nếu có chấm công) · nút Xem đơn ›
② Có đơn Đi công tác Từ chối Vắng — ô lịch màu xám 0 Đi công tác · chip Từ chối (đỏ) · dòng giờ Vào · Ra theo giờ đã chấm (nếu có chấm công) · nút Xem đơn ›
③ Đơn Đi công tác Đã duyệt + chấm công đủ giờ Đủ định mức — ô lịch màu xanh 1 công Đi công tác · chip Đã duyệt (xanh) · nút Xem đơn › (giờ đã hiện ở 3 ô đầu màn)
④ Đơn Đi công tác Đã duyệt + chấm công thiếu giờ Thiếu định mức (CT: Thiếu giờ công) — ô lịch màu vàng < 1 công, theo giờ thực tế Như ③, chỉ khác công ngày và nhãn
⑤ ✸ Đơn Đi công tác Đã duyệt nhưng CHƯA phát sinh chấm công — điển hình là ngày tương lai đăng ký trước (vd 26/06) Vắng — ô lịch màu xám — (ngày tương lai) · quy đổi buổi trong đơn nếu ngày đã diễn ra mà không chấm lần nào Đi công tác · chip Đã duyệt (xanh) · nút Xem đơn ›. 3 ô đầu màn để — — không tự điền giờ từ đơn (BR-VT-30); không phạt

Bảng quyết định của ngày có đơn Đi công tác — Giờ vào · Giờ ra theo hai điều kiện AND (FR-VT-12); tiền phạt vắng theo BR-VT-12:

Trạng thái đơn Đã phát sinh chấm công? Giờ vào · Giờ ra (3 ô đầu màn) Công ngày Phạt vắng không phép
Chưa có đơn ✥ có — (giờ hiện trong khối giải trình — FR-VT-25) 0 (Vắng) Có — nếu ngày là hôm nay / quá khứ
Chưa có đơn ✥ không — 0 (Vắng) Có — như trên
Chờ duyệt có — 0 (Vắng) Có — nếu ngày là hôm nay / quá khứ; ngày tương lai thì không
Chờ duyệt không — 0 (Vắng) Có — như trên
Từ chối có — 0 (Vắng) Có — nếu ngày là hôm nay / quá khứ
Từ chối không — 0 (Vắng) Có — như trên
Đã duyệt không — ngày đã diễn ra — theo quy đổi buổi trong đơn (BR-VT-10b) Không
Đã duyệt không — ngày tương lai — — — nhãn ngày Vắng Không — ngày chưa diễn ra
Đã duyệt có hiện đúng giờ đã chấm theo giờ chấm thực tế, tối đa 1 công (BR-VT-10a) — không cắt theo giờ khai trong đơn (BR-VT-31) Không

Nói gọn: chỉ hàng cuối cùng mới hiện giờ ở 3 ô đầu màn. Nhãn Đủ định mức / Thiếu định mức cũng chỉ xuất hiện ở hai hàng Đã duyệt của ngày đã diễn ra — các trường hợp còn lại mang nhãn Vắng.

Giờ đã chấm vẫn được cho nhân viên thấy — nhưng ở khối giải trình, không phải ở 3 ô ✥

Mới ở bản 1.1 (20/08/2026). Ngày mà đơn chưa được duyệt (chưa có đơn · chờ duyệt · từ chối) mà nhân viên đã chấm công đi công tác: 3 ô Giờ vào · Giờ ra vẫn để — (BR-VT-11 — giờ chưa được công nhận là giờ làm việc), nhưng khối Giải trình trong ngày hiện thẳng dòng Vào HH:mm · Ra HH:mm theo giờ đã chấm (FR-VT-25).

Lý do: trước đây nhân viên không thấy giờ mình đã chấm ở bất kỳ đâu trên màn Công tháng, nên không biết đã chấm đủ vào–ra hay chưa trước khi đi giải trình. Hai chỗ hiển thị có ý nghĩa khác nhau: 3 ô = giờ được công nhận (căn cứ tính công), khối giải trình = giờ đã chấm (bằng chứng có mặt, chưa tính công) — và người xem phân biệt được nhờ chip trạng thái đơn + nhãn ngày Vắng + công ngày 0 ngay trên cùng thẻ — không cần thêm câu chú thích nào.

Ngày tương lai đã duyệt nhưng chưa chấm công — hiển thị như ngày Vắng

Đơn Đi công tác Đã duyệt cho một ngày chưa diễn ra: ngày đó chưa có căn cứ nào để tính công, nên hiển thị y như một ngày Vắng bình thường — nhãn Vắng, ô lịch xám, và cả ba ô Giờ vào · Giờ ra · Công ngày đều để —.

Nhưng không tính tiền phạt, vì ngày ở tương lai (BR-VT-12). Cũng không hiện dòng cảnh báo "Chưa chốt công — thiếu lần chấm": ngày chưa tới thì không có gì để bổ sung.

Quy đổi buổi trong đơn (BR-VT-10b) chỉ áp cho ngày đã diễn ra — tới ngày đó, nếu nhân viên chấm công thì tính theo giờ thực tế, nếu không chấm thì mới lấy quy đổi buổi. (Chốt 05/08/2026 — bản 0.9)

✸ BA xác nhận lại 20/08/2026 (bản 1.2) — đúng như màn hình hiện tại của ngày 26/06: đơn Đi công tác của ngày này Đã duyệt, nhưng vì chưa phát sinh chấm công nên chi tiết ngày vẫn là Vắng với — · — · —. Hệ thống chỉ fill dữ liệu chấm công cho ngày đã có bản ghi chấm công thật; đơn đã duyệt mà chưa chấm công thì không tự điền giờ vào / giờ ra / công ngày (BR-VT-30).

Phạt vắng của ngày Đi công tác — chốt 05/08/2026

Đơn Đi công tác Chờ duyệt hoặc Từ chối mà ngày đó là hôm nay hoặc ngày đã qua → ngày ghi Vắng và vẫn bị tính tiền phạt vắng không phép, kể cả khi nhân viên đã chấm công đầy đủ. Khoản phạt là tạm tính: đơn chuyển Đã duyệt → hệ thống tự gỡ phạt và tính lại công, nhân viên không phải làm gì thêm.

Ngoại lệ duy nhất: ngày tương lai (chưa diễn ra) không tính phạt dù đơn đang Chờ duyệt — đăng ký đi công tác trước ngày đi thì không bị phạt oan.

Chi tiết & mã truy vết: BR-VT-12.

Điểm mấu chốt của ① và ②

Đã chấm công không có nghĩa là có công. Ngày 19/06 trong mockup có đủ giờ chấm (07:55 → 17:32) nhưng đơn còn Chờ duyệt → ngày vẫn ghi Vắng, công 0, và 2 ô giờ để —. Đây là khác biệt lớn nhất so với bản ghi chấm công trong phạm vi.

Hai điều chỉnh của ① và ②:

  • Giờ vào / Giờ ra để — ở cả ① và ② — dù nhân viên đã chấm công thật. Giờ chỉ được công bố khi đơn Đã duyệt và ngày đó đã phát sinh chấm công (FR-VT-12 · BR-VT-11). Bản ghi chấm công vẫn được lưu nguyên vẹn làm bằng chứng có mặt, chỉ là chưa hiện ra ở chi tiết công của ngày.
  • Ngày Vắng của ① và ② bị tính tiền phạt vắng không phép như ngày nghỉ không được duyệt (BR-VT-12) — đơn được duyệt sau thì gỡ phạt và giờ hiện ra.

4.5.2 Yêu cầu chức năng

Mã Yêu cầu Ghi chú kiểm thử
FR-VT-11 Nhãn ngày theo trạng thái đơn: ngày có đơn Đi công tác hiển thị nhãn theo §4.5.1 — Vắng (chờ duyệt / từ chối) hoặc Đủ định mức / Thiếu định mức (đã duyệt). Đối chiếu màu ô lịch: xám / xanh / vàng
FR-VT-12 ✾ Giờ vào / Giờ ra chỉ hiện khi ĐỦ CẢ HAI điều kiện — ① đơn Đi công tác của ngày ở trạng thái Đã duyệt, và ② ngày đó đã phát sinh chấm công (có bản ghi, kể cả bản ghi ngoài phạm vi). Thiếu bất kỳ điều kiện nào → 2 ô để —:
· đơn Chờ duyệt → — (dù đã chấm công);
· đơn Từ chối → — (dù đã chấm công);
· đơn Đã duyệt nhưng chưa chấm công → —.
Hệ thống không tự sinh, không tự điền giờ chấm công từ đơn giải trình — giờ hiển thị luôn là giờ đã chấm thực tế, đơn chỉ quyết định có được hiện hay không. Hiển thị giống nhau ở cả hai vai trò: màn nhân viên và màn Nhân sự (?role=hr). (Sửa 05/08/2026 — bản 0.9; ✸ BA xác nhận lại 20/08/2026 — bản 1.2: giữ nguyên đủ cả hai điều kiện, không tự điền giờ từ đơn — BR-VT-30.)
19/06 (chờ duyệt, đã chấm) & 22/06 (từ chối, đã chấm) → —; 01/06 (đã duyệt, chưa chấm) → —; 23/06 · 24/06 (đã duyệt + đã chấm) → hiện đúng giờ. ?role=hr thấy y hệt
FR-VT-13 Khối đơn trong ngày hiển thị loại đơn = Đi công tác + chip trạng thái (Chờ duyệt · Đã duyệt · Từ chối) + nút Xem đơn › mở chi tiết đơn. Bấm Xem đơn ra đúng đơn của ngày đó
FR-VT-14 ✥ Thẻ sự kiện Đi công tác chỉ có 4 thành phần: nhãn loại · chip trạng thái đơn · dòng giờ Vào – Ra (FR-VT-25) · hành động (Giải trình ngay / Xem đơn ›), cộng dòng tiền phạt khi có. BỎ hẳn dòng "Nơi công tác: … · chấm ngoài phạm vi · cách …" và mọi câu giải thích về điều kiện tính công — nơi công tác thuộc về đơn, xem trong Xem đơn › (BR-VT-13); tình trạng ngày đã đọc được qua nhãn ngày + công ngày + chip trạng thái đơn. (Chốt 04/08/2026; viết lại 20/08/2026 — bản 1.1: bỏ dòng nơi công tác, thay bằng dòng giờ) Mở chi tiết ngày công tác bất kỳ: trong thẻ sự kiện không có chữ "Nơi công tác", không có "chấm ngoài phạm vi", không có số khoảng cách
FR-VT-25 ✥ Khối Giải trình trong ngày hiện giờ đã chấm: ngày Đi công tác mà đơn chưa được duyệt (chưa có đơn · Chờ duyệt · Từ chối) và ngày đó đã phát sinh chấm công* → dòng đầu của sự kiện ghi Vào HH:mm · Ra HH:mm lấy *đúng giờ đã chấm; thiếu mốc nào thì mốc đó ghi —. Đơn Đã duyệt → không hiện dòng này (giờ đã có ở 3 ô đầu màn, tránh lặp). Ngoài dòng giờ, thẻ không thêm dòng chú thích nào — không có câu "giờ đã chấm, chưa được tính công…", không có nơi công tác, không có khoảng cách (FR-VT-14). Ngày 18/06 mockup VP: khối giải trình hiện Vào 07:48 · Ra 17:35 trong khi 3 ô đầu màn vẫn —
FR-VT-26 ✥ Ngày Đi công tác chưa có đơn hiển thị y như ngày Đi muộn chưa giải trình: cùng bố cục thẻ sự kiện — nhãn Đi công tác + chip đỏ Chưa giải trình + mốc giờ + nút Giải trình ngay (mở giai-trinh-cong-form.html?khoi=vp&loai=di-cong-tac, chọn sẵn loại đơn Đi công tác). Quá hạn 7 ngày (BR-GT-18) → nút đổi thành chữ Đã quá hạn như các loại đơn khác. Bấm Giải trình ngay ở ngày 18/06 → form mở với Loại giải trình = Đi công tác

✥ FR-VT-14 sửa · FR-VT-25 · FR-VT-26 bổ sung — bản 1.1 (quyết định BA 20/08/2026): ngày đã đổi trạng thái sang Công tác và đã chấm công đi công tác nhưng chưa tạo đơn thì khối Giải trình trong ngày hiển thị giống ngày Đi muộn chưa giải trình, mốc giờ lấy theo giờ chấm công (tổ hợp ⓪ ở §4.5.1). | FR-VT-15 | Chi tiết đơn Đi công tác chỉ hiển thị đúng các trường của form tạo đơn (§3.2.1): Phạm vi · Từ ngày · Đến ngày · Nơi công tác · Nội dung công tác · File đính kèm, kèm Tiến trình duyệt 2 bước (Quản lý trực tiếp + Nhân sự, BR-CC-10b). Không đưa giờ chấm công và công ngày vào chi tiết đơn — hai thông tin này thuộc chi tiết công của ngày (BR-VT-13). | Đơn Đi công tác phải có 2 dòng người duyệt, không phải 1; trong đơn không có dòng Chấm công trong ngày / Công ngày |

4.5.3 Khác biệt giữa 2 vai trò

Nhân viên (màn của chính mình)Nhân sự (?role=hr)
Thấy đủ 4 tổ hợp trên, bấm được Xem đơn ›Thấy y hệt — cùng nhãn ngày, cùng công ngày, cùng trạng thái đơn
Có nút Giải trình / Đăng ký và lối vào Đơn của tôiẨn cả hai — HR chỉ đọc, không tạo/sửa đơn hộ nhân viên
Tiêu đề màn: Công thángTiêu đề đổi thành tên nhân viên + dòng phụ "HR đang xem · chỉ đọc"

4.5.4 Dữ liệu mẫu trong mockup

Khối Ngày Trạng thái đơn Kết quả hiển thị
Văn phòng (cong-thang.html) 26/06 ✾ (ngày tương lai — đăng ký trước) Đã duyệt Vắng · cả 3 ô Giờ vào · Giờ ra · Công ngày đều — — ngày chưa diễn ra, chưa phát sinh chấm công · KHÔNG bị phạt (ngày tương lai)
Văn phòng 18/06 ✥ (mới — thay ngày nghỉ phép trùng lặp với 05/06) Chưa có đơn — đã đổi trạng thái sang Công tác, đã chấm công đi công tác Vắng · 0 công · 3 ô giờ —; khối Giải trình trong ngày hiện Vào 07:48 · Ra 17:35 + chip đỏ Chưa giải trình + nút Giải trình ngay (không có dòng nơi công tác) · phạt vắng 1.200.000 đ (tạm tính)
Văn phòng 19/06 Chờ duyệt Vắng · 0 công · giờ vào/ra — (đã chấm 07:55–17:32 ngoài phạm vi 1,2 km nhưng đơn chưa duyệt nên chưa công bố) · bị phạt vắng
Văn phòng 22/06 Từ chối Vắng · 0 công · giờ vào/ra — (đã chấm 08:05–17:20 ngoài phạm vi 18 km) · bị phạt vắng
Văn phòng 23/06 Đã duyệt Đủ định mức · 1 công · 07:52–17:36
Văn phòng 24/06 Đã duyệt Thiếu định mức · 0,6 công · 09:10–15:05
Công trường (cong-thang-cong-truong.html) 08/06 Chờ duyệt Vắng · 0 công · giờ vào/ra — (đã chấm 07:05–16:40, đủ giờ nhưng chưa duyệt nên chưa công bố) · bị phạt vắng
Công trường 12/06 Đã duyệt Thiếu giờ công · 0,7 công · 08:20–14:50
Công trường 19/06 ✾ (ngày tương lai — mốc hôm nay của mockup CT là 17/06) Đã duyệt Vắng · cả 3 ô đều — — ngày chưa diễn ra · KHÔNG bị phạt
Văn phòng 08/06 ✾ Chưa có đơn — chấm vào 08:00, không chấm ra Quên chấm công · Giờ vào 08:00 · Giờ ra — · công — · KHÔNG bị phạt — ngày đã phát sinh chấm công nên không thể ghi Vắng (BR-VT-17)
Văn phòng 12/06 Chờ duyệt (đơn Quên chấm công) Quên chấm công · công — · chấm vào 07:58, thiếu mốc ra — đã có đơn nên đổi nhãn

4.6 Phiên chấm công theo vị trí & cách cộng công của ngày hỗn hợp

Mới bổ sung bản 0.6 — quyết định BA ngày 04/08/2026. Phần này chưa có trên mockup: kiem-tra-vi-tri-a.html hiện chưa xử lý việc đổi vị trí giữa ngày, cong-thang.html chưa có dòng phiên ở nơi công tác. Mockup cần dựng bổ sung trước khi test giao diện. Luật lấy theo tài liệu này: mô hình dữ liệu chấm công phải lưu vị trí theo từng lần chấm và cho nhiều cặp vào/ra một ngày, bỏ luật khoá nút sau khi ra ca (BR-CC-12).

4.6.1 Bối cảnh — vì sao phải reset phiên

Hiện tại hệ thống chạy theo một cặp vào/ra duy nhất cho cả ngày (BR-CC-12): đã có mốc Ra thì mọi lần chấm sau đó vẫn là Ra (chỉ đẩy mốc ra muộn hơn), không quay lại được mốc Vào — luật cũ còn khoá / ẩn hẳn nút sau khi ra ca.

Luật này sai với thực tế đi công tác giữa ngày: nhân viên chấm vào/ra ở văn phòng buổi sáng, chiều sang nơi công tác thì lần chấm ở nơi công tác bị hiểu là chấm ra tiếp của phiên văn phòng — mất hẳn mốc bắt đầu làm việc tại nơi công tác.

Cách xử lý: gắn mỗi lần chấm với vị trí đo được, và đổi vị trí = mở phiên mới (BR-VT-14). Trong phiên mới, nhân viên chấm vào rồi ra bình thường như một ngày mới.

✧ Thu hẹp ở bản 1.0: luật reset chỉ áp cho địa điểm chấm công (VP · các công trường) và cho việc đi / về giữa địa điểm chấm công và nơi công tác. Riêng các nơi công tác với nhau (đều ngoài phạm vi) được coi là một vị trí nghiệp vụ duy nhất — đi từ nơi này sang nơi kia không reset, vẫn là một phiên công tác, cho phép chấm vào ở một nơi và chấm ra ở nơi khác (BR-VT-25).

4.6.2 Quy tắc phiên — bảng quyết định

✧ Nguyên tắc gốc — bản 1.0: một phiên = một nơi làm việc

Phiên chấm công gắn với nơi làm việc, và chỉ có hai loại nơi làm việc:

Loại nơi làm việc Gồm những gì
Địa điểm chấm công (trong phạm vi) VP Long Đỗ · Linh Đàm · Yên Bái · H08 Đông Anh… — mỗi địa điểm là một nơi làm việc riêng
Nơi công tác (ngoài phạm vi) Mọi địa chỉ ngoài phạm vi trong ngày, lý do Đi công tác — bao nhiêu địa chỉ cũng chỉ là MỘT nơi làm việc

Phiên chỉ tách khi đổi nơi làm việc theo bảng trên. Hệ quả quan trọng nhất:

  • ✅ Chấm ở hai địa chỉ công tác khác nhau → vẫn MỘT phiên. Đi công tác thì lúc đi chấm ở một địa chỉ, lúc về chấm ở địa chỉ khác là chuyện bình thường — hệ thống không tách phiên, không đòi phải chấm ra đúng chỗ đã chấm vào (BR-VT-25).
  • ✅ Chỉ khi rời nơi công tác về đúng địa điểm chấm công (văn phòng / công trường) thì mới sinh phiên chấm công vào–ra mới tại chính nơi làm việc đó (BR-VT-14).
Tình huống lần chấm hiện tạiHệ thống ghi nhận làNhãn nút trên app
Lần chấm đầu tiên trong ngàyVào — mở phiên 1Chấm công vào
Cùng nơi làm việc với phiên đang mở, phiên chưa có mốc RaRa — đóng phiênChấm công ra
Cùng nơi làm việc với phiên gần nhất, phiên đã có mốc RaRa — cập nhật mốc ra muộn nhất (giữ nguyên hành vi cũ)Chấm công ra
✧ Đang mở phiên ở nơi công tác, lần này chấm ở một địa chỉ công tác khác (vẫn ngoài phạm vi)KHÔNG tách phiên — vẫn là cùng một nơi làm việc, xử lý y hệt 2 dòng trên: phiên chưa có Ra → Ra (đóng phiên, vào ở địa chỉ này – ra ở địa chỉ kia); phiên đã có Ra → cập nhật mốc ra muộn nhấtChấm công ra
✧ Rời nơi công tác về đúng địa điểm chấm công — VP hoặc công trường (đo được trong phạm vi)Vào — tách phiên, mở phiên chấm công vào–ra mới tại nơi làm việc đó; phiên công tác trước giữ nguyên mốc vào / ra của nóChấm công vào + dòng nhắc "Bắt đầu phiên chấm công mới tại <địa điểm>"
Đổi giữa hai địa điểm chấm công — vd sáng ở VP, chiều sang công trườngVào — tách phiên, mở phiên mới cho địa điểm đó (hai địa điểm là hai nơi làm việc khác nhau)Chấm công vào
Từ địa điểm chấm công đi ra nơi công tác — lần chấm đầu tiên ngoài phạm vi trong ngàyVào — mở phiên công tác (giữ nguyên từ bản 0.6: cần có mốc bắt đầu làm việc tại nơi công tác)Chấm công vào + dòng nhắc "Bắt đầu phiên chấm công mới tại <vị trí>"

Vị trí ghi nhận vẫn là địa chỉ thật của từng lần chấm

Gộp là gộp phiên, không gộp dữ liệu. Mỗi lần chấm vẫn lưu toạ độ · địa chỉ thực · giờ · ảnh khuôn mặt riêng (BR-VT-06) và hiện đủ trong danh sách điểm công tác (FR-VT-22) — HR vẫn tra được nhân viên đã có mặt ở những đâu.

✧ Vì sao bỏ luật tách phiên giữa hai nơi công tác — bản 1.0

Tình huống thường gặp nhất của một ngày đi công tác: sáng chấm vào ở địa chỉ A, trưa di chuyển sang địa chỉ B, chiều chấm ra ở B — không ai quay lại A chỉ để chấm ra.

Bản 0.6 áp BR-VT-14 cho mọi lần đổi chỗ nên đây thành 2 phiên, cả hai đều thiếu mốc (A thiếu Ra, B thiếu Vào) → ngày công tác mất công, nhân viên phải giải trình Quên chấm công — sai với thực tế.

Từ bản 1.0, hai lần chấm đó nằm trong một phiên công tác đủ 2 mốc (BR-VT-25 · BR-VT-17), và thời gian di chuyển giữa các địa chỉ công tác được tính công vì nằm trong lòng một phiên — không phải ngoại lệ của BR-VT-23 (vốn chỉ loại trừ khoảng giữa hai phiên).

4.6.3 Công ngày của ngày hỗn hợp

Nguyên tắc: chỉ giờ chấm tại vị trí làm việc mới được chấp thuận ngay; giờ chấm ở nơi công tác là phần cộng thêm có điều kiện.

BướcCách tính
① Công cơ sởCộng thời lượng mọi phiên trong phạm vi (tại vị trí làm việc) của ngày → so với định mức ngày của khối. Đây là số hiển thị ngay, không chờ đơn.
② Phần cộng thêmNgày có đơn Đi công tác ở trạng thái Đã duyệt phủ ngày đó → cộng thêm phần công tác vào tổng thời gian làm việc, rồi tính lại công ngày. ✧ Bản 1.0: mọi nơi công tác trong ngày là một phiên công tác duy nhất, nên phần cộng thêm = mốc Ra − mốc Vào của phiên đó, kể cả khi chấm vào ở nơi này, chấm ra ở nơi khác (BR-VT-25).
③ Trần côngTổng công ngày tối đa 1 công — phần giờ vượt định mức không tự thành công thứ hai, muốn tính thì đi theo đơn tăng ca ([SRS 0.8](srs.md)).
④ Khi đơn chưa duyệt / bị từ chốiKhông cộng phần ngoài phạm vi. Ngày vẫn có công cơ sở của bước ① — không ghi Vắng, vì đã có chấm công hợp lệ tại nơi làm việc.

Ví dụ (khối Văn phòng — định mức ✸ 8 GIỜ LÀM THỰC)

✸ Định mức Văn phòng: 8 giờ làm thực, không phải 8g30 — bản 1.2

Đồng bộ BR-CC-04 của Business Rule 0.3: một nguyên tắc duy nhất cho cả công ty — phải làm đủ 8 giờ; giờ nghỉ trưa không bao giờ được tính là giờ làm. Con số đem ra so đổi theo nghỉ trưa nằm trong hay ngoài phiên, chứ không đổi định mức:

Cách chấm của ngày Nghỉ trưa nằm đâu Định mức đem so
Nhiều phiên — ra trước trưa, vào lại sau trưa (ngày hỗn hợp thường rơi vào đây) Ngoài phiên 8 giờ
1 phiên xuyên trưa — bao trọn khung nghỉ trưa do Nhân sự set Trong phiên 8 giờ + khung nghỉ trưa (mẫu 1,5g → 9,5 giờ)

Khung nghỉ trưa do Nhân sự thiết lập ở web HCNS, không hard-code. Cặp số cũ "định mức 8g30" của bản 0.6 bị thay. ⚠ Cách áp cho ngày Văn phòng có nhiều phiên còn là điểm chờ chốt — §6.4 mục BR-1.

Diễn biến trong ngày Trạng thái đơn Giờ tính công Công ngày
VP 08:00–12:00 (4g) · Nơi công tác 13:30–17:30 (4g) Chờ duyệt 4g (chỉ phần VP) 0,5 — nhãn Thiếu định mức
Cùng dữ liệu trên Đã duyệt 8g (4g VP + 4g công tác) — 2 phiên, nghỉ trưa nằm giữa hai phiên nên không trừ ✸ 1 công — Đủ định mức (bản 0.6 ghi ≈ 0,9 theo định mức 8g30)
VP 08:00–17:35 (9g35 thô) · Nơi công tác 18:00–20:00 Đã duyệt ✸ 8g05 làm thực = 9g35 − 1g30 nghỉ trưa (1 phiên xuyên trưa) 1 công — phần vượt đi theo đơn tăng ca
✧ Vào ở nơi công tác A 08:15 · ra ở nơi công tác B 17:40 (cả ngày ở ngoài) Đã duyệt ✸ 7g55 làm thực = 9g25 − 1g30 nghỉ trưa — một phiên công tác xuyên trưa 08:15 – 17:40 (BR-VT-25) ✸ 0,99 → hiển thị 1,0 nhưng nhãn Thiếu định mức — thiếu đúng 5 phút. Ca biên phải test (bản 0.6 ghi 1 công theo định mức 8g30)
✧ Cùng dữ liệu trên Chờ duyệt / Từ chối 0g — không cộng phần ngoài phạm vi 0 · nhãn Vắng, có phạt (BR-VT-12)
✧ VP 08:00–11:30 · vào A 13:00 · ra B 17:30 Đã duyệt 3g30 + 4g30 = 8g — phiên VP + phiên công tác; 1g30 di chuyển VP→A là khoảng giữa hai phiên nên không tính (BR-VT-23) ✸ 1 công — nghỉ trưa đã nằm ngoài phiên (bản 0.6 ghi ≈ 0,9)

Khác với ngày chỉ có chấm ngoài phạm vi

Ma trận §4.5.1 (ngày ghi Vắng, công 0 khi đơn chưa duyệt) chỉ áp cho ngày mà toàn bộ bản ghi đều ngoài phạm vi. Ngày hỗn hợp — có ít nhất một phiên trong phạm vi — không rơi vào ma trận đó (BR-VT-16 · BR-VT-18).

4.6.4 Yêu cầu chức năng & Business Rule

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

Mã Yêu cầu Ghi chú kiểm thử
FR-VT-16 ✦ Mỗi lần chấm công lưu kèm vị trí đo được; app xác định lần chấm là Vào hay Ra theo bảng quyết định §4.6.2 và hiển thị đúng nhãn nút trước khi nhân viên bấm. Đối chiếu nhãn nút ở 5 tình huống của bảng
FR-VT-17 ✦✧ Chấm công ở nơi làm việc khác với phiên gần nhất → hệ thống mở phiên mới, lần chấm này là Vào, kèm dòng nhắc "Bắt đầu phiên chấm công mới tại <vị trí>". Không ghi đè mốc Ra của phiên trước.
✧ Bản 1.0 — đang mở phiên công tác mà chấm ở một địa chỉ công tác khác (vẫn ngoài phạm vi) → không mở phiên mới: nhãn nút là Chấm công ra, kèm dòng nhắc "Bạn đang ở <địa chỉ hiện tại>, khác nơi đã chấm vào" (BR-VT-25). Chỉ khi về đúng địa điểm chấm công (VP / công trường) nhãn mới quay lại Chấm công vào.
Vào ở địa chỉ công tác A xong sang B chấm: phải ra Ra. Từ nơi công tác về VP chấm: phải ra Vào
FR-VT-18 ✦✾ Chi tiết công ngày hiển thị Giờ vào / Giờ ra = mốc vào sớm nhất và mốc ra muộn nhất của các phiên trong phạm vi. Phiên ngoài phạm vi hiển thị tách riêng thành dòng phụ "Nơi công tác: <nơi đến> · HH:mm – HH:mm". Tên nơi công tác lấy từ đơn và hiện với mọi trạng thái đơn; phần giờ HH:mm – HH:mm của dòng này chỉ hiện khi đơn Đã duyệt — cùng luật với 2 ô Giờ vào · Giờ ra (FR-VT-12). Đơn chờ duyệt / từ chối → dòng chỉ còn "Nơi công tác: <nơi đến>", không kèm giờ, và giờ đó không được cộng vào công (BR-VT-11 · BR-VT-18). (Sửa 05/08/2026 — bản 0.9) Ngày hỗn hợp chờ duyệt: 2 ô giờ hiện giờ phiên trong phạm vi (phần này là chấm công thường, không phụ thuộc đơn); dòng nơi công tác hiện không kèm giờ; công ngày chưa cộng phần công tác
FR-VT-19 ✦ Ngày có nhiều phiên trong phạm vi → hiển thị thêm dòng "<n> phiên chấm công", bấm vào xem danh sách phiên: mỗi dòng gồm vị trí · giờ vào · giờ ra · thời lượng + cờ trong / ngoài phạm vi.
⚠ Khối Công trường — màn Công tháng hiện thẳng danh sách phiên trong chi tiết ngày nên bỏ dòng tóm tắt này (FR-CTP-03, sửa 20/08/2026).
Ngày 3 phiên: danh sách đủ 3 dòng, tổng thời lượng khớp
FR-VT-20 ✦ Đơn Đi công tác chuyển Đã duyệt → công ngày tự tính lại (cộng thêm phiên ngoài phạm vi) và dòng Nơi công tác hiện ra, không cần nhân viên chấm công lại hay thao tác gì thêm. Đổi trạng thái đơn: công ngày tăng đúng phần giờ công tác
FR-VT-21 ✾ Nhãn ngày khi thiếu mốc chấm (BR-VT-17): ngày thiếu Vào hoặc Ra → nhãn ngày luôn là Quên chấm công, ô lịch vàng, công —, không vào danh sách bị phạt — bất kể đã có đơn giải trình hay chưa. Hai ô giờ hiển thị mốc đã chấm, mốc thiếu để —. Chưa có đơn thì thêm dòng nhắc "cần giải trình để chốt công". (Sửa 05/08/2026 — bản 0.9, đảo luật bản 0.7) Ngày 08/06 (VP, chấm vào 08:00 không chấm ra, chưa có đơn): nhãn Quên chấm công, Giờ vào 08:00 · Giờ ra — · Công —, không có tiền phạt
FR-VT-22 ✧ Phiên công tác qua nhiều nơi — chi tiết công ngày hiển thị một dòng duy nhất cho phiên công tác: "Nơi công tác: <nơi chấm vào> → <nơi chấm ra> · HH:mm – HH:mm", kèm chip <n> điểm công tác khi phiên đi qua từ 2 nơi trở lên. Bấm chip → danh sách từng lần chấm: địa chỉ thực · giờ · cờ ngoài phạm vi. Không tách mỗi nơi thành một phiên / một dòng công riêng (BR-VT-25). (Bổ sung 05/08/2026 — bản 1.0) Vào ở A 08:15, ra ở B 17:40: dòng ghi A → B · 08:15 – 17:40, chip 2 điểm công tác; danh sách phiên của ngày chỉ có 1 phiên công tác

✦ FR-VT-16 → FR-VT-20 — bổ sung theo quyết định BA ngày 04/08/2026 (bản 0.6).   ✱ FR-VT-21 — bổ sung ở bản 0.7; đảo luật ở bản 0.9 (xem ghi chú cuối §4.6.4).

Business Rule

Mã Tên Nội dung
BR-VT-14 ✦✧ Đổi nơi làm việc = tách phiên Mỗi phiên chấm công gắn với đúng một nơi làm việc. Lần chấm phát sinh ở nơi làm việc khác với phiên gần nhất → hệ thống mở phiên mới, lần chấm đó là Vào; nhân viên chấm vào / ra bình thường như một ngày mới. Luật cũ "đã chấm ra thì chỉ chấm ra tiếp" chỉ còn áp trong cùng một nơi làm việc.
✧ Định nghĩa lại ở bản 1.0 — nơi làm việc có hai loại (§4.6.2): mỗi địa điểm chấm công (VP · từng công trường) là một nơi riêng; còn mọi địa chỉ ngoài phạm vi trong ngày gộp thành một nơi duy nhất — nơi công tác. Do đó:
· Rời nơi công tác về đúng địa điểm chấm công (VP / công trường) → tách phiên, sinh phiên vào–ra mới tại nơi đó — đây là trường hợp tách phiên chính.
· Đổi giữa hai địa điểm chấm công → tách phiên.
· Từ địa điểm chấm công ra nơi công tác → mở phiên công tác (giữ nguyên từ bản 0.6).
· Đổi giữa hai địa chỉ công tác (đều ngoài phạm vi) → KHÔNG tách phiên (BR-VT-25).
BR-VT-15 ✦ Không giới hạn số phiên trong ngày Một ngày có thể có nhiều phiên (VP → nơi công tác → VP → nơi công tác khác…). Hệ thống không chặn số lần đổi vị trí; mọi phiên đều được lưu đầy đủ vị trí · giờ vào · giờ ra · trong/ngoài phạm vi.
BR-VT-16 ✦ Chỉ giờ tại vị trí làm việc được chấp thuận ngay Giờ chấm công vào/ra chỉ được chấp thuận khi đo được trong phạm vi một vị trí chấm công gán cho nhân viên. Công ngày hiển thị ngay chỉ lấy từ các phiên trong phạm vi — không phụ thuộc đơn từ. Giờ chấm ngoài phạm vi luôn ở trạng thái chờ đơn Đi công tác được duyệt (BR-VT-05).
BR-VT-17 ✾ Mỗi phiên phải có đủ Vào + Ra; thiếu mốc → Quên chấm công, không ghi Vắng Mỗi phiên chấm công bắt buộc có đủ 2 mốc Vào và Ra. Phiên có Vào nhưng không có Ra (đổi vị trí giữa chừng hoặc hết ngày) → phiên đó không tính thời lượng, và nhân viên phải giải trình công cho ngày đó. Việc phiên trước thiếu mốc Ra không chặn nhân viên mở phiên mới ở vị trí mới.
Ngày đã phát sinh chấm công thì KHÔNG BAO GIỜ bị ghi Vắng — dù chưa có đơn giải trình: đã có một lần chấm nghĩa là đã có bằng chứng nhân viên có mặt, ghi Vắng là sai bản chất. Ngày đó:
· nhãn ngày = Quên chấm công (BR-CC-13), ô lịch vàng;
· hiển thị Giờ vào / Giờ ra theo đúng mốc đã chấm, mốc còn thiếu để —;
· Công ngày — (chưa chốt được, chờ giải trình) — không phải 0; ✪ sửa 28/08/2026: chỉ áp khi ngày không có nguồn giờ hợp lệ nào khác. Ngày còn có phiên đủ 2 mốc hoặc đơn giải trình đã duyệt → chốt công theo giờ chứng minh được (công tạm tính), không treo — (BR-GTK-24 · BR-GTK-25);
· KHÔNG tính phạt vắng không phép (BR-VT-12 chỉ áp cho ngày thật sự Vắng).
Việc đã có đơn hay chưa chỉ đổi dòng nhắc ("cần giải trình để chốt công") và luồng xử lý tiếp theo, không đổi nhãn ngày. (Sửa 05/08/2026 — bản 0.9, đảo lại luật của bản 0.7 vốn cho ghi Vắng + phạt khi chưa có đơn.)
✧ Bổ sung bản 1.0 — phiên công tác không bị coi là thiếu mốc chỉ vì mốc Vào và mốc Ra ở hai nơi công tác khác nhau: chấm vào ở A, chấm ra ở B là một phiên đủ 2 mốc (BR-VT-25). Luật này chỉ áp khi phiên công tác thật sự chỉ có 1 mốc trong cả ngày.
BR-VT-18 ✦ Công ngày hỗn hợp = cơ sở + phần cộng thêm Công ngày = thời lượng các phiên trong phạm vi (tính ngay), cộng thêm thời lượng phiên công tác (mốc Vào → mốc Ra, có thể trải qua nhiều nơi công tác — BR-VT-25) khi và chỉ khi ngày đó có đơn Đi công tác Đã duyệt (BR-VT-09); tổng so với định mức ngày của khối, trần 1 công. Đơn Chờ duyệt / Từ chối / không có đơn → không cộng phần ngoài phạm vi, nhưng ngày vẫn giữ công cơ sở và không ghi Vắng — khác hẳn ngày chỉ có chấm ngoài phạm vi (§4.5.1).
BR-VT-19 ✦ Phần vượt định mức không tự thành công Ngày hỗn hợp cộng đủ giờ vượt định mức → vẫn tối đa 1 công. Phần giờ vượt chỉ được tính khi có đơn tăng ca theo luồng cũ (SRS 0.8) — chấm công ở nơi công tác không phải căn cứ tự sinh tăng ca.

| BR-VT-23 ✽ | Chỉ tính giờ được chấm trên app — khoảng giữa hai phiên không tính công | Công ngày chỉ cộng thời lượng nằm trong từng phiên (từ mốc Vào tới mốc Ra của phiên đó). Khoảng trống giữa hai phiên — kể cả thời gian di chuyển từ vị trí làm việc tới nơi công tác — không được tính là giờ làm việc. Ví dụ: ra ở VP 12:00, vào ở nơi công tác 13:30 → 1g30 ở giữa không vào công. Không có thao tác khai bù thời gian di chuyển. (Chốt 05/08/2026 — đóng VT-7, bản 0.8)
✧ Làm rõ ở bản 1.0 — luật này nói về khoảng giữa hai phiên, nên không mâu thuẫn với BR-VT-25: di chuyển giữa hai nơi công tác nằm trong lòng một phiên công tác → được tính; di chuyển giữa vị trí làm việc và nơi công tác là khoảng giữa hai phiên → không tính (ra VP 12:00 → vào nơi công tác 13:30: 1g30 không vào công). | | BR-VT-24 ✽ | Ngày hỗn hợp có đơn Từ chối → âm thầm không cộng công | Phần chấm ngoài phạm vi của ngày hỗn hợp khi đơn Đi công tác Chờ duyệt / Từ chối / không có đơn thì chỉ đơn giản không được cộng vào công — hệ thống không sinh cảnh báo, không gắn cờ nghi vấn, không nhắc / gửi thông báo cho Nhân sự. Nguyên tắc chung: chấm công ở chỗ lạ chỉ có công khi đó là đi công tác và đơn được Quản lý trực tiếp + Nhân sự duyệt (BR-VT-09 · BR-CC-10b); ngoài điều kiện đó thì phần giờ ấy không có giá trị tính công, không cần xử lý riêng. Ngày vẫn giữ công cơ sở của các phiên trong phạm vi và không ghi Vắng (BR-VT-18). (Chốt 05/08/2026 — đóng VT-8, bản 0.8) | | BR-VT-25 ✧ | Mọi địa chỉ công tác trong ngày = một nơi làm việc — không tách phiên giữa các nơi công tác | Khi xét "đổi nơi làm việc" để tách phiên (BR-VT-14), mọi địa chỉ ngoài phạm vi trong cùng một ngày, mang lý do Đi công tác, được coi là một nơi làm việc duy nhất — "nơi công tác" — dù cách nhau bao xa và có bao nhiêu địa chỉ. Hệ quả:
· Chấm vào ở một địa chỉ công tác, chấm ra ở địa chỉ công tác khác là hợp lệ và vẫn là một phiên đủ 2 mốc — đúng thực tế lúc đi chấm ở một nơi, lúc về chấm ở nơi khác. Hệ thống không đòi nhân viên quay lại đúng chỗ đã chấm vào để chấm ra.
· Lần chấm ở địa chỉ công tác kế tiếp xử lý y như cùng một vị trí: phiên chưa có mốc Ra → ghi Ra (đóng phiên); phiên đã có mốc Ra → cập nhật mốc ra muộn nhất.
· Thời lượng phiên công tác = mốc Ra − mốc Vào → thời gian di chuyển giữa các địa chỉ công tác được tính công, vì nằm trong lòng một phiên chứ không phải khoảng giữa hai phiên (BR-VT-23).
· Phiên công tác chỉ kết thúc khi nhân viên chấm công tại một địa điểm chấm công (VP / công trường) — lúc đó mới tách phiên và mở phiên vào–ra mới tại nơi làm việc đó.
· Dữ liệu không gộp: từng lần chấm vẫn lưu toạ độ · địa chỉ thực · ảnh khuôn mặt · giờ riêng (BR-VT-06), hiện đủ ở danh sách điểm công tác (FR-VT-22).
· Điều kiện tính công không đổi: giờ của phiên công tác chỉ vào công khi ngày đó có đơn Đi công tác Đã duyệt (BR-VT-09 · BR-VT-18); vẫn trần 1 công (BR-VT-19).
· Cả ngày ngoài phạm vi chỉ có đúng 1 mốc → phiên thật sự thiếu mốc, đi theo BR-VT-17 (nhãn Quên chấm công, công —). (Chốt 05/08/2026 — bản 1.0) |

✦ BR-VT-14 → BR-VT-19 — bổ sung theo quyết định BA ngày 04/08/2026 (bản 0.6).   ✽ BR-VT-23 · BR-VT-24 — bổ sung ở bản 0.8 (quyết định BA 05/08/2026), đóng VT-7 · VT-8.   ✧ FR-VT-22 · BR-VT-25 — bổ sung ở bản 1.0 (05/08/2026): ca chấm vào và chấm ra ở hai nơi công tác khác nhau.

✾ FR-VT-21 · BR-VT-17 — đảo luật ở bản 0.9 (quyết định BA 05/08/2026). Bản 0.7 cho ghi Vắng + phạt khi ngày thiếu mốc chấm mà chưa có đơn; bản 0.9 bỏ hẳn: ngày đã phát sinh chấm công thì không bao giờ ghi Vắng — luôn là Quên chấm công, hiện đúng mốc giờ đã có, công —, không phạt. Lý do: một lần chấm công là bằng chứng nhân viên có mặt; chỉ ngày không có lần chấm nào mới là Vắng.


4.7 Phiên chấm công của khối Công trường ✸

✸ Mới ở bản 1.2 — đồng bộ Nhóm G của Business Rule 0.3 (quyết định BA 19/08/2026). Áp riêng khối Công trường; khối Văn phòng giữ nguyên 1 phiên / ngày.

Đưa vào tài liệu này vì phần phiên chấm công ở §4.6 nói về phiên theo VỊ TRÍ (đổi chỗ thì tách phiên), còn Nhóm G nói về phiên theo BUỔI (ra trước trưa, vào lại sau trưa) — hai chiều cùng tác động lên một ngày công, ranh giới ở §4.7.3.

4.7.1 Mô hình phiên & định mức

Ngày công của nhân viên Công trường ghép từ tối đa 2 phiên — một phiên = một cặp Vào → Ra, phiên 1 trước nghỉ trưa và phiên 2 sau nghỉ trưa:

PhiênVí dụÝ nghĩa
Phiên 1 — trước nghỉ trưa07:00 → 11:30 = 4g30Buổi sáng. Chấm ra trước khi đi nghỉ trưa
Khoảng nghỉ trưa11:30 → 13:00Nằm GIỮA hai phiên → không tính công. Hệ thống không phải trừ gì cả — giờ nghỉ trưa tự nhiên rơi ra ngoài. Không hiển thị dòng nào trên giao diện
Phiên 2 — sau nghỉ trưa13:00 → 16:30 = 3g30Buổi chiều. Chấm vào lại khi quay lại làm
Tổng giờ công8g00≥ 8 giờ → Đủ công (1 công); < 8 giờ → Thiếu giờ công, công = Tổng ÷ Định mức. ❈ Điều kiện tiên quyết: ngày phải chấm đủ 2 phiên — ngày chỉ có 1 phiên trên 4 tiếng bị chặn trần ở 0,5 công dù tổng giờ bao nhiêu (BR-CTP-13)

Định mức gốc là 8 giờ LÀM THỰC — con số đem so đổi theo nghỉ trưa nằm trong hay ngoài phiên:

Cách chấm Nghỉ trưa nằm đâu Định mức Ví dụ biên
Nhiều phiên — ra trước trưa, vào lại sau trưa Ngoài phiên 8 giờ 7g59 thiếu · 8g00 đủ
1 lượt xuyên suốt — bao trọn khung nghỉ trưa Trong phiên 9,5 giờ (8g + khung 1,5g) ❈ chỉ 1 phiên → trần 0,5 công: 9g00 → 0,5 · 9g30 → 0,5 (BR-CTP-13)
1 phiên không chạm khung trưa — vd 13:00–21:00 Không có nghỉ trưa 8 giờ ❈ chỉ 1 phiên → trần 0,5 công: 8g00 → 0,5

⇒ Cả ba đều quy về 8 giờ làm thực: 9,5g = 8g làm + 1,5g nghỉ trưa. Nhân viên không bị thiệt dù chấm kiểu nào, cũng không ăn gian được 1,5 giờ bằng cách không chấm ra buổi trưa. ❈ Từ bản 1.8, định mức chỉ quyết định công của ngày chấm đủ 2 phiên; ngày 1 phiên đi theo luật riêng BR-CTP-13 ngay dưới đây.

❈ Ngày chỉ chấm 1 phiên → tối đa 0,5 công (bản 1.8 — BA chốt 05/09/2026)

Khối Công trường coi một ngày làm việc đầy đủ = đủ hai phiên (trước và sau nghỉ trưa — BR-CTP-01). Vì vậy ngày chỉ có một cặp Vào → Ra mà tổng giờ vượt 4 tiếng thì quy thẳng về 0,5 công, không quy đổi theo tỷ lệ Tổng ÷ Định mức nữa:

Ngày chấm Số phiên Tổng giờ Công trước bản 1.8 Công từ bản 1.8
07:00 → 16:00 1 9g00 0,9 0,5
08:20 → 14:50 1 6g30 0,7 0,5
13:00 → 21:00 1 8g00 1 0,5
07:00 → 11:30 + 13:00 → 16:30 2 8g00 1 1 (không đổi)
07:00 → 11:30 + 13:00 → 15:00 2 6g30 0,8 0,8 (không đổi)

Vì sao: một phiên duy nhất không đủ căn cứ chứng minh có mặt trọn ngày — không có mốc ra buổi trưa và mốc vào buổi chiều thì phần giữa ngày là khoảng trống không kiểm chứng được. Trả nửa công là cách ghi nhận phần chắc chắn, đồng thời buộc nhân viên chấm đủ hai phiên nếu muốn đủ công.

Biên: ngày 1 phiên mà tổng giờ ≤ 4 tiếng vẫn quy đổi theo tỷ lệ như cũ (kết quả luôn nhỏ hơn 0,5), nên luật này chỉ hạ công xuống, không bao giờ nâng lên.

✸ Bản 1.3 — Công trường KHÔNG có khung giờ, KHÔNG có Đi muộn / Về sớm

Đồng bộ BR-CC-01 · BR-CC-03 của Business Rule 0.3. Khung 06:00–18:00 của bản cũ bị bỏ hẳn — đây là điều kiện nền để mô hình 2 phiên ở trên chạy được:

  • Nhân viên Công trường chấm công bất kỳ giờ nào trong ngày; 04:30 · 21:00 · 23:50 đều hợp lệ như nhau và đều được cộng vào tổng giờ.
  • Không còn luật "cắt giờ ngoài khung" — không lần chấm nào bị chặn hay bị trừ giờ.
  • Khối này không có nhãn Đi muộn / Về sớm và không có phạt tiền theo giờ đến / về; hệ thống chỉ xét TỔNG GIỜ đã đủ định mức hay chưa (BR-CTP-03).
  • Hệ quả kéo theo: ca vắt qua nửa đêm là bình thường, cần luật ranh giới ngày công (BR-CTP-10); và mọi phiên vẫn phải qua đủ 3 lớp kiểm (BR-CTP-07).
  • Khối Văn phòng giữ nguyên mốc 08:00 / 17:30 + ân hạn tới 08:10 (BR-CC-02) — Nhóm G không áp cho Văn phòng.

Bốn luật cũ bị thay ở bản 0.3 — chỉ với khối Công trường

Mã luật Bản 0.2 (cũ) Bản 0.3 — chỉ Công trường Nằm ở đâu trong tài liệu này
BR-CC-01 · BR-CC-03 CT có khung 06:00–18:00, giờ ngoài khung bị cắt Bỏ khung giờ; mọi giờ trong ngày hợp lệ và được cộng Hộp ngay trên · BR-CTP-07
BR-CC-04 CT định mức 9,5 giờ thô 8 giờ làm thực trên tổng các phiên (+ khung nghỉ trưa nếu nghỉ trưa nằm trong phiên) BR-CTP-03 · bảng định mức trên
BR-CC-12 Mỗi ngày 1 vào + 1 ra, chấm ra là khoá CT: tối đa 2 phiên; VP giữ nguyên 1 phiên BR-CTP-01
BR-CC-13 Thiếu mốc xét trên cả ngày CT: xét theo từng phiên — chỉ phiên cuối hở mốc BR-CTP-04

Ngoại lệ của khối Văn phòng — 1 phiên / ngày nhưng vẫn tách phiên khi đổi nơi làm việc

BR-CC-12 giữ nguyên cho Văn phòng: mỗi ngày đúng 1 phiên, đã chấm ra là khoá, lần chấm sau chỉ đẩy mốc ra muộn hơn. Ngoại lệ duy nhất là luồng đổi nơi làm việc / đi công tác — vẫn tách phiên theo BR-VT-14: đó là phiên ở nơi khác, không phải phiên thứ hai tại văn phòng.

⇒ Vì vậy ngày hỗn hợp của Văn phòng (§4.6.3) có 2 phiên mà không vi phạm BR-CC-12 — và cũng vì vậy mới phát sinh câu hỏi trừ nghỉ trưa thế nào cho ngày VP nhiều phiên (§6.4 mục BR-4).

✸ Khối Công trường KHÔNG có Nghỉ phép năm — chỉ Nghỉ không lương

BA chốt lại 20/08/2026. Danh mục loại đơn của khối Công trường không có Nghỉ phép năm (SRS Chấm công §4.2 · Business Rule 0.3 — Nghỉ phép năm (chỉ VP)); form giai-trinh-cong-form.html?khoi=ct ẩn lựa chọn này. Hệ quả cho phần tính công & hiển thị:

  • Mọi ngày nghỉ của Công trường đều là nghỉ KHÔNG lương → luôn Không công (ô lịch xám), không có ca "nghỉ có lương đã duyệt = Đủ định mức" như khối Văn phòng.
  • Ngày nghỉ CT chỉ thoát phạt khi đơn Nghỉ không lương ở trạng thái Đã duyệt (BR-VT-12) — không vì thế mà được tính công.
  • Nhãn dòng ở sheet Ngày nghỉ & vắng bị phạt của CT chỉ có Vắng (chưa có đơn) hoặc Nghỉ không lương (đã có đơn).

✔ Mockup đã sửa 20/08/2026: cong-thang-cong-truong.html bỏ 2 mẫu Nghỉ phép năm (18/06 cả ngày · 03/06 buổi sáng) và đơn c11; trang-thai-nhan-su.html bỏ mẫu nghỉ phép năm của nhân viên NV007 — Công trường Yên Bái; web/chi-tiet-don-giai-trinh.html đổi người gửi sang nhân viên Văn phòng khi xem loại Nghỉ phép năm / Đi muộn – Về sớm.

4.7.2 Yêu cầu chức năng & Business Rule

Yêu cầu chức năng (mã giữ nguyên theo Business Rule 0.3 để truy vết)

Mã Yêu cầu Ghi chú kiểm thử
FR-CTP-01 Sau khi chấm ra phiên 1, nút chấm công vẫn mở; lần chấm kế tiếp mở phiên 2 với nhãn Chấm công vào. Chấm ra phiên 2 → khoá nút tới hết ngày. Ra 11:30 → nhãn Chấm công vào; ra 17:00 → nút khoá
FR-CTP-02 Nhãn nút đúng theo trạng thái ngày ở 5 thời điểm: chưa có phiên → Chấm công vào; phiên đang mở → Chấm công ra; đã đóng phiên 1 → Chấm công vào; đã đóng phiên 2 → khoá, kèm dòng "Đã chấm đủ 2 phiên hôm nay". Đối chiếu đủ 5 mốc
FR-CTP-03 ✾ Bố cục chi tiết công ngày (khối Công trường): trên cùng dd/MM · <thứ> + chip trạng thái ngày góc phải; dưới là bảng phiên chấm công, ✾ không có đầu đề nào phía trên bảng — bỏ cả "Phiên chấm công · <n>" lẫn "Chấm công tại nơi công tác · <n>" (BR-VT-26, sửa 20/08/2026): mỗi dòng đã ghi Phiên 1 / Phiên 2, còn ngày đi công tác nhận ra qua thẻ Đi công tác ở khối giải trình —
· cột trái: mỗi phiên 1 dòng Phiên <n> · Giờ vào → Giờ ra, không cột thời lượng; phiên hở mốc ra chỉ hiện Giờ ra —, không kèm chữ nào khác;
· ✾ cột phải: một ô GỘP cho cả bảng hiện số công của ngày (0,8 + chữ công) — công tính trên TỔNG các phiên đã đủ vào–ra so định mức 8 giờ/ngày (BR-CTP-03), không phải công của riêng từng phiên; ngày còn phiên hở mốc vẫn hiện phần công đã chấm được (FR-CTP-06).
✾ Bỏ: dòng "Còn thiếu…" · dòng tóm tắt "<n> phiên chấm công · tổng <giờ>" · dòng Tổng giờ công · thời lượng từng phiên · khối số công cỡ lớn đầu chi tiết · dòng Định mức ngày chân bảng. Tổng giờ và định mức vẫn tính bên trong. Ngày 1 phiên vẫn giữ dòng "Vào HH:mm → Ra HH:mm". (Sửa 20/08/2026.)
Ngày 02/06 (2 phiên, công 0,8): 2 dòng phiên chỉ có giờ vào–ra + ô gộp 0,8 công bên phải; không có số công cỡ lớn, không có "Định mức ngày", "Tổng giờ công", 4g 30p
FR-CTP-04 Khoảng giữa hai phiên không tính công và KHÔNG hiển thị dòng nào — chi tiết ngày chỉ liệt kê phiên có chấm công + tổng giờ. Ngày 07:00–11:30 + 13:00–16:30: không có dòng cho khoảng 11:30–13:00
FR-CTP-05 Tổng giờ & trạng thái ngày tính lại ngay mỗi khi một phiên được đóng — không chờ hết ngày. Đóng phiên 1 → Thiếu giờ công; đóng phiên 2 đủ 8g → Đủ công
FR-CTP-06 ✾ Hết ngày mà phiên cuối chưa đóng → nhãn Quên chấm công; phiên đó hiện Giờ vào bình thường · Giờ ra — — ✾ chỉ dấu gạch, KHÔNG kèm chữ "chưa tính công". ✾ Ô công bên phải KHÔNG để — mà hiện phần công của các phiên đã đủ vào–ra, quy trên định mức 8 giờ/ngày (BR-CTP-03); giờ của phiên hở mốc vẫn không được cộng (BR-CTP-04). Ngày vẫn chưa chốt công — giữ nhãn Quên chấm công + dải nhắc vàng "Chưa chốt công — phiên còn thiếu mốc ra…", không phạt. Đơn duyệt xong → phiên hiện giờ ra đã bổ sung kèm chip "bổ sung theo đơn", công tính lại đủ. (Đổi 20/08/2026 — thay luật cũ "công ngày —"; chỉ áp khối Công trường, xem ghi chú dưới bảng.) 07:00–11:30 + 13:00 → — → ô công 0,6 (4g30 ÷ 8g), không có chữ "chưa tính công"; duyệt bù 16:30 → công 1
FR-CTP-07 Ngày Thiếu giờ công → gợi ý loại đơn Thiếu giờ công; ngày Quên chấm công → gợi ý Quên chấm công. Chỉ hai gợi ý này — không gợi ý loại Khác từ chi tiết ngày. Bấm nút gợi ý → form mở đúng loại đã chọn sẵn
FR-CTP-15 ✾ Ngày Vắng / chưa phát sinh chấm công — DÙNG CHUNG bố cục với mọi ngày khác (sửa 20/08/2026, thay phương án "3 ô như Văn phòng"): tiêu đề dd/MM · <thứ> + chip Vắng góc phải → bảng phiên → khối giải trình.
· Bảng phiên vẫn hiện với đúng một dòng "Phiên 1 · Vào — → Ra —" — không hiển thị gì, chỉ để dấu gạch.
· Ô công bên phải = 0 (ngày tương lai đã duyệt mà chưa chấm công thì —).
· KHÔNG có dòng tóm tắt nào dưới ngày · thứ (bỏ "Nghỉ cả ngày"), không số công cỡ lớn, không dòng Định mức ngày.
✾ Áp cho CẢ ngày chấm công tại nơi công tác mà đơn chưa duyệt — giờ chấm ngoài phạm vi chưa được công nhận nên ngày đó hiển thị y như ngày không có bản ghi chấm công nào; dòng "Chấm công tại nơi công tác — đơn chưa được duyệt" đã bỏ (BR-VT-26 sửa 20/08/2026). Giờ đã chấm hiện ở thẻ Đi công tác trong khối giải trình, kèm nút Giải trình ngay khi chưa có đơn.
✾ Trường hợp mặc định (tổ hợp ⓪ của §4.5.1): đã khai trạng thái Công tác + đã chấm công đi công tác + chưa tạo đơn → thẻ Đi công tác + chip đỏ Chưa giải trình + nút Giải trình ngay (FR-VT-25 · FR-VT-26); ngày vẫn Vắng, vẫn bị phạt tới khi đơn được duyệt (BR-VT-27).
✾ Ngày không phát sinh chấm công nào + trạng thái Vắng → cũng hiện tiền phạt. (BA chốt 20/08/2026.)
01/06 (vắng chưa giải trình) · 15/06 (nghỉ không lương chờ duyệt) · 08/06 (công tác chờ duyệt, đã chấm 07:05–16:40): cả ba đều hiển thị giống hệt ngày Vắng bên Văn phòng — bảng phiên 1 dòng toàn dấu gạch (Phiên 1 · Vào — → Ra —) + ô công 0 + chip Vắng; riêng 08/06 khối dưới có thẻ Đi công tác kèm dòng Vào 07:05 · Ra 16:40
FR-CTP-14 ✾ Sheet Ngày nghỉ & vắng bị phạt — HAI KHỐI HIỂN THỊ GIỐNG NHAU (Văn phòng ≡ Công trường; khác biệt duy nhất: Công trường không có loại Nghỉ phép năm).
· ✾
Danh sách CHỈ gồm bản ghi ĐÃ TÍNH PHẠT (chốt 20/08/2026): ngày hôm nay / quá khứ + đơn chưa được duyệt (chưa giải trình · chờ duyệt · từ chối). Loại: ngày tương lai (kể cả đang chờ duyệt) và ngày đơn Đã duyệt ở mọi mốc thời gian. ⚠ Vì vậy số dòng ≠ ô đếm Ngày nghỉ
ngoài màn — hai con số khác nghĩa, không phải lỗi.
· Nhãn dòng bám theo ĐƠN, không bám theo trạng thái duyệt: chưa giải trình → Vắng; đã có đơn → tên loại nghỉ khai trong đơn, kể cả đơn Chờ duyệt / Từ chối. Ngày Đi công tác đơn chưa duyệt vẫn dưới nhãn Vắng (BR-CTP-12 · BR-VT-27).
· ✾ KHÔNG hiển thị chip trạng thái giải trình trên dòng — mỗi dòng chỉ có ngày · nhãn nghỉ (buổi) · tiền phạt nếu có; buổi ghi (cả ngày) · (buổi sáng) · (buổi chiều), không dùng "nửa ngày", và tên loại không kèm "(nửa ngày)" (BR-VT-12); trạng thái đơn xem ở chi tiết ngày / chi tiết đơn.
· ✾ Tiền phạt áp cho MỌI loại nghỉ — kể cả Nghỉ phép năm: ngày hôm nay / đã qua mà đơn của ngày đó chưa được duyệt (chưa giải trình · chờ duyệt · từ chối) đều hiện mức phạt như vắng không phép; chỉ đơn Đã duyệt mới miễn phạt (BR-VT-12). Ngày tương lai → không phạt, không vào danh sách. Phạt tạm tính, tự gỡ khi đơn được duyệt.
· Phụ đề đếm N ngày; chân sheet là Tổng tiền phạt (chỉ cộng ngày đơn chưa duyệt), không có nút Đóng.
· Bấm một dòng → đóng sheet và mở chi tiết chấm công của ngày đó; xem đơn thì đi tiếp bằng nút Xem đơn ›. (BA chốt 20/08/2026.)
15/06 (nghỉ không lương chờ duyệt): dòng ghi Nghỉ không lương (cả ngày) + phạt, không có chip; ngày vắng chưa giải trình → Vắng (cả ngày) + phạt; ngày nghỉ đã duyệt và ngày tương lai chờ duyệt → không xuất hiện trong danh sách. Bấm dòng → mở chi tiết ngày
FR-CTP-17 ✾ Thẻ Quên chấm công — dòng phụ chỉ ghi phiên: "Phiên 1" / "Phiên 2", lấy đúng phiên nhân viên chọn khi đăng ký giải trình (FR-CTP-11); chưa có đơn → lấy phiên đang hở mốc (phiên cuối — BR-CTP-04). Câu dài cũ "Quên chấm ra ở phiên cuối (phiên 2) — đơn đã duyệt, bổ sung giờ ra 16:30 → đã tính công" bỏ hẳn: bù giờ đã thấy ở chip bổ sung theo đơn trên dòng phiên, còn kết quả công đọc ở ô công + chip trạng thái ngày. (BA chốt 20/08/2026.) 04/06 (đơn đã duyệt, khai cho phiên 2): thẻ "Quên chấm công" + dòng phụ "Phiên 2", không còn câu giải thích dài
FR-CTP-16 ✾ Thẻ nghỉ trong khối Sự kiện & giải trình — dựng y như bản Văn phòng:
· dòng 1 =
tên loại nghỉ + chip trạng thái đơn, không nhãn phụ nào cạnh tên (bỏ "Có lương", "Không lương", "· 4g"; tên loại không kèm "(nửa ngày)");
· dòng 2 =
chữ nhỏ xám: phạm vi nghỉ* —
Buổi sáng · Buổi chiều · Cả ngày (nghỉ *nửa buổi ghi thẳng buổi sáng / buổi chiều, không ghi "Nửa ngày"), bên phải là Xem đơn ›;
· dòng 3 = tiền phạt nếu có. (BA chốt 20/08/2026.)
Nghỉ phép năm nghỉ sáng → "Nghỉ phép năm" + chip, dưới là "Buổi sáng"; Vắng → "Vắng" / "Cả ngày" / tiền phạt. Không thẻ nào còn "Có lương / Không lương / 4g / (nửa ngày)"
FR-CTP-13 ✾ Thẻ Thiếu giờ công trong khối Sự kiện & giải trình — dòng phụ hiển thị Giờ vào · Giờ ra nhân viên đã nhập trong ĐƠN giải trình của ngày đó (hai ô Giờ vào thực tế · Giờ ra thực tế của form, §3.1), dạng "Giờ vào HH:mm · Giờ ra HH:mm" — chỉ hai mốc giờ, không kèm chữ "theo đơn" hay chú thích nguồn nào khác (bỏ 20/08/2026). KHÔNG hiển thị số giờ còn thiếu so với định mức ("thiếu 1g30 / 8g00 định mức" — bỏ): số giờ thiếu là số suy ra được, còn giờ khai trong đơn là thứ người xem cần đối chiếu với các phiên đã chấm ở khối trên. Ngày chưa có đơn → chưa có giờ khai → dòng phụ để trống, thẻ chỉ còn nhãn + nút Giải trình ngay. Áp cho mọi trạng thái đơn (chờ duyệt · đã duyệt · từ chối). (BA chốt 20/08/2026.) Ngày 02/06 (đơn đã duyệt khai 07:00–16:30): thẻ ghi "Giờ vào 07:00 · Giờ ra 16:30"; ngày 17/06 (chưa có đơn): thẻ không có dòng phụ, chỉ có nút Giải trình ngay
FR-CTP-18 ❈ Chi tiết ngày phải nói rõ vì sao chỉ có 0,5 công. Ngày bị áp BR-CTP-13 → ngay dưới bảng phiên hiện một dòng chữ nhỏ: "Ngày này chỉ chấm 1 phiên — theo định mức khối Công trường, ngày một phiên trên 4 tiếng được tính 0,5 công dù tổng giờ nhiều hơn. Chấm đủ 2 phiên mới tính đủ công." Ngày đủ 2 phiên hoặc ngày 1 phiên ≤ 4 tiếng → không hiện dòng này. (BA chốt 05/09/2026 — bản 1.8.) 11/06 (1 phiên 07:00–16:00): ô công 0,5 + có dòng giải thích; 02/06 (2 phiên, 0,8): không có dòng nào
FR-CTP-09 Khối Sự kiện & giải trình chỉ liệt kê việc cần giải trình để chốt công — Thiếu giờ công · Quên chấm công · Nghỉ · Đi công tác · Khác. Tăng ca KHÔNG hiện ở đây. Ngày không còn bản ghi nào sau khi lọc → ẩn hẳn cả khối. Áp cả hai khối. Ngày đủ công + có tăng ca đã duyệt → chi tiết ngày chỉ còn công ngày + danh sách phiên
FR-CTP-11 ✾ Khối "Phiên cần giải trình" trên form đơn (?khoi=ct) (đặc tả đầy đủ: §3.8) — 2 nút Phiên 1 / Phiên 2, mặc định Phiên 1:
· ✾ Nút chỉ có tên phiên — KHÔNG hiển thị khoảng giờ, và hệ thống không cố định khung giờ cho phiên 1 / phiên 2. Nhân viên Công trường chỉ cần bấm chọn đang giải trình cho phiên nào; giờ thực tế khai ở hai ô Giờ vào / Giờ ra của form.
· ✾ Luôn hiện đủ 2 nút, không phụ thuộc dữ liệu chấm công của ngày — bỏ nhánh ẩn nút / hệ thống tự xác định và bỏ dòng nhắc "Ngày này chưa có dữ liệu chấm công…".
· Đổi ngày → khối giữ nguyên (không nạp lại theo phiên của ngày).
· ✾ Phạm vi áp dụng (chỉ khi ?khoi=ct): 3 loại bám giờ chấm Quên chấm công · Thiếu giờ công · Khác → luôn hiện; Đi công tác → chỉ hiện khi Phạm vi = Theo giờ, đổi sang Theo ngày thì khối tự ẩn. Các loại còn lại (Nghỉ phép · Nghỉ không lương · Tăng ca) → không hiện.
· ✾ Vị trí khối trên form — GIỐNG NHAU ở mọi loại đơn: khối đứng ngay dưới ô Ngày và TRÊN các ô giờ của loại đơn (Giờ vào / Giờ ra thực tế · Giờ khai lại · Từ giờ / Đến giờ) — chọn phiên trước, khai giờ sau. Riêng Quên chấm công: ô Ngày quên chấm và ô Giờ khai lại tách thành hai dòng riêng để khối phiên chen vào giữa. (Sửa 27/08/2026 — Đi công tác phạm vi Theo giờ cũng phải chọn phiên; Theo ngày thì không.) (Sửa 27/08/2026 — bỏ khoảng giờ của từng phiên, chỉ chọn Phiên 1 / Phiên 2.)
Mở form khối CT với bất kỳ ngày nào (2 phiên · 1 phiên · ngày Vắng chưa chấm công) → luôn thấy đúng 2 nút Phiên 1 / Phiên 2, không có giờ kèm theo; chọn Đi công tác → Theo giờ có khối phiên, bấm sang Theo ngày khối biến mất; ?khoi=vp → không bao giờ thấy khối này

Business Rule

Mã Tên Nội dung
BR-CTP-01 Tối đa 2 phiên / ngày — chỉ khối Công trường Phiên 1 trước nghỉ trưa, phiên 2 sau nghỉ trưa; đóng phiên 2 → khoá nút chấm công của ngày, không mở được phiên 3. Vẫn được chấm 1 phiên duy nhất nếu làm xuyên trưa. Văn phòng: đúng 1 phiên / ngày — Nhóm G không áp cho VP. ⚠ Ranh giới với phiên theo vị trí: §4.7.3.
BR-CTP-02 Không tính giờ nghỉ trưa Hệ thống không tự trừ nghỉ trưa cho CT — giờ nghỉ trưa nằm giữa hai phiên nên tự rơi ra ngoài, khớp nguyên tắc chỉ tính giờ nằm trong lòng phiên (BR-VT-23). Khung nghỉ trưa khai ở HCNS chỉ để hiển thị / đối chiếu.
BR-CTP-03 Định mức = 8 giờ làm thực (+ nghỉ trưa nếu nghỉ trưa nằm trong phiên) Tổng giờ công ngày = Σ (Giờ ra − Giờ vào) của các phiên ĐÃ ĐÓNG. Định mức theo bảng §4.7.1. Tổng ≥ định mức → Đủ công (1 công), ô lịch xanh; tổng < định mức → Thiếu giờ công, ô vàng, công = Tổng ÷ Định mức, làm tròn 1 chữ số thập phân. ❈ Công thức này chỉ áp cho ngày chấm ĐỦ 2 PHIÊN — ngày 1 phiên trên 4 tiếng bị BR-CTP-13 chặn ở 0,5 công (bổ sung 05/09/2026 — bản 1.8).
BR-CTP-04 Thiếu mốc chỉ xảy ra ở phiên cuối Muốn mở phiên mới thì phiên trước bắt buộc đã đóng (BR-CTP-08) → phiên giữa ngày không bao giờ hở mốc, và không có trường hợp "quên chấm vào" (không chấm vào thì phiên không tồn tại). Phiên hở mốc không được tính giờ; các phiên đã đóng vẫn cộng bình thường. Ngày mang nhãn Quên chấm công, không phạt vắng. ✾ Công ngày hiển thị = phần công của các phiên đã đóng (quy trên định mức 8 giờ/ngày) — công tạm tính, ngày vẫn chưa chốt (sửa 20/08/2026, thay luật cũ công —; chỉ áp khối Công trường). Chỉ khi đơn Quên chấm công ĐƯỢC DUYỆT (bổ sung giờ ra) thì phiên mới được tính và ngày chốt lại theo BR-CTP-03. Đồng bộ BR-VT-17.
BR-CTP-05 Trần 1 công Tổng vượt định mức → vẫn tối đa 1 công; phần vượt không tự thành Tăng ca — phải có đơn Tăng ca đã duyệt. ❈ Ngày 1 phiên có trần thấp hơn — 0,5 công (BR-CTP-13).
BR-CTP-06 Khoảng giữa hai phiên không tính công Mọi khoảng ngoài phiên (nghỉ trưa · về nhà giữa buổi · di chuyển giữa hai địa điểm chấm công) không vào công; không có thao tác khai bù.
BR-CTP-07 Mỗi phiên vẫn qua đủ 3 lớp kiểm Mọi lần chấm của mọi phiên đều qua geofence + GPS thật + khuôn mặt. CT không còn ràng buộc khung giờ — phiên mở lúc nào trong ngày cũng được.
BR-CTP-08 Phiên không được chồng lấn Hai phiên không giao nhau về thời gian; phiên mới chỉ mở khi phiên trước đã đóng, giờ Vào phiên sau ≥ giờ Ra phiên trước.
BR-CTP-09 Phiên dưới 5 phút → bỏ Phiên < 5 phút coi là thao tác nhầm: không tính vào tổng giờ, không hiện trong danh sách phiên; bản ghi gốc vẫn lưu để HR tra soát. Biên: đúng 5 phút → VẪN TÍNH; 4 phút → bỏ.
BR-CTP-10 Ranh giới ngày công — theo NGÀY CỦA MỐC VÀO CT không có khung giờ nên ca vắt qua nửa đêm là bình thường. Một phiên thuộc trọn về ngày của mốc VÀO: toàn bộ thời lượng cộng vào ngày bắt đầu ca, không chia đôi ở mốc 00:00; ngày của mốc Ra không nhận giờ nào. Giờ ra nhỏ hơn giờ vào → hiểu là sang ngày hôm sau (02:00 − 22:00 = 4g).
BR-CTP-11 ✾ Đơn giải trình phải gắn với MỘT phiên — chỉ khối CT (luồng màn hình & bộ FR/BR chi tiết: §3.8) Ba loại bám giờ chấm — Quên chấm công · Thiếu giờ công · Khác — phải xác định giải trình cho phiên nào: nhân viên bắt buộc chọn Phiên 1 hay Phiên 2 (CT tối đa 2 phiên/ngày — BR-CTP-01). ✾ Phiên KHÔNG gắn khung giờ cố định và form không hiển thị khoảng giờ của từng phiên — giờ do nhân viên khai ở Giờ vào / Giờ ra; hệ thống không tự xác định thay nhân viên kể cả khi ngày chỉ có 1 phiên.
✾ Đi công tác chia hai nhánh theo Phạm vi khai báo (§3.2.1):
  – Theo giờ (1 ngày + Từ giờ → Đến giờ) → PHẢI chọn phiên, vì đơn chỉ phủ một khoảng trong ngày nên phải biết khoảng đó thuộc phiên nào.
  – Theo ngày (khoảng ngày + buổi) → KHÔNG hỏi phiên, vì đơn phủ trọn buổi / trọn ngày, không bám vào một cặp vào–ra cụ thể.
(Sửa 27/08/2026 — Đi công tác phạm vi Theo giờ cũng phải chọn phiên; Theo ngày thì không.) (Sửa 27/08/2026 — bỏ khoảng giờ của từng phiên, chỉ chọn Phiên 1 / Phiên 2.) Quên chấm công vẫn giữ lựa chọn quên chấm vào / quên chấm ra, phạm vi áp dụng là phiên đã chọn. VP không có bước này. Các loại không bám giờ chấm (Nghỉ phép · Nghỉ không lương · Tăng ca) không hỏi phiên.
BR-CTP-12 Ngày Đi công tác đơn chưa duyệt → Vắng + phạt Giữ nguyên BR-VT-12 · BR-VT-26 · BR-VT-27 của tài liệu này: ngày mà toàn bộ bản ghi đều ngoài phạm vi + đơn chưa duyệt + là hôm nay / ngày đã qua → nhãn Vắng, công 0, 2 ô giờ —, bị phạt vắng (tạm tính, tự gỡ khi đơn duyệt); vào thống kê Ngày nghỉ & vắng bị phạt dưới nhãn Vắng.
BR-CTP-13 ❈ Ngày chỉ chấm 1 phiên → tối đa nửa công Ngày của khối Công trường có đúng một phiên (một cặp Vào → Ra) mà tổng giờ > 4 tiếng → công ngày = 0,5, không quy đổi Tổng ÷ Định mức (BR-CTP-03). Áp cho mọi kiểu 1 phiên: ca xuyên trưa (07:00–16:00), ca chiều–tối (13:00–21:00), ca ở nơi công tác đơn đã duyệt (08:20–14:50).
Lý do: một ngày làm việc đầy đủ của CT phải có đủ 2 phiên (BR-CTP-01); thiếu mốc ra buổi trưa và mốc vào buổi chiều thì phần giữa ngày không kiểm chứng được, chỉ công nhận được nửa ngày.
Biên: 1 phiên ≤ 4 tiếng → giữ nguyên tỷ lệ cũ (luôn < 0,5); đúng 4 tiếng → vẫn theo tỷ lệ (240 ÷ 480 = 0,5, trùng số nhưng khác đường tính); từ 2 phiên trở lên → luật không áp, kể cả khi phiên cuối hở mốc ra (BR-CTP-04) — ngày đó vẫn tính theo phần đã đóng.
Phạm vi: chỉ khối Công trường. Khối Văn phòng mỗi ngày vốn đúng 1 phiên (BR-CC-12) nên không áp — nếu áp thì VP không ngày nào đủ công.
Ngày bị hạ công vẫn mang nhãn Thiếu định mức (ô lịch vàng) và vẫn vào sheet Ngày thiếu giờ nếu chưa có đơn duyệt. Chi tiết ngày phải nêu lý do — FR-CTP-18. (BA chốt 05/09/2026 — bản 1.8.)

❈ BR-CTP-13 · FR-CTP-18 · sửa BR-CTP-03 · BR-CTP-05 — bản 1.8 (quyết định BA 05/09/2026): ngày Công trường chỉ chấm 1 phiên trên 4 tiếng quy về 0,5 công. Đã sửa mockup app-longdo-erp/pace-1/cham-cong/cong-thang-cong-truong.html: ngày 11/06 (07:00–16:00, 9g) từ 0,9 → 0,5 và ngày 12/06 (đi công tác đã duyệt, 08:20–14:50, 6g30) từ 0,7 → 0,5; ô công, sheet Ngày thiếu giờ và tổng công tháng dùng chung một hàm nên khớp nhau.

4.7.3 Ranh giới với phiên theo vị trí (§4.6)

Một ngày Công trường có thể vừa tách phiên theo buổi (Nhóm G) vừa tách phiên theo vị trí (BR-VT-14). Hai luật này đếm phiên theo hai cách khác nhau, nên phải phân định rõ:

Điểm BR-CTP-01 — phiên theo buổi BR-VT-14 · BR-VT-15 — phiên theo vị trí
Sinh phiên mới khi Chấm ra rồi vào lại ở cùng nơi làm việc (qua nghỉ trưa) Đổi nơi làm việc: về địa điểm chấm công khác · từ địa điểm ra nơi công tác
Số phiên tối đa 2 phiên / ngày (CT) Không giới hạn
Áp cho khối Chỉ Công trường Cả hai khối

⚠ Điểm chờ BA chốt — hai luật đếm phiên khác nhau

Ngày CT vừa ra–vào qua trưa vừa đi công tác giữa ngày có thể sinh hơn 2 phiên. Đề xuất (chưa chốt — §6.4 mục BR-1): giới hạn 2 phiên của BR-CTP-01 chỉ đếm phiên tại địa điểm chấm công của nhân viên; phiên công tác và phiên sinh do đổi địa điểm không tính vào giới hạn đó — nếu không, nhân viên đi công tác buổi chiều sẽ không chấm công lại được khi quay về.

Ba điểm đã rõ, không cần chốt thêm:

  • Đơn Đi công tác hỏi phiên hay không là theo Phạm vi khai báo ✾ (BR-CTP-11): Theo ngày → không hỏi, vì đơn phủ trọn buổi / khoảng ngày, không bám vào một cặp vào–ra cụ thể; Theo giờ → có hỏi, vì đơn chỉ phủ một khoảng giờ trong ngày. Ba loại bám giờ chấm thì luôn phải chọn phiên.
  • Phiên công tác vẫn là một phiên đủ 2 mốc dù vào ở nơi này ra ở nơi khác (BR-VT-25) — luật "tối đa 2 phiên" không làm đổi điều này.
  • Khoảng giữa hai phiên không tính công là cùng một luật ở cả hai chiều (BR-CTP-06 ≡ BR-VT-23): nghỉ trưa giữa hai phiên và thời gian di chuyển giữa hai nơi làm việc đều không vào công; còn di chuyển giữa hai địa chỉ công tác thì có, vì nằm trong lòng một phiên.

4.7.4 Ba sheet thống kê tháng & màn thống kê HR ✸

✸ Mới ở bản 1.3 — FR-CTP-08 · FR-CTP-10 · FR-CTP-12 của Business Rule 0.3 chưa được đưa sang ở bản 1.2. Ba ô đếm ở thẻ tổng tháng mở ra ba sheet; sheet Ngày nghỉ & vắng bị phạt đã đặc tả ở FR-CTP-14, hai sheet còn lại và màn thống kê của Nhân sự đặc tả tại đây.

Mã Yêu cầu Ghi chú kiểm thử
FR-CTP-10 ✸ Sheet "Ngày thiếu giờ tháng M/YYYY" (mở từ ô đếm Ngày thiếu giờ) — bố cục tối giản: mỗi dòng chỉ gồm dd/MM + nhãn "Thiếu giờ công", không có mũi tên bên phải; chân sheet là khối "Tổng số ngày · N ngày". Không hiện giờ, số phiên, số giờ thiếu, chip trạng thái hay biểu tượng điều hướng.
· Bộ lọc tự động: ngày có công ngày < 1 (chưa đủ công) và đơn chưa được duyệt (chưa giải trình · chờ duyệt · từ chối). Bỏ ngày Quên chấm công và ngày đã có đơn Đã duyệt.
· Bấm một dòng → đóng sheet và mở chi tiết đúng ngày đó (công ngày · danh sách phiên · sự kiện).
· Ô đếm ngoài màn dùng đúng bộ lọc này — số trên ô luôn khớp số dòng trong sheet. (Chốt 19/08/2026.)
Tháng mẫu: sheet liệt kê 4 ngày (05 · 11 · 16 · 17/06), chân ghi 4 ngày, ô đếm cũng 4. Bấm dòng 17/06 → mở chi tiết ngày 17/06. Ngày Quên chấm công và ngày đơn Đã duyệt → không xuất hiện
FR-CTP-12 ✸ Sheet "Giờ tăng ca (OT)" — mỗi dòng chỉ gồm ngày · giờ bắt đầu – giờ kết thúc · số giờ; không hiện nội dung công việc, không hiện tiền. Chốt bằng khối Tổng giờ OT. Chỉ liệt kê ca đã duyệt (BR-GT-10 ⟨0.3⟩ — giờ tăng ca là chỉ số riêng, không cộng vào số công).
· Sheet Ngày nghỉ & vắng bị phạt — gồm ngày nghỉ và ngày vắng, trong đó có cả ngày đi công tác đơn chưa duyệt hiển thị dưới nhãn Vắng (BR-CTP-12); nhãn từng dòng & thao tác bấm dòng đặc tả ở FR-CTP-14. (Chốt 19/08/2026.)
Sheet OT: 10/06/2026 · 16:00 – 18:30 · 2g 30p — không có dòng "Đổ bê tông sàn tầng 3", không có số tiền. Ca chờ duyệt / từ chối → không vào sheet
FR-CTP-08 ✸ Màn thống kê của Nhân sự (HR) cho khối Công trường hiển thị cột Tổng giờ công — không phải giờ thô vào–ra — và cột Số phiên của từng ngày. Đối chiếu Tổng giờ công của HR với tổng ở app nhân viên: khớp từng ngày. Ngày 07:00–11:30 + 13:00–16:30 → HR hiện 8g00 · 2 phiên (không phải 9g30)

5. Bộ ca kiểm thử

5.1 Trạng thái làm việc

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-TT-01 Chọn Công tác, bỏ trống nơi đến, bấm Xác nhận Nút Xác nhận vô hiệu, không đổi được FR-15 · BR-06
TC-TT-02 Chọn Công tác, nhập nơi đến → Xác nhận → Huỷ ở hộp hỏi lại Giữ trạng thái cũ; mở lại bảng chọn vẫn còn nơi đến vừa nhập FR-16
TC-TT-03 Chọn Ra ngoài, để trống lý do → Đồng ý Đổi thành công; hiển thị Không lý do · từ HH:mm FR-07 · FR-08 · BR-05
TC-TT-04 Chọn Ra ngoài, có nhập lý do → Đồng ý Hiển thị Lý do: <nội dung> · từ HH:mm FR-07
TC-TT-05 Nhân viên chưa chấm công & chưa đổi trạng thái trong ngày Hiển thị Nghỉ, không có giờ, dòng trong danh sách mờ, nằm cuối danh sách FR-09 · FR-13 · FR-18 · BR-08
TC-TT-06 Nhân viên có đơn nghỉ đã duyệt, loại Nghỉ phép Nhãn hiển thị Nghỉ phép (không phải "Nghỉ") BR-08
TC-TT-06b Nhân viên có đơn nghỉ đã duyệt, loại Nghỉ không lương Nhãn hiển thị Nghỉ không lương BR-08
TC-TT-06c Lọc trạng thái Nghỉ khi danh sách có đủ 3 nhãn (Nghỉ · Nghỉ phép · Nghỉ không lương) Kết quả gồm cả ba FR-10 · BR-08
TC-TT-07 Đổi trạng thái nhiều lần trong ngày (VP → Ra ngoài → Công tác) Chỉ hiển thị lần cuối; giờ hiển thị = giờ bắt đầu lần cuối FR-01 · FR-05 · BR-01 · BR-02 · BR-03
TC-TT-07b Lần lượt đổi sang Văn phòng / công trường → Công tác / Ra ngoài → Nghỉ Tiền tố giờ đổi đúng: Vào HH:mm → Từ HH:mm → Nghỉ (không giờ) FR-05
TC-TT-08 Chọn lại đúng trạng thái đang có → Xác nhận Đóng bảng chọn, không hỏi lại, không sinh log FR-17
TC-TT-09 Mở màn hình bằng tài khoản bất kỳ Dòng của chính mình hiển thị … (bạn) và nằm đầu danh sách FR-02 · FR-13
TC-TT-10 Đăng nhập tài khoản có trạng thái Nghỉ Dòng của mình vẫn nằm đầu danh sách (kèm (bạn)), không bị đẩy xuống cuối; nhân viên khác đang Nghỉ vẫn ở cuối FR-13
TC-TT-10b Nhân viên tự khai Văn phòng nhưng cả ngày không chấm công Hiển thị Văn phòng (kèm giờ khai), không đổi thành Nghỉ BR-09 · BR-02
TC-TT-10c Qua 00:00 sang ngày mới, chưa chấm công & chưa khai lại Trạng thái mọi nhân viên tự về Nghỉ (không giữ trạng thái hôm trước); mốc cũ vẫn còn trong Lịch sử thay đổi trạng thái BR-21
TC-TT-11 Đếm tổng quan khi số người thuộc phạm vi xem nhỏ hơn tổng số nhân viên Hiển thị đúng dạng <đang xem>/<tổng> người FR-03
TC-TT-12 Lọc từng địa điểm công trường: H08 Đông Anh → Linh Đàm → Yên Bái Mỗi lựa chọn chỉ hiện nhân viên của đúng địa điểm đó; không có lựa chọn gộp "Công trường" — bộ lọc tách riêng từng địa điểm (FR-10) FR-10
TC-TT-13 Lọc lần lượt từng trạng thái Mỗi trạng thái đều có lựa chọn lọc, kết quả khớp FR-10
TC-TT-14 Tìm theo họ tên + lọc nhóm cùng lúc Danh sách và bộ đếm phản ánh cả hai điều kiện FR-03 · FR-11
TC-TT-15 Tìm chuỗi không tồn tại Hiện "Không có nhân viên nào khớp." FR-18
TC-TT-16 Kéo xuống (Pull to Refresh) khi đang lọc + đang tìm Danh sách nạp lại, giữ nguyên bộ lọc và từ khoá tìm FR-12
TC-TT-17 Người khác đổi trạng thái trên máy khác Danh sách tự cập nhật khi có dữ liệu mới từ máy chủ FR-12
TC-TT-18 Đăng nhập tài khoản phòng ban khác Vẫn xem được trạng thái của toàn bộ nhân viên công ty BR-10
TC-TT-19 Thử tác động lên dòng của nhân viên khác Không có nút Đổi trên dòng người khác; danh sách là chỉ xem FR-04 · BR-11
TC-TT-21 Đổi trạng thái khi giờ thiết bị bị chỉnh lệch Giờ ghi nhận theo giờ hệ thống, không theo thiết bị BR-03
TC-TT-22 ✥ Giải trình SAU ngày đi — chưa có đơn Đi công tác nào cho hôm nay → mở bảng chọn → chạm Công tác Ô Nơi công tác trống và nhập được bình thường; hiện dải vàng "Chưa có đơn Đi công tác cho hôm nay — bạn tự nhập nơi công tác và giải trình bù sau…" + liên kết Tạo đơn; nút Xác nhận vô hiệu cho tới khi nhập FR-25 · BR-25 · BR-06
TC-TT-23 ✿ Đã đăng ký giải trình trước — đã có đơn Đi công tác (Chờ duyệt) phủ hôm nay, nơi công tác trong đơn = "Nhà máy Yên Bái — KCN Âu Lâu, TP Yên Bái" → chạm Công tác Ô Nơi công tác điền sẵn đúng "Nhà máy Yên Bái — KCN Âu Lâu, TP Yên Bái" và KHOÁ: nền xám, chạm vào không hiện con trỏ / không bật bàn phím; dưới ô có dòng "Lấy theo đơn GT-2026-0142 — sửa nơi công tác thì sửa ở đơn."; không có dải nhắc vàng; nút Xác nhận mở sẵn FR-25 · BR-25
TC-TT-24 ✿ Tiếp TC-TT-23: thử gõ đè, dán (paste) và xoá sạch ô Nơi công tác Không thao tác nào đổi được giá trị — ô luôn giữ "Nhà máy Yên Bái — KCN Âu Lâu, TP Yên Bái"; nút Xác nhận không bao giờ bị vô hiệu vì ô không thể trống FR-25 · BR-25 · BR-06
TC-TT-24b ✿ Tiếp TC-TT-23: vào Đơn của tôi sửa đơn GT-2026-0142 sang "Kho Đông Anh" → quay lại đổi trạng thái Ô Nơi công tác điền sẵn "Kho Đông Anh" (lấy giá trị mới nhất của đơn) và vẫn khoá; dòng chú thích vẫn ghi mã đơn BR-25 · BR-26
TC-TT-24c ✿ Chuyển giữa hai nhánh trong cùng phiên: đang mở bảng chọn ở nhánh không đơn (ô trống, gõ dở "Kho tạm") → bật đơn của hôm nay Ô chuyển sang khoá và hiện địa chỉ của đơn, giá trị gõ dở bị thay, dải nhắc vàng biến mất. Tắt đơn trở lại → ô mở khoá, trống, dải vàng hiện lại FR-25 · BR-25
TC-TT-24d ✿ Nhánh có đơn — xác nhận đổi trạng thái Hộp xác nhận hiện Nơi công tác đúng địa chỉ của đơn; sau khi đồng ý, thẻ trạng thái ghi đúng địa chỉ đó FR-25 · BR-25
TC-TT-25 ✥ Đổi thành công sang Công tác Thẻ trạng thái của tôi hiện dòng "Đã mở nút Chấm công đi công tác khi bạn ở ngoài phạm vi"; đổi tiếp sang Văn phòng → dòng đó biến mất FR-26 · BR-VT-28

✥ TC-TT-22 · TC-TT-25 — bổ sung ở bản 1.1 (quyết định BA 20/08/2026).   ✿ TC-TT-23 → TC-TT-24d — sửa / bổ sung ở bản 1.5 (quyết định BA 03/09/2026): ô Nơi công tác ở nhánh đã có đơn nay khoá, không sửa được (BR-25 · FR-25).

5.2 Lịch sử thay đổi trạng thái

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-LS-01 Mở bảng lịch, chọn ngày tương lai Ngày tương lai không bấm được FR-20 · BR-20
TC-LS-02 Chọn ngày nhân viên đổi trạng thái 3 lần Danh sách ngoài chỉ hiện mốc cuối cùng; mở chi tiết mới thấy đủ 3 mốc FR-21 · FR-23 · BR-15
TC-LS-03 Xem mốc trạng thái Văn phòng trong bảng chi tiết Chỉ có giờ + tên trạng thái, không có dòng mô tả BR-16
TC-LS-04 Ngày nhân viên có đơn nghỉ Chờ duyệt Hiển thị Nghỉ trơn, không kèm Nghỉ phép BR-18
TC-LS-05 ✾ Ngày 27/07, NV007 — nghỉ phép cả ngày, đơn đã duyệt Đúng 1 mốc: Nghỉ phép · Cả ngày — không dòng mô tả nào bên dưới (không mã đơn, không "Đã duyệt"). Không có mốc Nghỉ đứng trước, không có giờ ở mốc nghỉ phép BR-16 · BR-22 · BR-23 · BR-24
TC-LS-05b ✾ Soát toàn bộ các ngày trong mockup, tìm chuỗi "Nghỉ → Nghỉ phép" hoặc "Nghỉ → Nghỉ không lương" Không ngày nào có chuỗi này; nhãn theo đơn luôn thay thế nhãn nền BR-22 · BR-24
TC-LS-05c ✾ Soát mọi mốc thuộc nhóm nghỉ Không mốc nào có giờ; mốc theo đơn hiển thị <nhãn> · <buổi>, mốc nền chỉ hiện Nghỉ BR-19 · BR-23
TC-LS-05d ✾ Ngày 29/07, NV007 — chưa chấm công, chưa khai gì Đúng 1 dòng Nghỉ, không giờ, không có dòng giải nghĩa nào bên dưới BR-22 · FR-23
TC-LS-05e ✾ Đơn nghỉ phép được duyệt trong ngày (NV008 · 21/07) so với duyệt trước ngày (NV004 · 21/07) Chuỗi mốc không phụ thuộc giờ duyệt — không mốc nào mang giờ duyệt đơn BR-23
TC-LS-06 Chọn ngày không ai phát sinh trạng thái Hiện "Chưa có lịch sử thay đổi trạng thái." FR-24
TC-LS-07 Tìm tên không tồn tại trong ngày đang xem Hiện "Không có nhân viên nào khớp." — khác thông báo TC-LS-06 FR-22 · FR-24
TC-LS-08 ✾ Ngày 21/07 — xem danh sách ngoài của NV001 · NV002 · NV004 · NV008 NV001 · NV002 · NV004 hiển thị trạng thái cuối ngày là Văn phòng kèm Vào HH:mm (không lộ việc buổi sáng nghỉ); NV008 hiển thị Nghỉ phép vì mốc cuối ngày là nghỉ buổi chiều — không dòng phụ, không hiện mã đơn FR-09 · FR-21 · BR-15 · §2.4.3
TC-LS-09 ✾ Ngày 21/07 — mở chi tiết NV001 (nghỉ chưa duyệt) 2 mốc: Nghỉ không có giờ, không có dòng mô tả → 13:02 · Văn phòng (không mô tả) BR-16 · BR-17 · BR-18 · BR-22
TC-LS-10 ✾ Ngày 21/07 — mở chi tiết NV002 và NV004 2 mốc mỗi người: Nghỉ không lương · Buổi sáng / Nghỉ phép · Buổi sáng — không dòng mô tả, không giờ → mốc chiều Văn phòng kèm giờ BR-16 · BR-23
TC-LS-11 ✾ Ngày 21/07 — mở chi tiết NV008 (nghỉ phép buổi chiều, đơn duyệt trong ngày) 2 mốc đúng thứ tự: 07:56 · Văn phòng → Nghỉ phép · Buổi chiều. Không có mốc mang giờ duyệt đơn, không có mốc Nghỉ nền BR-23 · BR-24

✾ TC-LS-05 → TC-LS-05e · TC-LS-08 → TC-LS-11 — bổ sung / viết lại ở bản 0.9 (05/08/2026), phủ luật mới BR-22 → BR-24 (Nghỉ là trạng thái nền, nghỉ phép theo buổi lấy từ đơn) và bộ dữ liệu mẫu ở §2.4.3.

5.3 Giải trình — Đi công tác

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-GT-01 Mở form, chưa chọn loại giải trình Không có trường nào khác, không có nút Gửi đơn FR-GT-07 · BR-GT-01
TC-GT-02 Mở form lần lượt với ?khoi=vp và ?khoi=ct Cả hai khối đều có Đi công tác trong danh sách loại BR-GT-02
TC-GT-03 Chọn Đi công tác, giữ Theo ngày, Sáng 23/07 → Chiều 23/07 Tóm tắt: Đi công tác tại … · Sáng 23/07 → Chiều 23/07 · 1 công FR-GT-04 · BR-GT-06
TC-GT-04 Đi công tác, Theo ngày, Chiều 23/07 → Chiều 23/07 Số công = 0,5 BR-GT-06
TC-GT-05 Đi công tác, Theo ngày, Chiều 23/07 → Sáng 25/07 Số công = 2 BR-GT-06
TC-GT-06 Đi công tác, Theo ngày, Đến ngày < Từ ngày Dòng lỗi đỏ "Đến ngày phải từ Từ ngày trở đi", nút Gửi bị khoá; sửa lại đúng thứ tự → nút mở lại BR-GT-11 · FR-GT-10
TC-GT-06b Đi công tác, Theo ngày, cùng ngày nhưng Chiều → Sáng Báo lỗi + khoá nút Gửi (khoảng không hợp lệ) BR-GT-11
TC-GT-06c Đi công tác, Theo giờ, Đến giờ ≤ Từ giờ Dòng lỗi "Đến giờ phải sau Từ giờ", nút Gửi bị khoá BR-GT-11 · FR-GT-10
TC-GT-06d Khai khoảng dài (vd 30 ngày) hoặc ngày tương lai xa (vd sau 6 tháng) Cho phép — không có giới hạn số ngày / tương lai BR-GT-12
TC-GT-07 Đi công tác, chuyển sang Theo giờ Ẩn nhóm từ ngày / đến ngày, hiện Ngày + Từ giờ + Đến giờ; dòng gợi ý đổi nội dung FR-GT-03
TC-GT-08 Đi công tác, Theo giờ, 23/07 09:40 → 18:00 Tóm tắt chỉ có khoảng giờ, không hiển thị số công FR-GT-04 · BR-GT-06
TC-GT-09 Đi công tác, bỏ trống Nơi công tác Tóm tắt hiện Đi công tác tại — · …; nút Gửi đơn bị vô hiệu hoá, ô Nơi công tác báo lỗi đỏ; nhập nơi công tác → nút mở lại ngay FR-GT-04 · FR-GT-09 · BR-GT-03
TC-GT-10 ✾ Đi công tác khối Công trường (?khoi=ct) — bấm qua lại Theo giờ ↔ Theo ngày Theo giờ → hiện khối Phiên cần giải trình (2 nút Phiên 1 / Phiên 2, mặc định Phiên 1, không kèm giờ) ngay dưới ô Ngày, TRÊN cặp Từ giờ / Đến giờ; Theo ngày → khối biến mất. ?khoi=vp → không thấy khối này ở cả hai phạm vi FR-CTP-11 · BR-CTP-11
TC-GT-10 Chọn Đi công tác rồi đổi sang loại khác rồi quay lại Nhóm trường hiện đúng, không còn sót nhóm cũ FR-GT-01
TC-GT-11 Kiểm nhãn ô mô tả khi chọn Đi công tác Nhãn = Nội dung công tác (có dấu bắt buộc), gợi ý "Công việc thực hiện tại nơi công tác…" FR-GT-06
TC-GT-12 Gửi đơn Đi công tác hợp lệ Toast "Đã gửi đơn giải trình", quay lại màn trước, đơn vào Đơn của tôi ở trạng thái Chờ duyệt FR-GT-08 · BR-CC-10
TC-GT-12b ✽✸ Hôm nay 17/06, khai đơn cho ngày quá khứ trong 7 ngày (12/06 = D+5) Gửi được bình thường — lịch cho chọn, không báo quá hạn (sửa bản 1.2: mốc cũ 05/06 nay đã quá 7 ngày → chặn) BR-GT-09 · FR-GT-11 · §3.1.1
TC-GT-12b2 ✽✸ Hôm nay 17/06, khai đơn cho ngày quá 7 ngày (09/06 = D+8) Không gửi được — lịch làm mờ mọi ngày trước 10/06; nếu cố đặt giá trị → báo "Đã quá hạn giải trình — quá 7 ngày kể từ ngày xảy ra" + khoá nút Gửi (sửa bản 1.2 — thay luật "ngày của tháng trước") BR-GT-09 · FR-GT-11 · §3.1.1
TC-GT-12b3 ✽✸ Ngày 28/06 còn chưa giải trình; kiểm ở 05/07 23:00 (= D+7) rồi kiểm lại ở 06/07 (= D+8) 05/07: vẫn giải trình được; 06/07: đóng — chi tiết ngày 28/06 hiện nhãn tĩnh "Đã quá hạn", không còn nút Giải trình ngay. Cửa sổ vắt sang tháng 7 là đúng luật (sửa bản 1.2 — trước đây đóng vào 01/07 theo mốc hết tháng) BR-GT-09
TC-GT-12c ✽ Khai đơn trước khi đi (ngày tương lai, kể cả sang tháng sau) và trong chính ngày phát sinh Cả hai trường hợp đều gửi được bình thường — ngày tương lai không chịu hạn 7 ngày, cận trên không bị bó BR-GT-09 · BR-GT-12
TC-GT-12d Đơn Đi công tác chuyển Đã duyệt (đủ 2 bên) Ngày trong đơn được tính công theo §3.2.2; không phát sinh phụ cấp công tác; bảng công tháng hết cảnh báo thiếu công cho ngày đó BR-GT-10 · BR-CC-10b
TC-GT-12e Đơn Đi công tác còn Chờ duyệt hoặc bị Từ chối Không tính công cho ngày trong đơn BR-GT-10
TC-GT-12f Đơn Đi công tác (23–24/07) chuyển Đã duyệt, nhân viên không khai gì Trạng thái làm việc ngày 23 & 24/07 tự thành Công tác; màn Trạng thái làm việc hiện Công tác kèm nơi công tác; lịch sử ghi nguồn hệ thống, không hiện mã đơn BR-GT-07 · BR-21
TC-GT-12g Ngày đang Công tác (do đơn duyệt), nhân viên tự đổi sang Ra ngoài Cho phép đổi — hiển thị trạng thái mới nhất (Ra ngoài); đơn vẫn giữ nguyên để tính công BR-GT-07 · BR-02

5.4 Chấm công ngoài phạm vi

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-VT-01 Đứng trong vùng, bấm Chấm công Đi thẳng sang nhận diện khuôn mặt; không hiện 2 nút, không hiện bảng chọn FR-VT-03 · BR-VT-02
TC-VT-02 ✥ Đứng ngoài vùng, trạng thái làm việc đang là Công tác, bấm Chấm công Chip đổi đỏ "Bạn đang ngoài phạm vi chấm công", khoảng cách hiện số thực; nút chính ẩn; hiện dải tím trạng thái + đúng 1 nút Chấm công đi công tác rộng cả hàng, không có nút Thử lại ❂. (Trạng thái khác → xem TC-VT-35) FR-VT-01 · FR-VT-02 · FR-VT-03 · BR-VT-28
TC-VT-03 ❂ Ngoài vùng ở trạng thái ≠ Công tác → di chuyển vào vùng → bấm Thử lại Chip về xanh, nút Chấm công mở lại, nút Thử lại biến mất. ❂ Nhánh Công tác không có nút Thử lại nên không chạy ca này FR-VT-04
TC-VT-04 Bấm Chấm công đi công tác → bảng xác nhận mở → bấm Huỷ Đóng bảng, vẫn ở trạng thái ngoài vùng; không tạo bản ghi, không tạo đơn FR-VT-05
TC-VT-05 Bảng xác nhận → chạm nền mờ bên ngoài Đóng bảng như bấm Huỷ FR-VT-05
TC-VT-06 † Mở bảng xác nhận, soát mọi lối đi trên bảng Không có thẻ "Chỉ tạo đơn đi công tác", không có liên kết nào sang giai-trinh-cong-form.html; chỉ có Xác nhận chấm công và Huỷ FR-VT-06
TC-VT-07 † Sau khi chấm công ngoài phạm vi, mở Đơn của tôi Không có đơn Đi công tác nào tự sinh ra — muốn có đơn thì nhân viên tự tạo ở màn Công tháng BR-VT-03
TC-VT-08 Bấm Xác nhận chấm công Sang màn nhận diện khuôn mặt; chip vị trí đỏ kèm địa chỉ thực, không phải tên địa điểm chấm công FR-VT-07 · FR-VT-08
TC-VT-09 Bấm Xác nhận chấm công, thử bỏ qua bước khuôn mặt Không có đường bỏ qua — vẫn bắt buộc xác thực khuôn mặt + liveness BR-VT-04
TC-VT-10 †✾ Hoàn tất luồng Chấm công đi công tác Biên nhận hiện "Vị trí hiện tại của bạn" + địa chỉ thực + chip đỏ "Ngoài phạm vi". KHÔNG còn khối lý do đỏ "Lý do: Đi công tác… ngày ghi Vắng…" — chú thích đó chỉ xuất hiện một lần ở bảng xác nhận trước khi chấm FR-VT-09 · BR-VT-06
TC-VT-29 ✾ Mở bảng xác nhận, đọc dòng nhắc điều kiện Đúng câu "Bản ghi chấm công này là dự tính cần quản lý và nhân sự duyệt đơn." — không còn câu dài "Ngày này ghi Vắng cho tới khi đơn… duyệt đủ 2 bên" FR-VT-05 · BR-VT-05
TC-VT-30 ✾✿❂ Đứng ngoài vùng và đang ở trạng thái Công tác, soát nút trên màn kiểm tra vị trí ❂ Đúng một nút Chấm công đi công tác rộng cả hàng — không còn nút Thử lại, không còn nhãn "Chấm công tại đây". ✿ Trạng thái khác thì chỉ có 1 nút Thử lại — ca này không chạy được nếu chưa khai Công tác (xem TC-VT-35) FR-VT-03 · BR-VT-28
TC-VT-11 † Sau khi chấm ngoài phạm vi, mở màn theo dõi của Nhân sự Bản ghi hiện kèm cảnh báo "Chấm ngoài phạm vi <số> m · lý do Đi công tác — đã ghi nhận kèm ảnh, chưa tính công, chờ đơn Đi công tác được duyệt đủ 2 bên" FR-VT-10 · BR-VT-05
TC-VT-12 Sau khi chấm ngoài phạm vi, xem Trạng thái làm việc của mình Trạng thái không tự đổi sang Công tác — giữ nguyên trạng thái đang có BR-VT-07
TC-VT-13 Bật ứng dụng giả mạo vị trí (mock location) rồi bấm Chấm công Chặn hoàn toàn — không hiện nút Chấm công đi công tác, không vào được luồng này BR-VT-08
TC-VT-25 ✽ Soát toàn bộ bảng xác nhận & luồng Chấm công đi công tác Không có ô nhập lý do, không có bước chụp ảnh hiện trường; chỉ khuôn mặt + liveness BR-VT-20 · BR-VT-04
TC-VT-26 ✽ Chấm ngoài phạm vi nhiều lần trong tháng (vd 10 lần) Không cảnh báo, không khoá, lần thứ 10 vẫn chấm được như lần đầu; công vẫn phụ thuộc đơn được duyệt BR-VT-21
TC-VT-27 ✽ Đứng vượt ngưỡng khoảng cách Nhân sự cấu hình rồi bấm Chấm công Không hiện nút Chấm công đi công tác — chỉ còn Thử lại + dòng "Bạn ở quá xa mọi vị trí chấm công — liên hệ Nhân sự" BR-VT-22
TC-VT-28 ✽ Nhân sự đổi ngưỡng khoảng cách trên web HCNS rồi đo lại ở cùng vị trí Hành vi app đổi theo cấu hình mới, không cần phát hành bản app mới BR-VT-22
TC-VT-35 ✾ Trạng thái làm việc = Văn phòng, đứng ngoài vùng, bấm Chấm công Chip đỏ như thường + thẻ Vị trí hiện tại của bạn + dòng nhắc xám "…vượt quá bán kính cho phép… hãy di chuyển đến gần rồi bấm Thử lại." + 1 nút Thử lại rộng cả hàng. KHÔNG nút Chấm công đi công tác, KHÔNG khối vàng, KHÔNG nút Đổi trạng thái làm việc FR-VT-03 · FR-VT-23 · BR-VT-28
TC-VT-36 ✾ Lặp TC-VT-35 với trạng thái Ra ngoài, Nghỉ, Linh Đàm / Yên Bái / H08 Đông Anh Cả 5 trạng thái đều ra đúng một màn như TC-VT-35 — không trạng thái nào hiện thêm khối hướng dẫn hay nút phụ FR-VT-23 · BR-VT-28
TC-VT-37 ✾ Từ màn TC-VT-35 → về Trang chủ → mở Trạng thái làm việc → đổi sang Công tác → quay lại màn kiểm tra vị trí Nút Chấm công đi công tác hiện ra, kèm dải tím "Trạng thái làm việc: Công tác · <nơi>"; không phải đo lại vị trí thủ công FR-VT-03 · FR-VT-23 · BR-VT-28
TC-VT-38 ✥ Đang Công tác + ngoài phạm vi → đổi trạng thái sang Ra ngoài rồi quay lại màn kiểm tra vị trí Nút Chấm công đi công tác đóng lại; các bản ghi đã chấm trước đó giữ nguyên, không bị xoá BR-VT-28
TC-VT-39 ✥ Đang Công tác (nơi đến "Nhà máy Yên Bái — KCN Âu Lâu, TP Yên Bái") → bấm Chấm công đi công tác Bảng xác nhận có dải nơi công tác đúng "Trạng thái làm việc: Công tác · Nhà máy Yên Bái — KCN Âu Lâu, TP Yên Bái"; không có ô nhập nào FR-VT-24 · BR-VT-20
TC-VT-40 ✥ Khai Công tác đầy đủ, chấm công ngoài phạm vi, nhưng không tạo đơn Đi công tác Bản ghi vẫn lưu, nhưng ngày vẫn ghi Vắng, công 0 và vẫn bị phạt — khai trạng thái không thay cho đơn đã duyệt BR-VT-29 · BR-VT-09 · BR-VT-12
TC-VT-41 ✿ Đổi trạng thái ở máy khác trong lúc bảng xác nhận đang mở: máy A đang mở bảng ở bước ③ → máy B đổi trạng thái sang Văn phòng → quay lại máy A bấm Xác nhận chấm công Bảng đóng lại, không sang màn nhận diện khuôn mặt, không ghi bản ghi nào; hiện dòng nhắc "Trạng thái làm việc của bạn không còn là Công tác — hãy khai lại trạng thái rồi thử lại." BR-VT-32
TC-VT-42 ✿ Đóng bảng rồi đổi trạng thái, không bấm lại nút: đang Công tác, mở bảng ③ → Huỷ → đổi trạng thái sang Ra ngoài → dùng nút Back / mở lại app để cố quay lại bảng Không có đường nào mở lại bảng: màn ngoài phạm vi trở về bản cũ (chỉ Thử lại), nút Chấm công đi công tác không còn BR-VT-32 · FR-VT-23
TC-VT-43 ✿ Trạng thái đổi SAU khi bản ghi đã lưu: chấm công đi công tác xong → đổi trạng thái sang Văn phòng Bản ghi đã lưu giữ nguyên (không xoá, không đổi cờ), vẫn ghép đơn theo BR-VT-09; chỉ nút đóng lại cho các lần chấm sau BR-VT-32 · BR-VT-28 · BR-VT-09

† TC-VT-06 · TC-VT-07 · TC-VT-10 · TC-VT-11 — viết lại theo quyết định BA 04/08/2026.   ✽ TC-VT-25 → TC-VT-28 — bổ sung 05/08/2026 (bản 0.8), phủ BR-VT-20 → BR-VT-22.   ✾ TC-VT-10 viết lại · TC-VT-29 · TC-VT-30 bổ sung — bản 0.9 (05/08/2026), phủ đổi nhãn nút và bỏ khối lý do ở biên nhận (FR-VT-03 · FR-VT-09).   ✥ TC-VT-35 → TC-VT-40 — bổ sung ở bản 1.1 (20/08/2026), phủ cổng trạng thái làm việc (BR-VT-28 · BR-VT-29 · FR-VT-23 · FR-VT-24). Lưu ý khi chạy TC-VT-02: ca này viết từ bản 0.9 nên kỳ vọng "hiện 2 nút" — từ bản 1.1 chỉ đúng khi trạng thái đang là Công tác, và từ bản 1.7 (05/09/2026) nhánh Công tác chỉ còn một nút Chấm công đi công tác.   ✿ TC-VT-41 → TC-VT-43 — bổ sung ở bản 1.5 (quyết định BA 03/09/2026), phủ BR-VT-32: cổng trạng thái áp cho cả bước mở bảng xác nhận và bước bấm Xác nhận, không chỉ ở chỗ hiện nút.

5.4b Phiên chấm công theo vị trí (§4.6)

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-VT-14 ✦ Chấm vào rồi ra tại cùng vị trí làm việc, sau đó bấm chấm công lần 3 vẫn ở vị trí đó Lần 3 ghi nhận là Ra — cập nhật mốc ra muộn nhất, không mở phiên mới (giữ hành vi cũ) FR-VT-16 · BR-VT-14
TC-VT-15 ✦ Chấm vào 08:00 · ra 12:00 ở văn phòng, chiều di chuyển tới nơi công tác (ngoài phạm vi) rồi chấm công Lần chấm ở nơi công tác ghi nhận là Vào (không phải Ra tiếp), mở phiên 2; app hiện nhãn Chấm công vào + dòng "Bắt đầu phiên chấm công mới tại …"; mốc Ra 12:00 của phiên 1 giữ nguyên FR-VT-16 · FR-VT-17 · BR-VT-14
TC-VT-16 ✦ Tiếp TC-VT-15: chấm ra tại nơi công tác lúc 17:30 Phiên 2 đóng bình thường (vào 13:30 – ra 17:30), y như một ngày mới FR-VT-17 · BR-VT-14
TC-VT-17 ✦ Tiếp TC-VT-16: quay lại văn phòng rồi chấm công Ghi nhận là Vào, mở phiên 3 tại vị trí làm việc — không nối vào phiên 1 buổi sáng FR-VT-17 · BR-VT-14 · BR-VT-15
TC-VT-18 ✦✾ Chấm vào ở văn phòng, không chấm ra, sang thẳng nơi công tác chấm công Vẫn mở được phiên mới ở nơi công tác; phiên 1 thiếu mốc Ra → không tính thời lượng. Ngày chưa có đơn → nhãn Quên chấm công (không phải Vắng), công —, không bị phạt
TC-VT-18b ✾ Tiếp TC-VT-18: nhân viên gửi đơn giải trình cho ngày đó Nhãn ngày vẫn là Quên chấm công và công vẫn — (đơn không làm đổi nhãn); chỉ dòng nhắc cần giải trình để chốt công biến mất và ngày đi tiếp theo luồng duyệt đơn
TC-VT-18c ✾ Chấm vào rồi không chấm ra cả ngày, không tạo đơn nào Ngày hiển thị Quên chấm công (ô lịch vàng) — Giờ vào đúng mốc đã chấm, Giờ ra —, Công —, KHÔNG có tiền phạt. Khác hẳn ngày không chấm công lần nào (ngày đó mới là Vắng + phạt) BR-VT-17 · BR-VT-12
TC-VT-19 ✦✧ Chấm ngoài phạm vi ở hai địa chỉ khác nhau trong cùng ngày Ghi nhận MỘT phiên công tác (vào ở địa chỉ 1, ra ở địa chỉ 2) — không tách thành 2 phiên; mỗi lần chấm vẫn lưu toạ độ + địa chỉ thực riêng và hiện đủ trong danh sách điểm công tác BR-VT-25 · BR-VT-06 · FR-VT-22
TC-VT-20 ✦ Soát danh sách phiên của ngày có 3 phiên Hiện đủ 3 dòng: vị trí · giờ vào · giờ ra · thời lượng · cờ trong / ngoài phạm vi; tổng thời lượng khớp FR-VT-19 · BR-VT-15
TC-VT-29 ✧ Vào ở nơi công tác A 08:15, di chuyển sang nơi công tác B, bấm chấm công ở B lúc 17:40; đơn Đi công tác Đã duyệt Nhãn nút ở B là Chấm công ra (không phải Chấm công vào); ngày có 1 phiên công tác 08:15 – 17:40 (9g25) → 1 công (chạm trần); không bị nhãn Quên chấm công; danh sách điểm công tác hiện đủ 2 địa chỉ BR-VT-25 · FR-VT-17 · FR-VT-22
TC-VT-30 ✧ Tiếp TC-VT-29 nhưng đơn còn Chờ duyệt Phiên vẫn ghi nhận đủ 2 mốc, nhưng không cộng công — ngày ghi Vắng, công 0, có phạt vắng; đơn duyệt sau thì tự tính lại BR-VT-25 · BR-VT-09 · BR-VT-12
TC-VT-31 ✧ Ngày công tác qua 3 nơi: vào A 08:00 · chấm ở B 11:20 · chấm ở C 17:30; đơn Đã duyệt Lần chấm ở B là Ra (đóng phiên), lần chấm ở C cập nhật mốc ra muộn nhất → vẫn 1 phiên 08:00 – 17:30; màn chính hiện 1 dòng A → C · 08:00 – 17:30 + chip 3 điểm công tác, bấm chip ra đủ 3 lần chấm BR-VT-25 · FR-VT-22 · BR-VT-15
TC-VT-32 ✧ Ngoài phạm vi chấm đúng 1 lần cả ngày (vào A 09:00, không chấm gì nữa); đơn Đã duyệt Phiên công tác thiếu mốc Ra thật → nhãn ngày Quên chấm công, Giờ ra —, công —, không phạt BR-VT-25 · BR-VT-17
TC-VT-33 ✧ Đổi giữa hai địa điểm chấm công: vào VP 08:00 · ra VP 11:30 · sang công trường Đông Anh chấm lúc 13:00 Lần chấm ở Đông Anh là Vào, mở phiên mới — không áp luật gộp của BR-VT-25 (cả hai đều trong phạm vi) BR-VT-14 · BR-VT-25
TC-VT-34 ✧ Từ nơi công tác quay về VP: vào A 08:00 · chấm ở B 15:00 · về VP chấm lúc 16:00 Chấm ở B = Ra (đóng phiên công tác 08:00 – 15:00, không tách phiên); chấm ở VP = Vào, tách phiên — đây là trường hợp tách phiên duy nhất khi đang đi công tác. Ngày có 2 phiên: 1 phiên công tác + 1 phiên VP BR-VT-14 · BR-VT-25

✦ TC-VT-14 → TC-VT-20 — bộ ca mới của bản 0.6 (§4.6).   ✧ TC-VT-29 → TC-VT-34 — bổ sung ở bản 1.0, phủ BR-VT-25 · FR-VT-22 (vào một nơi, ra một nơi khác); TC-VT-33 · TC-VT-34 phân định ranh giới với BR-VT-14 (địa điểm chấm công vẫn reset phiên). TC-VT-19 viết lại ở bản 1.0 — trước đây ghi "2 phiên riêng", nay là 1 phiên công tác.

5.5 Chi tiết công của ngày Đi công tác (§4.5)

Chạy lần lượt cho 2 vai trò: nhân viên (cong-thang.html) và nhân sự (cong-thang.html?role=hr) — kỳ vọng giống hệt nhau về nhãn ngày, công ngày và trạng thái đơn.

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-CT-01 ✱ Ngày 19/06 — đơn Đi công tác Chờ duyệt, đã chấm công ngoài phạm vi đủ giờ Nhãn ngày Vắng (ô lịch xám); Giờ vào · Giờ ra đều — (đã chấm 07:55–17:32 nhưng đơn chưa duyệt nên chưa công bố giờ) và Công ngày 0 và ngày bị phạt vắng; khối đơn: Đi công tác · chip Chờ duyệt · dòng giờ Vào 07:55 · Ra 17:32 · nút Xem đơn › — không có dòng Nơi công tác … FR-VT-11 · FR-VT-12 · FR-VT-14 · FR-VT-25 · BR-VT-09 · BR-VT-11
TC-CT-02 ✱✥ Ngày 22/06 — đơn Đi công tác Từ chối, đã chấm 08:05–17:20 Nhãn ngày Vắng; 3 ô Giờ vào · Giờ ra đều — (giờ chưa được công nhận), Công ngày 0, ngày bị phạt vắng; khối đơn: chip Từ chối · dòng giờ Vào 08:05 · Ra 17:20 · nút Xem đơn › — không có dòng Nơi công tác …, không có câu giải thích nào khác FR-VT-11 · FR-VT-14 · FR-VT-25 · BR-VT-09 · BR-VT-11
TC-CT-03 ✸ Ngày 23/06 — đơn Đã duyệt, chấm công 07:52 → 17:36 (9g44 thô − 1g30 nghỉ trưa = 8g14 ≥ định mức 8 giờ làm thực) Nhãn Đủ định mức (ô xanh), Công ngày = 1; khối đơn: chip Đã duyệt · nút Xem đơn › — không có dòng Nơi công tác …, cũng không lặp dòng giờ (giờ đã ở 3 ô đầu màn) FR-VT-11 · FR-VT-14 · FR-VT-25 · BR-VT-10
TC-CT-04 Ngày 24/06 — đơn Đã duyệt, chấm công 09:10 → 15:05 (thiếu định mức) Nhãn Thiếu định mức (ô vàng), Công ngày < 1 (0,6) FR-VT-11 · BR-VT-10
TC-CT-05 ✱ Khối Công trường: ngày 08/06 (chờ duyệt) và 12/06 (đã duyệt, thiếu giờ) 08/06 → Vắng · 0 công · giờ vào/ra 07:05–16:40 vẫn hiện (dù bản ghi đủ 9g35) · bị phạt vắng; 12/06 → Thiếu giờ công · 0,7 công, hiện đủ giờ FR-VT-11 · BR-VT-09 · BR-VT-10
TC-CT-06 Bấm Xem đơn › ở khối đơn của ngày công tác Mở chi tiết đơn Đi công tác đúng ngày, có đủ trường của form (Phạm vi · Từ ngày · Đến ngày · Nơi công tác · Nội dung công tác · File đính kèm) và không có dòng Chấm công trong ngày / Công ngày FR-VT-13 · FR-VT-15 · BR-VT-13
TC-CT-07 Trong chi tiết đơn, soát Tiến trình duyệt Có 2 dòng: Quản lý trực tiếp duyệt và Nhân sự — không phải 1 dòng như đơn nghỉ FR-VT-15 · BR-CC-10b
TC-CT-08 ✱ Đơn của ngày 19/06 chuyển từ Chờ duyệt → Đã duyệt Ngày tự tính lại: nhãn đổi Vắng → Đủ định mức, công 0 → 1, khoản phạt vắng được gỡ; giờ vào / giờ ra hiện ra đúng bản ghi đã chấm (07:55 – 17:32) — trước đó đang là —; không cần nhân viên chấm công lại BR-VT-11 · FR-VT-12
TC-CT-09 Mở cùng ngày bằng ?role=hr Hiển thị giống hệt vai trò nhân viên; ẩn nút Giải trình / Đăng ký và lối vào Đơn của tôi; tiêu đề là tên nhân viên + "HR đang xem · chỉ đọc" FR-VT-11 → FR-VT-15
TC-CT-10 Soát tổng công tháng ở thẻ đầu màn Ngày công tác chờ duyệt / từ chối không cộng công; ngày đã duyệt cộng đúng phần công đã tính BR-VT-09 · BR-VT-10
TC-CT-11 ✱ Soát ô Ngày nghỉ / tiền phạt của tháng Ngày Đi công tác ghi Vắng (đơn chờ duyệt hoặc từ chối) bị cộng vào tiền phạt vắng không phép, đứng cùng danh sách với ngày nghỉ không được duyệt; tổng tiền phạt khớp số dòng BR-VT-12
TC-CT-11b ✱ Ngày nghỉ phép / nghỉ không lương có đơn Chờ duyệt Vẫn bị phạt như đơn Từ chối — trước bản 0.7 chờ duyệt được miễn BR-VT-12
TC-CT-11c ✱ Đơn của ngày đang bị phạt chuyển sang Đã duyệt Khoản phạt của ngày đó biến mất khỏi danh sách và khỏi tổng tiền phạt BR-VT-12
TC-CT-12 ✦✸ Ngày hỗn hợp, đơn Chờ duyệt: VP 08:00–12:00 (4g) + nơi công tác 13:30–17:30 (4g), khối VP định mức 8 giờ làm thực Ngày không ghi Vắng — hiện Giờ vào 08:00 · Giờ ra 12:00 · Công ngày ≈ 0,5, nhãn Thiếu định mức; không có dòng Nơi công tác FR-VT-18 · BR-VT-16 · BR-VT-18
TC-CT-13 ✦✸ Tiếp TC-CT-12: đơn chuyển Đã duyệt Công ngày tự tính lại = 4g + 4g = 8g → ✸ 1 công, nhãn Đủ định mức (nghỉ trưa nằm giữa hai phiên nên không trừ); dòng "Nơi công tác: … · 13:30 – 17:30" hiện ra; không cần chấm công lại (bản 0.6 ghi ≈ 0,9 theo định mức 8g30) FR-VT-20 · BR-VT-18 · §4.6.3
TC-CT-14 ✦ Ngày hỗn hợp đã vượt định mức: VP 08:00–17:35 + nơi công tác 18:00–20:00, đơn Đã duyệt Công ngày = 1 công (chạm trần), không tự sinh công thứ hai / tăng ca BR-VT-19
TC-CT-15 ✦✱ Ngày hỗn hợp, đơn Từ chối Ngày giữ công cơ sở của phần VP, không ghi Vắng, không cộng phần ngoài phạm vi; dòng Nơi công tác vẫn hiện tên nơi đến nhưng không kèm giờ (đơn chưa được duyệt) và phần giờ đó không vào công BR-VT-18 · BR-VT-11
TC-CT-16 ✦ Ngày có nhiều phiên trong phạm vi (VP sáng 08:00–12:00, VP chiều 13:00–17:30) 2 ô giờ hiện Vào 08:00 · Ra 17:30 (sớm nhất / muộn nhất); công tính theo tổng thời lượng 2 phiên, không tính khoảng nghỉ giữa trưa FR-VT-18 · FR-VT-19 · BR-VT-18

| TC-CT-17 ✽✸ | Thời gian di chuyển: VP 08:00–12:00, nơi công tác 13:30–17:30, đơn Đã duyệt, định mức 8 giờ làm thực | Ô Tổng giờ hiện 8g (4g + 4g) — 1g30 giữa hai phiên KHÔNG được cộng, không phải 9g30; công ngày 1 công. Điểm phải soát: nếu hệ thống cộng nhầm thời gian di chuyển thì tổng giờ hiện 9g30 — công vẫn 1 nên chỉ phát hiện được qua ô Tổng giờ (sửa bản 1.2 theo định mức mới) | BR-VT-23 · BR-VT-18 | | TC-CT-18 ✽ | Tiếp TC-CT-15 (ngày hỗn hợp, đơn Từ chối) — soát thông báo & màn Nhân sự | Không có cảnh báo nghi vấn, không có cờ đánh dấu, không có thông báo gửi HR; phần ngoài phạm vi chỉ không được cộng công | BR-VT-24 | | TC-CT-19 ✾ | Ngày tương lai đã đăng ký trước, đơn Đã duyệt, chưa phát sinh chấm công — 26/06 (VP) / 19/06 (CT) | Nhãn ngày Vắng, ô lịch xám; cả 3 ô Giờ vào · Giờ ra · Công ngày đều —; không có tiền phạt; không hiện cảnh báo "Chưa chốt công — thiếu lần chấm" | FR-VT-12 · BR-VT-11 · BR-VT-12 | | TC-CT-19b ✾ | Tiếp TC-CT-19: tới ngày đó mà vẫn không chấm công lần nào | Công ngày mới được tính theo quy đổi buổi trong đơn (= 1 công cả ngày), 2 ô giờ vẫn — | BR-VT-10b | | TC-CT-20 ✾ | Ngày 19/06 (VP) — đơn Chờ duyệt, đã chấm công đủ giờ (07:55–17:32) | 2 ô giờ — (không lộ giờ đã chấm), công 0, nhãn Vắng, bị phạt vắng. Bản ghi chấm công vẫn tồn tại để Nhân sự tra khi duyệt đơn | FR-VT-12 · BR-VT-11 · BR-VT-12 | | TC-CT-21 ✾ | Tiếp TC-CT-20: đơn 19/06 chuyển Chờ duyệt → Đã duyệt | 2 ô giờ chuyển từ — sang 07:55 – 17:32 ngay trong lần tải lại; nhãn Vắng → Đủ định mức, công 0 → 1, gỡ phạt; không cần chấm công lại | FR-VT-12 · BR-VT-11 | | TC-CT-22 ✾ | Ngày 22/06 (VP) — đơn Từ chối, đã chấm 08:05–17:20 | 2 ô giờ —, công 0, nhãn Vắng, bị phạt vắng — giờ đã chấm không được công bố | FR-VT-12 · BR-VT-11 |

| TC-CT-23 ✥ | Ngày 18/06 (VP) — nhân viên đã đổi trạng thái sang Công tác, đã chấm công đi công tác 07:48–17:35, chưa tạo đơn nào | Nhãn ngày Vắng; 3 ô Giờ vào · Giờ ra · Công ngày = — · — · 0; khối Giải trình trong ngày có 1 thẻ: nhãn Đi công tác + chip đỏ Chưa giải trình + dòng Vào 07:48 · Ra 17:35 + nút Giải trình ngay, và không có dòng Nơi công tác … | FR-VT-25 · FR-VT-26 · BR-VT-11 | | TC-CT-24 ✥ | So sánh thẻ ở TC-CT-23 với thẻ ngày đi muộn chưa giải trình (25/06) | Cùng một bố cục: nhãn loại · chip đỏ Chưa giải trình · dòng mốc giờ · nút Giải trình ngay — chỉ khác tên loại và nội dung mốc giờ | FR-VT-26 | | TC-CT-25 ✥ | Bấm Giải trình ngay ở ngày 18/06 | Mở giai-trinh-cong-form.html?khoi=vp&loai=di-cong-tac với ô Loại giải trình đã chọn sẵn Đi công tác | FR-VT-26 | | TC-CT-26 ✥ | Ngày 18/06 — soát tiền phạt trong thẻ | Hiện "− 1.200.000 ₫ phạt vắng, gỡ khi đơn Đã duyệt" (không phải chữ "quá hạn") | BR-VT-12 · BR-VT-27 | | TC-CT-27 ✥ | Ngày 23/06 (đơn Đã duyệt, đã chấm 07:52–17:36) — soát khối giải trình | KHÔNG có dòng Vào · Ra trong thẻ sự kiện (giờ đã hiện ở 3 ô đầu màn) — tránh hiển thị trùng | FR-VT-25 | | TC-CT-28 ✸ | VP — đơn Đã duyệt khai Theo giờ 13:00 – 17:00, thực tế chấm 07:52 → 17:36 (đủ định mức) | Công tính trên giờ chấm thực tế → nhãn Đủ định mức, công = 1; KHÔNG cắt về 4g của khoảng khai trong đơn; không cảnh báo lệch giờ | BR-VT-31 · BR-VT-10a | | TC-CT-29 ✸ | CT — đơn Đã duyệt khai Theo ngày cả ngày (1 công), thực tế chấm 09:10 → 15:05 (thiếu định mức) | Công lấy theo giờ chấm thực tế → công < 1 (0,6), nhãn Thiếu định mức; KHÔNG lấy 1 công theo quy đổi buổi của đơn | BR-VT-31 · BR-VT-10a | | TC-CT-30 ✸ | VP — đơn Đã duyệt, chấm 09:30 → 19:00 (vào sau 08:00, ra sau 17:30, tổng đủ định mức) | Nhãn Đủ định mức, công = 1 — không sinh nhãn Đi muộn / Về sớm cho ngày đi công tác; phần vượt không tự thành tăng ca | BR-VT-31 · BR-VT-19 |

✦ TC-CT-12 → TC-CT-16 — bộ ca mới của bản 0.6 (§4.6.3).   ✱ TC-CT-01 · 02 · 05 · 08 · 11 · 11b · 11c · 15 — sửa / bổ sung ở bản 0.7 (ngày Vắng có đơn chưa duyệt vẫn bị phạt).   ✽ TC-CT-17 · TC-CT-18 — bổ sung ở bản 0.8 (BR-VT-23 · BR-VT-24).   ✾ TC-CT-01 · 08 · 15 sửa · TC-CT-19 → TC-CT-22 bổ sung — bản 0.9: bỏ luật tự điền giờ khi gửi đơn; Giờ vào / Giờ ra chỉ hiện khi đơn Đã duyệt VÀ đã phát sinh chấm công (FR-VT-12 · BR-VT-11).   ✸ TC-CT-19 · TC-CT-19b — bản 1.2 (20/08/2026) xác nhận lại: đơn Đã duyệt mà chưa chấm công giữ nguyên 3 ô — + nhãn Vắng (BR-VT-30).   ✸ TC-CT-28 → TC-CT-30 — bổ sung ở bản 1.2 (20/08/2026): công ngày đi công tác lấy theo giờ chấm thực tế, không cắt theo giờ đăng ký trong đơn (BR-VT-31).   ✥ TC-CT-23 → TC-CT-27 — bổ sung ở bản 1.1 (20/08/2026), phủ tổ hợp ⓪ chưa có đơn (§4.5.1 · FR-VT-25 · FR-VT-26).


5.6 Hạn giải trình — 7 ngày (§3.1.1) ✸

Giả định: hôm nay 19/08/2026. Chạy cho cả hai khối (?khoi=vp và ?khoi=ct).

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-HAN-01 ✸ Chọn ngày 12/08 (= D+7) cho loại Đi công tác Cho gửi — ngày còn trong hạn BR-GT-09 · FR-GT-11
TC-HAN-02 ✸ Chọn ngày 11/08 (= D+8) Ngày mờ trên lịch, không chọn được; nếu ép giá trị → dòng lỗi "Đã quá hạn giải trình — quá 7 ngày kể từ ngày xảy ra" + khoá nút Gửi BR-GT-09 · FR-GT-11
TC-HAN-03 ✸ Lặp TC-HAN-02 cho đủ 8 loại đơn Cả 8 đều chặn — không loại nào được miễn, kể cả Nghỉ phép năm · Nghỉ không lương BR-GT-09 · §3.1.1
TC-HAN-04 ✸ Ca đếm ngày nghỉ: sự việc thứ Sáu 07/08, trong khoảng có thứ Bảy + Chủ nhật Hạn vẫn là hết 14/08 — không được cộng bù 2 ngày nghỉ (đếm lịch trượt) BR-GT-09
TC-HAN-05 ✸ Biên nửa đêm: mở form lúc 23:58 ngày D+7, bấm Gửi lúc 00:01 ngày D+8 Chặn tại thời điểm gửi — không tính theo lúc mở form BR-GT-09
TC-HAN-06 ✸ Đơn Đi công tác Theo ngày khoảng 10/08 → 14/08 Chặn cả đơn vì ngày đầu khoảng (10/08) đã quá 7 ngày BR-GT-12 · BR-GT-06
TC-HAN-07 ✸ Hạn duyệt: đơn nộp 13/08 (đúng hạn), người duyệt bấm 20/08 Đơn vẫn có hiệu lực — hệ thống không tự huỷ / tự từ chối vì quá 7 ngày chưa duyệt BR-GT-09
TC-HAN-08 ✸ Tìm mọi lối vào form cho ngày quá hạn: lịch · nút gợi ý ở chi tiết ngày · Đơn của tôi Đều chặn; không có nút xin gia hạn ở bất cứ đâu BR-GT-09
TC-HAN-09 ✸ Vắt tháng: sự việc 29/08, gửi đơn 02/09 Cho gửi (hạn hết 05/09) dù kỳ công tháng 8 đã chốt 31/08 BR-GT-09
TC-HAN-10 ✸ Giờ thiết bị bị chỉnh lùi 3 ngày rồi gửi đơn cho ngày đã quá hạn Vẫn chặn — mốc lấy theo ngày hệ thống (server) BR-GT-09

5.7 Giải trình loại Khác (§3.6) ✸

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-GTK-01 ✸ Mở form ở ?khoi=vp rồi ?khoi=ct Cả hai đều thấy loại Khác trong ô Loại giải trình BR-GTK-01 · FR-GTK-01
TC-GTK-02 ✸ Đổi từ Đi công tác sang Khác Nhóm trường Đi công tác (Phạm vi · Nơi công tác · dải tóm tắt) ẩn hoàn toàn; hiện đúng 4 trường Ngày · Giờ vào · Giờ ra · Lý do FR-GTK-01 · FR-GTK-03
TC-GTK-03 ✸ Nhập 15:00 → 14:00, rồi 15:00 → 15:00 Cả hai: dòng lỗi đỏ "Giờ ra phải sau Giờ vào" + khoá Gửi; sửa thành 15:00 → 15:01 → mở lại ngay FR-GTK-04 · BR-GTK-04
TC-GTK-04 ✸ Nhập lý do ok (2 ký tự) Khoá nút Gửi, ô tô đỏ "Vui lòng mô tả rõ lý do (tối thiểu 10 ký tự)" FR-GTK-05
TC-GTK-05 ✧ Nhập đủ ngày · giờ · lý do nhưng không đính kèm file Nút Gửi đơn vẫn sáng, gửi thành công — file là tuỳ chọn với cả 8 loại BR-GTK-14 · FR-GTK-11 · BR-GT-12
TC-GTK-05b ✧ Mở lần lượt cả 8 loại, soát nhãn File đính kèm Không loại nào có dấu *, không loại nào khoá nút Gửi vì thiếu file — kể cả Khác BR-GTK-14 · BR-GT-12
TC-GTK-06 ✸ L-1 rời hẳn: phiên 07:00–11:30, đơn Khác 13:00–15:00 Đã duyệt Tổng 6g30 — cộng đủ 2g00 BR-GTK-06
TC-GTK-07 ✸ L-2 chồng một phần: phiên 07:00–11:30, đơn 10:00–13:00 Đã duyệt Tổng 6g00 (union 07:00–13:00), không phải 7g30; form lúc gửi không cảnh báo gì BR-GTK-06 · FR-GTK-08
TC-GTK-08 ✸ L-4 nằm gọn bên trong: phiên 07:00–17:00, đơn 09:00–11:00 Đã duyệt Cộng thêm 0 phút, công không đổi; chi tiết ngày vẫn hiện dòng phụ Giải trình khác BR-GTK-06 · FR-GTK-09
TC-GTK-09 ✸ L-5 ngày trắng: không có bản ghi chấm công nào + đơn Khác 07:00–15:00 Đã duyệt Ngày thoát nhãn Vắng, tính công theo đơn, không phạt vắng BR-GTK-11
TC-GTK-10 ✸ L-7 ngoài ca chuẩn: khai 06:00–09:00 — chạy cả VP và CT VP: chỉ 08:00–09:00 vào công (cắt phần trước 08:00). CT: cộng đủ 3 giờ BR-GTK-10
TC-GTK-11 ✸ Hai đơn Khác cùng ngày: 08:00–10:00 rồi 14:00–16:00; sau đó thử 09:00–11:00 Hai đơn đầu cho; đơn 09:00–11:00 chặn (chồng lấn với đơn đã có) BR-GTK-09
TC-GTK-12 ✪ L-9 phiên hở mốc: CT, phiên 08:00 → —, đơn Khác 10:00–17:30 Đã duyệt Tổng giờ 7g30; nhãn ngày Quên chấm công (ô vàng) nhưng công = 0,9 (tạm tính), KHÔNG để —; không bị phạt. Form có cảnh báo vàng + nút Chuyển sang Quên chấm công, nút Gửi không khoá; màn duyệt web có dòng đỏ. Nhân viên nhận thông báo nhắc gửi đơn Quên chấm công BR-GTK-15 · BR-GTK-24 · BR-GTK-16 · FR-GTK-12 · FR-GTK-13
TC-GTK-13 ✪ Tiếp TC-GTK-12: gửi thêm đơn Quên chấm công bù giờ ra 17:30, cả 2 Đã duyệt Phiên đóng 08:00–17:30 = 9g30; đơn Khác nằm gọn bên trong → cộng thêm 0 phút; ≥ 8g → Đủ công · 1 công; công từ 0,9 tự tính lại lên 1, bỏ dấu tạm tính BR-GTK-17 · BR-GTK-06 · BR-GTK-24
TC-GTK-14 ✸ Đơn Khác Đã duyệt cho ngày mai Ngày mai hiện dòng phụ kèm chú thích "đã duyệt — đối chiếu khi ngày diễn ra"; công ngày chưa đổi. Tới ngày đó, chấm 07:00–09:00 + 11:00–15:00 (6g) → cộng thêm 2g → 8g BR-GTK-15 · FR-GTK-09
TC-GTK-15 ✸ Dùng sai loại: VP đi muộn nhưng khai Khác để né phạt Đơn gửi được nhưng người duyệt từ chối kèm lý do "Đã có loại đơn phù hợp"; ngày giữ nguyên phạt đi muộn BR-GTK-02 · BR-GTK-16
TC-GTK-16 ✸ Đơn Khác Đã duyệt cho hôm nay → mở màn Trạng thái làm việc và Lịch sử thay đổi trạng thái Trạng thái làm việc không đổi; lịch sử không sinh mốc mới nào; nút Chấm công đi công tác không mở ra BR-GTK-18 · BR-27 · BR-VT-28
TC-GTK-17 ✸ ⚠ Ngày Đi công tác có đơn Từ chối, nhân viên khai đơn Khác đúng khoảng giờ đã chấm ngoài phạm vi Không được lấy công theo đường này — người duyệt từ chối (case dùng sai). ⚠ Chờ BA chốt — §6.4 mục BR-2 BR-GTK-19 · BR-VT-16
TC-GTK-18 ✸ CT — mở form Khác rồi đổi qua nhiều ngày (2 phiên · 1 phiên · chưa chấm công) Luôn hiện 2 nút Phiên 1 / Phiên 2, KHÔNG có khoảng giờ, mặc định Phiên 1; đổi ngày → khối không đổi. ?khoi=vp → không có khối này BR-GTK-20 · BR-CTP-11 · FR-CTP-11
TC-GTK-24 ✪ Ngày ở TC-GTK-12, để quá hạn D+7 mà không gửi đơn Quên chấm công Sang 00:00 ngày D+8: công 0,9 chuyển thành số CHỐT (bỏ dấu tạm tính), ngày không treo; nhãn vẫn Quên chấm công; không phạt; form giải trình cho ngày đó đã đóng BR-GTK-25 · BR-GT-09
TC-GTK-25 ✪ CT — ngày chỉ có đúng một phiên hở 08:00 → —, không có đơn nào đã duyệt Công — (chưa có gì để chốt), nhãn Quên chấm công, không phạt — đây là ranh giới của BR-GTK-24: có nguồn giờ hợp lệ mới chốt BR-VT-17 · BR-GTK-24
TC-GTK-19 ✾ A-1 · nộp TRƯỚC ngày — đơn Khác 10:00–13:00 duyệt từ hôm trước; đến ngày đó chấm phiên 07:00–11:30 Union 07:00–13:00 = 6g00 — phần chung 10:00–11:30 chỉ tính một lần, phần riêng cộng gộp BR-GTK-21 · BR-GTK-06 · L-2
TC-GTK-20 ✾ A-2 · nộp TRƯỚC ngày — đơn Khác 13:00–15:00 duyệt từ hôm trước; đến ngày đó chấm phiên 07:00–11:30 Cộng gộp 4g30 + 2g00 = 6g30 BR-GTK-21 · BR-GTK-06 · L-1
TC-GTK-21 ✾ A-3 · nộp TRƯỚC ngày — đơn Khác 13:00–15:00 duyệt từ hôm trước; đến ngày đó chấm đúng 13:00–15:00 Cộng thêm 0 phút — công lấy theo bản ghi chấm công, đơn thừa nhưng vẫn hiện ở chi tiết ngày để lưu vết BR-GTK-22 · L-10
TC-GTK-22 ✾ B · nộp SAU ngày — ngày đã có phiên 07:00–11:30, hôm sau nộp đơn Khác 13:00–15:00 và được duyệt Duyệt xong tính ngay (không phải đợi), ghi nhận giờ khai trong đơn → tổng 6g30 BR-GTK-21 · BR-GTK-06
TC-GTK-23 ✾ Lặp TC-GTK-19 → TC-GTK-22 với đơn ở trạng thái Chờ duyệt, rồi Từ chối Cả 8 lượt đều không cộng công: giờ ngày giữ nguyên theo bản ghi chấm công, nhãn trạng thái ngày không đổi BR-GTK-23

5.8 Phiên chấm công khối Công trường (§4.7) ✸

Mã Ca kiểm thử Tổng giờ Kỳ vọng Truy vết
TC-PCT-01 ✸ 07:00–11:30 + 13:00–16:30 8g00 Đủ công · 1 công; khoảng 11:30–13:00 không hiện dòng nào BR-CTP-03 · FR-CTP-04
TC-PCT-02 ✸ 07:00–11:30 + 13:00–16:29 7g59 Thiếu giờ công — biên dưới của định mức 8g BR-CTP-03
TC-PCT-03 ✸ 07:00–17:00 — 1 phiên xuyên trưa (bao trọn khung 11:30–13:00) 10g00 Đủ công — định mức 9,5g BR-CTP-03
TC-PCT-03b ✸ 07:00–16:00 — 1 phiên xuyên trưa 9g00 Thiếu giờ công — 9g < 9,5g, công 0,9 BR-CTP-03
TC-PCT-03c ✸ 13:00–21:00 — 1 phiên, không chạm khung nghỉ trưa 8g00 Đủ công — định mức 8g BR-CTP-03
TC-PCT-04 ✸✾ 07:00–11:30 + phiên chiều chỉ có Vào 13:00, đơn chưa duyệt 4g30 Quên chấm công, không phạt; ✾ ô công hiện 0,6 (4g30 ÷ 8g — công tạm tính của phiên đã đóng), giữ dải nhắc vàng; phiên chiều hiện Giờ ra — không kèm chữ "chưa tính công" BR-CTP-04 · FR-CTP-06
TC-PCT-04b ✸ Tiếp TC-PCT-04: đơn Quên chấm công Đã duyệt bù giờ ra 16:30 8g00 Đủ công · 1 công; phiên hiện giờ ra kèm chip "bổ sung theo đơn" BR-CTP-04 · FR-CTP-06
TC-PCT-05 ✸ Đã đóng phiên 2 (07:00–11:30 + 13:00–17:00), cố mở phiên 3 lúc 17:30 8g30 Nút chấm công đã khoá kèm dòng "Đã chấm đủ 2 phiên hôm nay" — không sinh phiên 3 BR-CTP-01 · FR-CTP-02
TC-PCT-06 ✸ 07:00–11:30 + 13:00–18:00 9g30 Đủ công · 1 công — phần vượt không tự thành tăng ca BR-CTP-05
TC-PCT-07 ✸ 04:30–08:30 + 18:00–22:00 — giờ ngoài khung cũ 06:00–18:00 8g00 Đủ công — CT không còn khung giờ, không lần nào bị chặn BR-CTP-07
TC-PCT-08 ✸ Phiên 3 phút (chấm ra rồi chấm vào liền) rồi phiên đúng 5 phút — Phiên 3 phút không hiện trong danh sách, tổng không đổi; phiên đúng 5 phút vẫn tính BR-CTP-09
TC-PCT-09 ✸ Ca vắt nửa đêm: 22:00 ngày 18/08 → 02:00 ngày 19/08 4g00 Cộng trọn vào ngày 18/08; ngày 19/08 không nhận giờ nào BR-CTP-10
TC-PCT-10 ✸ Cố tạo phiên 2 có giờ vào < giờ ra phiên 1 (qua giải trình) — Chặn — hai phiên không được chồng lấn BR-CTP-08
TC-PCT-11 ✸ Văn phòng — chấm ra 17:35 rồi bấm chấm tiếp — Không sinh phiên 2 — nút bị khoá; Nhóm G không áp cho VP BR-CTP-01
TC-PCT-13 ✸ Mở giai-trinh-cong-form.html?khoi=ct và soát danh sách Loại giải trình Không có Nghỉ phép năm (và không có Đi muộn / Về sớm); có Thiếu giờ công. Đối chiếu ?khoi=vp → có Nghỉ phép năm, không có Thiếu giờ công §4.7.1 · SRS 0.8 §4.6
TC-PCT-14 ✸ Khối Công trường — ngày nghỉ có đơn Nghỉ không lương Đã duyệt Ngày Không công (ô lịch xám), không bị phạt; không có trường hợp nào của CT cho ra Đủ định mức nhờ ngày nghỉ BR-VT-12 · §4.7.1
TC-PCT-12 ✸ ⚠ CT: 07:00–11:30 tại công trường → chiều đi công tác chấm ngoài phạm vi → quay về công trường chấm lúc 16:00 — Theo BR-VT-14 phải mở phiên mới khi về công trường → ngày có 3 phiên, vượt giới hạn của BR-CTP-01. ⚠ Chờ BA chốt — §6.4 mục BR-1 BR-CTP-01 · BR-VT-14
TC-PCT-15 ✸ Ngày không có lần chấm nào, không có đơn — Nhãn Vắng, công 0; bảng phiên hiện 1 dòng toàn dấu gạch (Phiên 1 · Vào — → Ra —), không dòng tóm tắt, không dòng Định mức ngày FR-CTP-15 · BR-VT-12
TC-PCT-16 ✸ Mở sheet Ngày thiếu giờ tháng 6/2026 từ ô đếm Ngày thiếu giờ — Sheet liệt kê 4 ngày (05 · 11 · 16 · 17/06), mỗi dòng chỉ có dd/MM + "Thiếu giờ công", không mũi tên; chân ghi 4 ngày — khớp ô đếm. Ngày Quên chấm công và ngày đơn Đã duyệt không có mặt. Bấm 17/06 → đóng sheet, mở chi tiết ngày 17/06 FR-CTP-10
TC-PCT-17 ✸ Mở sheet Giờ tăng ca (OT) — Mỗi dòng chỉ có ngày · giờ bắt đầu – giờ kết thúc · số giờ (10/06/2026 · 16:00 – 18:30 · 2g 30p); không nội dung công việc, không tiền; chân sheet là Tổng giờ OT. Ca chờ duyệt / từ chối → không vào sheet FR-CTP-12 · BR-GT-10 ⟨0.3⟩
TC-PCT-18 ✸ Mở màn thống kê HR của một nhân viên Công trường, đối chiếu với app nhân viên — Cột Tổng giờ công = tổng các phiên (ngày 07:00–11:30 + 13:00–16:30 → 8g00, không phải 9g30 giờ thô) và cột Số phiên = 2; khớp từng ngày với app FR-CTP-08

✸ TC-HAN-01 → TC-HAN-10 · TC-GTK-01 → TC-GTK-25 · TC-PCT-01 → TC-PCT-14 — bộ ca mới của bản 1.2 (20/08/2026), phủ ba nhóm luật đồng bộ từ Business Rule 0.3: hạn 7 ngày (§3.1.1), loại Khác (§3.6), phiên khối Công trường (§4.7). Ba ca đánh ⚠ (TC-GTK-17 · TC-PCT-12) chỉ chạy được sau khi BA chốt §6.4.

✸ TC-PCT-15 → TC-PCT-18 (ngày Vắng · ba sheet thống kê · màn thống kê HR) và toàn bộ §5.9 — TC-LC-01 → TC-LC-07 — bộ ca mới của bản 1.3 (27/08/2026), phủ nốt §3.7 · §4.7.1 · §4.7.4.

5.9 Luật chung của 8 loại đơn (§3.7) ✸

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-LC-01 ✸ Tăng ca hai khối: 1 ca VP và 1 ca CT cùng 18:00 – 20:30, đơn Đã duyệt Cả hai ghi 2g30 giờ tăng ca; ô Giờ tăng ca cộng đúng tổng, ô Tổng công tháng KHÔNG tăng — giờ OT không quy đổi ra ngày công ở cả hai khối BR-GT-10 ⟨0.3⟩
TC-LC-02 ✸ Đơn Tăng ca có giờ bắt đầu = giờ kết thúc Chặn gửi đơn (thời lượng ≤ 0) BR-GT-10 ⟨0.3⟩
TC-LC-03 ✸ Phiên CT thiếu cả 2 mốc (không chấm vào, không chấm ra) — thử khai loại Quên chấm công Loại này chỉ bù đúng 1 mốc → tình huống phải chuyển sang Khác; người duyệt từ chối đơn Quên chấm công dùng sai BR-GT-11 ⟨0.3⟩ · BR-GTK-02
TC-LC-04 ✸✧ Bỏ trống Lý do ở lần lượt cả 8 loại đơn Cả 8 đều chặn gửi. Soát thêm File đính kèm: ✧ từ 27/08/2026 cả 8 loại đều tuỳ chọn, không loại nào khoá nút Gửi vì thiếu file BR-GT-12 · BR-GTK-14
TC-LC-05 ✸ Một ngày đã có đơn Đi công tác đang Chờ duyệt, gửi tiếp đơn Đi công tác thứ hai cho cùng ngày Chặn tạo trùng. Đối chứng: gửi đơn Khác cho cùng ngày đó → cho (khác loại — BR-GTK-17) BR-GT-14 ⟨0.3⟩
TC-LC-06 ✸ CT — ngày Thiếu giờ công tổng 6g00, đơn Thiếu giờ công khai 07:00 – 16:30 Đã duyệt Tổng tính lại → Đủ công · 1 công; thẻ Thiếu giờ công hiện dòng phụ "Giờ vào 07:00 · Giờ ra 16:30". Mở ?khoi=vp → không có loại Thiếu giờ công BR-GT-17 ⟨0.3⟩ · FR-CTP-13 · BR-CTP-03
TC-LC-07 ✸ Sự việc 29/08, gửi đơn 02/09, người duyệt bấm 03/09 — chạy 2 lần: (a) bảng lương tháng 8 chưa chốt; (b) đã chốt (a) Công ngày 29/08 được cộng, tổng công tháng 8 và phiếu lương tính lại; (b) tháng 8 giữ nguyên, phần chênh chuyển sang kỳ tháng 9 (truy lĩnh, Nhân sự xử lý trên web HCNS) BR-GT-20 ⟨0.3⟩ · TC-HAN-09

5.10 Chọn phiên khi đăng ký giải trình — khối Công trường (§3.8) ✾

Mã Ca kiểm thử Kỳ vọng Truy vết
TC-PHI-01 ✾ Mở form ?khoi=ct, chọn lần lượt Thiếu giờ công · Quên chấm công · Khác Cả ba đều hiện khối Phiên cần giải trình với đúng 2 nút Phiên 1 / Phiên 2, không kèm khoảng giờ; mặc định Phiên 1 FR-PHI-02 · FR-PHI-03 · FR-PHI-05
TC-PHI-02 ✾ ?khoi=ct → Đi công tác, giữ Phạm vi = Theo ngày Khối phiên không hiện; form chỉ có Từ ngày + Buổi · Đến ngày + Buổi FR-PHI-02 · BR-PHI-05
TC-PHI-03 ✾ Từ ca trên, bấm Phạm vi = Theo giờ, rồi bấm ngược lại Theo ngày (lặp 3 lần) Theo giờ → khối phiên hiện ngay, nằm giữa ô Ngày và cặp Từ giờ / Đến giờ; Theo ngày → khối ẩn ngay. Không lần nào kẹt trạng thái FR-PHI-07 · BR-PHI-05
TC-PHI-04 ✾ Mở ?khoi=vp, chọn lần lượt cả 8 loại đơn Không loại nào hiện khối phiên FR-PHI-01 · BR-PHI-06
TC-PHI-05 ✾ ?khoi=ct → Quên chấm công: soát thứ tự trường trên form Thứ tự: Loại → Ngày quên chấm → khối Phiên → Giờ khai lại. Ô ngày và ô giờ nằm hai dòng riêng FR-PHI-06 · FR-CTP-11
TC-PHI-06 ✾ Đổi loại Quên chấm công → Khác → Đi công tác (Theo giờ) → Thiếu giờ công trong một lần mở form Mỗi màn có đúng 1 khối phiên, luôn dưới ô Ngày · trên ô giờ; không nhân bản, không sót khối ở loại cũ FR-PHI-06
TC-PHI-07 ✾ Ngày chỉ có 1 phiên 07:00–11:30; mở form loại Thiếu giờ công cho ngày đó Vẫn hiện đủ 2 nút; chọn được Phiên 2; không có dòng nhắc dữ liệu chấm công nào FR-PHI-04 · BR-PHI-03
TC-PHI-08 ✾ Ngày Vắng (chưa chấm công lần nào); mở form loại Khác, chọn Phiên 2, khai giờ hợp lệ, bấm Gửi Gửi được — form không cảnh báo, không chặn BR-PHI-04
TC-PHI-09 ✾ Chọn Phiên 2, sau đó đổi ngày ở ô Ngày Phiên vẫn là Phiên 2 — không reset về Phiên 1, khối không nạp lại FR-PHI-08
TC-PHI-10 ✾ Gửi đơn Quên chấm công khai cho Phiên 2 (bù giờ ra 16:30), duyệt đủ 2 bên Phiên 2 đóng lại và được cộng giờ; chi tiết ngày: thẻ Quên chấm công dòng phụ "Phiên 2", dòng phiên 2 có chip bổ sung theo đơn BR-PHI-07 · FR-CTP-17 · BR-CTP-04
TC-PHI-11 ✾ Cùng một ngày CT: 1 đơn Quên chấm công trỏ Phiên 1 + 1 đơn Khác trỏ Phiên 2, cả hai Đã duyệt Cho phép cả hai; tính công theo thứ tự ① đóng phiên hở bằng đơn Quên chấm công → ② union khoảng của đơn Khác, trần 1 công BR-GTK-17 · BR-GTK-06 · BR-PHI-01
TC-PHI-12 ✾ Mở Chi tiết đơn giải trình (web) với: (a) đơn CT loại Khác; (b) đơn CT Đi công tác khai Theo ngày; (c) đơn VP cùng loại Khác (a) hiện dòng Phiên 1 / Phiên 2; (b) và (c) không có dòng phiên FR-PHI-09 · BR-PHI-05 · BR-PHI-06

6. Điểm cần chốt trước khi test

6.1 Trạng thái làm việc

4 điểm CC-11 → CC-14 đã được BA chốt ngày 03/08/2026 — giữ lại để truy vết:

Mã Nội dung Quyết định
~~CC-11~~ Thứ tự sắp xếp khi xung đột (FR-13) Người đang đăng nhập luôn ở đầu, kể cả khi đang Nghỉ — "bản thân lên đầu" thắng "Nghỉ xuống cuối". Nhân viên khác đang Nghỉ vẫn xếp cuối. (FR-13)
~~CC-12~~ Phạm vi xem Không có phạm vi giới hạn — mọi nhân viên xem được toàn bộ danh sách; bộ đếm FR-03 = đang hiển thị / tổng toàn công ty. (BR-10)
~~CC-13~~ Nghỉ vs trạng thái tự khai Hiển thị trạng thái tự khai (vd Văn phòng) — nhân viên đã tác động lên hệ thống; Nghỉ chỉ khi không chấm công và cũng không tự khai. (BR-09)
~~CC-14~~ Vòng đời trạng thái qua ngày 00:00 tự reset về Nghỉ cho mọi nhân viên; không giữ trạng thái cuối của hôm trước. (BR-21)

6.2 Giải trình Đi công tác

Mã Nội dung cần chốt
~~GT-0~~ Thời hạn nộp đơn — sửa lại 05/08/2026 (bản 0.8): ~~không giải trình cho quá khứ~~ → có giải trình cho quá khứ, nhưng chỉ trong tháng hiện tại, hạn cuối là ngày cuối cùng của tháng. Sang tháng mới, mọi ngày của tháng trước khoá hẳn và báo "Đã quá hạn giải trình" (BR-GT-09 · FR-GT-11). Luật này cũng đóng điểm hồi tố ở Business Rule cũ — cửa sổ hồi tố = phần còn lại của tháng. (Cửa ngoại lệ cho HR khai bù ngày của tháng đã đóng: chưa mở — nếu cần thì BA bổ sung sau.)
~~GT-1~~ Tính công khi đi công tác — đã chốt 03/08/2026: đơn Đã duyệt → ngày công tác được tính công theo quy đổi §3.2.2, không cần bằng chứng làm việc, không có phụ cấp công tác (BR-GT-10).
~~GT-3~~ ~~Người duyệt~~ — đã chốt 03/08/2026: người duyệt cố định = Quản lý trực tiếp + Nhân sự (HR), duyệt song song, cần đủ 2 bên; không tách theo khối vì ở Công trường chỉ huy trưởng chính là quản lý trực tiếp. Xem BR-CC-10b ở §3.1.
~~GT-4~~ Đơn đã duyệt tự sinh trạng thái làm việc — đã chốt 03/08/2026: đơn Đi công tác chuyển Đã duyệt → hệ thống tự đặt trạng thái Công tác cho mọi ngày trong đơn, nhân viên không phải tự khai (BR-GT-07 · BR-21).
~~GT-5~~ Ràng buộc ngày/giờ — đã chốt 03/08/2026: validate & chặn gửi — Đến ngày ≥ Từ ngày (cùng ngày thì buổi Đến không trước buổi Từ), Đến giờ > Từ giờ; sai thì báo lỗi đỏ dưới ô + khoá nút Gửi (BR-GT-11 · FR-GT-10).
~~GT-6~~ ~~Bắt buộc Nơi công tác~~ — đã chốt 03/08/2026: bỏ trống Nơi công tác thì chặn gửi đơn (nút Gửi vô hiệu hoá + báo lỗi tại ô), thống nhất với màn Trạng thái làm việc. Xem FR-GT-09 · BR-GT-03.
~~GT-7~~ Giới hạn khoảng khai báo — đã chốt 03/08/2026: chỉ chặn ngày quá khứ; không giới hạn số ngày tối đa, không chặn tương lai xa (BR-GT-12 · FR-GT-11).

6.3 Chấm công ngoài phạm vi

Đã chốt hết — không còn điểm mở. VT-1 · VT-2 · VT-6 chốt 04/08/2026; VT-3 · VT-4 · VT-5 · VT-7 · VT-8 chốt 05/08/2026 (bản 0.8). Bảng dưới giữ lại để truy vết quyết định.

Mã Nội dung cần chốt Ảnh hưởng nếu chưa chốt
~~VT-1~~ Bản ghi Chấm công tại đây có được tính công không? — đã chốt 04/08/2026: có, nhưng chỉ khi ngày đó có đơn Đi công tác Đã duyệt; đơn đã duyệt thì công tính theo giờ chấm thực tế (BR-VT-09 · BR-VT-10). Chưa duyệt / bị từ chối → ngày ghi Vắng, công 0. —
~~VT-2~~ Ai xác nhận & xác nhận ở màn nào? — đã chốt 04/08/2026: không có thao tác xác nhận riêng. Điều kiện chấp thuận chính là đơn Đi công tác được Quản lý trực tiếp + Nhân sự duyệt đủ 2 bên trên web HCNS (BR-VT-05 · BR-CC-10b) — dùng lại đúng luồng duyệt đơn đã có. —
~~VT-6~~ Ngày Đi công tác chưa được duyệt có bị phạt không? — đã chốt 04/08/2026: CÓ. Mọi ngày ghi Vắng mà đơn giải trình (Nghỉ phép · Nghỉ không lương · Đi công tác) chưa được duyệt — gồm chưa giải trình · chờ duyệt · từ chối — đều bị tính phạt vắng không phép; đơn được duyệt sau thì gỡ phạt. Xem BR-VT-12. ~~Lệch tiền phạt giữa hai loại đơn cùng bị từ chối~~ — đã thống nhất một luật cho cả 3 loại đơn
~~VT-3~~ Bắt buộc nhập lý do / chụp ảnh hiện trường khi chọn Chấm công tại đây? — đã chốt 05/08/2026: KHÔNG. Bỏ hẳn điểm này — không thêm ô lý do, không bắt chụp ảnh hiện trường. Căn cứ để chấp thuận vẫn là đơn Đi công tác được duyệt đủ 2 bên; bằng chứng có mặt là khuôn mặt + toạ độ + giờ đã lưu sẵn (BR-VT-20 · BR-VT-04). —
~~VT-4~~ Giới hạn số lần chấm ngoài phạm vi trong tháng? — đã chốt 05/08/2026: KHÔNG giới hạn, không cảnh báo, không khoá sau N lần. Bỏ hẳn điểm này — cơ chế kiểm soát duy nhất là đơn Đi công tác phải được duyệt thì mới có công (BR-VT-21). —
~~VT-5~~ Khoảng cách tối đa còn chấp nhận cho Chấm công tại đây? — đã chốt 05/08/2026: có ngưỡng, và giá trị do Nhân sự cấu hình (không hardcode trong app). Vượt ngưỡng → không cho Chấm công tại đây (BR-VT-22). —
~~VT-7~~ ✦ Khoảng giữa hai phiên có tính công không? — đã chốt 05/08/2026: KHÔNG. Chỉ tính giờ công được chấm trên app; thời gian di chuyển giữa hai phiên không vào công (BR-VT-23 · BR-VT-18 giữ nguyên). —
~~VT-8~~ ✦ Ngày hỗn hợp có đơn bị Từ chối — đã chốt 05/08/2026: chỉ âm thầm không cộng công, không cảnh báo riêng, không nhắc HR. Chấm ở chỗ lạ chỉ có công khi là đi công tác và đơn được Quản lý trực tiếp + Nhân sự duyệt (BR-VT-24). —

| ~~VT-9~~ ✥ | Ai được thấy nút Chấm công đi công tác? — chốt 20/08/2026 (bản 1.1): chỉ nhân viên đã đổi trạng thái làm việc sang Công tác. Ngoài phạm vi mà trạng thái khác → không hiện nút, chỉ có Thử lại + hướng dẫn đổi trạng thái (BR-VT-28). Kèm theo: đổi trạng thái sang Công tác thì nơi công tác tự điền theo đơn Đi công tác đã đăng ký cho ngày đó (BR-25) | Trước khi chốt: nút hiện cho mọi trường hợp ngoài vùng → sinh bản ghi rác không có đơn kèm theo |

~~† VT-6~~ — điểm mở của bản 0.5, đã chốt 04/08/2026 (bản 0.7).   ✦ VT-7 · VT-8 — điểm mở của bản 0.6 (§4.6), đã chốt 05/08/2026 (bản 0.8) cùng VT-3 · VT-4 · VT-5.   ✥ VT-9 — quyết định BA 20/08/2026 (bản 1.1), xem §4.0 và §2.5.

6.4 Đồng bộ Business Rule 0.3 — điểm cần chốt ✸

✸ Mới ở bản 1.2 (20/08/2026). Ba nhóm luật của Business Rule 0.3 đã được đưa vào tài liệu này (§3.1.1 · §3.6 · §4.7). Phần đã chốt nằm ngay ở dòng BR / FR tương ứng; bảng dưới chỉ còn 3 điểm hở (BR-1 · BR-2 · BR-4) phát sinh do ghép hai tài liệu.

Mã Nội dung cần chốt Ảnh hưởng nếu chưa chốt
BR-1 ⚠ Giới hạn 2 phiên/ngày của Công trường có tính cả phiên công tác không? BR-CTP-01 giới hạn 2 phiên, trong khi BR-VT-14 · BR-VT-15 cho không giới hạn phiên khi đổi nơi làm việc. Đề xuất: 2 phiên chỉ đếm phiên tại địa điểm chấm công của nhân viên; phiên công tác và phiên sinh do đổi địa điểm không tính vào giới hạn (§4.7.3). Nhân viên CT đi công tác buổi chiều rồi quay về công trường sẽ không chấm công lại được (nút đã khoá) → mất công buổi chiều. Ca TC-PCT-12 chưa chạy được
BR-2 ⚠ Có được dùng đơn Khác để lấy công cho giờ chấm ngoài phạm vi khi đơn Đi công tác bị Từ chối / chưa duyệt không? Đề xuất: KHÔNG — giờ ngoài phạm vi chỉ vào công qua đơn Đi công tác Đã duyệt (BR-VT-09 · BR-VT-16); dùng Khác cho đúng khoảng đó là case dùng sai, người duyệt từ chối (BR-GTK-19). Mở đường vòng qua toàn bộ luật duyệt đi công tác: đơn Đi công tác bị từ chối vẫn lấy được công bằng một đơn Khác. Ca TC-GTK-17 chưa chạy được
BR-4 ⚠ Ngày Văn phòng có NHIỀU phiên thì trừ nghỉ trưa thế nào? Công thức VP của BR-CC-04 (Giờ ra − Giờ vào − nghỉ trưa) viết cho 1 phiên/ngày. Ngày hỗn hợp VP + công tác lại có 2 phiên. Đề xuất: áp đúng nguyên tắc của BR-CTP-03 — nghỉ trưa chỉ bị trừ khi nằm trong lòng một phiên; tách phiên qua trưa thì không trừ (§4.6.3). Lệch 1,5 giờ trên mỗi ngày hỗn hợp — đủ để đổi nhãn ngày giữa Đủ định mức và Thiếu định mức (xem ca biên 7g55 ở §4.6.3)

Đã đồng bộ xong — không cần chốt lại

  • Hạn nộp 7 ngày thay cửa sổ "hết tháng": BR-GT-09 · BR-GT-12 · FR-GT-11 đã sửa — đúng BR-GT-18 của Business Rule 0.3.
  • Định mức Văn phòng ở §4.6.3: 8g30 → 8 giờ làm thực (BR-CC-04), ví dụ đã tính lại.
  • Danh mục 8 loại đơn ở §3.1 — đã thêm Khác.
  • Đơn nào đổi được trạng thái làm việc: BR-27 · BR-GTK-18 — chỉ Đi công tác và Nghỉ phép / Nghỉ không lương.
  • ✸ Bản 1.3 — Nhóm E · Nhóm F của Business Rule 0.3 đã sang §3.7 (kèm bảng đối chiếu trùng mã BR-GT-09 → BR-GT-12); Công trường bỏ khung giờ 06:00–18:00 (BR-CC-01 · BR-CC-03) và bốn luật cũ bị thay đã sang §4.7.1; ba sheet thống kê tháng & màn thống kê HR (FR-CTP-08 · FR-CTP-10 · FR-CTP-12) đã sang §4.7.4. ⇒ Business Rule 0.3 đã được gộp trọn vẹn vào tài liệu này; chỉ còn 3 điểm hở ở bảng trên.
  • ✪ BR-3 — đơn Khác có đóng được phiên hở mốc không: ĐÃ CHỐT 28/08/2026 theo phương án C — đơn Khác không đóng phiên hở (giữ nguyên tắc chống cộng khống), nhưng phiên hở không còn khoá việc chốt công: ngày vẫn chốt theo giờ chứng minh được (BR-GTK-15 · BR-GTK-24 · BR-GTK-25 · FR-GTK-13; ca TC-GTK-12 · 13 · 19 · 20). Luật này chưa được đồng bộ ngược sang Business Rule 0.3 — xem mục 2 phần Điểm cần chốt của tài liệu đó.