@ngocsangairvds/vsaf 4.1.25 → 4.1.27
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/package.json +1 -1
- package/skills/sdlc/pack.yaml +4 -0
- package/skills/sdlc/sdlc-validate-srs/SKILL.md +8 -0
- package/skills/sdlc/sdlc-validate-srs/data/domain-checklists/insurance.yaml +110 -0
- package/skills/sdlc/sdlc-validate-srs/data/grep-patterns-srs.yaml +158 -0
- package/skills/sdlc/sdlc-validate-srs/data/srs-review-glossary.md +237 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-01-discovery.md +280 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-02-business-alignment.md +351 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-03-completeness.md +353 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-04-consistency.md +352 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-05-quality.md +347 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-06-system-nfr.md +217 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-07-delivery-readiness.md +288 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-08-risk-analysis.md +283 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-09-user-impact.md +262 -0
- package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-10-report.md +308 -0
- package/skills/sdlc/sdlc-validate-srs/workflow.md +269 -0
- package/skills/sdlc/sdlc-write-srs/SKILL.md +8 -0
- package/skills/sdlc/sdlc-write-srs/srs-feature-template.md +669 -0
- package/skills/sdlc/sdlc-write-srs/srs-system-template.md +430 -0
- package/skills/sdlc/sdlc-write-srs/workflow.md +139 -0
- package/skills/sdlc/srs/SKILL.md +44 -55
package/package.json
CHANGED
package/skills/sdlc/pack.yaml
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdlc-validate-srs
|
|
3
|
+
description: "Validate SRS — 8 dimensions, weighted scoring, parallel agents, GO/NO-GO. Triggers: 'validate srs', 'review srs', 'check srs'."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: "@ngocsangairvds/vsaf"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Follow the instructions in ./workflow.md.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Insurance Domain-Specific Validation Checklist
|
|
2
|
+
# Used by: step-v-08-risk-analysis.md (domain_patterns check)
|
|
3
|
+
# Source: Vietnam insurance regulations + industry best practices
|
|
4
|
+
|
|
5
|
+
policy_lifecycle:
|
|
6
|
+
- id: INS-PL-01
|
|
7
|
+
check: "Cooling-off period specified with exact days and refund calculation"
|
|
8
|
+
severity: HIGH
|
|
9
|
+
applies_to: [FR10]
|
|
10
|
+
regulation: "Thông tư 50/2017/TT-BTC"
|
|
11
|
+
- id: INS-PL-02
|
|
12
|
+
check: "Grace period for premium payment defined (typically 30-60 days)"
|
|
13
|
+
severity: HIGH
|
|
14
|
+
applies_to: [FR10]
|
|
15
|
+
- id: INS-PL-03
|
|
16
|
+
check: "Policy reinstatement rules after lapse (re-UW required?)"
|
|
17
|
+
severity: MEDIUM
|
|
18
|
+
applies_to: [FR10]
|
|
19
|
+
- id: INS-PL-04
|
|
20
|
+
check: "Endorsement effective date rules (retroactive allowed?)"
|
|
21
|
+
severity: MEDIUM
|
|
22
|
+
applies_to: [FR10]
|
|
23
|
+
- id: INS-PL-05
|
|
24
|
+
check: "Policy certificate must include: insurer name, coverage, exclusions, effective dates"
|
|
25
|
+
severity: HIGH
|
|
26
|
+
applies_to: [FR10]
|
|
27
|
+
regulation: "Nghị định 73/2016/NĐ-CP"
|
|
28
|
+
|
|
29
|
+
claims_processing:
|
|
30
|
+
- id: INS-CL-01
|
|
31
|
+
check: "Subrogation/recovery rights specified after claim payment"
|
|
32
|
+
severity: MEDIUM
|
|
33
|
+
applies_to: [FR11]
|
|
34
|
+
- id: INS-CL-02
|
|
35
|
+
check: "Claims appeal/dispute process documented (right to appeal within N days)"
|
|
36
|
+
severity: HIGH
|
|
37
|
+
applies_to: [FR11]
|
|
38
|
+
regulation: "Thông tư 50/2017/TT-BTC"
|
|
39
|
+
- id: INS-CL-03
|
|
40
|
+
check: "Pre-existing condition exclusion handling for health products"
|
|
41
|
+
severity: HIGH
|
|
42
|
+
applies_to: [FR11]
|
|
43
|
+
- id: INS-CL-04
|
|
44
|
+
check: "Waiting period enforcement for claims (addon effective date check)"
|
|
45
|
+
severity: HIGH
|
|
46
|
+
applies_to: [FR11]
|
|
47
|
+
- id: INS-CL-05
|
|
48
|
+
check: "FNOL time limit specified (incident date to submission deadline)"
|
|
49
|
+
severity: MEDIUM
|
|
50
|
+
applies_to: [FR11]
|
|
51
|
+
|
|
52
|
+
pricing_underwriting:
|
|
53
|
+
- id: INS-PU-01
|
|
54
|
+
check: "CTPL (bắt buộc TNDS) pricing follows regulated rate table per Nghị định 03"
|
|
55
|
+
severity: CRITICAL
|
|
56
|
+
applies_to: [FR5, FR6, FR8]
|
|
57
|
+
regulation: "Nghị định 03/2021/NĐ-CP"
|
|
58
|
+
- id: INS-PU-02
|
|
59
|
+
check: "UW decline reason codes are human-readable and actionable for customer"
|
|
60
|
+
severity: HIGH
|
|
61
|
+
applies_to: [FR8]
|
|
62
|
+
- id: INS-PU-03
|
|
63
|
+
check: "Anti-selection rules (e.g., health product age limits, pre-existing conditions)"
|
|
64
|
+
severity: HIGH
|
|
65
|
+
applies_to: [FR5, FR8]
|
|
66
|
+
- id: INS-PU-04
|
|
67
|
+
check: "Pricing fairness disclosure (explain factors affecting premium to customer)"
|
|
68
|
+
severity: MEDIUM
|
|
69
|
+
applies_to: [FR5]
|
|
70
|
+
regulation: "PDPA Vietnam"
|
|
71
|
+
|
|
72
|
+
payment_settlement:
|
|
73
|
+
- id: INS-PS-01
|
|
74
|
+
check: "Premium refund calculation method specified (pro-rata, short-rate, full)"
|
|
75
|
+
severity: HIGH
|
|
76
|
+
applies_to: [FR9, FR10]
|
|
77
|
+
- id: INS-PS-02
|
|
78
|
+
check: "Take-rate / commission split transparency for regulatory reporting"
|
|
79
|
+
severity: MEDIUM
|
|
80
|
+
applies_to: [FR9, FR17]
|
|
81
|
+
- id: INS-PS-03
|
|
82
|
+
check: "Escrow model regulatory approval documented (ISA license requirement)"
|
|
83
|
+
severity: HIGH
|
|
84
|
+
applies_to: [FR9]
|
|
85
|
+
|
|
86
|
+
compliance:
|
|
87
|
+
- id: INS-CP-01
|
|
88
|
+
check: "Data retention periods comply with Luật An ninh mạng (≥5 years for financial)"
|
|
89
|
+
severity: HIGH
|
|
90
|
+
applies_to: [FR14, FR15]
|
|
91
|
+
regulation: "Luật An ninh mạng 2018"
|
|
92
|
+
- id: INS-CP-02
|
|
93
|
+
check: "Cross-border data transfer restrictions documented (data residency Vietnam)"
|
|
94
|
+
severity: HIGH
|
|
95
|
+
applies_to: [FR15]
|
|
96
|
+
regulation: "Nghị định 13/2023/NĐ-CP (PDPA)"
|
|
97
|
+
- id: INS-CP-03
|
|
98
|
+
check: "Customer consent granularity matches PDPA requirements"
|
|
99
|
+
severity: HIGH
|
|
100
|
+
applies_to: [FR1, FR15]
|
|
101
|
+
|
|
102
|
+
multi_tenant:
|
|
103
|
+
- id: INS-MT-01
|
|
104
|
+
check: "Insurer data isolation guaranteed (no cross-tenant data leakage)"
|
|
105
|
+
severity: CRITICAL
|
|
106
|
+
applies_to: [FR14]
|
|
107
|
+
- id: INS-MT-02
|
|
108
|
+
check: "Per-insurer product configuration does not affect other insurers"
|
|
109
|
+
severity: HIGH
|
|
110
|
+
applies_to: [FR6]
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Grep Pattern Library — sdlc-validate-srs
|
|
2
|
+
# SRS-specific patterns + Vietnamese language patterns
|
|
3
|
+
# Extends: .claude/skills/bmad-validate-prd/data/grep-patterns.yaml (for shared patterns)
|
|
4
|
+
# Used by: step-v-05-quality.md, step-v-03-completeness.md, step-v-04-consistency.md
|
|
5
|
+
|
|
6
|
+
vague_vietnamese:
|
|
7
|
+
description: "Vietnamese ambiguous/non-mandatory language in requirements — flag in BRs, NFRs, ACs"
|
|
8
|
+
severity_thresholds:
|
|
9
|
+
critical: 10
|
|
10
|
+
warning: 5
|
|
11
|
+
pass: 0
|
|
12
|
+
patterns:
|
|
13
|
+
- pattern: "\\bcó thể\\b|\\bnên\\b|\\bthường\\b|\\btùy trường hợp\\b|\\btùy theo\\b"
|
|
14
|
+
category: conditional_language
|
|
15
|
+
- pattern: "\\bmột số\\b|\\bphù hợp\\b|\\bthích hợp\\b|\\bhợp lý\\b"
|
|
16
|
+
category: vague_quantity
|
|
17
|
+
- pattern: "\\bTBD\\b|\\bTODO\\b|\\bcần xác nhận\\b|\\bsẽ bổ sung\\b"
|
|
18
|
+
category: placeholder
|
|
19
|
+
- pattern: "\\{\\{[^}]*\\}\\}"
|
|
20
|
+
category: template_placeholder
|
|
21
|
+
- pattern: "\\bv\\.v\\.\\b|\\betc\\.\\b|\\bvà các\\b.{0,20}\\bkhác\\b"
|
|
22
|
+
category: open_ended_list
|
|
23
|
+
|
|
24
|
+
vague_english:
|
|
25
|
+
description: "English ambiguous terms in SRS (mixed-language docs)"
|
|
26
|
+
patterns:
|
|
27
|
+
- pattern: "\\bshould\\b|\\bmay\\b|\\bmight\\b|\\bcould\\b|\\bpossibly\\b"
|
|
28
|
+
category: non_mandatory
|
|
29
|
+
- pattern: "\\busually\\b|\\btypically\\b|\\bgenerally\\b|\\bnormally\\b"
|
|
30
|
+
category: conditional
|
|
31
|
+
- pattern: "\\bsomething like\\b|\\bsimilar to\\b|\\bif possible\\b"
|
|
32
|
+
category: vague_scope
|
|
33
|
+
|
|
34
|
+
ac_format:
|
|
35
|
+
description: "Acceptance Criteria format patterns"
|
|
36
|
+
patterns:
|
|
37
|
+
- pattern: "\\bGiven\\b.{1,300}\\bWhen\\b.{1,300}\\bThen\\b"
|
|
38
|
+
category: gherkin_gwt
|
|
39
|
+
multiline: true
|
|
40
|
+
- pattern: "\\bKhi\\b.{1,300}\\bThì\\b|\\bNếu\\b.{1,300}\\bkết quả\\b"
|
|
41
|
+
category: vietnamese_conditional_ac
|
|
42
|
+
multiline: true
|
|
43
|
+
- pattern: "AC-[A-Z]{2}-\\d{2}-\\d{3}|AC-\\d+"
|
|
44
|
+
category: ac_id_pattern
|
|
45
|
+
|
|
46
|
+
srs_structure:
|
|
47
|
+
description: "SRS section heading patterns for existence checks"
|
|
48
|
+
patterns:
|
|
49
|
+
# Core required sections
|
|
50
|
+
- pattern: "^## 1\\.|^## 1 |^## Mô tả chung|^## Overview|^## Tổng quan"
|
|
51
|
+
category: section_overview
|
|
52
|
+
- pattern: "^### 1\\.1|Tóm tắt Use Cases|Use Case Summary"
|
|
53
|
+
category: section_uc_summary
|
|
54
|
+
- pattern: "^### 1\\.2|Định nghĩa|Từ viết tắt|Glossary"
|
|
55
|
+
category: section_glossary
|
|
56
|
+
- pattern: "^### 1\\.3|Tài liệu tham chiếu|References"
|
|
57
|
+
category: section_references
|
|
58
|
+
- pattern: "^## 3\\.|^## 3 |Bảng.*Thực thể|ERD|Entity.*Relationship"
|
|
59
|
+
category: section_erd
|
|
60
|
+
- pattern: "^## 4\\.|^## 4 |Danh sách mã lỗi|Error Codes|Mã lỗi"
|
|
61
|
+
category: section_error_codes
|
|
62
|
+
- pattern: "^## 5\\.|^## 5 |Chức năng ảnh hưởng|Impact|Tác động"
|
|
63
|
+
category: section_impact
|
|
64
|
+
- pattern: "^## 6\\.|^## 6 |Business Rules|Quy tắc nghiệp vụ"
|
|
65
|
+
category: section_business_rules
|
|
66
|
+
- pattern: "^## 7\\.|^## 7 |Yêu cầu phi chức năng|Non-Functional|NFR"
|
|
67
|
+
category: section_nfr
|
|
68
|
+
- pattern: "^## 8\\.|^## 8 |Ràng buộc|Giả định|Phụ thuộc|Dependencies|Constraints"
|
|
69
|
+
category: section_dependencies
|
|
70
|
+
- pattern: "^## 9\\.|^## 9 |State Diagram|Sơ đồ trạng thái|Không áp dụng"
|
|
71
|
+
category: section_state_diagrams
|
|
72
|
+
- pattern: "^## 10\\.|^## 10 |Ma trận truy xuất|Traceability|RTM|Mini-RTM"
|
|
73
|
+
category: section_traceability
|
|
74
|
+
# UC structure patterns
|
|
75
|
+
- pattern: "Màn hình|Screens|SCR-"
|
|
76
|
+
category: uc_screens
|
|
77
|
+
- pattern: "@startuml.*@enduml|sequenceDiagram"
|
|
78
|
+
category: uc_sequence_diagram
|
|
79
|
+
multiline: true
|
|
80
|
+
- pattern: "Bảng mô tả luồng|Luồng chính|Main Flow|Luồng nghiệp vụ"
|
|
81
|
+
category: uc_flow_table
|
|
82
|
+
# Edge case / AC coverage
|
|
83
|
+
- pattern: "Luồng ngoại lệ|Exception Flow|Luồng thay thế|Alternative Flow"
|
|
84
|
+
category: exception_flow
|
|
85
|
+
- pattern: "Acceptance Criteria|Tiêu chí chấp nhận|AC-"
|
|
86
|
+
category: acceptance_criteria
|
|
87
|
+
|
|
88
|
+
id_patterns:
|
|
89
|
+
description: "ID format validation patterns for SRS artifacts"
|
|
90
|
+
patterns:
|
|
91
|
+
- pattern: "UC-[A-Z]{2,4}-\\d{2}"
|
|
92
|
+
category: uc_id_valid
|
|
93
|
+
- pattern: "SCR-[A-Z]{2,4}-\\d{2}"
|
|
94
|
+
category: screen_id_valid
|
|
95
|
+
- pattern: "BR-[A-Z]{2,4}-\\d{3}|BR-\\d{3}"
|
|
96
|
+
category: br_id_valid
|
|
97
|
+
- pattern: "\\bUC-[a-z]|\\bSCR-[a-z]|\\bBR-[a-z]"
|
|
98
|
+
category: id_lowercase_violation
|
|
99
|
+
|
|
100
|
+
diagram_syntax:
|
|
101
|
+
description: "PlantUML and Mermaid diagram validation"
|
|
102
|
+
patterns:
|
|
103
|
+
- pattern: "@startuml"
|
|
104
|
+
category: plantuml_open
|
|
105
|
+
- pattern: "@enduml"
|
|
106
|
+
category: plantuml_close
|
|
107
|
+
- pattern: "stateDiagram-v2|stateDiagram"
|
|
108
|
+
category: mermaid_state
|
|
109
|
+
- pattern: "\\{\\{[^}]*\\}\\}"
|
|
110
|
+
category: unfilled_placeholder_in_diagram
|
|
111
|
+
|
|
112
|
+
service_references:
|
|
113
|
+
description: "Service name patterns referenced in SRS flows/sequence diagrams"
|
|
114
|
+
patterns:
|
|
115
|
+
- pattern: "ntbh-[a-z]+-service|[a-z]+-service(?!s)"
|
|
116
|
+
category: service_name
|
|
117
|
+
- pattern: "kong-gateway|kafka|redis|keycloak"
|
|
118
|
+
category: infra_component
|
|
119
|
+
|
|
120
|
+
state_machine:
|
|
121
|
+
description: "State extraction patterns from state diagrams and state tables"
|
|
122
|
+
patterns:
|
|
123
|
+
- pattern: "\\[\\*\\]\\s*-->\\s*(\\w+)|state\\s+\"([^\"]+)\"|:\\s*(\\w+)\\s*$"
|
|
124
|
+
category: plantuml_state
|
|
125
|
+
- pattern: "^\\s*[A-Z_]+\\s*-->|^\\s*(\\w+)\\s*:\\s*on\\s+"
|
|
126
|
+
category: state_transition
|
|
127
|
+
- pattern: "Trạng thái|Tên trạng thái|State Name|Status"
|
|
128
|
+
category: state_table_header
|
|
129
|
+
|
|
130
|
+
upstream_extraction:
|
|
131
|
+
description: "Patterns for extracting structured artifacts from upstream docs (BRD, PRD, Architecture). Used by V-02 6e and V-04 2.14 to diff SRS vs upstream."
|
|
132
|
+
patterns:
|
|
133
|
+
# Entity table field rows — "| N | field_name | TYPE | required | description |"
|
|
134
|
+
- pattern: "^\\|\\s*\\d+\\s*\\|\\s*(\\w+)\\s*\\|\\s*(\\w[^|]*)\\|"
|
|
135
|
+
category: entity_field_row
|
|
136
|
+
# ENUM values in entity tables — "SUBMITTED / UNDER_REVIEW / ..."
|
|
137
|
+
- pattern: "\\|\\s*ENUM\\s*\\|[^|]*\\|\\s*([^|]+)\\|"
|
|
138
|
+
category: entity_enum_values
|
|
139
|
+
# State flow in Vietnamese business text — "Trạng thái: A → B → C"
|
|
140
|
+
- pattern: "Trạng thái[^:]*:\\s*(.+(?:→|->).+)"
|
|
141
|
+
category: state_flow_text
|
|
142
|
+
# State chains in English — "SUBMITTED->DOCUMENTS_PENDING->IN_REVIEW->..."
|
|
143
|
+
- pattern: "[A-Z][A-Z_]+(?:->|→)[A-Z][A-Z_]+(?:(?:->|→)[A-Z][A-Z_]+)*"
|
|
144
|
+
category: state_chain
|
|
145
|
+
# Kafka/event topic names — "claim.submitted", "payment.completed"
|
|
146
|
+
- pattern: "\\b[a-z]+\\.(?:submitted|approved|rejected|completed|created|updated|cancelled|disbursed|expired|failed|processing|changed)\\b"
|
|
147
|
+
category: kafka_event_name
|
|
148
|
+
# Actor names in table rows — "| Actor_Name |" or "| Ai thực hiện |" column values
|
|
149
|
+
- pattern: "\\|\\s*(Policyholder|Claims Examiner|System|Admin|Platform|Insurer|Customer|Agent|CSKH)\\s*\\|"
|
|
150
|
+
category: actor_name_in_table
|
|
151
|
+
# Phase assignment — "MVP", "Phase 1.5", "Phase 2"
|
|
152
|
+
- pattern: "\\b(?:MVP|Phase [12](?:\\.5)?|Bắt buộc|Nên có)\\b"
|
|
153
|
+
category: phase_assignment
|
|
154
|
+
# API endpoint paths
|
|
155
|
+
- pattern: "(?:GET|POST|PUT|PATCH|DELETE)\\s+/api/v\\d+/[\\w/{}]+"
|
|
156
|
+
category: api_endpoint
|
|
157
|
+
# PlantUML state declarations + transitions (reuse works on BRD diagrams too)
|
|
158
|
+
# Already covered by state_machine group — reference those patterns
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# SRS Review — Glossary & Mô tả
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 1. REVIEW DIMENSIONS — Các chiều đánh giá
|
|
6
|
+
|
|
7
|
+
| Dimension | Mô tả | Weight |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| Completeness | Kiểm tra tính đầy đủ: có Overview, Use Cases, AC, NFRs, ERD, Business Rules, Error Codes, Dependencies, Traceability không? | 1.0 |
|
|
10
|
+
| Consistency | Kiểm tra tính nhất quán giữa các file: entity naming, UC ID prefix, state machine, data model, API patterns, terminology. | 1.0 |
|
|
11
|
+
| Quality | Kiểm tra chất lượng viết: ngôn ngữ mơ hồ (TBD, có thể), testability, AC format, duplicate requirements, scope clarity. | 1.0 |
|
|
12
|
+
| Readiness | Đánh giá mức độ sẵn sàng implement: API contracts, DB schema, error codes, state machines, integration specs, tech stack. | 1.0 |
|
|
13
|
+
| Risk | Đánh giá rủi ro kinh doanh: flow completeness (create→delete), external dependencies, integration gaps, scope creep, assumptions. | 0.8 |
|
|
14
|
+
| User Impact | Đánh giá tác động người dùng: persona coverage, journey completeness, error UX, onboarding, accessibility. | 0.7 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. SEVERITY LEVELS — Mức độ nghiêm trọng
|
|
19
|
+
|
|
20
|
+
| Severity | Mô tả | Hành động |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| CRITICAL | Block implementation — dev không thể implement mà không có câu trả lời hoặc spec bổ sung. | Phải sửa TRƯỚC khi bắt đầu Sprint |
|
|
23
|
+
| HIGH | Nên clarify sớm — có thể implement nhưng risk rework hoặc bugs. | Nên sửa trong Sprint 1 |
|
|
24
|
+
| MEDIUM | Nice to fix — không block nhưng improve quality, UX, maintainability. | Phân bổ vào Sprint 2 |
|
|
25
|
+
| LOW | Minor — pass hoặc cải thiện nhỏ. | Fix khi có thời gian |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 3. QUESTION CATEGORIES — Phân loại câu hỏi
|
|
30
|
+
|
|
31
|
+
| Category | Mô tả | Ví dụ |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| flow-gap | Thiếu luồng xử lý đối xứng/bổ sung (có create nhưng thiếu delete/cancel/refund). | Payment có create nhưng thiếu refund. Policy có cancel nhưng thiếu reinstate. |
|
|
34
|
+
| ambiguity | Requirement mơ hồ, cần PO/stakeholder quyết định. | Figma cho skip CCCD, SRS yêu cầu bắt buộc — chọn cái nào? |
|
|
35
|
+
| cross-doc-conflict | Mâu thuẫn giữa PRD/System spec/SRS feature files. | System spec dùng UC-IP cho FR-8, SRS FR-8 dùng UC-PU. |
|
|
36
|
+
| domain-inference | Từ domain knowledge, thiếu flow thường gặp trong ngành bảo hiểm. | Grace period: claims allowed hay không? Endorsement reject: resubmit được không? |
|
|
37
|
+
| missing-spec | Flow/entity đề cập nhưng thiếu spec chi tiết để implement. | Kafka events mention xuyên suốt nhưng không có payload schema. |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 4. ITEM IDs — Mã định danh findings
|
|
42
|
+
|
|
43
|
+
| Pattern | Mô tả | Ví dụ |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| has_* | Auto-check: kiểm tra section/content tồn tại trong document. | has_overview, has_nfrs, has_traceability, has_dependencies |
|
|
46
|
+
| no_ambiguous_language | Auto-check: tìm từ mơ hồ (TBD, should, có thể, etc.). | Tìm thấy 15 ambiguous terms trong prd.md |
|
|
47
|
+
| entity_naming | Auto-check: entity naming consistency across files. | entity_naming — kiểm tra cùng concept dùng cùng tên |
|
|
48
|
+
| deployment_requirements | Auto-check: có section Deployment/Infrastructure không. | Không tìm thấy section Deployment trong PRD |
|
|
49
|
+
| dependency_risk | Auto-check: external dependencies documented. | Không có section Dependencies/Third-party |
|
|
50
|
+
| acceptance_criteria_format | Auto-check: AC theo format Given/When/Then. | AC không có GWT format |
|
|
51
|
+
| clear_scope | Auto-check: có section phạm vi/ngoài phạm vi. | Không có section In-scope/Out-of-scope |
|
|
52
|
+
| no_duplicate_requirements | Auto-check: requirements trùng lặp giữa các file. | Consent spec overlap giữa FR-1 và FR-15 |
|
|
53
|
+
| api_contracts_defined | LLM-check: API contracts đầy đủ request/response schema. | Endpoints listed nhưng thiếu JSON schema |
|
|
54
|
+
| api_naming_pattern | LLM-check: API prefix nhất quán. | FR10 dùng /v1/ trong khi các FR khác dùng /api/v1/ |
|
|
55
|
+
| db_schema_specified | LLM-check: DB schema đầy đủ field types, PKs, FKs. | BIGINT PKs vs UUID v7 conflict |
|
|
56
|
+
| data_model_fields | LLM-check: entity fields nhất quán giữa các files. | Policy entity 13 fields vs 9 fields giữa FR10 và System |
|
|
57
|
+
| no_contradictions | LLM-check: không có mâu thuẫn nội dung giữa các files. | State machine 14 states vs 7 states |
|
|
58
|
+
| terminology_consistent | LLM-check: thuật ngữ dùng nhất quán. | Customer vs User vs Khách hàng cho cùng concept |
|
|
59
|
+
| error_handling_defined | LLM-check: error handling đầy đủ. | Không có central error code registry |
|
|
60
|
+
| uc-id-*-mismatch | LLM-check: UC ID prefix không khớp giữa System spec và SRS file. | uc-id-purchase-mismatch: UC-IP vs UC-PU |
|
|
61
|
+
| policy-* | LLM-check: Policy lifecycle/state machine issues. | policy-creation-flow-inconsistency |
|
|
62
|
+
| srs-completeness-* | LLM-check: SRS file completeness per module. | srs-completeness-fr9: FR-9 thiếu ERD |
|
|
63
|
+
| llm-* | LLM-check: semantic analysis results. | llm-missing-refund-spec, llm-testability-uw-timeout |
|
|
64
|
+
| risk-* | LLM-check: business risk assessment. | risk-refund-flow-missing |
|
|
65
|
+
| ui-* | LLM-check: user impact assessment. | ui-accessibility-missing |
|
|
66
|
+
| tech_stack_consistent | LLM-check: DB/broker/cache technology nhất quán giữa files. | MongoDB vs MariaDB vs PostgreSQL cho cùng entity |
|
|
67
|
+
| pk_fk_type_consistent | LLM-check: PK/FK type nhất quán theo canonical model. | BIGINT PKs vs UUID v7 conflict |
|
|
68
|
+
| canonical_model_match | LLM-check: feature SRS fields khớp System SRS canonical model. | Policy entity 13 fields (FR10) vs 9 fields (System) |
|
|
69
|
+
| currency_type_convention | LLM-check: currency fields thống nhất convention. | DECIMAL vs BIGINT (đơn vị nhỏ nhất) |
|
|
70
|
+
| cross_file_state_machine_match | LLM-check: state machine feature SRS khớp System SRS. | Claim 14 states (FR11) vs 7 states (System) |
|
|
71
|
+
| event_payload_schema | LLM-check: Kafka/event payload có schema đầy đủ. | Event mentioned nhưng không có payload fields/types |
|
|
72
|
+
| *-implementation-ready | LLM-check: module readiness to implement. | fr1-implementation-ready |
|
|
73
|
+
| br_assumptions_confirmed | LLM-check (V-02): BR không được viết dựa trên quyết định business chưa được confirm. Contradiction: luồng đã cứng hoá nhưng file ghi "câu hỏi cần confirm". | BR-PL-023 viết sẵn grace period behavior nhưng file ghi "cần business confirm" |
|
|
74
|
+
| downstream_event_consumers | LLM-check (V-03): mỗi event được publish phải có downstream consumers và side effects được mô tả. | PaymentCompletedEvent không có promotion-service consumer |
|
|
75
|
+
| cancellation_subflows_by_context | LLM-check (V-03): nếu có cooling-off concept, phải có nhánh huỷ riêng (trong/ngoài cooling-off) và ngày tính refund phải rõ ràng. | Chỉ có 1 luồng huỷ không phân biệt cooling-off |
|
|
76
|
+
| service_ownership_consistent | LLM-check (V-04): entity/resource phải được giao cho cùng service nhất quán cross-file. | Voucher validate: pricing-service (FR8) vs promotion-service (FR7, FR17) |
|
|
77
|
+
| api_contract_param_match | LLM-check (V-04): params trong SRS call phải match params required trong API contract. | FR7 gọi /vouchers/best?productId={id} nhưng contract yêu cầu userId+productId+premium |
|
|
78
|
+
| currency_unit_intra_section | LLM-check (V-04): không trộn đơn vị tiền trong cùng entity/breakdown section. | discount_amount=50000 đồng cạnh premium=5000000 cents trong cùng entity |
|
|
79
|
+
| state_name_uc_vs_diagram | LLM-check (V-04): state names trong UC flow steps phải khớp với nodes trong State Diagram. | UC dùng PENDING_ACTIVATION nhưng diagram chỉ có PENDING_ISSUANCE |
|
|
80
|
+
| referenced_fr_exists | LLM-check (V-04): FR được tham chiếu trong SRS phải tồn tại trong FR inventory. | "cross-insurer fallback (FR29)" — FR29 không tồn tại |
|
|
81
|
+
| upstream_artifact_alignment | LLM-check (V-02): Mọi structured artifact trong SRS (entity enums, fields, actors, phases, BR references) phải traceable về BRD/PRD. Diff: additions, removals, renames, type mismatches. Silent drops = CRITICAL, inventions = HIGH, naming divergence = HIGH. | BRD: 7 claim states (PAID); SRS: 11 states (thêm DISPUTED, tách PAID→DISBURSING+COMPLETED) — SRS refines nhưng phải documented |
|
|
82
|
+
| upstream_structural_consistency | LLM-check (V-04): SRS structural artifacts (state machines, transitions, field schemas, API paths, Kafka events) phải consistent với BRD state diagrams + Architecture event catalog + PRD AC state names. Transition order conflicts, field type mismatches, event coverage gaps = HIGH+. | BRD: UNDER_REVIEW→PROCESSING; SRS: PROCESSING→UNDER_REVIEW (reversed). PRD AC: DOCUMENTS_PENDING; SRS: DOCS_REQUIRED (name mismatch) |
|
|
83
|
+
| rules_self_explanatory | LLM-check (V-05): mỗi rule phải self-explanatory không cần PO interpret, tránh undefined terms. | "not exposed until acceptance" — acceptance không được định nghĩa |
|
|
84
|
+
| async_sla_defined | LLM-check (V-07): mỗi async flow phải có SLA timeout + escalation path + behavior khi quá SLA. | Endorsement treo ở INSURER_PROCESSING vô thời hạn vì không có timeout |
|
|
85
|
+
| auth_method_mapping | LLM-check (V-07): API spec phải có bảng mapping actor/channel → auth method. | "5 phương thức xác thực" nhưng không nói ai dùng cái nào |
|
|
86
|
+
| configurable_thresholds_flagged | LLM-check (V-07): threshold/config values phải đánh dấu configurable, không hardcode trong spec. | OCR threshold 0.85 hardcode thay vì configurable per insurer |
|
|
87
|
+
| error_code_edge_states | LLM-check (V-07): phải có error codes cho cross-state edge cases (action X trên entity ở state Y). | Không có mã lỗi cho: gia hạn HĐ đã quá grace, huỷ HĐ đang LAPSED, quote expired |
|
|
88
|
+
| insurer_rejection_rollback | LLM-check (V-08): mỗi flow gọi insurer phải có nhánh insurer từ chối + rollback. | Renewal assume insurer luôn accept — không có rejection path |
|
|
89
|
+
| platform_insurer_sync_gap_risk | LLM-check (V-08): khi platform confirm trước insurer sync, phải định nghĩa trách nhiệm trong gap. | KH nhận "kích hoạt thành công" nhưng insurer chưa ghi nhận — claim trong 15 phút đó? |
|
|
90
|
+
| concurrent_operation_conflict | LLM-check (V-08): nếu cho phép concurrent ops, phải có conflict resolution rule. | Nhiều endorsements đồng thời — delta premium tính thế nào? |
|
|
91
|
+
| dlq_alert_action_defined | LLM-check (V-08): DLQ/webhook failure phải có action plan, không chỉ "alert admin". | Webhook EXPIRED → alert admin → admin làm gì? bấm retry ở đâu? |
|
|
92
|
+
| pre_payment_benefit_disclosure | LLM-check (V-09): KH phải được acknowledge nếu thanh toán cho quyền lợi có waiting period / coverage gap. | Add-on waiting period: KH trả tiền hôm nay nhưng coverage từ ngày X — không có acknowledge step |
|
|
93
|
+
| auto_financial_action_advance_notice | LLM-check (V-09): mọi hành động tài chính tự động phải có thông báo advance cho KH. | Auto-renewal trừ tiền mà KH không nhận được thông báo trước (mâu thuẫn PRD AC39.4) |
|
|
94
|
+
| async_wait_ux | LLM-check (V-09): khi KH chờ async processing, phải mô tả UX: KH thấy gì, có thể huỷ không, nhận gì khi timeout. | Đang mua BH chờ UW: "đang xử lý" — KH làm gì? Có nút Huỷ không? |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 5. SCORING — Cách tính điểm
|
|
99
|
+
|
|
100
|
+
| Metric | Mô tả | Giá trị |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| Score per finding | 1.0 = pass, 0.5 = partial, 0.0 = fail | |
|
|
103
|
+
| Dimension score | Trung bình weighted của tất cả findings trong dimension | OK >= 80%, WARN 60-79%, FAIL < 60% |
|
|
104
|
+
| Overall score | Weighted average: completeness/consistency/quality/readiness x 1.0, risk x 0.8, user-impact x 0.7 | |
|
|
105
|
+
| Source: auto | Kiểm tra tự động — structure, keyword, section check | |
|
|
106
|
+
| Source: llm | LLM agent phân tích semantic — cross-reference, testability, flow gaps, contradictions | |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 6. AUTO-CHECK ITEMS — Kiểm tra tự động theo SRS template
|
|
111
|
+
|
|
112
|
+
### 6.1 Completeness — Section existence checks
|
|
113
|
+
|
|
114
|
+
| Item ID | Check | Section trong template | Severity |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| has_overview | Section "1. Mô tả chung" tồn tại với đầy đủ fields | Section 1 | CRITICAL |
|
|
117
|
+
| has_use_case_summary | Bảng "1.1 Tóm tắt Use Cases" có data | Section 1.1 | CRITICAL |
|
|
118
|
+
| has_glossary | Section "1.2 Định nghĩa & Từ viết tắt" | Section 1.2 | MEDIUM |
|
|
119
|
+
| has_references | Section "1.3 Tài liệu tham chiếu" | Section 1.3 | MEDIUM |
|
|
120
|
+
| has_uc_screens | Mỗi UC có subsection "Màn hình" với bảng controls | Section 2.X.1 | CRITICAL |
|
|
121
|
+
| has_uc_sequence | Mỗi UC có Sequence Diagram (PlantUML) | Section 2.X.2 | CRITICAL |
|
|
122
|
+
| has_uc_flow_table | Mỗi UC có Bảng mô tả luồng nghiệp vụ | Section 2.X.2 | CRITICAL |
|
|
123
|
+
| has_erd | Section "3. Bảng/Thực thể liên quan" có ER diagram | Section 3 | HIGH |
|
|
124
|
+
| has_error_codes | Section "4. Danh sách mã lỗi" | Section 4 | HIGH |
|
|
125
|
+
| has_impact | Section "5. Chức năng ảnh hưởng" | Section 5 | MEDIUM |
|
|
126
|
+
| has_business_rules | Section "6. Business Rules tổng hợp" | Section 6 | HIGH |
|
|
127
|
+
| has_nfrs | Section "7. Yêu cầu phi chức năng" | Section 7 | MEDIUM |
|
|
128
|
+
| has_dependencies | Section "8. Ràng buộc, Giả định & Phụ thuộc" | Section 8 | HIGH |
|
|
129
|
+
| has_state_diagrams | Section "9. State Diagrams" hoặc ghi "Không áp dụng" | Section 9 | MEDIUM |
|
|
130
|
+
| has_traceability | Section "10. Ma trận truy xuất (Mini-RTM)" | Section 10 | HIGH |
|
|
131
|
+
| has_edge_cases | Luồng ngoại lệ/exception flows rõ ràng | Trong UC flows | MEDIUM |
|
|
132
|
+
| has_acceptance_criteria | Acceptance Criteria đo lường được | Per UC | HIGH |
|
|
133
|
+
|
|
134
|
+
### 6.2 Quality — Content quality checks
|
|
135
|
+
|
|
136
|
+
| Item ID | Check | Severity |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| no_ambiguous_language | Không có "có thể", "nên", "thường", "tùy trường hợp", TBD | HIGH |
|
|
139
|
+
| acceptance_criteria_format | AC theo Given/When/Then hoặc checklist measurable | HIGH |
|
|
140
|
+
| no_duplicate_requirements | Không trùng lặp requirements giữa các UC/files | MEDIUM |
|
|
141
|
+
| clear_scope | Có section phạm vi + ngoài phạm vi rõ ràng | HIGH |
|
|
142
|
+
| no_placeholder | Không còn {{...}}, TODO, TBD chưa xử lý | HIGH |
|
|
143
|
+
| consistent_language | Ngôn ngữ nhất quán (toàn VN hoặc toàn EN) | LOW |
|
|
144
|
+
| flow_step_numbering | Bảng mô tả luồng có đánh số bước liên tục | HIGH |
|
|
145
|
+
| diagram_syntax_valid | PlantUML/Mermaid syntax hợp lệ | CRITICAL |
|
|
146
|
+
|
|
147
|
+
### 6.3 Consistency — Cross-file checks (cần so sánh nhiều files)
|
|
148
|
+
|
|
149
|
+
| Item ID | Check | Severity |
|
|
150
|
+
|---|---|---|
|
|
151
|
+
| entity_naming | Entity names nhất quán giữa ER, bảng mô tả, luồng | CRITICAL |
|
|
152
|
+
| uc_id_pattern | UC ID tuân theo UC-FX-NN pattern | HIGH |
|
|
153
|
+
| screen_id_pattern | Screen ID tuân theo SCR-FX-NN pattern | HIGH |
|
|
154
|
+
| actor_naming | Actor names nhất quán | HIGH |
|
|
155
|
+
| api_naming_pattern | API endpoint prefix nhất quán (/api/v1/) | HIGH |
|
|
156
|
+
| state_naming | State names nhất quán giữa diagrams và bảng | HIGH |
|
|
157
|
+
| error_code_consistency | Error codes nhất quán giữa section 4 và flow steps | HIGH |
|
|
158
|
+
| br_code_consistency | Business Rule mã BR-XXX nhất quán | HIGH |
|
|
159
|
+
| terminology_consistent | Thuật ngữ thống nhất, không dùng lẫn lộn | MEDIUM |
|
|
160
|
+
| rtm_fr_match | FR IDs trong Mini-RTM khớp PRD source | HIGH |
|
|
161
|
+
| data_model_fields | Entity fields nhất quán giữa các files | CRITICAL |
|
|
162
|
+
| no_contradictions | Không mâu thuẫn nội dung giữa các files | CRITICAL |
|
|
163
|
+
| tech_stack_consistent | DB technology, message broker, cache nhất quán giữa các files cho cùng entity/module | CRITICAL |
|
|
164
|
+
| pk_fk_type_consistent | PK type (UUID v7 vs BIGINT vs SERIAL) và FK references nhất quán theo canonical model | HIGH |
|
|
165
|
+
| canonical_model_match | Entity fields trong feature SRS khớp System SRS canonical model (field count, field names, data types) | CRITICAL |
|
|
166
|
+
| currency_type_convention | Currency fields thống nhất convention: BIGINT (đơn vị nhỏ nhất) hoặc DECIMAL — không trộn lẫn | HIGH |
|
|
167
|
+
| cross_file_state_machine_match | State machine trong feature SRS khớp System SRS (state count, state names, transitions) | CRITICAL |
|
|
168
|
+
|
|
169
|
+
### 6.4 Readiness — Implementation readiness checks
|
|
170
|
+
|
|
171
|
+
| Item ID | Check | Severity |
|
|
172
|
+
|---|---|---|
|
|
173
|
+
| api_contracts_defined | API contracts: method, endpoint, request/response schema | CRITICAL |
|
|
174
|
+
| db_schema_specified | DB schema đầy đủ: field types, PKs, FKs | HIGH |
|
|
175
|
+
| error_handling_defined | Error codes: mã, message, HTTP status, step trigger | HIGH |
|
|
176
|
+
| state_machine_complete | State machine: transitions, guards, actions | HIGH |
|
|
177
|
+
| integration_specs | External API: format, auth, timeout, retry | HIGH |
|
|
178
|
+
| event_payload_schema | Kafka/event payload schema defined: topic, fields, types, version — không chỉ mention event name | CRITICAL |
|
|
179
|
+
| validation_rules | Input field validation: regex, range, format | HIGH |
|
|
180
|
+
| navigation_flow | Screen navigation rõ ràng: A → action → B | MEDIUM |
|
|
181
|
+
| mockup_reference | Mockup/wireframe reference cho mỗi màn hình | MEDIUM |
|
|
182
|
+
| br_implementable | Business rules có thể code trực tiếp | HIGH |
|
|
183
|
+
|
|
184
|
+
### 6.5 Risk — Risk assessment checks
|
|
185
|
+
|
|
186
|
+
| Item ID | Check | Severity |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| exception_flows_handled | Tất cả exception flows: network error, timeout, invalid data | HIGH |
|
|
189
|
+
| external_deps_fallback | External dependencies có fallback | HIGH |
|
|
190
|
+
| integration_gaps | Integration gaps giữa flows đã document | HIGH |
|
|
191
|
+
| scope_creep | Không có requirements vượt PRD scope | MEDIUM |
|
|
192
|
+
| assumptions_listed | Assumptions đã liệt kê và đánh dấu cần confirm | MEDIUM |
|
|
193
|
+
| concurrency_considered | Race condition scenarios đã xem xét | HIGH |
|
|
194
|
+
| migration_risk | Data migration risks đã xử lý (nếu thay flow cũ) | HIGH |
|
|
195
|
+
| security_risks | Authentication, authorization, data exposure | CRITICAL |
|
|
196
|
+
|
|
197
|
+
### 6.6 User Impact — User experience checks
|
|
198
|
+
|
|
199
|
+
| Item ID | Check | Severity |
|
|
200
|
+
|---|---|---|
|
|
201
|
+
| persona_coverage | Tất cả personas/actors trong PRD đã cover | HIGH |
|
|
202
|
+
| journey_complete | User journey hoàn chỉnh entry → completion | HIGH |
|
|
203
|
+
| error_ux | Error messages rõ ràng, có hướng dẫn xử lý | HIGH |
|
|
204
|
+
| onboarding | First-time experience đã xem xét | MEDIUM |
|
|
205
|
+
| loading_empty_states | Loading states, empty states đã mô tả | MEDIUM |
|
|
206
|
+
| accessibility | Accessibility considerations (nếu yêu cầu) | LOW |
|
|
207
|
+
| back_cancel_undo | Navigation back/cancel/undo đã xử lý | MEDIUM |
|
|
208
|
+
| destructive_confirmation | Confirmation dialogs cho destructive actions | MEDIUM |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 7. OUTPUT REPORT STRUCTURE
|
|
213
|
+
|
|
214
|
+
### Frontmatter
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
---
|
|
218
|
+
type: srs-validation-report
|
|
219
|
+
date: {date}
|
|
220
|
+
validator: BA Validate SRS Skill
|
|
221
|
+
scope: {single | batch | full}
|
|
222
|
+
files_reviewed: [list of files]
|
|
223
|
+
overall_score: {number}%
|
|
224
|
+
overall_status: {OK | WARN | FAIL}
|
|
225
|
+
stepsCompleted: []
|
|
226
|
+
---
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Report Sections
|
|
230
|
+
|
|
231
|
+
1. **Executive Summary** — Overall score, status, findings count by severity
|
|
232
|
+
2. **Per-Dimension Scorecard** — Table: dimension, weight, score, status, findings count
|
|
233
|
+
3. **Critical & High Findings** — Must-fix: #, severity, dimension, file, item_id, score, evidence, suggestion
|
|
234
|
+
4. **Medium & Low Findings** — Nice-to-fix items
|
|
235
|
+
5. **Unresolved Questions** — Questions needing PO/stakeholder decision: #, severity, dimension, category, question, context, related_files, impact, suggested_clarification
|
|
236
|
+
6. **Recommendations** — Prioritized action plan
|
|
237
|
+
7. **Appendix: Full Scoring Matrix** — All items with scores
|