synapse-hub 2.4.3 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/orchestrator.md +1 -0
- package/.agents/agents/pom-crafter.md +1 -0
- package/.agents/agents/quality-gatekeeper.md +6 -0
- package/.agents/rules/skill-precedence.md +38 -18
- package/.agents/rules/systematic-debugging.md +2 -0
- package/.agents/skills/lean-code-ladder/SKILL.md +12 -1
- package/.agents/skills/lean-impact-scoreboard/SKILL.md +48 -0
- package/.agents/skills/lean-impact-scoreboard/examples/sample_benchmark_gain.md +20 -0
- package/.agents/skills/lean-impact-scoreboard/examples/sample_scoreboard.md +15 -0
- package/.agents/skills/repo-quality-audit/SKILL.md +68 -0
- package/.agents/skills/repo-quality-audit/examples/sample_audit_walkthrough.md +15 -0
- package/.agents/skills/repo-quality-audit/examples/sample_repo_audit.md +33 -0
- package/.agents/skills/senior-code-review/SKILL.md +90 -0
- package/.agents/skills/senior-code-review/examples/sample_review_walkthrough.md +29 -0
- package/.agents/skills/technical-debt-harvester/SKILL.md +70 -0
- package/.agents/skills/technical-debt-harvester/examples/sample_debt_ledger.md +25 -0
- package/.agents/skills/technical-debt-harvester/examples/sample_ledger_output.md +20 -0
- package/.cursor/rules/synapse-qa.mdc +4 -3
- package/.cursorrules +1 -0
- package/.windsurfrules +1 -0
- package/AGENTS.md +51 -179
- package/CLAUDE.md +5 -0
- package/README.en.md +12 -8
- package/README.md +12 -8
- package/bin/agent-qa.js +3 -2
- package/docs/ARCHITECTURE.md +3 -3
- package/docs/CLI_REFERENCE.md +15 -1
- package/package.json +1 -3
- package/skills_manifest.json +38 -2
- package/synapse.config.json +1 -1
- package/templates/ai_bridges/CLAUDE.md +5 -0
- package/templates/ai_bridges/copilot-instructions.md +2 -0
- package/templates/ai_bridges/cursor_synapse_qa.mdc +4 -3
- package/templates/ai_bridges/windsurfrules +1 -0
- package/tools/.infer_baseline.json +7 -1079
- package/tools/TOOLS_RUNBOOK.md +53 -13
- package/tools/__init__.py +1 -1
- package/tools/agent_canary.py +4 -4
- package/tools/analyze_project.py +2 -2
- package/tools/api_fuzzer.py +4 -4
- package/tools/auto_heal.py +4 -2
- package/tools/browser_helpers.js +2 -2
- package/tools/bump_version.py +30 -2
- package/tools/cache_resolver.py +6 -6
- package/tools/check_env.py +13 -7
- package/tools/cli.py +265 -197
- package/tools/count_tokens.py +7 -7
- package/tools/dashboard_generator.py +14 -14
- package/tools/db_sandbox.py +5 -5
- package/tools/debt_harvester.py +236 -0
- package/tools/distill_log.py +2 -2
- package/tools/flaky_detector.py +5 -5
- package/tools/generate_tc_from_story.py +2 -2
- package/tools/generate_test_reports.py +4 -4
- package/tools/git_pre_commit_guard.py +6 -6
- package/tools/infer_linter.py +12 -7
- package/tools/lint_ai_docs.py +2 -2
- package/tools/matrix_sharder.py +4 -4
- package/tools/mcp_excel_server.py +1 -1
- package/tools/mcp_server.py +3 -3
- package/tools/micro_mutator.py +6 -6
- package/tools/omni_transpiler.py +2 -2
- package/tools/output_formatter.py +37 -2
- package/tools/pinpoint_failure.py +4 -1
- package/tools/repo_map.py +2 -2
- package/tools/safety_firewall.py +2 -2
- package/tools/senior_code_review.py +341 -0
- package/tools/setup_project.py +9 -9
- package/tools/skillspector.py +2 -2
- package/tools/sync_agent_rules.py +14 -3
- package/tools/test_impact.py +4 -4
- package/tools/tms_sync_bridge.py +2 -2
- package/tools/update_sentinel.py +17 -17
- package/tools/verify_all.py +12 -12
- package/tools/visual_som_helper.py +8 -8
- package/tools/watch_mode.py +6 -7
- package/tools/wcag_audit.py +5 -1
- package/tools/welcome_page.py +11 -11
- package/benchmarks/qa_eval/README.md +0 -71
- package/benchmarks/qa_eval/build_dataset.py +0 -677
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +0 -22
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +0 -22
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +0 -22
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +0 -22
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +0 -22
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +0 -21
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +0 -21
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +0 -21
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +0 -21
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +0 -21
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +0 -23
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +0 -23
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +0 -23
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +0 -23
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +0 -23
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +0 -22
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +0 -22
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +0 -22
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +0 -22
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +0 -23
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +0 -22
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +0 -22
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +0 -22
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +0 -22
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +0 -22
- package/benchmarks/qa_eval/eval_runner.py +0 -418
- package/examples/cypress-ecommerce-suite/README.md +0 -45
- package/examples/cypress-ecommerce-suite/cypress/e2e/checkout.cy.js +0 -17
- package/examples/cypress-ecommerce-suite/cypress/pages/BasePage.js +0 -29
- package/examples/cypress-ecommerce-suite/cypress/pages/CartPage.js +0 -51
- package/examples/cypress-ecommerce-suite/cypress.config.js +0 -13
- package/examples/cypress-ecommerce-suite/package.json +0 -13
- package/examples/katalon-suite/Keywords/pages/BasePage.groovy +0 -19
- package/examples/katalon-suite/Keywords/pages/DashboardPage.groovy +0 -29
- package/examples/katalon-suite/Keywords/pages/LoginPage.groovy +0 -45
- package/examples/katalon-suite/Profiles/default.glbl +0 -12
- package/examples/katalon-suite/README.md +0 -18
- package/examples/katalon-suite/Scripts/Auth/TC_LoginSuccess/Script1234567890.groovy +0 -12
- package/examples/katalon-suite/Scripts/Dashboard/TC_ViewSummary/Script1234567891.groovy +0 -15
- package/examples/katalon-suite/katalon_suite.prj +0 -21
- package/examples/playwright-crm-suite/README.md +0 -40
- package/examples/playwright-crm-suite/package.json +0 -14
- package/examples/playwright-crm-suite/pages/BasePage.ts +0 -37
- package/examples/playwright-crm-suite/pages/CustomerPage.ts +0 -57
- package/examples/playwright-crm-suite/pages/LoginPage.ts +0 -32
- package/examples/playwright-crm-suite/playwright.config.ts +0 -27
- package/examples/playwright-crm-suite/tests/auth.spec.ts +0 -22
- package/examples/playwright-crm-suite/tests/customers.spec.ts +0 -33
- package/examples/plugins/sample-custom-plugin/README.md +0 -14
- package/examples/plugins/sample-custom-plugin/plugin.json +0 -16
- package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/SKILL.md +0 -29
- package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/examples/audit_fixture.json +0 -8
- package/examples/plugins/sample-custom-plugin/tools/custom_security_headers.py +0 -125
- package/examples/practices/README.md +0 -22
- package/examples/practices/requirements/crm/requirements_contracts.md +0 -292
- package/examples/practices/requirements/crm/requirements_customers.md +0 -462
- package/examples/practices/requirements/crm/requirements_login.md +0 -202
- package/examples/practices/requirements/crm/requirements_projects.md +0 -396
- package/examples/practices/requirements/crm/requirements_tasks.md +0 -343
- package/examples/practices/requirements/ecommerce/requirements_category_brand.txt +0 -402
- package/examples/practices/requirements/jira/KAN-5/KAN-1/2026-04-03_04-28-27.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-1/KAN-1_requirement.md +0 -52
- package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-19.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-57.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-4/KAN-4_requirement.md +0 -119
- package/examples/practices/requirements/jira/KAN-5/KAN-5_overview.md +0 -9
- package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-08.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-23.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-6/KAN-6_requirement.md +0 -32
- package/examples/practices/testcases/api/book_management_api_test_cases.md +0 -144
- package/examples/practices/testcases/api/user_management_api_test_cases.md +0 -139
- package/examples/practices/testcases/crm/test_cases_crm_login.md +0 -148
- package/examples/practices/testcases/crm/test_cases_customers.md +0 -156
- package/examples/pytest-api-suite/README.md +0 -45
- package/examples/pytest-api-suite/conftest.py +0 -31
- package/examples/pytest-api-suite/pages/user_api_client.py +0 -36
- package/examples/pytest-api-suite/requirements.txt +0 -2
- package/examples/pytest-api-suite/tests/test_user_api.py +0 -44
- package/examples/selenium-suite/README.md +0 -18
- package/examples/selenium-suite/pages/base_page.py +0 -27
- package/examples/selenium-suite/pages/login_page.py +0 -29
- package/examples/selenium-suite/pages/order_page.py +0 -25
- package/examples/selenium-suite/pytest.ini +0 -6
- package/examples/selenium-suite/requirements.txt +0 -2
- package/examples/selenium-suite/tests/test_login.py +0 -10
- package/examples/selenium-suite/tests/test_order.py +0 -10
|
@@ -1,343 +0,0 @@
|
|
|
1
|
-
# Tài liệu Yêu cầu (Requirements) — Module Tasks
|
|
2
|
-
|
|
3
|
-
> **Hệ thống:** Perfex CRM | Anh Tester Demo
|
|
4
|
-
> **URL:** https://crm.anhtester.com/admin/tasks
|
|
5
|
-
> **Phiên bản khảo sát:** 17-04-2026
|
|
6
|
-
> **Người tạo:** AI Antigravity (tự động sinh từ khảo sát UI)
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Tổng quan (Overview)
|
|
11
|
-
|
|
12
|
-
Module **Tasks** là chức năng quản lý công việc (task management) trong hệ thống Perfex CRM, cho phép người dùng nội bộ (staff) tạo, theo dõi, gán và quản lý tiến độ các tác vụ công việc. Module hỗ trợ hai chế độ hiển thị: **List View** (dạng bảng) và **Kanban View** (dạng cột trạng thái), cùng với trang **Tasks Overview** để xem tổng quan chi tiết.
|
|
13
|
-
|
|
14
|
-
### 1.1. Các thành phần chính của giao diện
|
|
15
|
-
|
|
16
|
-
| Thành phần | Mô tả |
|
|
17
|
-
|---|---|
|
|
18
|
-
| **Tasks Summary** | Bảng tổng hợp số lượng task theo 5 trạng thái, hiển thị ở đầu trang List View |
|
|
19
|
-
| **List View** | Bảng danh sách task với các cột: #, Name, Status, Start Date, Due Date, Assigned to, Tags, Priority |
|
|
20
|
-
| **Kanban View** | Hiển thị task dạng thẻ (card) phân theo 5 cột trạng thái |
|
|
21
|
-
| **Tasks Overview** | Trang báo cáo chi tiết với bộ lọc theo Staff, Tháng, Status, Năm |
|
|
22
|
-
| **Add New Task (Modal)** | Form tạo task mới dạng popup modal |
|
|
23
|
-
| **Task Detail (Modal)** | Popup hiển thị chi tiết task với các section: Description, Checklist, Comments, Task Info, Reminders, Assignees, Followers, File Upload |
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 2. Yêu cầu Chức năng (Functional Requirements)
|
|
28
|
-
|
|
29
|
-
### FR-01: Xem danh sách Tasks (List View)
|
|
30
|
-
|
|
31
|
-
**Mô tả:** Là một nhân viên, tôi muốn xem danh sách tất cả các task được gán cho tôi hoặc tất cả task trong hệ thống, để có thể theo dõi tiến độ công việc.
|
|
32
|
-
|
|
33
|
-
**Tiêu chí chấp nhận (Acceptance Criteria):**
|
|
34
|
-
- AC-01.1: Hiển thị bảng danh sách task với các cột: **#** (ID), **Name**, **Status**, **Start Date**, **Due Date**, **Assigned to**, **Tags**, **Priority**.
|
|
35
|
-
- AC-01.2: Hỗ trợ **sắp xếp** (sort) theo từng cột bằng cách click vào tiêu đề cột (ascending/descending).
|
|
36
|
-
- AC-01.3: Hỗ trợ **tìm kiếm** (search) task qua ô tìm kiếm trong bảng.
|
|
37
|
-
- AC-01.4: Hỗ trợ **phân trang** với các tùy chọn hiển thị: 10, 25, 50, 100, All bản ghi/trang. Mặc định: 25.
|
|
38
|
-
- AC-01.5: Hiển thị thông tin tổng số bản ghi (VD: "Showing 1 to 4 of 4 entries").
|
|
39
|
-
- AC-01.6: Mỗi dòng task có checkbox để chọn cho Bulk Actions.
|
|
40
|
-
- AC-01.7: Khi hover vào dòng task, hiển thị các hành động nhanh: **Start Timer**, **Edit**, **Delete**.
|
|
41
|
-
- AC-01.8: Task có liên kết đến Project hiển thị mã Project (VD: "#2351 - GAI - Công ty YHL 20260314").
|
|
42
|
-
- AC-01.9: Task lặp lại hiển thị badge **"Recurring Task"**.
|
|
43
|
-
|
|
44
|
-
### FR-02: Xem bảng tổng hợp Tasks Summary
|
|
45
|
-
|
|
46
|
-
**Mô tả:** Là một nhân viên, tôi muốn xem tổng quan nhanh số lượng task theo từng trạng thái, để nắm bắt tình hình công việc.
|
|
47
|
-
|
|
48
|
-
**Tiêu chí chấp nhận:**
|
|
49
|
-
- AC-02.1: Hiển thị 5 ô thống kê tương ứng 5 trạng thái: **Not Started**, **In Progress**, **Testing**, **Awaiting Feedback**, **Complete**.
|
|
50
|
-
- AC-02.2: Mỗi ô hiển thị tổng số task và số task được gán cho người dùng hiện tại ("Tasks assigned to me: X").
|
|
51
|
-
- AC-02.3: Tên trạng thái có màu phân biệt (VD: In Progress = xanh dương, Complete = xanh lá...).
|
|
52
|
-
|
|
53
|
-
### FR-03: Tạo Task mới (Add New Task)
|
|
54
|
-
|
|
55
|
-
**Mô tả:** Là một nhân viên, tôi muốn tạo task mới với đầy đủ thông tin, để phân công và theo dõi công việc.
|
|
56
|
-
|
|
57
|
-
**Tiêu chí chấp nhận:**
|
|
58
|
-
- AC-03.1: Click nút **"+ New Task"** mở modal "Add new task".
|
|
59
|
-
- AC-03.2: Form bao gồm các trường chi tiết (xem mục 3 - Đặc tả Trường Dữ liệu).
|
|
60
|
-
- AC-03.3: Trường bắt buộc: **Subject** và **Start Date** (đánh dấu `*`).
|
|
61
|
-
- AC-03.4: Trường **Start Date** tự động điền ngày hiện tại.
|
|
62
|
-
- AC-03.5: Trường **Priority** mặc định là "Medium".
|
|
63
|
-
- AC-03.6: Trường **Assignees** mặc định chọn người dùng đang đăng nhập.
|
|
64
|
-
- AC-03.7: Checkbox **Billable** mặc định được tích chọn.
|
|
65
|
-
- AC-03.8: Click nút **"Save"** để lưu task, **"Close"** để đóng modal không lưu.
|
|
66
|
-
- AC-03.9: Hỗ trợ **đính kèm file** qua link "Attach Files".
|
|
67
|
-
|
|
68
|
-
### FR-04: Xem chi tiết Task (Task Detail)
|
|
69
|
-
|
|
70
|
-
**Mô tả:** Là một nhân viên, tôi muốn xem toàn bộ chi tiết của một task, để nắm rõ nội dung và tiến độ.
|
|
71
|
-
|
|
72
|
-
**Tiêu chí chấp nhận:**
|
|
73
|
-
- AC-04.1: Click vào **ID** hoặc **Name** của task trong danh sách mở modal chi tiết.
|
|
74
|
-
- AC-04.2: **Header** hiển thị: Tên task, badge Recurring Task (nếu có), badge Status.
|
|
75
|
-
- AC-04.3: Hiển thị thông tin **Related** (liên kết đến Project/Customer/...).
|
|
76
|
-
- AC-04.4: Có các nút hành động: nút đánh dấu hoàn thành (✓), nút xem dạng bảng, nút **Start Timer**.
|
|
77
|
-
- AC-04.5: **Panel trái** gồm: Description (có nút chỉnh sửa), Checklist Items, Comments.
|
|
78
|
-
- AC-04.6: **Panel phải (Task Info)** gồm: Created at, Status, Start Date (editable), Due Date (editable), Priority, Hourly Rate, Billable, Your logged time, Total logged time, Tags.
|
|
79
|
-
- AC-04.7: **Reminders**: Hiển thị danh sách reminder và link "Create Reminder".
|
|
80
|
-
- AC-04.8: **Assignees**: Hiển thị danh sách người được gán + dropdown "Assign task to" để thêm.
|
|
81
|
-
- AC-04.9: **Followers**: Hiển thị danh sách người theo dõi + dropdown "Add Followers" để thêm.
|
|
82
|
-
- AC-04.10: **File Upload**: Hỗ trợ kéo thả file ("Drop files here to upload") và "Choose from Google Drive".
|
|
83
|
-
|
|
84
|
-
### FR-05: Chỉnh sửa Task (Edit Task)
|
|
85
|
-
|
|
86
|
-
**Mô tả:** Là một nhân viên, tôi muốn chỉnh sửa thông tin task đã tạo, để cập nhật nội dung khi có thay đổi.
|
|
87
|
-
|
|
88
|
-
**Tiêu chí chấp nhận:**
|
|
89
|
-
- AC-05.1: Click **"Edit"** trên dòng task (hiện khi hover) mở modal chỉnh sửa.
|
|
90
|
-
- AC-05.2: Modal chỉnh sửa hiển thị giống form tạo mới nhưng đã điền sẵn dữ liệu hiện tại.
|
|
91
|
-
- AC-05.3: Cho phép chỉnh sửa tất cả các trường.
|
|
92
|
-
- AC-05.4: Start Date và Due Date có thể chỉnh sửa trực tiếp từ Task Detail panel.
|
|
93
|
-
- AC-05.5: Click **"Save"** để lưu thay đổi, **"Close"** để hủy.
|
|
94
|
-
|
|
95
|
-
### FR-06: Xóa Task (Delete Task)
|
|
96
|
-
|
|
97
|
-
**Mô tả:** Là một nhân viên có quyền, tôi muốn xóa task không cần thiết, để giữ danh sách gọn gàng.
|
|
98
|
-
|
|
99
|
-
**Tiêu chí chấp nhận:**
|
|
100
|
-
- AC-06.1: Click **"Delete"** trên dòng task (hiện khi hover).
|
|
101
|
-
- AC-06.2: Hiển thị **xác nhận trước khi xóa** (confirmation dialog).
|
|
102
|
-
- AC-06.3: Xóa thành công → task biến mất khỏi danh sách, cập nhật Tasks Summary.
|
|
103
|
-
- AC-06.4: URL xóa: `/admin/tasks/delete_task/{task_id}`.
|
|
104
|
-
|
|
105
|
-
### FR-07: Thay đổi trạng thái Task (Change Status)
|
|
106
|
-
|
|
107
|
-
**Mô tả:** Là một nhân viên, tôi muốn nhanh chóng thay đổi trạng thái task, để cập nhật tiến độ.
|
|
108
|
-
|
|
109
|
-
**Tiêu chí chấp nhận:**
|
|
110
|
-
- AC-07.1: Trong danh sách, click vào **dropdown icon** bên cạnh tên trạng thái để thay đổi.
|
|
111
|
-
- AC-07.2: Các trạng thái có sẵn: **Not Started**, **In Progress**, **Testing**, **Awaiting Feedback**, **Complete**.
|
|
112
|
-
- AC-07.3: Thay đổi trạng thái cập nhật ngay trên giao diện (không cần reload).
|
|
113
|
-
- AC-07.4: Cập nhật đồng thời số liệu trong Tasks Summary.
|
|
114
|
-
|
|
115
|
-
### FR-08: Chế độ Kanban View
|
|
116
|
-
|
|
117
|
-
**Mô tả:** Là một nhân viên, tôi muốn xem task dạng Kanban board, để trực quan hóa tiến độ.
|
|
118
|
-
|
|
119
|
-
**Tiêu chí chấp nhận:**
|
|
120
|
-
- AC-08.1: Click **biểu tượng Kanban** (bên phải nút "+ New Task") chuyển sang Kanban view.
|
|
121
|
-
- AC-08.2: Hiển thị **5 cột** tương ứng 5 trạng thái: Not Started (xám), In Progress (xanh dương), Testing (xanh ngọc), Awaiting Feedback (cam), Complete (xanh lá).
|
|
122
|
-
- AC-08.3: Mỗi cột hiển thị tiêu đề và số lượng task (VD: "In Progress - 4 Tasks").
|
|
123
|
-
- AC-08.4: Mỗi task card hiển thị: tên task, avatar người gán, số comments, số attachments, due date (nếu có).
|
|
124
|
-
- AC-08.5: Task quá hạn hiển thị nền **hồng/cam nhạt** (highlight).
|
|
125
|
-
- AC-08.6: Có nút **"Load More"** ở cuối mỗi cột.
|
|
126
|
-
- AC-08.7: Cột trống hiển thị "No Tasks Found".
|
|
127
|
-
- AC-08.8: Hỗ trợ ô **Search Tasks** ở góc phải.
|
|
128
|
-
- AC-08.9: Click biểu tượng **List** để quay lại chế độ bảng.
|
|
129
|
-
|
|
130
|
-
### FR-09: Thao tác hàng loạt (Bulk Actions)
|
|
131
|
-
|
|
132
|
-
**Mô tả:** Là một nhân viên, tôi muốn thực hiện thay đổi hàng loạt trên nhiều task cùng lúc, để tiết kiệm thời gian.
|
|
133
|
-
|
|
134
|
-
**Tiêu chí chấp nhận:**
|
|
135
|
-
- AC-09.1: Chọn nhiều task bằng checkbox (hoặc checkbox header để chọn tất cả).
|
|
136
|
-
- AC-09.2: Click **"Bulk Actions"** mở modal với các tùy chọn:
|
|
137
|
-
- **Mass Delete**: Checkbox để xóa hàng loạt.
|
|
138
|
-
- **Status**: Dropdown thay đổi trạng thái (Not Started, In Progress, Testing, Awaiting Feedback, Complete).
|
|
139
|
-
- **Priority**: Dropdown thay đổi ưu tiên (Low, Medium, High, Urgent).
|
|
140
|
-
- **Assigned to**: Dropdown gán nhân viên (multi-select).
|
|
141
|
-
- **Billable**: Dropdown (Yes/No).
|
|
142
|
-
- **Tags**: Textbox thêm tags.
|
|
143
|
-
- AC-09.3: Click **"Confirm"** để áp dụng, **"Close"** để hủy.
|
|
144
|
-
|
|
145
|
-
### FR-10: Xuất dữ liệu và Các chức năng phụ trợ
|
|
146
|
-
|
|
147
|
-
**Mô tả:** Là một nhân viên, tôi muốn xuất danh sách task và sử dụng các công cụ hỗ trợ, để báo cáo và quản lý hiệu quả.
|
|
148
|
-
|
|
149
|
-
**Tiêu chí chấp nhận:**
|
|
150
|
-
- AC-10.1: **Export**: Nút "Export" xuất danh sách task (dự kiến CSV/Excel).
|
|
151
|
-
- AC-10.2: **Start Timer**: Mỗi task có chức năng bấm giờ làm việc, hiển thị "Your logged time" và "Total logged time" trong Task Detail.
|
|
152
|
-
- AC-10.3: **Thay đổi Priority nhanh**: Click dropdown icon bên cạnh Priority trong danh sách (Low, Medium, High, Urgent).
|
|
153
|
-
- AC-10.4: **Tasks Overview**: Trang `/admin/tasks/detailed_overview` hiển thị bảng tổng quan với:
|
|
154
|
-
- Bộ lọc: All Staff Members, Month, Status (All), Year.
|
|
155
|
-
- Nút **"Filter"** để áp dụng bộ lọc.
|
|
156
|
-
- Bảng cột: Name, Start Date, Due Date, Status, Total attachments added, Total comments, Checklist Items, Total Logged Time, Finished on time?, Assigned to.
|
|
157
|
-
- AC-10.5: **Saved Filters**: Hỗ trợ tạo và lưu bộ lọc tùy chỉnh (New Filter).
|
|
158
|
-
- AC-10.6: **Nút Reset** (biểu tượng refresh) để đặt lại bảng về trạng thái mặc định.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## 3. Đặc tả Trường Dữ liệu (Field Specifications)
|
|
163
|
-
|
|
164
|
-
### 3.1. Form Tạo/Chỉnh sửa Task (Add/Edit Task Modal)
|
|
165
|
-
|
|
166
|
-
| # | Tên Trường (Label) | Loại UI | Bắt buộc | Giá trị Mặc định | Validation / Ràng buộc | Ghi chú |
|
|
167
|
-
|---|---|---|---|---|---|---|
|
|
168
|
-
| 1 | **Public** | Checkbox | Không | Không tích | — | Nếu tích = hiển thị cho tất cả staff. Không tích = chỉ assignees, followers, creator, admin mới thấy |
|
|
169
|
-
| 2 | **Billable** | Checkbox | Không | Có tích (✓) | — | Đánh dấu task có tính phí hay không |
|
|
170
|
-
| 3 | **Attach Files** | Link/File Upload | Không | — | — | Mở file chooser để đính kèm tập tin |
|
|
171
|
-
| 4 | **Subject** | Textbox | **Có (*)** | Trống | Không được để trống | Tên/tiêu đề của task |
|
|
172
|
-
| 5 | **Hourly Rate** | Textbox (number) | Không | 0 | Chỉ nhập số, >= 0 | Đơn giá theo giờ |
|
|
173
|
-
| 6 | **Start Date** | Date Picker | **Có (*)** | Ngày hiện tại (dd-MM-yyyy) | Định dạng: dd-MM-yyyy | Ngày bắt đầu task |
|
|
174
|
-
| 7 | **Due Date** | Date Picker | Không | Trống | Định dạng: dd-MM-yyyy. Nên >= Start Date | Ngày đến hạn |
|
|
175
|
-
| 8 | **Priority** | Dropdown (Select) | Không | Medium | Giá trị: Low, Medium, High, Urgent | Mức ưu tiên |
|
|
176
|
-
| 9 | **Repeat every** | Dropdown (Select) | Không | Nothing selected | Giá trị: (trống), Week, 2 Weeks, 1 Month, 2 Months, 3 Months, 6 Months, 1 Year, Custom | Tần suất lặp lại task |
|
|
177
|
-
| 10 | **Related To** | Dropdown (Select) | Không | Nothing selected | Giá trị: (trống), Project, Invoice, Customer, Estimate, Contract, Ticket, Expense, Lead, Proposal | Liên kết task đến đối tượng khác. Khi chọn sẽ hiện dropdown phụ để chọn đối tượng cụ thể |
|
|
178
|
-
| 11 | **Assignees** | Dropdown Multi-select | Không | Người dùng đang đăng nhập | Danh sách staff: Project Manager, Admin Anh Tester, Admin Example | Người được gán task |
|
|
179
|
-
| 12 | **Followers** | Dropdown Multi-select | Không | Nothing selected | Danh sách staff: Project Manager, Admin Anh Tester, Admin Example | Người theo dõi task |
|
|
180
|
-
| 13 | **Tags** | Tag Input (Textbox) | Không | Trống | Nhập tự do, phân tách bằng Enter/phím cách | Gắn thẻ cho task |
|
|
181
|
-
| 14 | **Task Description** | Textarea | Không | Trống (placeholder: "Add Description") | — | Mô tả chi tiết task |
|
|
182
|
-
|
|
183
|
-
### 3.2. Task Detail Panel — Task Info (Chỉ đọc / Inline Edit)
|
|
184
|
-
|
|
185
|
-
| # | Tên Trường | Loại | Chỉnh sửa | Ghi chú |
|
|
186
|
-
|---|---|---|---|---|
|
|
187
|
-
| 1 | Created at | Text (readonly) | Không | Hiển thị ngày giờ tạo (dd-MM-yyyy HH:mm:ss) |
|
|
188
|
-
| 2 | Status | Badge + Dropdown | Có (click badge) | Thay đổi trạng thái trực tiếp |
|
|
189
|
-
| 3 | Start Date | Date Picker (inline) | Có | Click để chỉnh sửa |
|
|
190
|
-
| 4 | Due Date | Date Picker (inline) | Có | Click để chỉnh sửa |
|
|
191
|
-
| 5 | Priority | Text + Dropdown | Có (click text) | Thay đổi priority trực tiếp |
|
|
192
|
-
| 6 | Hourly Rate | Text (readonly) | Không | Hiển thị giá trị tiền (VD: 200.00) |
|
|
193
|
-
| 7 | Billable | Text (readonly) | Không | Hiển thị "Billable" hoặc "Not Billable" |
|
|
194
|
-
| 8 | Your logged time | Text (readonly) | Không | Thời gian đã log của user hiện tại (HH:mm) |
|
|
195
|
-
| 9 | Total logged time | Text (readonly) | Không | Tổng thời gian log của tất cả (HH:mm) |
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 4. Các luồng xử lý và Quy tắc Nghiệp vụ (Business Rules & Validations)
|
|
200
|
-
|
|
201
|
-
### 4.1. Validation khi tạo/chỉnh sửa Task
|
|
202
|
-
|
|
203
|
-
| # | Điều kiện | Validation Message (dự kiến) |
|
|
204
|
-
|---|---|---|
|
|
205
|
-
| 1 | Bỏ trống trường **Subject** | "The field is required" hoặc tương đương |
|
|
206
|
-
| 2 | Bỏ trống trường **Start Date** | "The field is required" hoặc tương đương |
|
|
207
|
-
| 3 | **Due Date** < **Start Date** | *(Cần xác minh — có thể hệ thống cho phép hoặc cảnh báo)* |
|
|
208
|
-
| 4 | **Hourly Rate** nhập ký tự không phải số | Trường chỉ chấp nhận số (input type validation) |
|
|
209
|
-
|
|
210
|
-
### 4.2. Luồng tạo Task mới (Happy Path)
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
1. User click "+ New Task"
|
|
214
|
-
2. Modal "Add new task" xuất hiện
|
|
215
|
-
3. User điền Subject (bắt buộc)
|
|
216
|
-
4. Start Date tự động điền ngày hiện tại
|
|
217
|
-
5. User chọn Priority, Assignees, và các trường tùy chọn khác
|
|
218
|
-
6. User click "Save"
|
|
219
|
-
7. Task mới xuất hiện trong danh sách với trạng thái mặc định
|
|
220
|
-
8. Tasks Summary cập nhật số liệu
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### 4.3. Luồng thay đổi trạng thái Task
|
|
224
|
-
|
|
225
|
-
```
|
|
226
|
-
1. Từ List View: Click dropdown icon bên cạnh Status → Chọn trạng thái mới
|
|
227
|
-
2. Từ Task Detail: Click vào Status badge → Chọn trạng thái mới
|
|
228
|
-
3. Từ Kanban View: (Dự kiến) Kéo thả card giữa các cột
|
|
229
|
-
4. Từ Bulk Actions: Chọn nhiều task → Bulk Actions → Chọn Status → Confirm
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### 4.4. Luồng Bulk Actions
|
|
233
|
-
|
|
234
|
-
```
|
|
235
|
-
1. User tích chọn checkbox trên các task cần thao tác
|
|
236
|
-
2. Click "Bulk Actions"
|
|
237
|
-
3. Modal hiện ra với các tùy chọn: Mass Delete, Status, Priority, Assigned to, Billable, Tags
|
|
238
|
-
4. User chọn/điền giá trị mong muốn
|
|
239
|
-
5. Click "Confirm" để áp dụng
|
|
240
|
-
6. Tất cả task đã chọn được cập nhật đồng loạt
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### 4.5. Quy tắc hiển thị Kanban View
|
|
244
|
-
|
|
245
|
-
| Quy tắc | Mô tả |
|
|
246
|
-
|---|---|
|
|
247
|
-
| Task quá hạn | Card hiển thị nền hồng/cam nhạt khi Due Date < ngày hiện tại |
|
|
248
|
-
| Cột trống | Hiển thị "No Tasks Found" với biểu tượng loading |
|
|
249
|
-
| Load More | Mỗi cột có nút "Load More" để tải thêm task nếu có nhiều |
|
|
250
|
-
| Thông tin card | Hiển thị: Tên task, avatar assignee, số comments (💬), số attachments (📎), due date |
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## 5. Yêu cầu Phi chức năng (Non-functional Requirements)
|
|
255
|
-
|
|
256
|
-
| # | Yêu cầu | Mô tả |
|
|
257
|
-
|---|---|---|
|
|
258
|
-
| NFR-01 | **Responsive** | Giao diện sidebar thu gọn được (hamburger menu). Bảng hỗ trợ cuộn ngang |
|
|
259
|
-
| NFR-02 | **Hiệu năng** | Danh sách task tải với phân trang (mặc định 25 bản ghi). Kanban load async |
|
|
260
|
-
| NFR-03 | **Phân quyền** | Task Public/Private ảnh hưởng quyền xem. Chỉ assignees, followers, creator, admin mới thấy task Private |
|
|
261
|
-
| NFR-04 | **Định dạng ngày** | Sử dụng dd-MM-yyyy xuyên suốt module |
|
|
262
|
-
| NFR-05 | **Tích hợp** | Liên kết với modules: Projects, Invoices, Customers, Estimates, Contracts, Tickets, Expenses, Leads, Proposals |
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## 6. Câu hỏi / Cần làm rõ với PO-User
|
|
267
|
-
|
|
268
|
-
> ⚠️ Các mục dưới đây không thể xác nhận chỉ từ giao diện UI, cần xác minh thêm từ Product Owner hoặc tài liệu nghiệp vụ.
|
|
269
|
-
|
|
270
|
-
| # | Câu hỏi |
|
|
271
|
-
|---|---|
|
|
272
|
-
| Q-01 | Khi **Due Date < Start Date**, hệ thống có hiển thị cảnh báo hay tự động chặn? |
|
|
273
|
-
| Q-02 | **Trường Subject** có giới hạn ký tự tối đa không? |
|
|
274
|
-
| Q-03 | **Hourly Rate** có giới hạn giá trị tối đa không? Có hỗ trợ số thập phân không? |
|
|
275
|
-
| Q-04 | Khi chọn **"Repeat every = Custom"**, form mở rộng thêm trường nào (ngày/tuần/tháng tùy chỉnh)? |
|
|
276
|
-
| Q-05 | **Kanban View** có hỗ trợ **kéo thả (drag & drop)** task giữa các cột không? |
|
|
277
|
-
| Q-06 | **Export** xuất dữ liệu ở định dạng nào? (CSV, Excel, PDF?) |
|
|
278
|
-
| Q-07 | **Start Timer** — Dữ liệu thời gian có được sử dụng cho tính lương/invoice không? |
|
|
279
|
-
| Q-08 | Khi **xóa task** có liên kết với Project, Checklist items, Comments — dữ liệu liên kết có bị xóa theo không? |
|
|
280
|
-
| Q-09 | **Checklist Items** — Cách thêm, chỉnh sửa, đánh dấu hoàn thành checklist item? |
|
|
281
|
-
| Q-10 | **Comments** — Có hỗ trợ mentions (@user), đính kèm file trong comment không? |
|
|
282
|
-
| Q-11 | **Reminders** — Reminder được gửi qua kênh nào (email, notification trong app, cả hai)? |
|
|
283
|
-
| Q-12 | Người dùng có thể tự **xóa mình khỏi Assignees/Followers** không? |
|
|
284
|
-
| Q-13 | **Saved Filters** — Bộ lọc có thể chia sẻ giữa các user không? |
|
|
285
|
-
| Q-14 | Có giới hạn số lượng **file đính kèm** (kích thước tối đa, loại file) không? |
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## 7. Phụ lục: Danh sách các giá trị Enum
|
|
290
|
-
|
|
291
|
-
### 7.1. Task Status
|
|
292
|
-
| Giá trị | Màu hiển thị |
|
|
293
|
-
|---|---|
|
|
294
|
-
| Not Started | Xám |
|
|
295
|
-
| In Progress | Xanh dương |
|
|
296
|
-
| Testing | Xanh ngọc (Teal) |
|
|
297
|
-
| Awaiting Feedback | Cam |
|
|
298
|
-
| Complete | Xanh lá |
|
|
299
|
-
|
|
300
|
-
### 7.2. Task Priority
|
|
301
|
-
| Giá trị |
|
|
302
|
-
|---|
|
|
303
|
-
| Low |
|
|
304
|
-
| Medium (mặc định) |
|
|
305
|
-
| High |
|
|
306
|
-
| Urgent |
|
|
307
|
-
|
|
308
|
-
### 7.3. Repeat Every
|
|
309
|
-
| Giá trị |
|
|
310
|
-
|---|
|
|
311
|
-
| (Không lặp) |
|
|
312
|
-
| Week |
|
|
313
|
-
| 2 Weeks |
|
|
314
|
-
| 1 Month |
|
|
315
|
-
| 2 Months |
|
|
316
|
-
| 3 Months |
|
|
317
|
-
| 6 Months |
|
|
318
|
-
| 1 Year |
|
|
319
|
-
| Custom |
|
|
320
|
-
|
|
321
|
-
### 7.4. Related To
|
|
322
|
-
| Giá trị |
|
|
323
|
-
|---|
|
|
324
|
-
| (Không liên kết) |
|
|
325
|
-
| Project |
|
|
326
|
-
| Invoice |
|
|
327
|
-
| Customer |
|
|
328
|
-
| Estimate |
|
|
329
|
-
| Contract |
|
|
330
|
-
| Ticket |
|
|
331
|
-
| Expense |
|
|
332
|
-
| Lead |
|
|
333
|
-
| Proposal |
|
|
334
|
-
|
|
335
|
-
### 7.5. Billable
|
|
336
|
-
| Giá trị |
|
|
337
|
-
|---|
|
|
338
|
-
| Yes |
|
|
339
|
-
| No |
|
|
340
|
-
|
|
341
|
-
---
|
|
342
|
-
|
|
343
|
-
*Tài liệu được tạo tự động bằng AI Antigravity dựa trên khảo sát giao diện thực tế ngày 17-04-2026.*
|