@longph2102/v-flow 1.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.md +265 -0
- package/CHANGELOG.md +318 -0
- package/LICENSE +21 -0
- package/README.md +326 -0
- package/agents/ba-agent.md +437 -0
- package/agents/ba-critic-agent.md +156 -0
- package/agents/ba-to-ptyc-agent.md +112 -0
- package/agents/bugfix-analyst-agent.md +221 -0
- package/agents/constitute-agent.md +155 -0
- package/agents/help-agent.md +168 -0
- package/agents/implement-agent.md +220 -0
- package/agents/import-ba-docs-agent.md +164 -0
- package/agents/master-check-agent.md +228 -0
- package/agents/metrics-agent.md +180 -0
- package/agents/operations-agent.md +123 -0
- package/agents/plan-agent.md +218 -0
- package/agents/prototype-agent.md +191 -0
- package/agents/retrospective-agent.md +196 -0
- package/agents/review-agent.md +210 -0
- package/agents/sprint-agent.md +191 -0
- package/agents/status-agent.md +186 -0
- package/agents/sync-agent.md +201 -0
- package/agents/test-agent.md +166 -0
- package/agents/understand-agent.md +339 -0
- package/cli/commands/check.js +96 -0
- package/cli/commands/dev-quiz.js +107 -0
- package/cli/commands/doctor.js +348 -0
- package/cli/commands/feature.js +259 -0
- package/cli/commands/hooks.js +163 -0
- package/cli/commands/init.js +189 -0
- package/cli/commands/log.js +199 -0
- package/cli/commands/plugin.js +230 -0
- package/cli/commands/score-card.js +203 -0
- package/cli/commands/status.js +269 -0
- package/cli/commands/sync.js +59 -0
- package/cli/commands/upgrade.js +150 -0
- package/cli/commands/validate.js +1259 -0
- package/cli/commands/watch.js +151 -0
- package/cli/index.js +46 -0
- package/cli/lib/ac-test-gate.js +89 -0
- package/cli/lib/activity-log.js +209 -0
- package/cli/lib/cli-error.js +183 -0
- package/cli/lib/constitution-lint.js +561 -0
- package/cli/lib/dev-quiz-grade.js +127 -0
- package/cli/lib/governance.js +78 -0
- package/cli/lib/hook-targets.js +167 -0
- package/cli/lib/i18n.js +375 -0
- package/cli/lib/knowledge-oracle.js +379 -0
- package/cli/lib/logger.js +203 -0
- package/cli/lib/module-card-lint.js +304 -0
- package/cli/lib/module-card-score.js +223 -0
- package/cli/lib/plugins.js +481 -0
- package/cli/lib/scanner.js +692 -0
- package/cli/lib/sync-core.js +232 -0
- package/cli/lib/sync-targets.js +84 -0
- package/cli/lib/templates.js +268 -0
- package/cli/lib/yaml-parser.js +203 -0
- package/commands/v.ba-critic.md +101 -0
- package/commands/v.ba-to-ptyc.md +71 -0
- package/commands/v.bugfix.md +86 -0
- package/commands/v.check.md +131 -0
- package/commands/v.constitute.md +87 -0
- package/commands/v.constitution.md +84 -0
- package/commands/v.fork.md +127 -0
- package/commands/v.help.md +73 -0
- package/commands/v.hotfix.md +200 -0
- package/commands/v.implement.md +92 -0
- package/commands/v.import-ba-docs.md +222 -0
- package/commands/v.metrics.md +74 -0
- package/commands/v.operations.md +70 -0
- package/commands/v.plan.md +78 -0
- package/commands/v.prototype.md +121 -0
- package/commands/v.quickfix.md +169 -0
- package/commands/v.retrospective.md +80 -0
- package/commands/v.review.md +78 -0
- package/commands/v.rewind.md +127 -0
- package/commands/v.specify.md +118 -0
- package/commands/v.sprint.md +75 -0
- package/commands/v.status.md +62 -0
- package/commands/v.sync.md +81 -0
- package/commands/v.test.md +67 -0
- package/commands/v.understand.md +112 -0
- package/package.json +65 -0
- package/skills/_shared/constitution-reader/SKILL.md +109 -0
- package/skills/_shared/constitution-reader/config.json +52 -0
- package/skills/_shared/constitution-reader/examples/good/b1-phase-output.md +48 -0
- package/skills/_shared/constitution-reader/gotchas.md +46 -0
- package/skills/_shared/context-reader/SKILL.md +111 -0
- package/skills/_shared/context-reader/config.json +54 -0
- package/skills/_shared/context-reader/examples/good/legacy-nodejs-output.md +35 -0
- package/skills/_shared/context-reader/gotchas.md +49 -0
- package/skills/_shared/ears-notation/SKILL.md +63 -0
- package/skills/_shared/ears-notation/config.json +55 -0
- package/skills/_shared/ears-notation/examples/good/plan-test-interpretation.md +29 -0
- package/skills/_shared/ears-notation/gotchas.md +43 -0
- package/skills/check/cross-validator/SKILL.md +206 -0
- package/skills/check/cross-validator/config.json +33 -0
- package/skills/check/cross-validator/examples/good/validation-report-pass-with-concerns.md +105 -0
- package/skills/check/cross-validator/gotchas.md +43 -0
- package/skills/implement/constitution-enforcer/SKILL.md +134 -0
- package/skills/implement/constitution-enforcer/config.json +16 -0
- package/skills/implement/constitution-enforcer/examples/bad/vague-report.md +42 -0
- package/skills/implement/constitution-enforcer/examples/good/compliance-report.md +57 -0
- package/skills/implement/constitution-enforcer/gotchas.md +26 -0
- package/skills/implement/constitution-enforcer/scripts/check-constitution.sh +88 -0
- package/skills/implement/no-go-zone-guard/SKILL.md +173 -0
- package/skills/implement/no-go-zone-guard/config.json +28 -0
- package/skills/implement/no-go-zone-guard/examples/good/adapter-workaround.md +46 -0
- package/skills/implement/no-go-zone-guard/gotchas.md +27 -0
- package/skills/implement/no-go-zone-guard/scripts/check-nogo-zones.sh +148 -0
- package/skills/implement/no-go-zone-guard/scripts/nogo-precommit.sh +96 -0
- package/skills/implement/tdd-driver/SKILL.md +159 -0
- package/skills/implement/tdd-driver/config.json +33 -0
- package/skills/implement/tdd-driver/examples/good/tdd-cycle-product-repo.md +81 -0
- package/skills/implement/tdd-driver/gotchas.md +34 -0
- package/skills/metrics/metrics-collector/SKILL.md +133 -0
- package/skills/metrics/metrics-collector/config.json +16 -0
- package/skills/metrics/metrics-collector/examples/bad/incomplete-report.md +48 -0
- package/skills/metrics/metrics-collector/examples/good/full-metrics-report.md +101 -0
- package/skills/metrics/metrics-collector/gotchas.md +26 -0
- package/skills/operations/incident-runbook/SKILL.md +167 -0
- package/skills/operations/incident-runbook/config.json +21 -0
- package/skills/operations/incident-runbook/examples/bad/vague-incident-report.md +48 -0
- package/skills/operations/incident-runbook/examples/good/p1-hotfix-response.md +119 -0
- package/skills/operations/incident-runbook/gotchas.md +26 -0
- package/skills/plan/architecture-designer/SKILL.md +228 -0
- package/skills/plan/architecture-designer/config.json +32 -0
- package/skills/plan/architecture-designer/examples/bad/vague-plan.md +62 -0
- package/skills/plan/architecture-designer/examples/good/expand-contract-migration.md +56 -0
- package/skills/plan/architecture-designer/examples/good/plan-structure.md +58 -0
- package/skills/plan/architecture-designer/gotchas.md +45 -0
- package/skills/plan/task-breakdown/SKILL.md +208 -0
- package/skills/plan/task-breakdown/config.json +26 -0
- package/skills/plan/task-breakdown/examples/bad/vague-tasks.md +77 -0
- package/skills/plan/task-breakdown/examples/good/spike-clarify-tasks.md +66 -0
- package/skills/plan/task-breakdown/examples/good/tasks-login-feature.md +111 -0
- package/skills/plan/task-breakdown/gotchas.md +39 -0
- package/skills/prototype/LOGIC.md +240 -0
- package/skills/prototype/SKILL.md +185 -0
- package/skills/prototype/UI.md +407 -0
- package/skills/prototype/config.json +104 -0
- package/skills/prototype/examples/bad/prototype-notes.md +68 -0
- package/skills/prototype/examples/good/prototype-notes-ui.md +109 -0
- package/skills/prototype/examples/good/prototype-notes.md +67 -0
- package/skills/prototype/gotchas.md +128 -0
- package/skills/prototype/scripts/check-flow-state.ps1 +112 -0
- package/skills/prototype/scripts/check-flow-state.sh +104 -0
- package/skills/prototype/scripts/check-prototype-cleanup.ps1 +124 -0
- package/skills/prototype/scripts/check-prototype-cleanup.sh +109 -0
- package/skills/prototype/scripts/check-prototype-notes.ps1 +107 -0
- package/skills/prototype/scripts/check-prototype-notes.sh +102 -0
- package/skills/review/adversarial-reviewer/SKILL.md +137 -0
- package/skills/review/adversarial-reviewer/config.json +32 -0
- package/skills/review/adversarial-reviewer/examples/good/review-report-template.md +56 -0
- package/skills/review/adversarial-reviewer/gotchas.md +46 -0
- package/skills/review/adversarial-reviewer/scripts/quick-security-scan.sh +52 -0
- package/skills/specify/ba-bpmn-doc-gen/SKILL.md +108 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-bpmn-generation.md +528 -0
- package/skills/specify/ba-bpmn-doc-gen/reference/reference-drawio-flowchart.md +466 -0
- package/skills/specify/ba-critic/SKILL.md +172 -0
- package/skills/specify/ba-critic/config.json +32 -0
- package/skills/specify/ba-critic/examples/good/critic-report-round1.md +51 -0
- package/skills/specify/ba-critic/gotchas.md +40 -0
- package/skills/specify/ba-critic/scripts/check-spec-quality.sh +72 -0
- package/skills/specify/ba-doc-generator/SKILL.md +102 -0
- package/skills/specify/ba-doc-generator/references/template-clevel.md +84 -0
- package/skills/specify/ba-doc-generator/references/template-compliance.md +83 -0
- package/skills/specify/ba-doc-generator/references/template-dev.md +138 -0
- package/skills/specify/ba-doc-generator/references/template-partner.md +167 -0
- package/skills/specify/ba-doc-generator/references/template-pm.md +92 -0
- package/skills/specify/ba-doc-generator/references/template-review.md +114 -0
- package/skills/specify/ba-doc-generator/references/template-tester.md +108 -0
- package/skills/specify/ba-doc-generator/references/template-user.md +98 -0
- package/skills/specify/bugfix-analyst/SKILL.md +296 -0
- package/skills/specify/bugfix-analyst/config.json +41 -0
- package/skills/specify/bugfix-analyst/examples/bad/common-mistakes.md +71 -0
- package/skills/specify/bugfix-analyst/examples/good/email-validation-bugfix.md +53 -0
- package/skills/specify/bugfix-analyst/gotchas.md +51 -0
- package/skills/specify/ears-writer/SKILL.md +129 -0
- package/skills/specify/ears-writer/config.json +20 -0
- package/skills/specify/ears-writer/examples/bad/common-mistakes.md +17 -0
- package/skills/specify/ears-writer/examples/good/login-requirements.md +41 -0
- package/skills/specify/ears-writer/gotchas.md +43 -0
- package/skills/specify/ears-writer/scripts/check-ears-compliance.sh +51 -0
- package/skills/test/test-case-generator/SKILL.md +161 -0
- package/skills/test/test-case-generator/config.json +33 -0
- package/skills/test/test-case-generator/examples/good/test-cases-login.md +104 -0
- package/skills/test/test-case-generator/gotchas.md +43 -0
- package/skills/understand/ba-docs-scanner/SKILL.md +239 -0
- package/skills/understand/ba-docs-scanner/config.json +47 -0
- package/skills/understand/ba-docs-scanner/examples/good/work-order-br-extract.md +28 -0
- package/skills/understand/ba-docs-scanner/gotchas.md +44 -0
- package/skills/understand/ba-docs-scanner/merge-rules.md +47 -0
- package/skills/understand/codebase-scanner/SKILL.md +260 -0
- package/skills/understand/codebase-scanner/config.json +56 -0
- package/skills/understand/codebase-scanner/examples/good/menu-module-output.md +44 -0
- package/skills/understand/codebase-scanner/gotchas.md +42 -0
- package/skills/understand/codebase-scanner/scripts/scan-project-structure.sh +64 -0
- package/templates/DESIGN.md +456 -0
- package/templates/agent-command-template.yaml +240 -0
- package/templates/agent-config-template.md +170 -0
- package/templates/agent-definition-template.md +145 -0
- package/templates/agent-metrics-template.md +150 -0
- package/templates/api-contract-template.md +72 -0
- package/templates/bugfix-report-template.md +195 -0
- package/templates/bugfix-spec-template.md +134 -0
- package/templates/code-review-report-template.md +119 -0
- package/templates/constitution-template.md +234 -0
- package/templates/context-template.md +94 -0
- package/templates/data-model-template.md +95 -0
- package/templates/decision-log-template.md +92 -0
- package/templates/flow-state-template.yaml +208 -0
- package/templates/github/workflows/v-flow-validate.yml +30 -0
- package/templates/knowledge/adr-template.md +70 -0
- package/templates/knowledge/api-contract-template.md +140 -0
- package/templates/knowledge/domain-glossary.md +29 -0
- package/templates/knowledge/golden-tests-readme.md +115 -0
- package/templates/knowledge/lessons-learned.md +41 -0
- package/templates/knowledge/patterns.md +103 -0
- package/templates/module-card/SKILL.md +85 -0
- package/templates/module-card/api-specs.md +96 -0
- package/templates/module-card/business-quiz.md +119 -0
- package/templates/module-card/cross-service.md +125 -0
- package/templates/module-card/db.md +85 -0
- package/templates/module-card/dev-quiz.md +62 -0
- package/templates/module-card/permissions.md +83 -0
- package/templates/module-card/state-diagram.md +64 -0
- package/templates/module-card/tech-context.md +90 -0
- package/templates/module-card/ui-flows.md +91 -0
- package/templates/module-card/use-cases.md +142 -0
- package/templates/module-template.yaml +161 -0
- package/templates/operations-report-template.md +108 -0
- package/templates/plan-template.md +308 -0
- package/templates/prototype-notes-template.md +116 -0
- package/templates/ptyc/PTYC.template.docx +0 -0
- package/templates/ptyc/ptyc.meta.example.yaml +44 -0
- package/templates/retrospective-report-template.md +136 -0
- package/templates/security-review-template.md +84 -0
- package/templates/session-template.md +167 -0
- package/templates/spec-review-log-template.md +75 -0
- package/templates/spec-template.md +229 -0
- package/templates/sprint-status-template.md +101 -0
- package/templates/tasks-template.md +275 -0
- package/templates/test-cases-template.md +124 -0
- package/templates/ux-checklist-template.md +79 -0
- package/templates/validation-report-template.md +125 -0
- package/templates/vflow-config-template.yaml +22 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Ví dụ — BA Critic Report Round 1
|
|
2
|
+
|
|
3
|
+
> Đây là mẫu output chuẩn cho BA Critic Agent khi phản biện spec.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📋 BA Critic Report — Round 1
|
|
8
|
+
|
|
9
|
+
**Spec version reviewed**: spec.md (2026-04-15 15:30)
|
|
10
|
+
**Issues found**: 4 (≥3 required ✅)
|
|
11
|
+
**Verdict**: ❌ REVISE NEEDED
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
### Issues
|
|
16
|
+
|
|
17
|
+
#### CR-001: REQ-E01 thiếu error handling path
|
|
18
|
+
- **Severity**: 🔴 Critical
|
|
19
|
+
- **REQ affected**: REQ-E01 (Login)
|
|
20
|
+
- **Chiều phản biện**: Completeness
|
|
21
|
+
- **Mô tả**: REQ-E01 chỉ mô tả happy path (login success → redirect). Thiếu hoàn toàn các error cases: invalid email format, wrong password, account locked, rate limiting.
|
|
22
|
+
- **Đề xuất fix**: Tách thành REQ-E01 (success path) + REQ-E02 (invalid credentials) + REQ-E03 (account locked) + REQ-O01 (rate limit khi > 5 attempts).
|
|
23
|
+
|
|
24
|
+
#### CR-002: REQ-U01 mơ hồ — "password phải đủ mạnh"
|
|
25
|
+
- **Severity**: 🟡 Major
|
|
26
|
+
- **REQ affected**: REQ-U01
|
|
27
|
+
- **Chiều phản biện**: Ambiguity
|
|
28
|
+
- **Mô tả**: "Đủ mạnh" là chủ quan, không testable. 2 developer sẽ implement khác nhau.
|
|
29
|
+
- **Đề xuất fix**: Thay bằng: "Password phải có ≥8 ký tự, ≥1 uppercase, ≥1 number, ≥1 special character."
|
|
30
|
+
|
|
31
|
+
#### CR-003: REQ-E03 conflict với No-Go Zone
|
|
32
|
+
- **Severity**: 🔴 Critical
|
|
33
|
+
- **REQ affected**: REQ-E03
|
|
34
|
+
- **Chiều phản biện**: Feasibility
|
|
35
|
+
- **Mô tả**: REQ-E03 yêu cầu modify `auth-service/legacy-sso.js` — file nằm trong No-Go Zone theo context.md (rủi ro Cao, "SSO integration ổn định 2 năm").
|
|
36
|
+
- **Đề xuất fix**: Tạo adapter layer mới `auth-adapter.js` wrap legacy SSO, implement logic mới trong adapter.
|
|
37
|
+
|
|
38
|
+
#### CR-004: REQ-S01 thiếu exit condition
|
|
39
|
+
- **Severity**: 🟢 Minor
|
|
40
|
+
- **REQ affected**: REQ-S01
|
|
41
|
+
- **Chiều phản biện**: Testability
|
|
42
|
+
- **Mô tả**: "Trong khi user đang ở trang settings, hệ thống phải auto-save mỗi 30s." Thiếu: khi nào DỪNG auto-save? Navigate away? Close tab? Session timeout?
|
|
43
|
+
- **Đề xuất fix**: Thêm exit conditions: "Auto-save dừng khi user navigate khỏi trang hoặc session hết hạn."
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Summary
|
|
48
|
+
- Critical: 2
|
|
49
|
+
- Major: 1
|
|
50
|
+
- Minor: 1
|
|
51
|
+
- **Routing**: → BA Agent fix → Round 2
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Gotchas — BA Critic
|
|
2
|
+
|
|
3
|
+
> Cập nhật liên tục khi Agent gặp bias hoặc edge case mới.
|
|
4
|
+
> Mỗi lỗi lặp lại 2 lần → BẮT BUỘC thêm vào đây.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Anti-Patterns
|
|
9
|
+
|
|
10
|
+
1. ❌ **"Specs tốt rồi" / LGTM** — KHÔNG được chấp nhận. Luôn có ≥3 issues.
|
|
11
|
+
- **Hậu quả**: Spec mơ hồ leak ra implement → costly rework.
|
|
12
|
+
|
|
13
|
+
2. ❌ **Bias từ round trước** — Đọc spec mới như chưa từng đọc.
|
|
14
|
+
- **Hậu quả**: Miss issues mới do BA Agent vô tình giới thiệu khi fix issues cũ.
|
|
15
|
+
|
|
16
|
+
3. ❌ **Focus nên fixing thay vì finding** — Critic Agent TÌM issues, không FIX.
|
|
17
|
+
- **Fix**: Mô tả issue + suggest hướng fix. BA Agent quyết cách fix.
|
|
18
|
+
|
|
19
|
+
4. ❌ **Nitpicking wording, bỏ qua logic** — Sửa dấu chấm câu nhưng miss missing REQ.
|
|
20
|
+
- **Fix**: Sort by severity — Critical/Major trước, Minor sau.
|
|
21
|
+
|
|
22
|
+
5. ❌ **Confirm bias** — "Round trước nói 3 issues, round này cũng 3 vì spec tốt hơn rồi."
|
|
23
|
+
- **Fix**: Fresh context. Đọc spec fresh, tìm issues hoàn toàn MỚI.
|
|
24
|
+
|
|
25
|
+
6. ❌ **Copy issues từ blueprint** — Tìm issues generic ("cần thêm error handling") thay vì specific.
|
|
26
|
+
- **Fix**: Mỗi issue phải reference REQ-xxx + giải thích cụ thể VÌ SAO sai.
|
|
27
|
+
|
|
28
|
+
7. ❌ **Quên context.md** — Review spec mà không kiểm tra No-Go Zones.
|
|
29
|
+
- **Check**: REQ-xxx có yêu cầu modify code trong No-Go Zone? → CRITICAL issue.
|
|
30
|
+
|
|
31
|
+
8. ❌ **Quên constitution.md** — Spec suggest pattern khác constitution.
|
|
32
|
+
- **Check**: Architecture pattern trong spec align với constitution? Naming conventions?
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Edge Cases
|
|
37
|
+
|
|
38
|
+
- ✅ Spec rất ngắn (< 5 REQs) → Vẫn phải tìm ≥3 issues. Check completeness kỹ hơn.
|
|
39
|
+
- ✅ First round trên fresh spec → Focus ambiguity + completeness (thường nhiều issues nhất).
|
|
40
|
+
- ✅ Round 3+ vẫn REVISE NEEDED → Escalate cho human. Ghi vào `_session.md`.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# check-spec-quality.sh — Pre-scan spec.md trước khi BA Critic phản biện adversarial.
|
|
3
|
+
# Usage: ./check-spec-quality.sh <spec.md_path>
|
|
4
|
+
#
|
|
5
|
+
# KHÔNG thay thế critic (LLM). Chỉ surface "smell" cấu trúc để critic neo ≥3 issues
|
|
6
|
+
# và không tốn lượt vào lỗi hiển nhiên. Checks: counts (REQ/AC/UC), ambiguity (từ mơ hồ),
|
|
7
|
+
# completeness (error path, REQ↔AC), testability (AC mơ hồ).
|
|
8
|
+
|
|
9
|
+
SPEC="${1:-spec.md}"
|
|
10
|
+
|
|
11
|
+
if [ ! -f "$SPEC" ]; then
|
|
12
|
+
echo "❌ File not found: $SPEC"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
echo "🔎 Spec Quality Pre-Scan: $SPEC"
|
|
17
|
+
echo "════════════════════════════════════════"
|
|
18
|
+
HINTS=0 # số smell phát hiện → gợi ý cho critic (KHÔNG phải verdict)
|
|
19
|
+
|
|
20
|
+
# 1. Overview counts — đếm token bằng `grep -o | wc -l` (mỗi match 1 dòng).
|
|
21
|
+
echo ""
|
|
22
|
+
echo "### 1. Overview"
|
|
23
|
+
REQ=$(grep -oE "REQ-[A-Za-z][0-9]+" "$SPEC" | sort -u | wc -l | tr -d ' ')
|
|
24
|
+
AC=$(grep -oE "\bAC-[0-9]+\b" "$SPEC" | sort -u | wc -l | tr -d ' ')
|
|
25
|
+
UC=$(grep -oE "\bUC-[0-9]+\b" "$SPEC" | sort -u | wc -l | tr -d ' ')
|
|
26
|
+
echo " REQ: $REQ · AC-NN: $AC · UC: $UC"
|
|
27
|
+
[ "$REQ" -eq 0 ] && echo " ⚠️ Không thấy REQ-xxx — spec có thể chưa đặc tả requirement" && HINTS=$((HINTS+1))
|
|
28
|
+
[ "$AC" -eq 0 ] && echo " ⚠️ Không thấy mã AC-NN — Acceptance Criteria chưa đánh mã (§4)" && HINTS=$((HINTS+1))
|
|
29
|
+
|
|
30
|
+
# 2. Ambiguity — từ mơ hồ (đồng bộ với '5 Chiều Phản Biện' → Ambiguity của SKILL.md).
|
|
31
|
+
echo ""
|
|
32
|
+
echo "### 2. Ambiguity (từ mơ hồ)"
|
|
33
|
+
AMB=0
|
|
34
|
+
for word in "nên" "should" "hợp lý" "dễ dùng" "user-friendly" "nhanh" "tối ưu" "linh hoạt" "đơn giản"; do
|
|
35
|
+
count=$(grep -ci "$word" "$SPEC") # grep -c luôn in số nguyên (0 nếu không có)
|
|
36
|
+
[ "$count" -gt 0 ] && echo " ⚠️ '$word' xuất hiện $count lần — cần định lượng/làm rõ" && AMB=$((AMB+count))
|
|
37
|
+
done
|
|
38
|
+
[ "$AMB" -eq 0 ] && echo " ✅ Không thấy từ mơ hồ phổ biến"
|
|
39
|
+
HINTS=$((HINTS+AMB))
|
|
40
|
+
|
|
41
|
+
# 3. Completeness — có error/exception path không? (signal cho Completeness dimension)
|
|
42
|
+
echo ""
|
|
43
|
+
echo "### 3. Completeness"
|
|
44
|
+
ERRPATH=$(grep -ciE "lỗi|error|ngoại lệ|exception|4[0-9][0-9]|5[0-9][0-9]|timeout|invalid" "$SPEC")
|
|
45
|
+
if [ "$ERRPATH" -eq 0 ]; then
|
|
46
|
+
echo " ⚠️ Không thấy đề cập error/exception path — kiểm tra REQ chỉ có happy path?"
|
|
47
|
+
HINTS=$((HINTS+1))
|
|
48
|
+
else
|
|
49
|
+
echo " ✅ Có đề cập error/exception ($ERRPATH tín hiệu)"
|
|
50
|
+
fi
|
|
51
|
+
# REQ↔AC: mỗi REQ nên có ≥1 AC. So sánh số đếm (heuristic, critic xác nhận ngữ nghĩa).
|
|
52
|
+
if [ "$REQ" -gt 0 ] && [ "$AC" -lt "$REQ" ]; then
|
|
53
|
+
echo " ⚠️ AC-NN ($AC) ít hơn REQ ($REQ) — có REQ chưa có acceptance criterion?"
|
|
54
|
+
HINTS=$((HINTS+1))
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# 4. Testability — AC mơ hồ ("đúng"/"tốt"/"hoạt động" không có expected output cụ thể).
|
|
58
|
+
echo ""
|
|
59
|
+
echo "### 4. Testability"
|
|
60
|
+
VAGUEAC=$(grep -ciE "hoạt động đúng|hoạt động tốt|chính xác|như mong đợi|phù hợp" "$SPEC")
|
|
61
|
+
if [ "$VAGUEAC" -gt 0 ]; then
|
|
62
|
+
echo " ⚠️ $VAGUEAC tiêu chí dạng 'đúng/tốt/phù hợp' — thiếu expected output đo được?"
|
|
63
|
+
HINTS=$((HINTS+1))
|
|
64
|
+
fi
|
|
65
|
+
[ "$VAGUEAC" -eq 0 ] && echo " ✅ Không thấy AC mơ hồ kiểu 'đúng/tốt'"
|
|
66
|
+
|
|
67
|
+
echo ""
|
|
68
|
+
echo "════════════════════════════════════════"
|
|
69
|
+
echo "📊 Pre-scan hints: $HINTS"
|
|
70
|
+
echo "→ Đây CHỈ là gợi ý cấu trúc. Critic vẫn phải tìm ≥3 issues (gồm ambiguity/completeness/"
|
|
71
|
+
echo " consistency/feasibility/testability) bằng phán đoán — KHÔNG dừng ở pre-scan này."
|
|
72
|
+
exit 0
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ba-doc-generator
|
|
3
|
+
description: |
|
|
4
|
+
Hỗ trợ Business Analyst tạo tài liệu BA chuyên nghiệp theo đúng template phù hợp với từng đối tượng nhận tài liệu. Nhận input là nội dung BA thô (requirement, spec, meeting notes, model...) và audience target, tự động chọn template đúng, adapt ngôn ngữ & mức độ chi tiết, rồi gen ra tài liệu hoàn chỉnh sẵn sàng gửi đi.
|
|
5
|
+
|
|
6
|
+
Sử dụng skill này bất cứ khi nào BA cần tạo tài liệu để communicate với stakeholder, khi người dùng nói "tạo tài liệu cho dev", "viết spec cho tester", "làm báo cáo cho sếp", "tạo tài liệu cho C-level", "viết hướng dẫn cho user", "gen tài liệu BA", "tạo package cho stakeholder", "viết tài liệu review", "tạo tài liệu tích hợp cho partner", "làm tài liệu compliance", "tạo brief cho PM". Luôn dùng skill này khi BA cần communicate thông tin ra bên ngoài dù người dùng không nói rõ từ "skill".
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# BA Document Generator Skill
|
|
10
|
+
|
|
11
|
+
Skill giúp BA tạo tài liệu phù hợp **từng đối tượng nhận** — đúng template, đúng ngôn ngữ, đúng mức độ chi tiết — dựa trên nội dung BA thô đầu vào.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Quy trình thực hiện
|
|
16
|
+
|
|
17
|
+
### Bước 1 — Thu thập Input
|
|
18
|
+
|
|
19
|
+
Nếu người dùng chưa cung cấp đủ, hỏi lần lượt:
|
|
20
|
+
|
|
21
|
+
1. **Nội dung BA thô**: requirement, spec, meeting notes, model, elicitation results...
|
|
22
|
+
2. **Audience**: Đối tượng sẽ nhận tài liệu này là ai?
|
|
23
|
+
3. **Mục đích**: Review / Approval / Development / Testing / Training / Audit / Integration?
|
|
24
|
+
4. **Format output**: `.md` (mặc định) hay `.docx`?
|
|
25
|
+
|
|
26
|
+
> Nếu audience chưa rõ, hỏi: *"Tài liệu này sẽ được gửi cho ai — developer, tester, C-level, user cuối, hay đối tác bên ngoài?"*
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### Bước 2 — Xác định Template
|
|
31
|
+
|
|
32
|
+
Dựa vào audience, chọn template tương ứng:
|
|
33
|
+
|
|
34
|
+
| Audience | Template File | Mục đích chính |
|
|
35
|
+
|----------|--------------|----------------|
|
|
36
|
+
| C-level / Sponsor / Ban lãnh đạo | `references/template-clevel.md` | Quyết định, phê duyệt ngân sách |
|
|
37
|
+
| Product Owner / PM | `references/template-pm.md` | Quản lý scope, timeline, risk |
|
|
38
|
+
| Developer / Tech Lead | `references/template-dev.md` | Implement solution |
|
|
39
|
+
| Tester / QA | `references/template-tester.md` | Viết test case, kiểm thử |
|
|
40
|
+
| End User / Trainer | `references/template-user.md` | Sử dụng hệ thống, đào tạo |
|
|
41
|
+
| Legal / Compliance | `references/template-compliance.md` | Audit, tuân thủ quy định |
|
|
42
|
+
| Stakeholder Review | `references/template-review.md` | Review & approval chính thức |
|
|
43
|
+
| External Partner / Tích hợp | `references/template-partner.md` | Tích hợp hệ thống |
|
|
44
|
+
|
|
45
|
+
> **Đọc file template tương ứng** trước khi gen tài liệu để áp dụng đúng cấu trúc và nguyên tắc.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Bước 3 — Adapt nội dung
|
|
50
|
+
|
|
51
|
+
Khi gen tài liệu, luôn áp dụng các nguyên tắc adapt sau:
|
|
52
|
+
|
|
53
|
+
#### Ngôn ngữ
|
|
54
|
+
- **C-level / User**: Ngôn ngữ business, tránh thuật ngữ kỹ thuật, dùng ví dụ thực tế
|
|
55
|
+
- **Dev / Tester**: Ngôn ngữ kỹ thuật, chính xác, có thể dùng code/pseudocode
|
|
56
|
+
- **PM / PO**: Cân bằng business + technical, focus vào scope & impact
|
|
57
|
+
- **Legal**: Ngôn ngữ chính thức, trích dẫn điều khoản rõ ràng, có số hiệu
|
|
58
|
+
|
|
59
|
+
#### Mức độ chi tiết
|
|
60
|
+
- **C-level**: High-level, 1-2 trang, bullet points ngắn gọn
|
|
61
|
+
- **PM/PO**: Medium, có đủ context để ra quyết định
|
|
62
|
+
- **Dev/Tester**: Deep-dive, đầy đủ edge case, rule, data type
|
|
63
|
+
- **User**: Step-by-step, có screenshot placeholder, ví dụ cụ thể
|
|
64
|
+
|
|
65
|
+
#### Format
|
|
66
|
+
- **C-level / Review**: Slide-style hoặc executive summary
|
|
67
|
+
- **Dev**: Table + code block + diagram
|
|
68
|
+
- **Tester**: Bảng acceptance criteria + test scenario
|
|
69
|
+
- **User**: Numbered steps + note + warning box
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
### Bước 4 — Gen tài liệu
|
|
74
|
+
|
|
75
|
+
Tạo tài liệu theo đúng template đã chọn, điền đầy đủ nội dung từ input BA thô.
|
|
76
|
+
|
|
77
|
+
Cuối tài liệu luôn thêm:
|
|
78
|
+
```
|
|
79
|
+
---
|
|
80
|
+
📌 Ghi chú cho BA:
|
|
81
|
+
- Các phần đánh dấu [TBD] cần được điền thêm thông tin
|
|
82
|
+
- Các phần đánh dấu [?] cần confirm lại với stakeholder
|
|
83
|
+
- Phiên bản: v0.1 — Draft
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Bước 5 — Output
|
|
89
|
+
|
|
90
|
+
- Mặc định: xuất `.md` inline trong chat
|
|
91
|
+
- Nếu người dùng cần file `.docx`: tham khảo skill `docx` để xuất file Word
|
|
92
|
+
- Hỏi người dùng: *"Bạn cần tạo thêm phiên bản cho đối tượng nào khác không?"*
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Nguyên tắc quan trọng
|
|
97
|
+
|
|
98
|
+
1. **One audience, one document** — Không cố gắng viết 1 tài liệu cho nhiều audience, sẽ không phù hợp cho ai cả
|
|
99
|
+
2. **Preserve BA content** — Không tự ý thay đổi nội dung requirement, chỉ thay đổi cách trình bày
|
|
100
|
+
3. **Flag thông tin thiếu** — Dùng `[TBD]` khi thông tin chưa có, `[?]` khi cần confirm
|
|
101
|
+
4. **Không kỹ thuật hóa với non-tech** — Khi viết cho C-level hay User, tuyệt đối không dùng jargon kỹ thuật
|
|
102
|
+
5. **Không business hóa với tech** — Khi viết cho Dev/Tester, cần đủ chi tiết kỹ thuật, không được mơ hồ
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Template: Executive Summary
|
|
2
|
+
> Dành cho: C-level / Sponsor / Ban lãnh đạo
|
|
3
|
+
> Mục đích: Quyết định, phê duyệt, nắm bắt tổng quan
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Nguyên tắc viết cho C-level
|
|
8
|
+
- Tối đa 2 trang
|
|
9
|
+
- Không dùng thuật ngữ kỹ thuật
|
|
10
|
+
- Focus vào: Business value, ROI, Risk, Decision cần làm
|
|
11
|
+
- Dùng số liệu cụ thể khi có thể
|
|
12
|
+
- Mỗi bullet point tối đa 1-2 dòng
|
|
13
|
+
- Kết thúc bằng câu hỏi / action item rõ ràng
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## CẤU TRÚC TÀI LIỆU
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
# [Tên dự án / Tính năng / Thay đổi]
|
|
21
|
+
**Ngày**: [Date] | **Chuẩn bị bởi**: [BA Name] | **Phiên bản**: [v0.1]
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. Tóm tắt (1 đoạn, tối đa 5 câu)
|
|
26
|
+
[Mô tả ngắn gọn: đang làm gì, tại sao, kỳ vọng đạt được gì]
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 2. Vấn đề hiện tại
|
|
31
|
+
[Mô tả pain point bằng ngôn ngữ business, có thể kèm số liệu thiệt hại/rủi ro]
|
|
32
|
+
- Vấn đề 1: ...
|
|
33
|
+
- Vấn đề 2: ...
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. Giải pháp đề xuất
|
|
38
|
+
[Mô tả giải pháp ở mức high-level, không kỹ thuật]
|
|
39
|
+
- Sẽ làm gì: ...
|
|
40
|
+
- Không làm gì (ngoài scope): ...
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 4. Lợi ích kỳ vọng
|
|
45
|
+
| Lợi ích | Đo lường | Thời gian |
|
|
46
|
+
|---------|----------|-----------|
|
|
47
|
+
| [Lợi ích 1] | [KPI / metric] | [Khi nào] |
|
|
48
|
+
| [Lợi ích 2] | [KPI / metric] | [Khi nào] |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 5. Chi phí & Nguồn lực
|
|
53
|
+
| Hạng mục | Ước tính |
|
|
54
|
+
|----------|----------|
|
|
55
|
+
| Thời gian thực hiện | [X tuần/tháng] |
|
|
56
|
+
| Nhân sự | [X người] |
|
|
57
|
+
| Chi phí [nếu có] | [VND/USD] |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 6. Rủi ro chính
|
|
62
|
+
| Rủi ro | Mức độ | Biện pháp |
|
|
63
|
+
|--------|--------|-----------|
|
|
64
|
+
| [Rủi ro 1] | Cao/TB/Thấp | [Biện pháp xử lý] |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 7. Lộ trình tổng quan
|
|
69
|
+
[Timeline ngắn gọn dạng milestone, không chi tiết từng task]
|
|
70
|
+
- [Tháng/Tuần X]: Giai đoạn 1 — [Tên]
|
|
71
|
+
- [Tháng/Tuần Y]: Giai đoạn 2 — [Tên]
|
|
72
|
+
- [Tháng/Tuần Z]: Go-live
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 8. Quyết định cần từ Ban lãnh đạo
|
|
77
|
+
- [ ] Phê duyệt tiến hành dự án
|
|
78
|
+
- [ ] Phê duyệt ngân sách: [số tiền]
|
|
79
|
+
- [ ] Xác nhận ưu tiên so với các dự án khác
|
|
80
|
+
- [ ] [Quyết định khác nếu có]
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
*Liên hệ: [Tên BA] — [Email] — [Phone]*
|
|
84
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Template: Compliance & Regulatory Document
|
|
2
|
+
> Dành cho: Legal / Compliance / Kiểm toán nội bộ
|
|
3
|
+
> Mục đích: Audit trail, tuân thủ quy định pháp lý / nội bộ
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Nguyên tắc viết cho Legal/Compliance
|
|
8
|
+
- Ngôn ngữ chính thức, chính xác, không mơ hồ
|
|
9
|
+
- Trích dẫn rõ số điều, khoản của văn bản pháp lý
|
|
10
|
+
- Mỗi yêu cầu compliance phải có trạng thái: Đáp ứng / Chưa đáp ứng / Không áp dụng
|
|
11
|
+
- Có evidence / bằng chứng đáp ứng
|
|
12
|
+
- Trace được từ requirement → thiết kế → implementation
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## CẤU TRÚC TÀI LIỆU
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
# Báo cáo Tuân thủ: [Tên dự án / Tính năng]
|
|
20
|
+
**Ngày**: [Date] | **Chuẩn bị bởi**: [BA/Compliance Name]
|
|
21
|
+
**Phiên bản**: [v1.0] | **Phân loại**: [Nội bộ / Mật / Công khai]
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. Phạm vi & Mục đích
|
|
26
|
+
- **Phạm vi áp dụng**: [Hệ thống / Module / Quy trình nào]
|
|
27
|
+
- **Mục đích tài liệu**: [Audit / Review / Phê duyệt / Lưu trữ]
|
|
28
|
+
- **Đối tượng sử dụng**: [Phòng pháp chế / Kiểm toán / Regulator...]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Văn bản pháp lý & Quy định áp dụng
|
|
33
|
+
| # | Văn bản | Số hiệu | Ban hành | Điều khoản liên quan |
|
|
34
|
+
|---|---------|---------|---------|---------------------|
|
|
35
|
+
| 1 | [Tên luật / Nghị định] | [Số/YYYY/CP] | [Date] | Điều [X], Khoản [Y] |
|
|
36
|
+
| 2 | [Chính sách nội bộ] | [Mã chính sách] | [Date] | Mục [Z] |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. Ma trận Tuân thủ
|
|
41
|
+
|
|
42
|
+
| # | Yêu cầu | Nguồn (Điều/Khoản) | Trạng thái | Cách đáp ứng | Evidence |
|
|
43
|
+
|---|---------|-------------------|------------|-------------|----------|
|
|
44
|
+
| C-01 | [Mô tả yêu cầu tuân thủ] | [Văn bản, Điều X] | ✅ Đáp ứng | [Mô tả cơ chế/tính năng đáp ứng] | [Link / Tài liệu] |
|
|
45
|
+
| C-02 | [Yêu cầu 2] | | ⚠️ Một phần | [Giải thích] | |
|
|
46
|
+
| C-03 | [Yêu cầu 3] | | ❌ Chưa đáp ứng | [Kế hoạch xử lý + deadline] | |
|
|
47
|
+
| C-04 | [Yêu cầu 4] | | N/A | [Lý do không áp dụng] | |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 4. Kiểm soát Dữ liệu & Bảo mật
|
|
52
|
+
| Loại dữ liệu | Phân loại | Cách lưu trữ | Mã hóa | Thời gian lưu | Quyền truy cập |
|
|
53
|
+
|-------------|-----------|-------------|--------|--------------|---------------|
|
|
54
|
+
| [CCCD / Thông tin cá nhân] | Nhạy cảm | [Database X] | AES-256 | [X năm] | [Role có quyền] |
|
|
55
|
+
| [Dữ liệu giao dịch] | Nội bộ | | | | |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 5. Audit Trail
|
|
60
|
+
Hệ thống ghi lại các hành động sau để phục vụ kiểm toán:
|
|
61
|
+
| Hành động | Thông tin ghi lại | Lưu trữ bao lâu |
|
|
62
|
+
|-----------|------------------|----------------|
|
|
63
|
+
| [Tạo / Sửa / Xóa dữ liệu] | User, Timestamp, IP, Old value, New value | [X năm] |
|
|
64
|
+
| [Đăng nhập / Đăng xuất] | User, Timestamp, IP | [X năm] |
|
|
65
|
+
| [Phê duyệt / Từ chối] | User, Timestamp, Lý do | [X năm] |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 6. Gap Analysis & Kế hoạch xử lý
|
|
70
|
+
| Gap | Mức độ rủi ro | Deadline xử lý | Owner | Trạng thái |
|
|
71
|
+
|-----|--------------|---------------|-------|-----------|
|
|
72
|
+
| [Mô tả gap] | Cao/TB/Thấp | [Date] | [Tên] | In Progress |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 7. Xác nhận & Phê duyệt
|
|
77
|
+
| Vai trò | Họ tên | Chữ ký | Ngày |
|
|
78
|
+
|---------|--------|--------|------|
|
|
79
|
+
| BA soạn thảo | | | |
|
|
80
|
+
| Legal review | | | |
|
|
81
|
+
| Compliance Officer | | | |
|
|
82
|
+
| Phê duyệt cuối | | | |
|
|
83
|
+
```
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Template: Technical Specification
|
|
2
|
+
> Dành cho: Developer / Tech Lead
|
|
3
|
+
> Mục đích: Implement solution — đủ chi tiết để code không cần hỏi thêm
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Nguyên tắc viết cho Dev/Tech Lead
|
|
8
|
+
- Càng chi tiết càng tốt — ambiguity = bug
|
|
9
|
+
- Có đủ: business rule, validation rule, edge case, error handling
|
|
10
|
+
- Data model rõ ràng: field name, data type, constraint
|
|
11
|
+
- API contract nếu liên quan tích hợp
|
|
12
|
+
- Không giải thích "tại sao" quá nhiều — dev cần biết "làm gì" và "như thế nào"
|
|
13
|
+
- Có thể dùng pseudocode, bảng, diagram
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## CẤU TRÚC TÀI LIỆU
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
# [Tên tính năng / Module] — Technical Spec
|
|
21
|
+
**Ngày**: [Date] | **BA**: [Name] | **Dev**: [Name] | **Phiên bản**: [v0.1]
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. Tổng quan kỹ thuật
|
|
26
|
+
- Mô tả ngắn: [Tính năng này làm gì về mặt kỹ thuật]
|
|
27
|
+
- Module / Service liên quan: [Tên module, microservice...]
|
|
28
|
+
- Công nghệ: [Stack, framework nếu có ràng buộc]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Actors & Permissions
|
|
33
|
+
| Actor/Role | Quyền | Điều kiện |
|
|
34
|
+
|-----------|-------|-----------|
|
|
35
|
+
| [Role 1] | Create / Read / Update / Delete | [Điều kiện nếu có] |
|
|
36
|
+
| [Role 2] | Read only | |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. Luồng xử lý chính (Happy Path)
|
|
41
|
+
|
|
42
|
+
### [Tên luồng 1]
|
|
43
|
+
```
|
|
44
|
+
1. [Actor] thực hiện [action]
|
|
45
|
+
2. Hệ thống kiểm tra [condition]
|
|
46
|
+
3. Nếu hợp lệ → [xử lý]
|
|
47
|
+
4. Lưu [data] vào [table/collection]
|
|
48
|
+
5. Trả về [response]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Exception Flow
|
|
52
|
+
| Trường hợp | Điều kiện | Xử lý | Message hiển thị |
|
|
53
|
+
|-----------|-----------|-------|-----------------|
|
|
54
|
+
| [Case 1] | [Condition] | [Action] | "[Error message]" |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 4. Business Rules & Validation
|
|
59
|
+
|
|
60
|
+
### Validation Rules
|
|
61
|
+
| Field | Rule | Error Message |
|
|
62
|
+
|-------|------|---------------|
|
|
63
|
+
| [field_name] | Required / Max length X / Format regex | "[Message]" |
|
|
64
|
+
| [field_name] | Unique / FK constraint | "[Message]" |
|
|
65
|
+
|
|
66
|
+
### Business Rules
|
|
67
|
+
- BR-01: [Quy tắc nghiệp vụ 1 — mô tả cụ thể]
|
|
68
|
+
- BR-02: [Quy tắc nghiệp vụ 2]
|
|
69
|
+
- BR-03: [Công thức tính toán nếu có: field_A = field_B * field_C / 100]
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 5. Data Model
|
|
74
|
+
|
|
75
|
+
### Entity: [Tên entity]
|
|
76
|
+
| Field | Data Type | Required | Constraint | Mô tả |
|
|
77
|
+
|-------|-----------|----------|------------|-------|
|
|
78
|
+
| id | UUID | Yes | PK | |
|
|
79
|
+
| [field_name] | VARCHAR(255) | Yes | Unique | [Mô tả] |
|
|
80
|
+
| [field_name] | DECIMAL(15,2) | No | >= 0 | [Mô tả] |
|
|
81
|
+
| created_at | TIMESTAMP | Yes | Default NOW() | |
|
|
82
|
+
| status | ENUM | Yes | [ACTIVE, INACTIVE, PENDING] | |
|
|
83
|
+
|
|
84
|
+
### Quan hệ
|
|
85
|
+
- [Entity A] 1 — N [Entity B] qua field [foreign_key]
|
|
86
|
+
- [Entity B] N — N [Entity C] qua bảng trung gian [table_name]
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 6. API Contract (nếu có)
|
|
91
|
+
|
|
92
|
+
### [POST] /api/v1/[resource]
|
|
93
|
+
**Request:**
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"field_1": "string",
|
|
97
|
+
"field_2": 0,
|
|
98
|
+
"field_3": true
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
**Response 200:**
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"id": "uuid",
|
|
105
|
+
"status": "success",
|
|
106
|
+
"data": { ... }
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
**Response 4xx/5xx:**
|
|
110
|
+
| HTTP Code | Trường hợp | Message |
|
|
111
|
+
|-----------|-----------|---------|
|
|
112
|
+
| 400 | Validation fail | "Invalid input: [field]" |
|
|
113
|
+
| 403 | Không có quyền | "Access denied" |
|
|
114
|
+
| 404 | Không tìm thấy | "[Resource] not found" |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 7. Edge Cases & Lưu ý kỹ thuật
|
|
119
|
+
- [Edge case 1: mô tả + cách xử lý]
|
|
120
|
+
- [Edge case 2]
|
|
121
|
+
- [Performance note nếu có: query này cần index trên field X]
|
|
122
|
+
- [Security note: cần sanitize input field Y]
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 8. Checklist trước khi dev bắt đầu
|
|
127
|
+
- [ ] Đã đọc và hiểu toàn bộ spec
|
|
128
|
+
- [ ] Các open question đã được resolve (xem mục 9)
|
|
129
|
+
- [ ] Database migration script đã được plan
|
|
130
|
+
- [ ] Unit test plan đã có
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 9. Open Questions cho Dev
|
|
135
|
+
| # | Câu hỏi | Người trả lời | Trạng thái |
|
|
136
|
+
|---|---------|--------------|-----------|
|
|
137
|
+
| Q1 | [Câu hỏi kỹ thuật cần confirm] | BA / Architect | Pending |
|
|
138
|
+
```
|