@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.
Files changed (22) hide show
  1. package/package.json +1 -1
  2. package/skills/sdlc/pack.yaml +4 -0
  3. package/skills/sdlc/sdlc-validate-srs/SKILL.md +8 -0
  4. package/skills/sdlc/sdlc-validate-srs/data/domain-checklists/insurance.yaml +110 -0
  5. package/skills/sdlc/sdlc-validate-srs/data/grep-patterns-srs.yaml +158 -0
  6. package/skills/sdlc/sdlc-validate-srs/data/srs-review-glossary.md +237 -0
  7. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-01-discovery.md +280 -0
  8. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-02-business-alignment.md +351 -0
  9. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-03-completeness.md +353 -0
  10. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-04-consistency.md +352 -0
  11. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-05-quality.md +347 -0
  12. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-06-system-nfr.md +217 -0
  13. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-07-delivery-readiness.md +288 -0
  14. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-08-risk-analysis.md +283 -0
  15. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-09-user-impact.md +262 -0
  16. package/skills/sdlc/sdlc-validate-srs/steps-v/step-v-10-report.md +308 -0
  17. package/skills/sdlc/sdlc-validate-srs/workflow.md +269 -0
  18. package/skills/sdlc/sdlc-write-srs/SKILL.md +8 -0
  19. package/skills/sdlc/sdlc-write-srs/srs-feature-template.md +669 -0
  20. package/skills/sdlc/sdlc-write-srs/srs-system-template.md +430 -0
  21. package/skills/sdlc/sdlc-write-srs/workflow.md +139 -0
  22. package/skills/sdlc/srs/SKILL.md +44 -55
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngocsangairvds/vsaf",
3
- "version": "4.1.25",
3
+ "version": "4.1.27",
4
4
  "description": "logging step",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -60,3 +60,7 @@ bundled:
60
60
  - zoom-out
61
61
  - tdd
62
62
  - improve-codebase-architecture
63
+
64
+ # SRS writing + validation (replaces BMAD analyst + edge case hunter in Phase 4)
65
+ - sdlc-write-srs
66
+ - sdlc-validate-srs
@@ -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