Giao diện
US-E06: Xem danh sách deal lỗi và trạng thái tự hồi phục ​
Thuộc FS: 00-overview.md — SAPP-20603 eContract (Retry · Check luồng · Thống kê lỗi) Phần chung (tổng quan, roles, flow tổng, related features, NFR, Open Questions, References) xem ở Overview. File này chỉ chứa nội dung riêng của US.
Chỉ đọc. Danh sách đến từ cùng lượt tải của US-E05 (không có lời gọi API riêng); thao tác trong modal chỉ copy vào clipboard hoặc mở màn khác — không ghi hệ thống nào.
| Field | Value |
|---|---|
| US ID | US-E06 |
| Role thực hiện | R1 - Người dùng tool (Assumption (OQ về G-01) — OQ-E-04) |
| Phase | Đã triển khai (as-built @ e77c47a) — sub-tool sapp.013 Thống kê lỗi econtract |
| Priority | N/A — as-built |
| Status | Draft |
| NFR liên quan | NFR-E-01, NFR-E-02, NFR-E-03 — xem Overview §5 |
| OQ liên quan | OQ-E-04, OQ-E-10, OQ-E-11, OQ-E-12 — xem Overview §6 |
1. US Statement ​
text
As a Người dùng tool [Assumption (OQ về G-01)]
I want xem danh sách các deal có lần chạy lỗi trong khoảng đang thống kê, lọc deal "Vẫn lỗi" /
"Đã tự hồi phục", copy deal id và mở Check luồng của từng deal
So that [Assumption — OQ-E-12] tôi tách được deal còn cần xử lý khỏi deal cron retry đã tự xử lý,
rồi điều tra từng deal còn lỗi2. Dependencies & Definition Of Ready ​
N/A — đã triển khai. Dependency runtime:
| # | Cần sẵn sàng | Ai cung cấp | Trạng thái |
|---|---|---|---|
| D1 | Đã tải thống kê ở US-E05 và có ≥ 1 deal lỗi | - | Trong màn |
| D2 | Tool sapp.012 truy cập được để mở Check luồng — US-P02 | Admin CMS | Runtime |
3. Business Rules ​
| ID | Rule | Áp dụng ở | Đã cover bởi (AC) | Nguồn code (Mode B/C) |
|---|---|---|---|---|
| BR-01 | Nút "Danh sách" chỉ nằm ở ô "Deal bị lỗi" và chỉ hiện khi danh sách deal lỗi có ≥ 1 deal | US-E05 M1 - ô Deal bị lỗi | AC-M1.1 | fe/src/ui/components/works/sapp/econtract-error-stats-tool.tsx:426-434 · :451-461 |
| BR-02 | Danh sách chứa tối đa 500 deal lỗi gần nhất trong khoảng; bị cắt thì tiêu đề là "Deal bị lỗi (500 / tổng)" và có cảnh báo DEALS_TRUNCATED ("Có hơn 500 deal lỗi — danh sách chỉ hiện 500 deal lỗi gần nhất. Thu hẹp khoảng thời gian để xem đủ.") | M1 - tiêu đề, cảnh báo | AC-M1.2 | be/libs/constants/src/lib/sapp/sapp.constants.ts:206-215 · be/libs/modules/src/lib/sapp/common.service.ts:2044-2064 · :2109-2122 · econtract-error-stats-tool.tsx:85-86 · :785 |
| BR-03 | Sắp lỗi gần nhất ở trên (theo thời điểm lỗi cuối) | M1 - danh sách | AC-M1.2 | common.service.ts:2062 · econtract-error-stats-tool.tsx:787 |
| BR-04 | Deal "Đã tự hồi phục" = lần chạy cuối cùng của deal trong khoảng (mọi trạng thái) là SUCCESS; còn lại là "Vẫn lỗi". Màn giải thích: "SUCCESS nghĩa là cron retry đã tự xử lý; FAIL là vẫn đang hỏng." | M1 - bộ lọc, cột Lần chạy cuối | AC-M1.3 | common.service.ts:2040-2043 · :2058 · econtract-error-stats-tool.tsx:742-743 · :837-842 |
| BR-05 | Bộ lọc 3 nút "Tất cả" / "Vẫn lỗi" / "Đã tự hồi phục" kèm số đếm; ô tìm "Lọc theo deal id, flow, lỗi…" (không phân biệt hoa thường) kết hợp với bộ lọc; chân modal "Đang hiện N deal" | M1 - lọc / tìm | AC-M1.4 | econtract-error-stats-tool.tsx:736-740 · :762-776 · :790-795 · :808-834 |
| BR-06 | Copy: nút "Copy N deal id" copy các deal đang hiện (mỗi id 1 dòng, khoá khi N = 0); nút copy từng dòng copy 1 deal id; chỉ vào clipboard, không tạo file; nút đổi "Đã copy" 1,5 giây | M1 - action A1, A2 | AC-M1.5 | econtract-error-stats-tool.tsx:778-782 · :796-804 · :959-970 |
| BR-07 | Nút mở ngoài ở mỗi dòng mở Check luồng econtract của deal ở tab mới (?dealId= được mã hoá) — màn đó tự tra cứu | M1 - action A3 | AC-M1.6 | econtract-error-stats-tool.tsx:972-982 · fe/src/ui/components/works/sapp/econtract-timeline-tool.tsx:636-648 |
| BR-08 | Mỗi deal hiện: deal id, flow lỗi, số lần lỗi, lỗi cuối lúc, lần chạy cuối (trạng thái), lỗi gần nhất (dòng đầu của error) | M1 - danh sách | AC-M1.2 | econtract-error-stats-tool.tsx:846-940 · common.service.ts:2044-2064 |
4. Design ​
a. Mối liên hệ giữa các màn & User Flow ​
text
[US-E05 kết quả] → ô "Deal bị lỗi" → "Danh sách"
↓
[M1: Modal "Deal bị lỗi (N)"]
├─ lọc Tất cả / Vẫn lỗi / Đã tự hồi phục, ô tìm
├─ "Copy N deal id" / copy 1 deal id → clipboard
├─ nút mở ngoài → [US-E04 Check luồng, tab mới, tự tra cứu]
└─ đóng modal → về US-E05b. Chi tiết từng màn ​
Màn M1 - Modal "Deal bị lỗi" ​
| Field | Value |
|---|---|
| Figma frame | N/A |
| Trigger vào màn | Bấm "Danh sách" ở ô "Deal bị lỗi" của US-E05 |
| Mô tả ngắn | Tiêu đề "Deal bị lỗi (N)" (hoặc "N / tổng" khi bị cắt); phụ đề "<từ> → <đến> · lỗi gần nhất ở trên"; trên mobile hiện dạng thẻ, desktop dạng bảng |
UI States ​
| State | Khi nào | Hiển thị | Figma frame |
|---|---|---|---|
| Default | Vừa mở | Bộ lọc "Tất cả" đang chọn, ô tìm trống, toàn bộ danh sách; chân "Đang hiện N deal" + "Copy N deal id" | N/A |
| Loading | N/A — dữ liệu đã có từ US-E05, không gọi API | - | N/A |
| Has data | Có deal khớp lọc | Danh sách deal theo BR-08 | N/A |
| Empty | Lọc / tìm không khớp deal nào | Danh sách rỗng, "Đang hiện 0 deal", nút "Copy 0 deal id" bị khoá | N/A |
| Error | N/A — không có lời gọi API trong modal | - | N/A |
| Disabled | 0 deal đang hiện | Nút copy hàng loạt bị khoá | N/A |
Fields ​
| Field | Required | Type | Default | Format | Validation | Error Message | Visibility | Depends On |
|---|---|---|---|---|---|---|---|---|
| Ô tìm "Lọc theo deal id, flow, lỗi…" | No | Search text | Trống | Tự do, bỏ khoảng trắng, không phân biệt hoa thường | - | - | Always | - |
| Bộ lọc trạng thái | Yes | 3 nút chọn 1 | Tất cả | "Tất cả (n)" / "Vẫn lỗi (n)" / "Đã tự hồi phục (n)" | - | - | Always | BR-04 |
| (hiển thị) deal id · flow lỗi · lần lỗi · lỗi cuối lúc · lần chạy cuối · lỗi gần nhất | - | Text | - | Giờ theo máy người xem | - | - | Mỗi dòng | BR-08 |
Filter / Search / Sort (chỉ màn List/Report — xóa nếu không phải) ​
| Loại | Theo field | Kiểu | Default | Notes |
|---|---|---|---|---|
| Filter | Trạng thái lần chạy cuối | 3 nút chọn 1 | Tất cả | BR-04, BR-05 |
| Search | deal id, flow lỗi, lỗi gần nhất | free-text | — | Lọc ở FE trên ≤ 500 deal đã tải |
| Sort | Lỗi cuối lúc | Cố định | Mới nhất trước | BR-03 |
| Pagination | - | - | Không phân trang | Tối đa 500 deal (BR-02) |
Actions ​
A1 - Copy N deal id ​
| Item | Description |
|---|---|
| Trigger | Bấm "Copy N deal id" ở chân modal |
| Behavior | Ghi các deal id đang hiện (mỗi id 1 dòng) vào clipboard trình duyệt; không ghi hệ thống nào, không tạo file (NFR-E-02) |
| Success Result | Nút hiện "Đã copy" 1,5 giây |
Error cases:
| Case | Expected Handling |
|---|---|
| 0 deal đang hiện | Nút bị khoá |
A2 - Copy 1 deal id ​
| Item | Description |
|---|---|
| Trigger | Bấm biểu tượng copy ở dòng deal |
| Behavior | Ghi deal id đó vào clipboard |
| Success Result | Biểu tượng đổi thành dấu tích 1,5 giây |
Error cases:
| Case | Expected Handling |
|---|---|
| N/A | - |
A3 - Mở Check luồng (tab mới) ​
| Item | Description |
|---|---|
| Trigger | Bấm biểu tượng mở ngoài "Mở Check luồng econtract của deal này (tab mới)" |
| Behavior | Mở /works/sapp/tools/econtract-timeline?dealId=<id> ở tab mới; modal ở tab hiện tại giữ nguyên |
| Success Result | Tab mới tự tra cứu timeline của deal (US-E04, chỉ đọc) |
Error cases:
| Case | Expected Handling |
|---|---|
| Tool sapp.012 đang khoá | Tab mới xử lý theo US-P02 |
Acceptance Criteria của màn M1 ​
AC-M1.1 - Nút Danh sách ​
gherkin
Given lượt thống kê có Deal bị lỗi = 0
When kết quả hiện ra
Then ô "Deal bị lỗi" không có nút "Danh sách"
Given lượt thống kê có ít nhất 1 deal lỗi
Then ô "Deal bị lỗi" có nút "Danh sách" mở modal "Deal bị lỗi (N)"Maps to:
- Business Rule: BR-01
AC-M1.2 - Nội dung, thứ tự và giới hạn 500 ​
gherkin
Given khoảng thống kê có 620 deal lỗi
When người dùng mở danh sách
Then tiêu đề là "Deal bị lỗi (500 / 620)" và có cảnh báo "Có hơn 500 deal lỗi — …"
And deal có lỗi gần nhất ở trên cùng
And mỗi deal hiện flow lỗi, số lần lỗi, lỗi cuối lúc, lần chạy cuối và lỗi gần nhấtMaps to:
- Business Rule: BR-02, BR-03, BR-08
AC-M1.3 - Đã tự hồi phục ​
gherkin
Given deal A có lần chạy FAIL rồi lần chạy cuối trong khoảng là SUCCESS, deal B có lần chạy cuối là FAIL
When người dùng chọn "Đã tự hồi phục"
Then chỉ thấy deal A
When người dùng chọn "Vẫn lỗi"
Then chỉ thấy deal BMaps to:
- Business Rule: BR-04
AC-M1.4 - Tìm kết hợp bộ lọc ​
gherkin
Given bộ lọc "Vẫn lỗi" đang chọn
When người dùng gõ "cancel" vào ô tìm
Then chỉ hiện deal "Vẫn lỗi" có flow lỗi hoặc lỗi gần nhất chứa "cancel" (không phân biệt hoa thường)
And chân modal hiện "Đang hiện N deal" đúng số dòngMaps to:
- Business Rule: BR-05
AC-M1.5 - Copy deal id ​
gherkin
Given danh sách đang hiện 3 deal
When người dùng bấm "Copy 3 deal id"
Then clipboard chứa 3 deal id, mỗi id một dòng, không có dữ liệu nào khác
And không có file nào được tạoMaps to:
- Business Rule: BR-06
- Field/Action: A1, A2
AC-M1.6 - Mở Check luồng ở tab mới ​
gherkin
Given dòng deal 123 trong danh sách
When người dùng bấm biểu tượng mở ngoài
Then tab mới mở …/econtract-timeline?dealId=123 và tự tra cứu
And modal ở tab hiện tại vẫn mởMaps to:
- Business Rule: BR-07
- Field/Action: A3
Negative AC / Edge Cases của màn M1 ​
| ID | Tình huống | Hành vi mong đợi |
|---|---|---|
| EC-M1.1 | Đúng 500 deal lỗi (không bị cắt) | Hành vi hiện tại: cảnh báo DEALS_TRUNCATED vẫn bật (so ≥ 500) — DR-E-01, OQ-E-10 |
| EC-M1.2 | Tìm không khớp | Danh sách rỗng, nút copy hàng loạt khoá |
| EC-M1.3 | Muốn Retry một deal "Vẫn lỗi" ngay trong danh sách | Hiện không có nút Retry trong modal; người dùng copy deal id và dùng màn Retry (US-E01/E02). Việc còn mở audit T2-05 — OQ-E-11 |
| EC-M1.4 | Cần danh sách của khoảng thời gian khác | Modal dùng dữ liệu của lượt tải gần nhất; đóng modal, đổi khoảng và tải lại ở US-E05 |
| EC-M1.5 | Deal "Đã tự hồi phục" trong khoảng nhưng lỗi lại sau thời điểm "Đến" | Vẫn tính "Đã tự hồi phục" — BR-04 chỉ xét lần chạy trong khoảng |
5. Cross-feature AC ​
AC-X.1 - Deal hồi phục nhờ Retry ​
gherkin
Given deal D lỗi, sau đó US-E02 Retry và cron chạy lại thành công trong cùng khoảng thống kê
When người dùng mở danh sách deal lỗi của khoảng đó
Then D nằm ở nhóm "Đã tự hồi phục" (lần chạy cuối SUCCESS), dù lần chạy lại là do Retry tayMaps to:
- REL-03 (Be Affected - Cron econtract-payment + EFY/FPT)
AC-X.2 - Mở Check luồng khi tool bị khoá ​
gherkin
Given tool sapp.012 đang khoá trên hub
When người dùng mở Check luồng từ danh sách
Then tab mới xử lý truy cập theo US-P02Maps to:
- REL-01 (Affects - Hub & khoá tool)