Lưu ý: Đây là yêu cầu phi chức năng riêng cho Dashboard phân tích. Xem thêm NFR toàn hệ thống.
II. Yêu cầu phi chức năng#
13. Hiệu năng (Performance)#
| Tiêu chí | Yêu cầu |
|---|---|
| Thời gian tải trang Analytics | ≤ 2s (với cache) / ≤ 4s (lần đầu) |
| Thời gian áp dụng bộ lọc | ≤ 1.5s |
| Thời gian render biểu đồ | ≤ 500ms |
| Cache dữ liệu (client-side) | 5-10 phút tùy loại dữ liệu |
| Auto refetch khi filter thay đổi | Có |
14. Responsive Design#
| Thiết bị | Độ rộng | Layout |
|---|---|---|
| Mobile | < 640px | 1 cột, filter thu gọn vào drawer |
| Tablet | 640-1024px | 2 cột cho chart |
| Desktop | 1024-1280px | 2-3 cột |
| Large Desktop | ≥ 1280px | 3+ cột, sidebar cố định |
15. Accessibility (A11y)#
| Tiêu chí | Yêu cầu |
|---|---|
| ARIA labels | Đầy đủ trên nút, input, element tương tác |
| Keyboard navigation | Tab, Enter, Esc hoạt động đúng trên form và dropdown |
| Tôn trọng reduced motion | Khi OS bật "Reduce motion" → giảm animation |
| Color contrast | Đạt WCAG AA (tỷ lệ ≥ 4.5:1 cho text) |
| Form validation | Thông báo lỗi gắn liền với input |
16. Bảo mật (Security)#
| Yêu cầu | Chi tiết |
|---|---|
| Xác thực | Token-based, token hết hạn → tự động đăng xuất |
| Phiên làm việc | Gắn với thiết bị (device ID) |
| XSS prevention | Escape dữ liệu hiển thị |
| HTTPS | Bắt buộc trên production |
| Phân quyền | Chỉ Admin AT/TCB được cấp tài khoản mới truy cập |
17. Xử lý lỗi & Phục hồi#
Hành vi chung#
- Error Boundary: Lỗi một section không làm crash toàn trang, chỉ section đó hiện alert + nút thử lại.
- Toast Notification: Mọi hành động (thành công/thất bại) đều có toast thông báo, tự ẩn sau 3-5s.
- Empty State: API trả rỗng → hiển thị icon + thông báo "Không có dữ liệu".
- Loading State: Khi fetch → skeleton placeholder thay vì blank.
- Network Error: Mất mạng → banner cảnh báo, tự retry khi có mạng lại.
Tiêu chí chấp nhận#
| # | Tiêu chí | Điều kiện đạt |
|---|---|---|
| AC-DB.17.1 | Error boundary | API một section lỗi → hiển thị alert + retry, các section khác vẫn hoạt động |
| AC-DB.17.2 | Toast notification | Action thành công/thất bại → toast hiện 3-5s rồi tự ẩn |
| AC-DB.17.3 | Empty state | API trả rỗng → hiển thị icon + "Không có dữ liệu" |
| AC-DB.17.4 | Loading skeleton | Đang fetch → skeleton placeholder thay vì blank |
| AC-DB.17.5 | Network error | Offline → banner cảnh báo, có mạng lại → tự retry |