Test Cases: Thiết bị
| Module | CORE-04 | URD | Device URD |
|---|
Mức ưu tiên = P1 (nghiêm trọng) / P2 (lớn) / P3 (nhỏ), kế thừa từ mức MoSCoW của URD (Must → P1, Should → P2, Could → P3). Các bước theo GIVEN → WHEN; cột Kỳ vọng là THEN.
1. Tóm tắt Độ phủ
| Vùng | Mã | URD reqs | Test case | Đã phủ |
|---|---|---|---|---|
| Đăng ký & quản lý thiết bị | DEV | 19 | 38 | ✅ |
| Ứng dụng di động | MOB | 6 | 15 | ✅ |
| Ứng dụng web | WEB | 5 | 13 | ✅ |
| Máy POS | POS | 5 | 14 | ✅ |
| Máy in | PRN | 12 | 29 | ✅ |
| Máy quét mã vạch | SCN | 7 | 20 | ✅ |
| SoundBox | SBX | 6 | 19 | ✅ |
| SoftPOS / NFC | NFC | 4 | 7 | ✅ |
| Giám sát tình trạng | MON | 5 | 12 | ✅ |
| Tổng | 69 | 167 | ✅ |
Ba test case (TC-PRN-029, TC-SCN-014, cùng các case terminal) kiểm tra hành vi chưa được triển khai — xem phát hiện QE inline. Chúng được viết theo hành vi kỳ vọng và vẫn thất bại cho đến khi các khoảng trống được khắc phục.
2. Test Cases
2.1 Đăng ký & Quản lý Thiết bị (DEV)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-DEV-001 | URD-DEV-002 | Sinh định danh | Admin tạo một thiết bị | D_YYYYMMDD_<id> duy nhất được gán; không sửa được | P1 |
| TC-DEV-002 | URD-DEV-002 | Duy nhất trong ngày | Tạo nhiều thiết bị cùng ngày | Định danh khác nhau; không trùng | P1 |
| TC-DEV-003 | URD-DEV-003 | Lưu tên i18n | Tạo với tên VI + EN | Cả hai locale được lưu và truy xuất được | P1 |
| TC-DEV-004 | URD-DEV-003 | Tên một locale | Chỉ cung cấp locale chính | Locale rỗng lưu là null; không lỗi | P1 |
| TC-DEV-005 | URD-DEV-003 | Thiếu tên bị từ chối | Tạo với tất cả locale rỗng | Bị từ chối; bắt buộc tên locale chính | P1 |
| TC-DEV-006 | URD-DEV-001 | Loại hợp lệ | Tạo với từng loại hợp lệ | Mỗi loại được tạo; loại lưu như cung cấp | P1 |
| TC-DEV-007 | URD-DEV-001 | Loại không hợp lệ bị từ chối | Tạo với loại "KIOSK" | Bị từ chối; liệt kê giá trị được chấp nhận | P1 |
| TC-DEV-008 | URD-DEV-004 | Trạng thái mặc định | Xem một thiết bị mới | Trạng thái là NEW | P1 |
| TC-DEV-009 | URD-DEV-005 | Kích hoạt | Kích hoạt một thiết bị NEW | Trạng thái ACTIVATED; khả dụng cho POS | P1 |
| TC-DEV-010 | URD-DEV-006 | Vô hiệu hóa | Vô hiệu hóa một thiết bị ACTIVATED | Trạng thái DEACTIVATED; dữ liệu được giữ | P1 |
| TC-DEV-011 | URD-DEV-007 | Tạm ngưng | Tạm ngưng một thiết bị | Trạng thái SUSPENDED; không thể giao dịch | P1 |
| TC-DEV-012 | URD-DEV-008 | Lưu trữ | Lưu trữ một thiết bị SUSPENDED/DEACTIVATED | Trạng thái ARCHIVED; ẩn khỏi danh sách hoạt động | P1 |
| TC-DEV-013 | URD-DEV-004 | ARCHIVED là cuối | Kích hoạt lại một thiết bị ARCHIVED | Bị từ chối; vẫn ARCHIVED | P1 |
| TC-DEV-014 | URD-DEV-004 | Nhảy không hợp lệ | NEW → ARCHIVED trực tiếp | Bị từ chối là chuyển trạng thái không hợp lệ | P1 |
| TC-DEV-015 | URD-DEV-001 | Liên kết org | Tạo dưới ORG-001 | Thiết bị liên kết với ORG-001 | P1 |
| TC-DEV-016 | URD-DEV-001 | Bắt buộc org | Tạo không có tổ chức | Bị từ chối; bắt buộc tổ chức | P1 |
| TC-DEV-017 | URD-DEV-016 | Gán merchant | Gán vào merchant M1 | Liên kết với M1; truy xuất được qua bộ lọc merchant | P1 |
| TC-DEV-018 | URD-DEV-016 | Hủy gán merchant | Gỡ gán merchant | Không còn tham chiếu merchant; vẫn thuộc org | P1 |
| TC-DEV-019 | URD-DEV-017 | Thông tin phần cứng | Đặt đầy đủ thông tin phần cứng | Mọi trường được lưu và trả về | P2 |
| TC-DEV-020 | URD-DEV-017 | Phần cứng một phần | Chỉ đặt nhà sản xuất + mẫu mã | Trường rỗng là null; không lỗi | P2 |
| TC-DEV-021 | URD-DEV-018 | Thông tin phần mềm | Đặt thông tin phần mềm | Mọi trường được lưu và trả về | P2 |
| TC-DEV-022 | URD-DEV-011 | Lưu mã | Tạo với mã "POS-STORE-01" | Mã được lưu; truy xuất được | P1 |
| TC-DEV-023 | URD-DEV-011 | Mã trùng | Tái sử dụng "POS-STORE-01" | Bị từ chối; mã đã dùng | P1 |
| TC-DEV-024 | URD-DEV-011 | Mã null | Hai thiết bị không có mã | Cả hai được tạo; null không phải là trùng | P1 |
| TC-DEV-025 | URD-DEV-009 | Soft delete | Xóa một thiết bị | Soft-deleted; ẩn khỏi danh sách mặc định | P1 |
| TC-DEV-026 | URD-DEV-009 | Bao gồm-đã-xóa | Truy vấn với include-deleted | Trả về với dữ liệu nguyên vẹn | P1 |
| TC-DEV-027 | URD-DEV-010 | Chưa xác thực | Gọi bất kỳ endpoint thiết bị | 401; không trả dữ liệu | P1 |
| TC-DEV-028 | URD-DEV-010 | JWT hợp lệ | Liệt kê thiết bị với JWT | Được chấp nhận; trả thiết bị trong phạm vi | P1 |
| TC-DEV-029 | URD-DEV-010 | Basic auth | Gọi endpoint với Basic Auth | Được chấp nhận; trả dữ liệu | P1 |
| TC-DEV-030 | URD-DEV-013 | Tự đăng ký | Đăng nhập app lần đầu trên thiết bị mới | Thiết bị tự tạo, đặt ACTIVATED, liên kết | P1 |
| TC-DEV-031 | URD-DEV-013 | Không trùng | Đăng nhập lại trên thiết bị đã biết | Bản ghi hiện có được tái sử dụng | P1 |
| TC-DEV-032 | URD-DEV-012 | Thông tin bảo trì | Đặt ngày mua/bảo hành/bảo trì | Được lưu và trả về | P2 |
| TC-DEV-033 | URD-DEV-012 | Bảo hành quá hạn | Đặt ngày bảo hành trong quá khứ | Được lưu; cho phép ngày quá khứ | P2 |
| TC-DEV-034 | URD-DEV-014 | Tìm theo tên | Tìm "POS Counter" | Trả thiết bị khớp; loại trừ phần còn lại | P1 |
| TC-DEV-035 | URD-DEV-014 | Tìm bỏ dấu | Tìm không dấu | Khớp nếu cấu hình chuẩn hóa; có ghi chú | P1 |
| TC-DEV-036 | URD-DEV-015 | Nhập CSV | Tải lên CSV hợp lệ | Thiết bị được tạo; tóm tắt thành công/thất bại | P2 |
| TC-DEV-037 | URD-DEV-015 | Dòng CSV lỗi | Tải lên CSV thiếu trường | Dòng không hợp lệ bị từ chối; dòng hợp lệ được nhập; báo cáo nêu lý do | P2 |
| TC-DEV-038 | URD-DEV-015 | Xuất CSV | Yêu cầu xuất | Trả CSV bản ghi thiết bị trong phạm vi | P2 |
2.2 Ứng dụng Di động (MOB)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-MOB-001 | URD-MOB-001 | iOS 14 | Cài/khởi chạy trên iOS 14 | Khởi chạy; truy cập được màn hình lõi | P1 |
| TC-MOB-002 | URD-MOB-001 | Android 8 | Cài/khởi chạy trên Android 8 | Khởi chạy; truy cập được màn hình lõi | P1 |
| TC-MOB-003 | URD-MOB-001 | Chặn iOS 13 | Cài trên iOS 13 | Bị chặn / lỗi OS tối thiểu | P1 |
| TC-MOB-004 | URD-MOB-001 | Chặn Android 7 | Cài trên Android 7 | Bị chặn; tối thiểu Android 8 | P1 |
| TC-MOB-005 | URD-MOB-002 | Màn hình chủ sở hữu | Chủ sở hữu điều hướng app | POS, Đơn hàng, Thanh toán, Hóa đơn, Báo cáo truy cập được | P1 |
| TC-MOB-006 | URD-MOB-002 | Hạn chế vai trò | Thu ngân mở báo cáo/hóa đơn | Bị hạn chế theo vai trò | P1 |
| TC-MOB-007 | URD-MOB-003 | Màn hình thu ngân | Thu ngân dùng app | POS, đơn hàng, thanh toán, biên nhận truy cập được | P1 |
| TC-MOB-008 | URD-MOB-003 | Chặn màn hình chủ-sở-hữu | Thu ngân mở màn hình chủ sở hữu | Bị từ chối / ẩn | P1 |
| TC-MOB-009 | URD-MOB-004 | Máy in BT | Mở cài đặt máy in BT | Máy in đã ghép nối được phát hiện và chọn được | P2 |
| TC-MOB-010 | URD-MOB-004 | BT bị tắt | Kết nối thiết bị ngoại vi khi tắt BT | Nhắc bật BT; không crash | P2 |
| TC-MOB-011 | URD-MOB-005 | Đơn hàng offline | Tạo bán hàng khi offline | Lưu cục bộ; báo offline; xếp hàng | P2 |
| TC-MOB-012 | URD-MOB-005 | Đồng bộ khi kết nối lại | Kết nối lại với đơn hàng chờ | Đơn xếp hàng tự đồng bộ; trạng thái hiển thị | P2 |
| TC-MOB-013 | URD-MOB-005 | Giới hạn offline | Thao tác thời gian thực khi offline | Thông báo không khả dụng rõ ràng; không crash | P2 |
| TC-MOB-014 | URD-MOB-006 | Phiên khi đăng nhập | Đăng nhập trên thiết bị đã đăng ký | Phiên được tạo và liên kết | P1 |
| TC-MOB-015 | URD-MOB-006 | Phiên thiết bị-mới | Đăng nhập lần đầu trên thiết bị mới | Tự đăng ký (URD-DEV-013); phiên liên kết | P1 |
2.3 Ứng dụng Web (WEB)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-WEB-001 | URD-WEB-001 | Chrome | Mở trong Chrome 90+ | Tải; các module hoạt động | P1 |
| TC-WEB-002 | URD-WEB-001 | Firefox | Mở trong Firefox 88+ | Tải; các module hoạt động | P1 |
| TC-WEB-003 | URD-WEB-001 | Safari | Mở trong Safari 14+ | Tải; các module hoạt động | P1 |
| TC-WEB-004 | URD-WEB-001 | Edge | Mở trong Edge 90+ | Tải; các module hoạt động | P1 |
| TC-WEB-005 | URD-WEB-001 | Trình duyệt cũ | Mở trong Chrome 89 | Cảnh báo trình duyệt không hỗ trợ; không crash âm thầm | P1 |
| TC-WEB-006 | URD-WEB-002 | Menu chủ sở hữu | Chủ sở hữu điều hướng back-office | Dashboard, Danh mục, Tồn kho, CRM, Báo cáo, Cài đặt truy cập được | P1 |
| TC-WEB-007 | URD-WEB-002 | Hạn chế vai trò | Thu ngân mở Cài đặt/Báo cáo | Bị hạn chế; không lộ dữ liệu | P1 |
| TC-WEB-008 | URD-WEB-003 | Web POS | Kích hoạt chế độ Web POS | Giao diện POS với tra cứu sản phẩm + giỏ hàng | P2 |
| TC-WEB-009 | URD-WEB-003 | Web POS không thiết bị ngoại vi | In khi không có máy in BT/USB | Thông báo hỗ trợ hạn chế; thay thế bằng PDF/email | P2 |
| TC-WEB-010 | URD-WEB-004 | Nâng cấp HTTPS | Truy cập qua HTTP | Chuyển hướng sang HTTPS | P1 |
| TC-WEB-011 | URD-WEB-004 | Hết hạn phiên | Phiên hết hạn | Vô hiệu; 401; chuyển hướng đăng nhập | P1 |
| TC-WEB-012 | URD-WEB-005 | 1024px | Cửa sổ ở 1024px | Đầy đủ chức năng; không cắt xén | P2 |
| TC-WEB-013 | URD-WEB-005 | Dưới chiều rộng tối thiểu | Cửa sổ ở 800px | Thông báo cần viewport rộng hơn; chế độ thu gọn dùng được | P2 |
2.4 Máy POS (POS)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-POS-001 | URD-POS-001 | Cấu hình tối thiểu | Khởi chạy trên Android 8, 2 GB RAM | Khởi chạy; POS hoạt động | P1 |
| TC-POS-002 | URD-POS-001 | Dưới RAM | Khởi chạy trên 1 GB RAM | Lỗi RAM tối thiểu rõ ràng hoặc suy giảm có ghi chú | P1 |
| TC-POS-003 | URD-POS-001 | Chặn iOS | Cài trên iOS | Bị chặn; chỉ Android 8+ | P1 |
| TC-POS-004 | URD-POS-002 | Màn hình POS | Mở màn hình POS | Giao diện toàn màn hình; tra cứu + giỏ hàng hiển thị | P1 |
| TC-POS-005 | URD-POS-002 | Tìm sản phẩm | Tìm theo tên | Hiển thị khớp; thêm được vào giỏ hàng | P1 |
| TC-POS-006 | URD-POS-002 | Không khớp | Tìm không có kết quả | Trạng thái rỗng; không crash | P1 |
| TC-POS-007 | URD-POS-003 | Đầu đọc thẻ | Xử lý thanh toán thẻ | Đầu đọc tích hợp được gọi; thanh toán xử lý | P1 |
| TC-POS-008 | URD-POS-003 | Máy in tích hợp | Hoàn tất một giao dịch | Hóa đơn in trên máy in tích hợp | P1 |
| TC-POS-009 | URD-POS-003 | Máy quét tích hợp | Quét một mã vạch | Sản phẩm được tra cứu và thêm | P1 |
| TC-POS-010 | URD-POS-003 | Ngăn kéo tiền | Hoàn tất thanh toán tiền mặt | Ngăn kéo mở qua kích hoạt máy in | P1 |
| TC-POS-011 | URD-POS-004 | VNPAY V-POS | Cài trên V-POS | Mọi tính năng + tích hợp phần cứng hoạt động | P2 |
| TC-POS-012 | URD-POS-004 | Sunmi T2 | Cài trên Sunmi T2 | Mọi tính năng POS hoạt động | P2 |
| TC-POS-013 | URD-POS-005 | Thiết lập thiết bị ngoại vi | Mở Cài đặt > Thiết bị | Thiết bị BT được liệt kê và kết nối được | P1 |
| TC-POS-014 | URD-POS-005 | BT bị tắt | Thêm thiết bị ngoại vi BT khi tắt BT | Nhắc bật; màn hình vẫn hoạt động | P1 |
2.5 Máy in (PRN)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-PRN-001 | URD-PRN-001 | Ghép nối BT | Ghép nối một máy in BT | Được phát hiện; ghép nối; báo đã kết nối | P1 |
| TC-PRN-002 | URD-PRN-001 | Kết nối USB | Kết nối máy in USB | Tự phát hiện; chọn được | P1 |
| TC-PRN-003 | URD-PRN-001 | Kết nối mạng | Cấu hình theo IP | Kết nối; in thử thành công | P1 |
| TC-PRN-004 | URD-PRN-001 | Máy in tắt | Kết nối máy in BT đã tắt nguồn | Thông báo không liên lạc được; thử lại; không crash | P1 |
| TC-PRN-005 | URD-PRN-002 | USB class 0x07 | Quét thiết bị USB | Máy in được phát hiện qua class 0x07 | P1 |
| TC-PRN-006 | URD-PRN-002 | Loại trừ HID | Quét khi gắn bàn phím HID | HID không liệt kê là máy in | P1 |
| TC-PRN-007 | URD-PRN-003 | Hóa đơn hỗn hợp | In chữ + hình ảnh + QR + mã vạch | Mọi phần tử in đúng | P1 |
| TC-PRN-008 | URD-PRN-003 | Lệnh lỗi | Gửi chuỗi lệnh không hỗ trợ | Xử lý mượt mà; thông báo người dùng; không crash | P1 |
| TC-PRN-009 | URD-PRN-004 | Kiểu markup | In căn lề/đậm/gạch chân/cao gấp đôi | Mỗi kiểu hiển thị đúng | P1 |
| TC-PRN-010 | URD-PRN-004 | Căn lề từng dòng | Các dòng L/C liên tiếp | Căn lề độc lập; không lem | P1 |
| TC-PRN-011 | URD-PRN-005 | Raster PDF | In một hóa đơn PDF | Dither Floyd–Steinberg; đọc được | P1 |
| TC-PRN-012 | URD-PRN-005 | PDF màu | In ảnh màu đầy đủ | Dither đơn sắc; không crash | P1 |
| TC-PRN-013 | URD-PRN-006 | Chữ tiếng Việt | In "Cà phê sữa đá" | Đúng qua code page 28; không thay thế ký tự | P1 |
| TC-PRN-014 | URD-PRN-006 | Bộ ký tự hỗn hợp | VI + ASCII trên một dòng | Cả hai hiển thị đúng | P1 |
| TC-PRN-015 | URD-PRN-007 | 58mm | In trên 58mm | Định dạng cho 58mm; không cắt cụt | P1 |
| TC-PRN-016 | URD-PRN-007 | 80mm | In trên 80mm | Bố cục 80mm toàn chiều rộng | P1 |
| TC-PRN-017 | URD-PRN-007 | Lệch khổ | Mẫu 80mm in trên 58mm | Định dạng lại hoặc cảnh báo; không cắt cụt âm thầm | P1 |
| TC-PRN-018 | URD-PRN-008 | Tự cắt | In trên máy in có dao cắt | Lệnh tự cắt được gửi | P2 |
| TC-PRN-019 | URD-PRN-008 | Không dao cắt | In trên máy in không dao cắt | Hoàn tất; không lệnh cắt; không crash | P2 |
| TC-PRN-020 | URD-PRN-009 | Ngăn kéo | Hoàn tất thanh toán tiền mặt | Kích hoạt ngăn kéo qua máy in; mở | P2 |
| TC-PRN-021 | URD-PRN-010 | Kết nối | Gọi connect | Đã kết nối; lệnh in định tuyến tới đây | P1 |
| TC-PRN-022 | URD-PRN-010 | Ngắt kết nối | Gọi disconnect | Đã ngắt; xử lý mượt mà | P1 |
| TC-PRN-023 | URD-PRN-010 | Gửi lệnh | Gửi một hóa đơn hợp lệ | Xếp hàng, in; trả thành công | P1 |
| TC-PRN-024 | URD-PRN-010 | Không có máy in | Gửi lệnh khi không kết nối máy in | Trả lỗi; hiển thị; không thất bại âm thầm | P1 |
| TC-PRN-025 | URD-PRN-011 | Kết nối WS | Thêm máy in mạng | WebSocket kết nối; in thử thành công | P2 |
| TC-PRN-026 | URD-PRN-011 | WS rớt | Máy in mất liên lạc giữa lệnh | Phát hiện lỗi; thông báo; đề nghị kết nối lại | P2 |
| TC-PRN-027 | URD-PRN-012 | WebUSB | In trong Web POS với USB | Dùng WebUSB; hóa đơn được in | P1 |
| TC-PRN-028 | URD-PRN-012 | Không WebUSB | In khi WebUSB không hỗ trợ | Thông báo rõ ràng; đề xuất thay thế | P1 |
| TC-PRN-029 | URD-PRN-010 | Xác nhận & in hóa đơn | Chạm "Confirm & Print Invoice" trên màn hình thành công | Lệnh được gửi; hóa đơn được in; đơn nháp được tạo | P1 |
Phát hiện QE — TC-PRN-029 hiện thất bại
apps/sale-renderer/.../payment-dialog/stepper/success/PaymentSuccess.tsx — nhánh in ghi log "Print invoice functionality to be implemented" và không gửi lệnh in. "Confirm & Print Invoice" âm thầm bỏ qua việc in. TC-PRN-029 kiểm tra hành vi kỳ vọng sau khi được triển khai.
2.6 Máy quét Mã vạch (SCN)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-SCN-001 | URD-SCN-001 | USB HID | Quét với máy quét USB HID | Phát hiện không cần thiết lập; tra cứu kích hoạt | P1 |
| TC-SCN-002 | URD-SCN-001 | BT HID | Quét với máy quét BT HID | Nhận như sự kiện bàn phím; tra cứu kích hoạt | P1 |
| TC-SCN-003 | URD-SCN-002 | 13 ký tự | EAN-13 + Enter trong 100ms | Bắt trọn mã vạch; tìm kiếm kích hoạt | P1 |
| TC-SCN-004 | URD-SCN-002 | Gõ thủ công | Gõ 8 ký tự chậm, không Enter | Hook không kích hoạt; xem như nhập văn bản | P1 |
| TC-SCN-005 | URD-SCN-002 | Tối thiểu 10 | Đúng 10 ký tự + Enter | Chấp nhận; tìm kiếm kích hoạt | P1 |
| TC-SCN-006 | URD-SCN-002 | Tối đa 20 | Đúng 20 ký tự + Enter | Chấp nhận; tìm kiếm kích hoạt | P1 |
| TC-SCN-007 | URD-SCN-002 | Dưới tối thiểu | 9 ký tự | Không tìm kiếm; dưới ngưỡng | P1 |
| TC-SCN-008 | URD-SCN-002 | Trên tối đa | 21 ký tự | Không tìm kiếm; hành vi có ghi chú | P1 |
| TC-SCN-009 | URD-SCN-003 | Kích hoạt Enter | 13 ký tự + Enter | Tìm kiếm kích hoạt ngay khi Enter | P1 |
| TC-SCN-010 | URD-SCN-003 | Kích hoạt timeout | 13 ký tự, không Enter, dừng 100ms | Timeout hoàn tất quét; tìm kiếm kích hoạt | P1 |
| TC-SCN-011 | URD-SCN-004 | Mở camera | Mở máy quét QR có quyền | Hiển thị khung ngắm; bắt đầu quét | P1 |
| TC-SCN-012 | URD-SCN-004 | Từ chối quyền | Mở máy quét QR, tắt quyền | Lỗi; hướng dẫn cấp quyền | P1 |
| TC-SCN-013 | URD-SCN-004 | Giải mã QR | Đưa một mã QR | Bắt được; callback kích hoạt; máy quét đóng | P1 |
| TC-SCN-014 | URD-SCN-004 | Bật/tắt đèn flash | Chạm đèn flash trong tối | Đèn bật; khung ngắm sáng; chạm lại tắt | P1 |
| TC-SCN-015 | URD-SCN-005 | Thêm vào giỏ | Quét mã vạch đã biết trên POS | Sản phẩm tra cứu; thêm được trong một chạm | P1 |
| TC-SCN-016 | URD-SCN-005 | Không tìm thấy | Quét mã vạch không xác định | "Không tìm thấy sản phẩm"; giỏ hàng không đổi | P1 |
| TC-SCN-017 | URD-SCN-006 | Định dạng 1D | Quét EAN-13 + Code 128 | Cả hai giải mã; sản phẩm đúng | P2 |
| TC-SCN-018 | URD-SCN-006 | Định dạng 2D | Quét QR + Data Matrix | Cả hai giải mã; dữ liệu đúng | P2 |
| TC-SCN-019 | URD-SCN-007 | Ngữ cảnh sản phẩm | Quét trên tìm sản phẩm | Kết quả được điền; sản phẩm trả về | P2 |
| TC-SCN-020 | URD-SCN-007 | Ngữ cảnh hóa đơn | Quét QR hóa đơn trên tra cứu | Kết quả được điền; hóa đơn trả về | P2 |
Phát hiện QE — TC-SCN-014 hiện thất bại
apps/sale-renderer/.../modal/QRScannerModal.tsx — lời gọi đèn flash invoke('plugin:barcode-scanner|toggle_torch') đang bị comment. Giao diện bật/tắt lật isTorchOn nhưng đèn flash không thực sự kích hoạt. TC-SCN-014 kiểm tra hành vi kỳ vọng sau khi được bật lại.
2.7 SoundBox (SBX)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-SBX-001 | URD-SBX-001 | Ghép nối | Ghép nối SoundBox ở chế độ ghép nối | Ghép nối; báo đã kết nối; LED xanh sáng đều | P1 |
| TC-SBX-002 | URD-SBX-001 | Đã ghép nối | Ghép nối cái đang gắn với thiết bị khác | Thất bại hoặc nhắc xóa; không thất bại âm thầm | P1 |
| TC-SBX-003 | URD-SBX-001 | Đã tắt nguồn | Ghép nối SoundBox đã tắt nguồn | Không tìm thấy; hướng dẫn bật nguồn; không crash | P1 |
| TC-SBX-004 | URD-SBX-002 | Đọc VI | Thanh toán tiền mặt, locale VI | Đọc số tiền + phương thức bằng tiếng Việt | P1 |
| TC-SBX-005 | URD-SBX-002 | Đọc EN | Thanh toán thẻ, locale EN | Đọc số tiền + phương thức bằng tiếng Anh | P1 |
| TC-SBX-006 | URD-SBX-002 | Không có SoundBox | Thanh toán khi không kết nối | Thanh toán hoàn tất; không đọc; không lỗi | P1 |
| TC-SBX-007 | URD-SBX-003 | Cấu hình VI | SoundBox cấu hình VI | Thông báo bằng tiếng Việt; số đọc đúng | P1 |
| TC-SBX-008 | URD-SBX-003 | Cấu hình EN | SoundBox cấu hình EN | Thông báo bằng tiếng Anh | P1 |
| TC-SBX-009 | URD-SBX-003 | Đổi ngôn ngữ | Đổi VI→EN giữa phiên | Thông báo kế tiếp bằng tiếng Anh; không kết nối lại | P1 |
| TC-SBX-010 | URD-SBX-004 | LED ghép nối | Chưa ghép nối | Xanh nhấp nháy | P2 |
| TC-SBX-011 | URD-SBX-004 | LED đã kết nối | Đã ghép nối | Xanh sáng đều | P2 |
| TC-SBX-012 | URD-SBX-004 | LED thành công | Thông báo thành công | Nháy xanh lá | P2 |
| TC-SBX-013 | URD-SBX-004 | LED lỗi | Sự kiện lỗi/thất bại | Nháy đỏ | P2 |
| TC-SBX-014 | URD-SBX-005 | Âm lượng tối thiểu | Đặt âm lượng 1 | Phát ở mức tối thiểu; nghe được | P2 |
| TC-SBX-015 | URD-SBX-005 | Âm lượng tối đa | Đặt âm lượng 10 | Phát ở mức tối đa; rõ | P2 |
| TC-SBX-016 | URD-SBX-005 | Ngoài khoảng | Đặt 0 hoặc 11 | Bị từ chối/kẹp về 1–10 | P2 |
| TC-SBX-017 | URD-SBX-005 | Tắt đọc số tiền | Tắt đọc số tiền | Thông báo bỏ số tiền; phần còn lại không đổi | P2 |
| TC-SBX-018 | URD-SBX-006 | Đúng phạm vi | Cách thiết bị 10 m | Nhận thông báo không gián đoạn | P2 |
| TC-SBX-019 | URD-SBX-006 | Ngoài phạm vi | Cách thiết bị 11 m | Kết nối có thể rớt; xử lý mượt mà | P2 |
2.8 SoftPOS / NFC (NFC)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-NFC-001 | URD-NFC-001 | Có NFC | Mở cài đặt SoftPOS, bật NFC | NFC xác nhận; kích hoạt được bật | P1 |
| TC-NFC-002 | URD-NFC-001 | Không NFC | Mở cài đặt SoftPOS, không NFC | Phát hiện không khả dụng; kích hoạt bị tắt/ẩn; thông báo | P1 |
| TC-NFC-003 | URD-NFC-003 | NFC tắt | Kích hoạt khi NFC bị tắt | Hướng dẫn bật NFC; kích hoạt dừng | P1 |
| TC-NFC-004 | URD-NFC-002 | KYC hoàn tất | Kích hoạt khi KYC xong | SoftPOS kích hoạt; có thể bắt đầu thanh toán | P1 |
| TC-NFC-005 | URD-NFC-002 | Thiếu KYC | Kích hoạt khi chưa KYC | Bị chặn; thông báo yêu cầu KYC | P1 |
| TC-NFC-006 | URD-NFC-004 | Ẩn trên iOS | Mở SoftPOS trên iOS | Tùy chọn không khả dụng; thông báo chỉ Android | P2 |
| TC-NFC-007 | URD-NFC-004 | Luồng Android | Bắt đầu thanh toán không tiếp xúc | Plugin NFC/thanh toán được gọi; chờ chạm | P2 |
2.9 Giám sát Tình trạng (MON)
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-MON-001 | URD-MON-001 | Heartbeat | Thiết bị hoạt động theo thời gian | Heartbeat mỗi 5 phút; được ghi; giữ online | P1 |
| TC-MON-002 | URD-MON-001 | Mốc 5 phút | 5 phút từ heartbeat cuối | Heartbeat được gửi; dấu thời gian cập nhật; timer reset | P1 |
| TC-MON-003 | URD-MON-001 | Mất mạng | Heartbeat không gửi được | Ghi log thất bại; tiếp tục khi kết nối lại | P1 |
| TC-MON-004 | URD-MON-002 | Offline | 15 phút không heartbeat | Trạng thái → offline; dashboard phản ánh | P1 |
| TC-MON-005 | URD-MON-002 | 14 phút | 14 phút không heartbeat | Vẫn online; chưa vượt ngưỡng | P1 |
| TC-MON-006 | URD-MON-002 | Online lại | Heartbeat sau offline | Trạng thái → online ngay lập tức | P1 |
| TC-MON-007 | URD-MON-003 | Danh sách trạng thái | Mở danh sách thiết bị (trạng thái hỗn hợp) | Mỗi thiết bị hiển thị online/offline | P1 |
| TC-MON-008 | URD-MON-003 | Lọc | Lọc chỉ online | Chỉ hiển thị thiết bị online | P1 |
| TC-MON-009 | URD-MON-004 | Vô hiệu hóa từ xa | Vô hiệu hóa từ xa thiết bị đang hoạt động | Trạng thái DEACTIVATED; phiên kết thúc; ghi log | P1 |
| TC-MON-010 | URD-MON-004 | Đã tắt sẵn | Vô hiệu hóa một thiết bị DEACTIVATED | Xử lý mượt mà; vẫn DEACTIVATED | P1 |
| TC-MON-011 | URD-MON-005 | Xóa từ xa | Kích hoạt xóa trên thiết bị online | Dữ liệu cache bị xóa; thiết bị vô hiệu hóa; ghi log | P2 |
| TC-MON-012 | URD-MON-005 | Xóa xếp hàng | Kích hoạt xóa trên thiết bị offline | Xếp hàng; thực thi khi kết nối lại | P2 |
2.10 Terminal — Phát hiện QE
Các case này liên quan luồng VNPAY Terminal, ngoài phạm vi của phiên bản URD này (thực thể đã tồn tại nhưng chưa đấu nối). Chúng được ghi lại để không bỏ sót các khoảng trống.
| TC ID | URD ref | Tình huống | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-CON-017 | URD-POS-002 | Danh sách terminal | Mở danh sách Terminal có bản ghi sẵn | Terminal hiển thị tên/mã/trạng thái/loại; phân trang hoạt động | P1 |
| TC-CON-018 | URD-MOB-006 | Metadata terminal | Khởi tạo checkout trên một terminal đã biết | Body thanh toán mang tên/mã terminal thật, không phải placeholder | P1 |
Phát hiện QE — TC-CON-017 / TC-CON-018 hiện thất bại
apps/client/.../terminal/list/TerminalTable.tsx— render vớirowCount={0},data={[]}hardcode; chưa đấu nối nguồn dữ liệu, nên bảng luôn rỗng.apps/sale-renderer/.../apis/payment/payment.api.ts—metadata.terminalbị hardcode ({ name: 'SDHVJK11', code: 'SDHVJK11', serviceCode: '03' }) và gửi tới VNPAY cho mọi giao dịch, có nguy cơ thất bại đối soát khi có nhiều terminal.
3. Truy vết
Mọi yêu cầu Must ánh xạ tới ≥1 test case. Không có yêu cầu Must nào chưa được phủ.
| Vùng URD | Yêu cầu | Test case | Trạng thái |
|---|---|---|---|
DEV (URD-DEV-001…019) | 19 | TC-DEV-001…038 | ✅ Đã phủ |
MOB (URD-MOB-001…006) | 6 | TC-MOB-001…015 | ✅ Đã phủ |
WEB (URD-WEB-001…005) | 5 | TC-WEB-001…013 | ✅ Đã phủ |
POS (URD-POS-001…005) | 5 | TC-POS-001…014, TC-CON-017 | ✅ Đã phủ |
PRN (URD-PRN-001…012) | 12 | TC-PRN-001…029 | ✅ Đã phủ* |
SCN (URD-SCN-001…007) | 7 | TC-SCN-001…020 | ✅ Đã phủ* |
SBX (URD-SBX-001…006) | 6 | TC-SBX-001…019 | ✅ Đã phủ |
NFC (URD-NFC-001…004) | 4 | TC-NFC-001…007 | ✅ Đã phủ |
MON (URD-MON-001…005) | 5 | TC-MON-001…012 | ✅ Đã phủ |
*Độ phủ
PRNvàSCNbao gồm TC-PRN-029 và TC-SCN-014, kiểm tra hành vi chưa được triển khai (xem phát hiện QE). Đây là các case dự kiến thất bại cho đến khi khắc phục khoảng trống. TC-CON-017/018 phủ luồng Terminal chưa đấu nối, nằm ngoài phạm vi v0.1.