Requirements Traceability Matrix
Requirements Traceability Matrix (RTM): {{PROJECT_NAME}}Drop — Fintech Payment App
Project:
{{PROJECT_NAME}}Drop — Remittance + QR Payments Version:{{VERSION}}1.0 Date:{{DATE}}2026-02-23 Author:{{AUTHOR}}John (AI Director) Status:Draft | In Review | ApprovedActive Reviewers:{{REVIEWERS}}Alem Bašić (CEO)
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | Initial |
1. Purpose of Traceability
The RequirementsRTM Traceabilitymaps Matrixrequirements servesthrough fourthe functions:full SDLC:
Business Requirement → Functional Requirement → User Story → Code → Test Cases
Functions:
- Coverage Assurance — Every business requirement has
an implementation path anda testcases - Change Impact — When
arequirement changes,quickly identifysee all affected code and tests - Gap Detection —
Identify requirementsRequirements with notests (coverage gap) ortests; tests with no requirements(scope creep) - Audit Trail — Demonstrates compliance
with processesforclientFinanstilsynetsign-off/andinvestorqualityduegatesdiligence
Traceability Directions:
Forward Traceability— BR → FR → Code → Test (did we build what was required?)Backward Traceability— Test → Code → FR → BR (does everything we built have a justification?)
2. Document References
| Document | Location | Version | Last Updated |
|---|---|---|---|
| Business Requirements Document |
|
||
| Functional Requirements Spec |
|
||
| Non-Functional Requirements | |
||
| User Stories | |
||
| Acceptance Criteria | |
||
| Testing Guide | ../../docs/testing/TESTING-GUIDE.md |
— | 2026-02-13 |
| Test Inventory | ../../docs/testing/TEST-INVENTORY.md |
— | 2026-02-13 |
| Test Plan | |
||
|
3. Forward Traceability Matrix
3.1 Functional Requirements Traceability
| BR ID | Business Requirement | FR ID | Functional Requirement | US ID | Code Module |
Unit Test | Integration Test | E2E Test | AC ID | Status | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| BR-001 | FR-001 | US-001 | |
api-routes.test.ts |
AC-001 | ||||||
| BR-001 | BankID identity verification | FR-002 | User Login | US-002 | src/app/api/auth/login/route.ts |
api-routes.test.ts | api-endpoints.test.ts | user-flows.spec.ts | AC-020 | ✅ Implemented | |
| BR-001 | BankID identity verification | FR-003 | Session Management | US-003 | src/app/api/auth/logout/route.ts |
api-routes.test.ts | api-routes.test.ts | full-flows.spec.ts | AC-021 | ✅ Implemented | |
| BR-002 | Minimum age 18 enforcement | FR- |
User Registration — DOB validation | US- |
src/app/api/auth/register/route.ts |
api-routes.test.ts | AC- |
||||
| BR-003 | Remittance to 30+ countries | FR- |
Send Money Remittance | US-010 | src/app/api/transactions/remittance/route.ts |
api-routes.test.ts | api-endpoints.test.ts | full-flows.spec.ts | AC-030 | ✅ Implemented | |
| BR-003 | Remittance to 30+ countries | FR-021 | Exchange Rates API | US-011 | src/app/api/rates/route.ts |
api-routes.test.ts | api-endpoints.test.ts | user-flows.spec.ts | AC-050 | ✅ Implemented | |
| BR-003 | Remittance to 30+ countries | FR-022 | Recipients Management | US-012 | src/app/api/recipients/route.ts |
api-routes.test.ts | api-endpoints.test.ts | — | — | ✅ Implemented | |
| BR-004 | QR merchant payments at 1% | FR- |
QR Payment Consumer Flow | US- |
src/app/api/transactions/qr-payment/route.ts |
api-routes.test.ts | api-endpoints.test.ts | full-flows.spec.ts | AC-060 | ✅ Implemented | |
| BR-004 | QR merchant payments at 1% | FR-031 | Merchant Registration + QR | US-021 | src/app/api/merchants/route.ts |
api-routes.test.ts | api-endpoints.test.ts | — | AC-070 | ✅ Implemented | |
| BR-005 | PSD2 pass-through model | FR- |
US- | 001 |
src/ (schema) |
— | AC- |
||||
| BR-006 | Merchant self-service onboarding | FR- |
US-021 | |
api-routes.test.ts |
AC- |
|||||
| BR-007 | GDPR compliance | FR-070 | User Profile + deletion | US-041 | src/app/api/auth/me/route.ts |
— | — | full-flows.spec.ts | — | ⏳ Partial | |
| BR-008 | Real-time notifications | FR-060 | Transaction Notifications | US-041 | src/app/api/notifications/route.ts |
api-routes.test.ts | — | — | — | ✅ Implemented | |
| BR-009 | Transaction history | FR-050 | Transaction History | US-040 | src/app/api/transactions/route.ts |
api-routes.test.ts | api-endpoints.test.ts | user-flows.spec.ts | — | ✅ Implemented | |
| BR-010 | AISP balance view | FR-040 | Bank Account Balance | US-030 | src/app/api/bank-accounts/route.ts |
— | — | full-flows.spec.ts | — | ⏳ Mock only | |
| BR-011 | Merchant dashboard analytics | FR-032 | Merchant Dashboard | US-022 | src/app/api/merchants/dashboard/route.ts |
api-routes.test.ts | — | — | — | ✅ Implemented | |
| BR-014 | Feature flags | FR-080 | Feature Flag Control | — | src/lib/feature-flags.ts |
feature-flags.test.ts | — | — | — | ✅ Implemented |
3.2 Non-Functional Requirements Traceability
| NFR ID | Requirement | Target | Test Type | Test |
Status |
|---|---|---|---|---|---|
| NFR- |
|||||
| NFR- |
|||||
| NFR- |
|||||
| NFR-SEC06 | Input validation | ||||
| NFR- |
|||||
| NFR- |
|||||
| NFR-P03 | bcrypt < 1,000ms | < 1,000ms | Performance | api-benchmarks.test.ts | ✅ |
| NFR-P04 | DB queries < 10-20ms | SELECT < 10ms; INSERT < 20ms | Performance | api-benchmarks.test.ts | ✅ |
| NFR-P05 | Rate limit check < 50ms | < 50ms | Performance | api-benchmarks.test.ts | ✅ |
| NFR-COMP01 | GDPR compliance | ⏳ Pending | |||
| NFR-COMP03 | PSD2 registration | Finanstilsynet registration | Regulatory | — | ❌ Not started |
| NFR-COMP04 | AML/KYC | Sumsub integration | Integration | — | ⏳ Mock only |
| NFR-COMP05 | PCI-DSS cards | No CVV storage | Unit | db.test.ts | ✅ |
| NFR-A01 | 99.5% uptime | Monthly SLA | Operations monitoring | — | ⏳ Staging only |
| NFR-M01 | ≥80% test coverage | Vitest coverage | CI | vitest.config.ts | ⏳ Measuring |
4. Backward Traceability Matrix
| Test |
Test Description | AC ID | FR ID | BR ID | Has Requirement? | |||
|---|---|---|---|---|---|---|---|---|
| AC- |
FR- |
BR- |
✅ Yes | |||||
| SHA-256 hashes rejected | NF-AC-010 | FR-002 | BR-001 | ✅ Yes | ||||
| NF-AC-011 | FR-003 | BR-001 | ✅ Yes | |||||
| db.test.ts | No balance column in users | AC-091, NF-AC-020 | FR-001 | BR-005 | ✅ Yes | |||
| db.test.ts | No card_number/cvv in cards | AC-090, NF-AC-021 | FR-080 | BR-005 | ✅ Yes | |||
| db.test.ts | Transaction type constraint | NF-AC-022 | FR-020, FR-030 | BR-003, BR-004 | ✅ Yes | |||
| middleware.test.ts | Rate limit allows within limit | AC-024 | FR-002 | BR-001 | ✅ Yes | |||
| middleware.test.ts | Rate limit blocks after exceeded | NF-AC-012 | FR-002 | BR-001 | ✅ Yes | |||
| validation.test.ts | XSS payloads rejected | AC-080 | FR-001 | BR-001 | ✅ Yes | |||
| validation.test.ts | SQL injection rejected | AC-081 | FR-001 | BR-001 | ✅ Yes | |||
| feature-flags.test.ts | topUpViaCard flag absent | — | ||||||
| api-endpoints.test.ts | Register → 201 with valid input | AC-001 | FR-001 | BR-001 | ✅ Yes | |||
| api-endpoints.test.ts | Register → 409 duplicate email | AC-005 | FR-001 | BR-001 | ✅ Yes | |||
| api-endpoints.test.ts | Remittance → 201 with valid data | AC-030 | FR-020 | BR-003 | ✅ Yes | |||
| api-endpoints.test.ts | Remittance → 403 KYC not approved | AC-034 | FR-020, FR-010 | BR-001 | ✅ Yes | |||
| api-endpoints.test.ts | QR payment → 201 with valid data | AC-060 | FR-030 | BR-004 | ✅ Yes | |||
| api-benchmarks.test.ts | bcrypt < 1,000ms | NF-AC-001 | FR-002 | BR-001 | ✅ Yes | |||
| user-flows.spec.ts (E2E) | Login redirects to dashboard | AC-020 | FR-002 | BR-001 | ✅ Yes | |||
| full-flows.spec.ts (E2E) | Send money flow | AC-030 | FR-020 | BR-003 | ✅ Yes | |||
| full-flows.spec.ts (E2E) | QR payment flow | AC-060 | FR-030 | BR-004 | ✅ Yes | |||
| input-chaos.spec.ts (E2E) | XSS in firstName | AC-080 | FR-001 | BR-001 | ✅ Yes | |||
| input-chaos.spec.ts (E2E) | Underage DOB | AC-084 | FR-001 | BR-002 | ✅ Yes |
5. Coverage Analysis
5.1 Requirement Coverage Summary (2026-02-23)
| Category | Total |
Fully Covered | Partially Covered | Not Covered | Coverage % |
|---|---|---|---|---|---|
| Business Requirements (BR) | |||||
| Functional Requirements (FR) | |||||
| Non-Functional Requirements (NFR) | |||||
| User Stories (US) | |||||
| Acceptance Criteria (AC) |
Overall Requirement Coverage: {{PCT}}%~85% (Phase 1 MVP)
Target:Target before Phase 2 launch: ≥ 95% before UAT; 100% before production release
5.2 Test Coverage Summary (2026-02-13 data)
| Test Type | Total Tests | Passing | Failing | Coverage | |
|---|---|---|---|---|---|
| Unit tests (Vitest) | |||||
| Integration tests (Vitest) | |||||
| Performance tests | 8 | 0 | Benchmarks | passing | |
| All | 0 | Bug regressions covered | |||
| E2E tests (Playwright) | 3 projects | Configured | 0 | User flows + chaos |
Total test files: 14 | Total Vitest tests: 40+ passing
6. Gap Identification
6.1 Requirements Without Full Test Coverage
| Requirement ID | Description | Gap Type | Action Required | Owner | Target |
|
|---|---|---|---|---|---|---|
| FR- |
Write integration test |
|||||
| GDPR user deletion | No |
|||||
| NFR-COMP01 | GDPR compliance | Legal review not complete | Engage external legal advisor | Alem | Phase 2 | |
| NFR-COMP03 | PSD2 Finanstilsynet registration | Not started | Initiate registration process | Alem + Legal | 2026-05-15 | |
| NFR-COMP04 | AML/KYC Sumsub | Mock only in production path | Sumsub contract + integration | John | Phase 2 | |
| NFR-A01 | 99.5% uptime SLA | Staging only; no production monitoring | Set up production monitoring + alerts | John | Phase 3 | |
| NFR-SEC12 | External penetration test | Not conducted | External pentest before launch | John + External | Phase 3 |
6.2 Test Cases Without Requirements (Orphans)
| Test |
Description | Status | Action |
|---|---|---|---|
| known-bugs.test.ts — BUG-002 | Generic validation messages | Linked to |
✅ Keep |
| known-bugs.test.ts — BUG-003 | Email without @ | Linked to FR-001 validation | ✅ Keep |
| known-bugs.test.ts — BUG-004 | Missing getDb import | Linked to FR-001 | ✅ Keep |
6.3
No Requirementsorphaned Withouttest Designcases Reference
7. Change Impact Tracking
| Change Request ID | Changed Requirement | Impact on FR | Impact on Code | Impact on Tests | ||
|---|---|---|---|---|---|---|
| FR- |
Architecture |
|||||
| ADR-002 | FR-030 | src/lib/services removed FontelePay | Tests updated | ✅ Closed | ||
| ADR-003 | PSD2 pass-through model | FR-001 (no balance), FR-040 | users table no balance; db.test.ts | db.test.ts updated | ✅ Closed | |
| Phase 0.5 | Security hardening (8 critical issues) | FR-001 through FR-080 (all auth/tx routes) | auth, middleware, security headers | validation.test.ts, middleware.test.ts | ⏳ In progress |
8. Traceability Status Dashboard
Last Updated: {{DATE}}2026-02-23
Updated By: {{NAME}}John (AI Director)
| Metric | Value | Target | Status |
|---|---|---|---|
| Total Business Requirements | — | ||
| BRs with FR coverage | 100% | ||
| FRs with test coverage | 100% | ||
| Test cases passing | 100% | ||
| Open gaps | 0 at Phase 2 launch | ||
| Change requests open | ≤ 3 at a time | ||
| UAT sign-off pending | 0 at launch |
Overall RTM Health: {{GREEN / AMBER /(Phase RED}}1 MVP complete; Phase 2 compliance gaps tracked)
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | John (AI Director) | 2026-02-23 | Approved |
| (AI) | |||
| QA Engineer | Validator agent | 2026-02-23 | Reviewed |
| Tech Lead | John | 2026-02-23 | Approved |
| AI Director (John) | John | 2026-02-23 | Approved |
| CEO (Alem) | Alem Bašić | TBD |