Giao diện
US-T03: Tự kiểm tra thay đổi owner sau khi làm mới ​
Thuộc FS: 00-overview.md — SAPP-23954 Ticket Owner 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. As-built @
e77c47a· nguồn: inventory 23954 A-08.
| Field | Value |
|---|---|
| US ID | US-T03 |
| Role thực hiện | R2 - Hệ thống (tự chạy); kết quả hiển thị cho R1 - Người dùng tool Assumption (OQ về G-01) |
| Phase | Đã triển khai (as-built @ e77c47a) |
| Priority | N/A — as-built |
| Status | Draft |
| NFR liên quan | NFR-T-01, NFR-T-02, NFR-T-03, NFR-T-07 — xem Overview §5 |
| OQ liên quan | OQ-T-01, OQ-T-10, OQ-T-15 — xem Overview §6 |
1. US Statement ​
text
As a Người dùng tool (Assumption — OQ về G-01)
I want sau khi làm mới, hệ thống tự chờ 15 giây rồi đọc lại cap_nhat_owner và owner của các ticket vừa làm mới,
so với giá trị lúc làm mới và cho biết ticket nào có thay đổi
So that [Assumption — OQ-T-01] biết automation HubSpot đã chạy và gán owner cho ticket nào mà không phải mở từng ticket2. Dependencies & Definition Of Ready ​
N/A — đã triển khai (Mode B).
Dependency runtime (tham khảo):
| # | Cần sẵn sàng | Ai cung cấp | Trạng thái |
|---|---|---|---|
| D1 | Một lượt làm mới có ≥ 1 ticket thành công (US-T02) | Người dùng | N/A — runtime |
| D2 | Token HubSpot của portal trong env_systems (US-P04) | Admin CMS | N/A — runtime |
3. Business Rules ​
| ID | Rule | Áp dụng ở | Đã cover bởi (AC) | Nguồn code (Mode B/C) |
|---|---|---|---|---|
| BR-01 | Kiểm tra chỉ tự chạy khi lượt làm mới vừa xong có ≥ 1 ticket thành công; chỉ kiểm tra các ticket thành công của lượt đó | M1 - khối đếm ngược | AC-M1.1, AC-M1.2 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:584-590 |
| BR-02 | Sau làm mới, màn đếm ngược 15 giây (hiện số giây còn lại) rồi tự gọi kiểm tra; việc chờ nằm ở trình duyệt, BE đọc lại ngay khi được gọi. Không có nút chạy kiểm tra thủ công | M1 - khối đếm ngược | AC-M1.1 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:180-181, :631-642, :882-888; be/libs/modules/src/lib/sapp/common.service.ts:1332-1339 |
| BR-03 | Giá trị "trước" (baseline) = cap_nhat_owner đã ghi lại và owner của ticket tại lúc làm mới (do màn gửi kèm) | M1 - bảng kết quả | AC-M1.3 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:614-618 |
| BR-04 | Với từng ticket (lần lượt): đọc lại cap_nhat_owner và owner hiện tại trên portal; "có thay đổi" = giá trị "sau" khác "trước". Không có "trước" để so → "không xác định" | M1 - bảng kết quả | AC-M1.3, AC-M1.4 | be/libs/modules/src/lib/sapp/common.service.ts:1321-1330, :1346-1374 |
| BR-05 | Ticket không đọc lại được → đánh dấu "không đọc được", giá trị "sau" trống, "có thay đổi" = không xác định; các ticket khác vẫn được kiểm tra | M1 - bảng kết quả | AC-M1.5 | be/libs/modules/src/lib/sapp/common.service.ts:1375-1392; fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:245-250 |
| BR-06 | Tổng "X/N có thay đổi": X = số ticket có cap_nhat_owner hoặc owner được xác định là có thay đổi; dòng có thay đổi được tô nền và giá trị "sau" in đậm | M1 - bảng kết quả | AC-M1.3 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:209-215, :234-240, :188-193 |
| BR-07 | cap_nhat_owner hiển thị theo nhãn tuỳ chọn của portal (không có nhãn thì giá trị gốc); owner hiển thị id; giá trị trống hiện "—" | M1 - bảng kết quả | AC-M1.3 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:185-186, :252-257 |
| BR-08 | Một lượt làm mới mới xoá kết quả kiểm tra cũ và đếm ngược lại từ 15 giây với baseline của lượt mới | M1 - khối đếm ngược | AC-M1.6 | fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:583-590 |
| BR-09 | Kiểm tra chỉ đọc HubSpot, không ghi gì | M1 - action Kiểm tra | AC-M1.3 | be/libs/modules/src/lib/sapp/common.service.ts:1340-1407 (chỉ đọc ticket) |
⚠️ Observedkhông viết thành BR: ca "gán owner lần đầu" ra "không xác định" (EC-M1.1, OQ-T-10); đổi tab huỷ đếm ngược (EC-M1.3, OQ-T-15).
4. Design ​
a. Mối liên hệ giữa các màn & User Flow ​
text
[US-T02: lượt làm mới xong, ≥ 1 ticket thành công]
↓
[M1: Khối "Đang chờ automation chạy… tự kiểm tra thay đổi sau {n}s"] (15 → 1)
↓ hết giờ, hệ thống tự gọi kiểm tra
[M1: "Đang kiểm tra thay đổi…"]
├─ OK ──→ [M1: Bảng "Kết quả kiểm tra thay đổi" — X/N có thay đổi]
└─ cả request lỗi ──→ hộp lỗi "Kiểm tra thay đổi thất bại"Link flow chi tiết nếu có:
- N/A — không có flow Figma / Mermaid.
b. Chi tiết từng màn ​
Màn M1 - Khối kiểm tra thay đổi (dưới "Kết quả làm mới") ​
| Field | Value |
|---|---|
| Figma frame | N/A |
| Trigger vào màn | Tự động sau lượt làm mới có ≥ 1 ticket thành công (US-T02) |
| Mô tả ngắn | Khối đếm ngược, rồi bảng so sánh "trước → sau" cho cap_nhat_owner và Owner ID của từng ticket vừa làm mới |
UI States ​
| State | Khi nào | Hiển thị | Figma frame |
|---|---|---|---|
| Default | Đang đếm ngược | Spinner + "Đang chờ automation chạy… tự kiểm tra thay đổi sau {n}s" | N/A |
| Loading | Đang gọi kiểm tra | Spinner + "Đang kiểm tra thay đổi…" | N/A |
| Has data | Có kết quả | Tiêu đề "Kết quả kiểm tra thay đổi", nhãn "{X}/{N} có thay đổi"; bảng cột Ticket ID · cap_nhat_owner (trước → sau) · Owner ID (trước → sau); dòng có thay đổi tô nền; ticket lỗi đọc có nhãn đỏ "không đọc được" | N/A |
| Empty | Lượt làm mới không có ticket thành công | Không hiện khối (BR-01) | N/A |
| Error | Cả request lỗi | Hộp lỗi "Kiểm tra thay đổi thất bại", nội dung "{thông điệp} ({mã})"; không có bảng kết quả, không tự thử lại | N/A |
| Disabled | N/A — không có nút | — | N/A |
Fields ​
| Field | Required | Type | Default | Format | Validation | Error Message | Visibility | Depends On |
|---|---|---|---|---|---|---|---|---|
| Ticket ID | — | Text | — | id | — | — | Readonly | Ticket thành công ở US-T02 |
| Nhãn "không đọc được" | — | Badge | Ẩn | — | BR-05 | — | Khi ticket không đọc được | Kết quả kiểm tra |
| cap_nhat_owner (trước → sau) | — | Text → Text | — | nhãn tuỳ chọn; trống = "—" | BR-03, BR-04, BR-07 | — | Readonly | Baseline + giá trị đọc lại |
| Owner ID (trước → sau) | — | Text → Text | — | id owner; trống = "—" | BR-03, BR-04, BR-07 | — | Readonly | Baseline + giá trị đọc lại |
| X/N có thay đổi | — | Number | — | "{X}/{N} có thay đổi" | BR-06 | — | Readonly | Kết quả kiểm tra |
Filter / Search / Sort (chỉ màn List/Report — xóa nếu không phải) ​
N/A — bảng kết quả cố định, không lọc / sắp / phân trang (thứ tự theo thứ tự ticket thành công của lượt làm mới).
Actions ​
A1 - Tự kiểm tra thay đổi (hệ thống) ​
| Item | Description |
|---|---|
| Trigger | Hết 15 giây đếm ngược sau lượt làm mới có ≥ 1 ticket thành công (BR-01, BR-02) |
| Behavior | Gửi danh sách ticket thành công kèm baseline (BR-03) tới BE của portal đang chọn; BE đọc lại lần lượt từng ticket trên HubSpot và so sánh (BR-04, BR-05). Ghi vào: không ghi — chỉ đọc HubSpot portal dev / prod theo tab (BR-09) |
| Success Result | Bảng "Kết quả kiểm tra thay đổi" (BR-06, BR-07) |
Error cases:
| Case | Expected Handling |
|---|---|
| Một ticket không đọc được | Dòng đó có nhãn "không đọc được", "sau" = "—", không tính vào X (BR-05) |
| Portal thiếu token HubSpot | Hành vi hiện tại: mọi dòng "không đọc được", request vẫn thành công — không có hộp lỗi cấu hình (DR-T-03) |
| Cả request lỗi | Hộp lỗi "Kiểm tra thay đổi thất bại"; lỗi không xác định phía BE trả "Failed to verify SAPP-23954 ticket changes (13024)". Không có nút chạy lại |
Acceptance Criteria của màn M1 ​
AC-M1.1 - Đếm ngược rồi tự kiểm tra ​
gherkin
Given lượt làm mới vừa xong có 2 ticket thành công
When hộp thành công hiện
Then khối "Đang chờ automation chạy… tự kiểm tra thay đổi sau 15s" xuất hiện và giảm mỗi giây
And khi hết giờ, hệ thống tự kiểm tra 2 ticket đó mà người dùng không phải bấm gìMaps to:
- Business Rule: BR-01, BR-02
- Field/Action: A1
AC-M1.2 - Chỉ kiểm tra ticket thành công ​
gherkin
Given lượt làm mới có T1 thành công, T2 bỏ qua, T3 lỗi
When kiểm tra tự chạy
Then bảng kết quả chỉ có 1 dòng T1 và nhãn là "…/1 có thay đổi"Maps to:
- Business Rule: BR-01
AC-M1.3 - Automation đổi owner ​
gherkin
Given T1 lúc làm mới có cap_nhat_owner = "Xử lý ticket thông thường" và owner = "101"
And sau 15 giây automation đã đổi owner T1 thành "202" và cap_nhat_owner thành "Cập nhật thành công"
When kiểm tra chạy
Then dòng T1 hiển thị cap_nhat_owner "Xử lý ticket thông thường → Cập nhật thành công" và Owner ID "101 → 202"
And dòng T1 được tô nền, nhãn tổng đếm T1 là "có thay đổi"
And không có dữ liệu nào trên HubSpot bị ghi bởi bước kiểm traMaps to:
- Business Rule: BR-03, BR-04, BR-06, BR-07, BR-09
AC-M1.4 - Không đổi gì ​
gherkin
Given T1 có owner = "101" lúc làm mới và vẫn là "101" khi kiểm tra, cap_nhat_owner cũng không đổi
When kiểm tra chạy
Then dòng T1 hiển thị "101 → 101", không tô nền, không được đếm là có thay đổiMaps to:
- Business Rule: BR-04
AC-M1.5 - Ticket không đọc được ​
gherkin
Given T1 bị xoá trên HubSpot trong lúc đếm ngược
When kiểm tra chạy
Then dòng T1 có nhãn "không đọc được", các giá trị "sau" là "—"
And T1 không được đếm là có thay đổi, các ticket khác vẫn có kết quảMaps to:
- Business Rule: BR-05
AC-M1.6 - Làm mới lượt mới trong lúc đếm ngược ​
gherkin
Given đang đếm ngược còn 8 giây cho lượt 1
When người dùng làm mới lượt 2 có ≥ 1 ticket thành công
Then kết quả kiểm tra cũ (nếu có) bị xoá, đếm ngược bắt đầu lại từ 15 giây
And chỉ các ticket thành công của lượt 2 được kiểm traMaps to:
- Business Rule: BR-08
Negative AC / Edge Cases của màn M1 ​
| ID | Tình huống | Hành vi mong đợi |
|---|---|---|
| EC-M1.1 | ⚠️ Observed — ticket chưa có owner lúc làm mới, automation gán owner lần đầu | Hành vi hiện tại: màn gửi baseline owner là "không có" thay vì "trống", nên kết quả owner "có thay đổi" = không xác định (changed: null) dù "trước" hiển thị "—" và "sau" có id mới; dòng không tô nền và không được đếm vào "X/N có thay đổi" — trừ khi cap_nhat_owner cũng đổi. Đây có thể chính là ca nghiệp vụ cần đo. Nguồn: fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:614-618, :209-218; be/libs/modules/src/lib/sapp/common.service.ts:1321-1330. Cố ý hay bug: OQ-T-10 |
| EC-M1.2 | Truy vấn lại (US-T01) trong lúc đếm ngược | Hành vi hiện tại: đếm ngược và kiểm tra vẫn chạy tiếp với baseline của lượt làm mới trước (truy vấn chỉ xoá khối "Kết quả làm mới"). Nguồn: fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:557-569, :631-642 |
| EC-M1.3 | ⚠️ Observed — đổi tab Dev ↔ Prod hoặc rời màn trong lúc đếm ngược | Hành vi hiện tại: panel dựng lại, đếm ngược bị huỷ, kiểm tra không chạy và không có cách chạy lại thủ công. Nguồn: fe/src/ui/components/works/sapp/sapp-23954-tool.tsx:955-957. OQ-T-15 |
| EC-M1.4 | Automation chạy chậm hơn 15 giây | Kết quả có thể báo "không thay đổi" dù sau đó có thay đổi; người dùng xem lại bằng "Tải lại" ở lịch sử (US-T04) |
| EC-M1.5 | Nhiều ticket trong lượt | BE đọc lần lượt từng ticket trong một request (NFR-T-03); màn chỉ hiện "Đang kiểm tra thay đổi…" tới khi xong |
5. Cross-feature AC ​
AC-X.1 - Đo kết quả automation HubSpot ​
gherkin
Given automation HubSpot (ngoài hệ thống) phản ứng với lần làm mới cap_nhat_owner của T1 trong vòng 15 giây
When kiểm tra chạy
Then mọi thay đổi owner / cap_nhat_owner do automation tạo ra trên T1 hiện trong bảng dưới dạng "trước → sau"Maps to:
- REL-06 (Be Affected - Automation HubSpot, ngoài hệ thống)
AC-X.2 - Nhãn cap_nhat_owner ​
gherkin
Given lookup property cap_nhat_owner (nhóm HubSpot) trả nhãn cho giá trị V
When bảng kết quả hiển thị giá trị V
Then cột cap_nhat_owner hiển thị nhãn của V thay vì giá trị gốcMaps to:
- REL-05 (Affects - HubSpot Get property)