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,292 +0,0 @@
|
|
|
1
|
-
# Tài liệu Yêu cầu — Module Contracts (Hợp đồng)
|
|
2
|
-
|
|
3
|
-
> **Hệ thống:** Perfex CRM
|
|
4
|
-
> **URL:** https://crm.anhtester.com/admin/contracts
|
|
5
|
-
> **Ngày tạo:** 17-04-2026
|
|
6
|
-
> **Phiên bản:** 1.0
|
|
7
|
-
> **Người tạo:** AI Antigravity (dựa trên khảo sát UI thực tế)
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 1. Tổng quan (Overview)
|
|
12
|
-
|
|
13
|
-
Module **Contracts** cho phép người dùng quản lý toàn bộ vòng đời hợp đồng trong hệ thống CRM, bao gồm: tạo mới, chỉnh sửa, theo dõi trạng thái, gia hạn, ký số, và quản lý các tài liệu đính kèm liên quan.
|
|
14
|
-
|
|
15
|
-
### 1.1. Mục đích
|
|
16
|
-
- Quản lý hợp đồng giữa doanh nghiệp và khách hàng.
|
|
17
|
-
- Theo dõi giá trị hợp đồng, thời hạn, loại hợp đồng.
|
|
18
|
-
- Hỗ trợ ký số (Signature), gia hạn (Renewal), và liên kết với các module khác (Tasks, Projects).
|
|
19
|
-
|
|
20
|
-
### 1.2. Đối tượng sử dụng
|
|
21
|
-
- **Admin / Staff:** Tạo, chỉnh sửa, xóa, ký hợp đồng.
|
|
22
|
-
- **Customer (Khách hàng):** Xem và ký hợp đồng (nếu được cấp quyền).
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 2. Yêu cầu Chức năng (Functional Requirements)
|
|
27
|
-
|
|
28
|
-
### FR-CON-001: Xem danh sách hợp đồng
|
|
29
|
-
- **Mô tả:** Là một người dùng, tôi muốn xem danh sách tất cả hợp đồng để có cái nhìn tổng quan.
|
|
30
|
-
- **Tiêu chí chấp nhận:**
|
|
31
|
-
- Hiển thị bảng danh sách với các cột: `#`, `Subject`, `Customer`, `Contract Type`, `Contract Value`, `Start Date`, `End Date`, `Project`, `Signature`.
|
|
32
|
-
- Hiển thị **Contract Summary** phía trên bảng với các trạng thái: Active (xanh dương), Expired (đỏ), About to Expire (vàng cam), Recently Added (xanh lá), Trash.
|
|
33
|
-
- Hiển thị 2 biểu đồ: **Contracts by Type** (Bar chart) và **Contracts Value by Type (USD)** (Area chart).
|
|
34
|
-
- Hỗ trợ phân trang (mặc định 25 bản ghi/trang) với nút Previous/Next.
|
|
35
|
-
- Hiển thị thông tin "Showing X to Y of Z entries".
|
|
36
|
-
|
|
37
|
-
### FR-CON-002: Tìm kiếm và lọc hợp đồng
|
|
38
|
-
- **Mô tả:** Là một người dùng, tôi muốn tìm kiếm và lọc hợp đồng để nhanh chóng tìm được hợp đồng cần thiết.
|
|
39
|
-
- **Tiêu chí chấp nhận:**
|
|
40
|
-
- Có ô tìm kiếm (Search) ở góc phải phía trên bảng.
|
|
41
|
-
- Có icon bộ lọc nâng cao (Filter icon) ở góc phải trang.
|
|
42
|
-
- Có thể sắp xếp theo cột (sort) bằng cách click vào header cột.
|
|
43
|
-
- Có thể thay đổi số bản ghi hiển thị mỗi trang (dropdown: 25).
|
|
44
|
-
- Có thể click vào từng trạng thái trong Contract Summary để lọc nhanh.
|
|
45
|
-
|
|
46
|
-
### FR-CON-003: Xuất dữ liệu (Export)
|
|
47
|
-
- **Mô tả:** Là một người dùng, tôi muốn xuất danh sách hợp đồng ra file để báo cáo hoặc lưu trữ.
|
|
48
|
-
- **Tiêu chí chấp nhận:**
|
|
49
|
-
- Có nút **Export** nằm cạnh dropdown số bản ghi.
|
|
50
|
-
- Có nút **Reload** (icon xoay) cạnh nút Export.
|
|
51
|
-
|
|
52
|
-
### FR-CON-004: Tạo mới hợp đồng
|
|
53
|
-
- **Mô tả:** Là một người dùng, tôi muốn tạo mới hợp đồng để ghi nhận thỏa thuận với khách hàng.
|
|
54
|
-
- **Tiêu chí chấp nhận:**
|
|
55
|
-
- Click nút **"+ New Contract"** (màu xanh dương) để mở form tạo mới.
|
|
56
|
-
- Form hiển thị tiêu đề "Contract Information".
|
|
57
|
-
- Điền đầy đủ thông tin bắt buộc và nhấn **Save** để lưu.
|
|
58
|
-
- Hệ thống tự động tạo mã hợp đồng (ID #).
|
|
59
|
-
- Ngày bắt đầu (Start Date) mặc định là ngày hiện tại.
|
|
60
|
-
|
|
61
|
-
### FR-CON-005: Chỉnh sửa hợp đồng
|
|
62
|
-
- **Mô tả:** Là một người dùng, tôi muốn chỉnh sửa thông tin hợp đồng đã tạo.
|
|
63
|
-
- **Tiêu chí chấp nhận:**
|
|
64
|
-
- Click vào Subject của hợp đồng trong danh sách để mở trang chi tiết.
|
|
65
|
-
- Trang chi tiết hiển thị form chỉnh sửa (bên trái) và các tab thông tin (bên phải).
|
|
66
|
-
- Chỉnh sửa các trường và nhấn **Save** để cập nhật.
|
|
67
|
-
|
|
68
|
-
### FR-CON-006: Xem chi tiết hợp đồng (View Contract)
|
|
69
|
-
- **Mô tả:** Là một người dùng, tôi muốn xem chi tiết nội dung hợp đồng dưới dạng tài liệu.
|
|
70
|
-
- **Tiêu chí chấp nhận:**
|
|
71
|
-
- Có link **"View Contract"** ở phía trên bên phải trang chi tiết.
|
|
72
|
-
- Mở trang xem nội dung hợp đồng đầy đủ.
|
|
73
|
-
|
|
74
|
-
### FR-CON-007: Quản lý tệp đính kèm (Attachments)
|
|
75
|
-
- **Mô tả:** Là một người dùng, tôi muốn đính kèm tài liệu liên quan đến hợp đồng.
|
|
76
|
-
- **Tiêu chí chấp nhận:**
|
|
77
|
-
- Tab **Attachments** hiển thị vùng kéo thả file: "Drop files here to upload".
|
|
78
|
-
- Hỗ trợ drag-and-drop để upload file.
|
|
79
|
-
|
|
80
|
-
### FR-CON-008: Bình luận (Comments)
|
|
81
|
-
- **Mô tả:** Là một người dùng, tôi muốn thêm bình luận vào hợp đồng để trao đổi nội bộ.
|
|
82
|
-
- **Tiêu chí chấp nhận:**
|
|
83
|
-
- Tab **Comments** hiển thị textarea để nhập nội dung.
|
|
84
|
-
- Có nút **"Add Comment"** (màu xanh dương) để gửi bình luận.
|
|
85
|
-
|
|
86
|
-
### FR-CON-009: Lịch sử gia hạn (Renewal History)
|
|
87
|
-
- **Mô tả:** Là một người dùng, tôi muốn xem lịch sử gia hạn và thực hiện gia hạn hợp đồng.
|
|
88
|
-
- **Tiêu chí chấp nhận:**
|
|
89
|
-
- Tab **Renewal History** hiển thị nút **"Renew Contract"** (icon + text).
|
|
90
|
-
- Hiển thị danh sách lịch sử gia hạn hoặc thông báo "Renewals for this contract are not found" nếu chưa có.
|
|
91
|
-
|
|
92
|
-
### FR-CON-010: Quản lý Tasks liên quan
|
|
93
|
-
- **Mô tả:** Là một người dùng, tôi muốn tạo và quản lý các công việc liên quan đến hợp đồng.
|
|
94
|
-
- **Tiêu chí chấp nhận:**
|
|
95
|
-
- Tab **Tasks** hiển thị nút **"+ New Task"** (màu xanh dương).
|
|
96
|
-
- Có icon bộ lọc, dropdown số bản ghi (25), nút Export, nút Reload, ô Search.
|
|
97
|
-
- Bảng danh sách task với các cột: `#`, `Name`, `Status`, `Start Date`, `Due Date`, `Assigned to`, `Tags`, `Priority`.
|
|
98
|
-
- Hiển thị "No entries found" nếu chưa có task nào.
|
|
99
|
-
|
|
100
|
-
### FR-CON-011: Ghi chú (Notes)
|
|
101
|
-
- **Mô tả:** Là một người dùng, tôi muốn thêm ghi chú vào hợp đồng.
|
|
102
|
-
- **Tiêu chí chấp nhận:**
|
|
103
|
-
- Tab **Notes** hiển thị textarea để nhập nội dung ghi chú.
|
|
104
|
-
- Có nút **"Add Note"** (màu xanh dương) để lưu ghi chú.
|
|
105
|
-
|
|
106
|
-
### FR-CON-012: Templates (Mẫu hợp đồng)
|
|
107
|
-
- **Mô tả:** Là một người dùng, tôi muốn áp dụng mẫu hợp đồng có sẵn.
|
|
108
|
-
- **Tiêu chí chấp nhận:**
|
|
109
|
-
- Tab **Templates** hiển thị link **"Available merge fields"** để xem các trường merge khả dụng.
|
|
110
|
-
- Có textarea để nhập/chỉnh sửa nội dung mẫu.
|
|
111
|
-
|
|
112
|
-
### FR-CON-013: Gửi Email hợp đồng
|
|
113
|
-
- **Mô tả:** Là một người dùng, tôi muốn gửi hợp đồng qua email cho khách hàng.
|
|
114
|
-
- **Tiêu chí chấp nhận:**
|
|
115
|
-
- Có icon **Email** (biểu tượng phong bì) ở thanh hành động phía trên.
|
|
116
|
-
|
|
117
|
-
### FR-CON-014: Quản lý chữ ký (Signature)
|
|
118
|
-
- **Mô tả:** Là một người dùng, tôi muốn theo dõi trạng thái ký hợp đồng.
|
|
119
|
-
- **Tiêu chí chấp nhận:**
|
|
120
|
-
- Cột **Signature** trong bảng danh sách hiển thị trạng thái: "Not Signed" hoặc thông tin chữ ký.
|
|
121
|
-
- Có icon quản lý chữ ký ở thanh hành động (icon người kèm dropdown).
|
|
122
|
-
|
|
123
|
-
### FR-CON-015: Thao tác bổ sung (More Actions)
|
|
124
|
-
- **Mô tả:** Là một người dùng, tôi muốn truy cập các hành động bổ sung từ menu "More".
|
|
125
|
-
- **Tiêu chí chấp nhận:**
|
|
126
|
-
- Nút **"More"** (dropdown) ở góc phải phía trên trang chi tiết.
|
|
127
|
-
- Chứa các hành động bổ sung như: Copy, Delete, PDF, v.v.
|
|
128
|
-
|
|
129
|
-
### FR-CON-016: Đánh dấu Trash / Ẩn khỏi khách hàng
|
|
130
|
-
- **Mô tả:** Là một người dùng, tôi muốn đánh dấu hợp đồng là rác hoặc ẩn khỏi khách hàng.
|
|
131
|
-
- **Tiêu chí chấp nhận:**
|
|
132
|
-
- Checkbox **"Trash"** (có tooltip) ở đầu form.
|
|
133
|
-
- Checkbox **"Hide from customer"** cạnh Trash.
|
|
134
|
-
- Khi đánh dấu Trash, hợp đồng xuất hiện trong bộ đếm Trash ở Contract Summary.
|
|
135
|
-
|
|
136
|
-
### FR-CON-017: Thêm loại hợp đồng mới (Inline Add)
|
|
137
|
-
- **Mô tả:** Là một người dùng, tôi muốn thêm loại hợp đồng mới ngay từ form tạo/chỉnh sửa.
|
|
138
|
-
- **Tiêu chí chấp nhận:**
|
|
139
|
-
- Nút **"+"** bên cạnh dropdown Contract type cho phép thêm loại hợp đồng mới mà không rời trang.
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## 3. Đặc tả Trường Dữ liệu (Field Specifications)
|
|
144
|
-
|
|
145
|
-
### 3.1. Form tạo/chỉnh sửa hợp đồng (Contract Information)
|
|
146
|
-
|
|
147
|
-
| # | Tên Trường (Label) | Loại UI | Bắt buộc | Giá trị Mặc định | Ràng buộc / Validation | Ghi chú |
|
|
148
|
-
|---|---------------------|---------|----------|-------------------|------------------------|---------|
|
|
149
|
-
| 1 | Trash | Checkbox | Không | Unchecked | — | Có tooltip giải thích |
|
|
150
|
-
| 2 | Hide from customer | Checkbox | Không | Unchecked | — | Ẩn hợp đồng khỏi portal khách hàng |
|
|
151
|
-
| 3 | Customer | Searchable Dropdown (Combobox) | **Có** (★) | Trống | Phải chọn từ danh sách. Gợi ý: "Select and begin typing". Validation: "Select and begin typing" (đỏ) | Tìm kiếm theo tên khách hàng, có nút X để xóa lựa chọn |
|
|
152
|
-
| 4 | Subject | Text Input | **Có** (★) | Trống | Validation message: "This field is required." | Có icon tooltip (?) bên cạnh label |
|
|
153
|
-
| 5 | Contract Value | Number Input | Không | Trống | Chỉ nhận giá trị số. Hiển thị ký hiệu "$" bên phải | Đơn vị tiền tệ USD |
|
|
154
|
-
| 6 | Contract type | Dropdown (Select) | Không | "Nothing selected" | Chọn từ danh sách có sẵn. Có nút "+" để thêm loại mới | Các giá trị mẫu: "Thử việc", "Type A", "Ohh YEAH Type", v.v. |
|
|
155
|
-
| 7 | Start Date | Date Picker | **Có** (★) | Ngày hiện tại (dd-mm-yyyy) | Định dạng: dd-mm-yyyy. Có icon lịch | VD: 17-04-2026 |
|
|
156
|
-
| 8 | End Date | Date Picker | Không | Trống | Định dạng: dd-mm-yyyy. Có icon lịch | Nên sau Start Date (logic nghiệp vụ) |
|
|
157
|
-
| 9 | Description | Textarea | Không | Trống | — | Vùng nhập nội dung mô tả dài, có thể resize |
|
|
158
|
-
|
|
159
|
-
### 3.2. Bảng danh sách hợp đồng (Contracts List Table)
|
|
160
|
-
|
|
161
|
-
| # | Tên Cột | Kiểu Dữ liệu | Có Sắp xếp | Ghi chú |
|
|
162
|
-
|---|---------|---------------|-------------|---------|
|
|
163
|
-
| 1 | # | Number (ID) | Có | Mã số tự tăng, link có thể click |
|
|
164
|
-
| 2 | Subject | Text (Link) | Có | Click để mở chi tiết, hiển thị màu xanh dương |
|
|
165
|
-
| 3 | Customer | Text (Link) | Có | Link đến trang customer, hiển thị màu xanh dương |
|
|
166
|
-
| 4 | Contract Type | Text | Có | Loại hợp đồng |
|
|
167
|
-
| 5 | Contract Value | Currency (USD) | Có | Hiển thị format: $X.XX |
|
|
168
|
-
| 6 | Start Date | Date | Có | Định dạng: dd-mm-yyyy |
|
|
169
|
-
| 7 | End Date | Date | Có (▲) | Định dạng: dd-mm-yyyy. Hiển thị đỏ nếu đã hết hạn |
|
|
170
|
-
| 8 | Project | Text | Có | Dự án liên kết (có thể trống) |
|
|
171
|
-
| 9 | Signature | Text/Status | Có | "Not Signed" hoặc trạng thái ký |
|
|
172
|
-
|
|
173
|
-
### 3.3. Contract Summary (Tóm tắt trạng thái)
|
|
174
|
-
|
|
175
|
-
| Trạng thái | Màu sắc | Mô tả |
|
|
176
|
-
|------------|---------|-------|
|
|
177
|
-
| Active | Xanh dương | Hợp đồng đang hoạt động |
|
|
178
|
-
| Expired | Đỏ | Hợp đồng đã hết hạn |
|
|
179
|
-
| About to Expire | Vàng cam | Hợp đồng sắp hết hạn |
|
|
180
|
-
| Recently Added | Xanh lá | Hợp đồng mới thêm gần đây |
|
|
181
|
-
| Trash | Xám (mặc định) | Hợp đồng đã xóa mềm |
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## 4. Các luồng xử lý và Quy tắc nghiệp vụ (Business Rules & Validations)
|
|
186
|
-
|
|
187
|
-
### 4.1. Luồng tạo mới hợp đồng (Create Contract Flow)
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
[Trang danh sách] → Click "+ New Contract" → [Form Contract Information]
|
|
191
|
-
→ Điền thông tin → Click "Save"
|
|
192
|
-
→ Thành công: Chuyển sang trang chi tiết hợp đồng vừa tạo
|
|
193
|
-
→ Thất bại: Hiển thị validation errors trên các trường bắt buộc
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### 4.2. Luồng chỉnh sửa hợp đồng (Edit Contract Flow)
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
[Trang danh sách] → Click Subject hợp đồng → [Trang chi tiết]
|
|
200
|
-
→ Chỉnh sửa thông tin bên trái → Click "Save"
|
|
201
|
-
→ Thành công: Cập nhật và hiển thị thông báo thành công
|
|
202
|
-
→ Thất bại: Hiển thị validation errors
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### 4.3. Luồng gia hạn hợp đồng (Renew Contract Flow)
|
|
206
|
-
|
|
207
|
-
```
|
|
208
|
-
[Trang chi tiết] → Tab "Renewal History" → Click "Renew Contract"
|
|
209
|
-
→ Tạo bản gia hạn mới → Lưu lịch sử gia hạn
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### 4.4. Quy tắc Validation
|
|
213
|
-
|
|
214
|
-
| # | Trường | Điều kiện lỗi | Thông báo lỗi (Validation Message) |
|
|
215
|
-
|---|--------|---------------|--------------------------------------|
|
|
216
|
-
| 1 | Customer | Không chọn khách hàng | Label "Customer" chuyển đỏ, viền input đỏ, hiển thị "Select and begin typing" (đỏ) |
|
|
217
|
-
| 2 | Subject | Để trống | Label "Subject" chuyển đỏ, viền input đỏ, hiển thị **"This field is required."** (đỏ) |
|
|
218
|
-
| 3 | Start Date | Để trống | Label "Start Date" chuyển đỏ (tuy nhiên mặc định đã có giá trị) |
|
|
219
|
-
|
|
220
|
-
### 4.5. Quy tắc nghiệp vụ quan sát được
|
|
221
|
-
|
|
222
|
-
| # | Quy tắc | Mô tả |
|
|
223
|
-
|---|---------|-------|
|
|
224
|
-
| 1 | Trạng thái tự động | End Date < ngày hiện tại → trạng thái **Expired** (End Date hiển thị màu đỏ trong bảng) |
|
|
225
|
-
| 2 | Contract Summary động | Các bộ đếm (Active, Expired, About to Expire, Recently Added, Trash) tự động cập nhật |
|
|
226
|
-
| 3 | Biểu đồ tự động | 2 biểu đồ thống kê tự động cập nhật theo dữ liệu hợp đồng |
|
|
227
|
-
| 4 | Mã tự tăng | ID hợp đồng (#) được hệ thống tự động tạo, không thể chỉnh sửa |
|
|
228
|
-
| 5 | Customer searchable | Dropdown Customer yêu cầu gõ từ khóa để tìm kiếm, hiển thị "Start typing to search" |
|
|
229
|
-
| 6 | Inline add Contract type | Nút "+" cho phép thêm loại hợp đồng mới ngay trên form mà không cần rời trang |
|
|
230
|
-
| 7 | End Date màu đỏ | Khi End Date đã qua, hệ thống tự động hiển thị màu đỏ trong bảng danh sách |
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## 5. Các Tab trên trang Chi tiết Hợp đồng
|
|
235
|
-
|
|
236
|
-
| # | Tên Tab | Chức năng | Thành phần UI chính |
|
|
237
|
-
|---|---------|-----------|---------------------|
|
|
238
|
-
| 1 | **Contract** | Hiển thị nội dung hợp đồng | Textarea với "Available merge fields" link |
|
|
239
|
-
| 2 | **Attachments** | Quản lý tệp đính kèm | Vùng drag-and-drop: "Drop files here to upload" |
|
|
240
|
-
| 3 | **Comments** | Bình luận nội bộ | Textarea + nút "Add Comment" |
|
|
241
|
-
| 4 | **Renewal History** | Lịch sử gia hạn | Nút "Renew Contract" + danh sách lịch sử |
|
|
242
|
-
| 5 | **Tasks** | Công việc liên quan | Nút "+ New Task", bảng tasks, Search, Export, Filter |
|
|
243
|
-
| 6 | **Notes** | Ghi chú nội bộ | Textarea + nút "Add Note" |
|
|
244
|
-
| 7 | **Templates** | Mẫu hợp đồng | "Available merge fields" link + textarea nội dung |
|
|
245
|
-
| 8 | **Icon: Reload** | Làm mới tab | Icon xoay (↻) |
|
|
246
|
-
| 9 | **Icon: Fullscreen** | Mở rộng toàn màn hình | Icon mở rộng (⛶) |
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## 6. Thanh Hành động (Action Bar) trên trang Chi tiết
|
|
251
|
-
|
|
252
|
-
| # | Thành phần | Loại | Mô tả |
|
|
253
|
-
|---|-----------|------|-------|
|
|
254
|
-
| 1 | View Contract | Text Link (xanh dương) | Mở xem nội dung hợp đồng dạng tài liệu |
|
|
255
|
-
| 2 | Signature icon | Icon + Dropdown | Quản lý chữ ký hợp đồng (icon người) |
|
|
256
|
-
| 3 | Email icon | Icon (phong bì) | Gửi hợp đồng qua email |
|
|
257
|
-
| 4 | More | Button + Dropdown | Menu thao tác bổ sung (Copy, Delete, PDF, v.v.) |
|
|
258
|
-
| 5 | Save | Button (xanh dương) | Lưu thay đổi, nằm ở góc dưới bên phải |
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## 7. Yêu cầu Phi chức năng (Non-functional Requirements)
|
|
263
|
-
|
|
264
|
-
| # | Yêu cầu | Mô tả |
|
|
265
|
-
|---|---------|-------|
|
|
266
|
-
| NFR-01 | Responsive UI | Giao diện chia 2 cột: form chỉnh sửa (trái) và tabs thông tin (phải) |
|
|
267
|
-
| NFR-02 | Phân trang | Hỗ trợ phân trang với số bản ghi có thể tùy chỉnh |
|
|
268
|
-
| NFR-03 | Biểu đồ trực quan | 2 biểu đồ thống kê (Bar chart + Area chart) hiển thị trên trang danh sách |
|
|
269
|
-
| NFR-04 | Validation real-time | Validation hiển thị ngay khi nhấn Save mà không cần reload trang |
|
|
270
|
-
| NFR-05 | Sidebar Navigation | Module Contracts nằm trong sidebar, highlight khi đang active |
|
|
271
|
-
| NFR-06 | Global Search | Thanh tìm kiếm toàn cục (global search) ở header |
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 8. Câu hỏi / Cần làm rõ với PO-User
|
|
276
|
-
|
|
277
|
-
| # | Câu hỏi | Lý do |
|
|
278
|
-
|---|---------|-------|
|
|
279
|
-
| 1 | Giới hạn ký tự tối đa của trường Subject là bao nhiêu? | Không quan sát được `maxlength` trên UI |
|
|
280
|
-
| 2 | Contract Value có giới hạn giá trị tối đa/tối thiểu không? | UI chỉ hiển thị input number, không rõ ràng buộc |
|
|
281
|
-
| 3 | End Date có bắt buộc phải sau Start Date không? Hệ thống có validate cross-field không? | Không thấy validation message liên quan |
|
|
282
|
-
| 4 | Khi gia hạn hợp đồng (Renew), các trường nào được copy sang bản mới? | Chưa test được flow gia hạn đầy đủ |
|
|
283
|
-
| 5 | Quyền truy cập: Ai có thể tạo/sửa/xóa hợp đồng? Có phân quyền theo role không? | UI không hiển thị thông tin phân quyền |
|
|
284
|
-
| 6 | "Hide from customer" ảnh hưởng đến portal khách hàng như thế nào cụ thể? | Cần xác nhận behavior từ phía customer portal |
|
|
285
|
-
| 7 | Nút "More" chứa những hành động cụ thể nào? (Copy, Delete, Generate PDF, v.v.) | Dropdown menu cần kiểm tra chi tiết hơn |
|
|
286
|
-
| 8 | Chữ ký (Signature) hoạt động như thế nào? Có hỗ trợ e-signature hay chỉ đánh dấu? | Cần làm rõ quy trình ký hợp đồng |
|
|
287
|
-
| 9 | Description có hỗ trợ Rich Text Editor (WYSIWYG) không? | Form hiện tại chỉ hiển thị textarea thường |
|
|
288
|
-
| 10 | Có giới hạn dung lượng và loại file đính kèm (Attachments) không? | Không quan sát được trên UI |
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
> **Ghi chú:** Tài liệu này được tạo dựa trên khảo sát giao diện thực tế tại thời điểm 17/04/2026. Các quy tắc nghiệp vụ phức tạp hơn (logic backend, phân quyền, email template) cần được xác nhận với Product Owner hoặc tài liệu thiết kế hệ thống.
|