Non-Functional Requirements
Non-Functional Requirements (NFR): {{PROJECT_NAME}}Bilko
Project:
{{PROJECT_NAME}}Bilko — Balkan Accounting SaaS Version:{{VERSION}}1.0 Date:{{DATE}}2026-02-25 Author:{{AUTHOR}}John (AI Director) Status:Draft | In Review | ApprovedFinal Reviewers:{{REVIEWERS}}Alem Bašić (CEO)
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | Initial draft — Phase 1 Serbia MVP | ||
| 1.0 | 2026-02-25 | John (AI Director) | Finalized for v1.0 release |
1. NFR Overview
| Category | # Requirements | Highest Priority | Owner |
|---|---|---|---|
| Performance | |||
| Scalability | High | ||
| Availability | Critical | John / DevOps agent | |
| Security | Critical | ||
| Reliability | Critical | ||
| Usability | High | John / Designer | |
| Compatibility | High | ||
| Maintainability | Medium | ||
| Compliance | Critical | ||
| Data | Critical |
2. Performance Requirements
| ID | Requirement | Metric | Target | Measurement Conditions | Measurement Method | Priority |
|---|---|---|---|---|---|---|
| NFR-P01 | Time to Interactive | < 3 seconds | 4G connection, cold cache | Lighthouse / WebPageTest | Must Have | |
| NFR-P02 | Time to Interactive | < |
Warm |
Lighthouse | Must Have | |
| NFR-P03 | < 500ms | Must Have | ||||
| NFR-P04 | API response time ( |
p95 response time | < 300ms | ≤ 1000 concurrent users | APM tool / k6 | Must Have |
| NFR-P05 | API response time (reports) | p95 response time | < 2 seconds | APM tool | ||
| Must Have | ||||||
| NFR-P06 | ||||||
| NFR- | ||||||
| Core Web Vitals: LCP | Largest Contentful Paint | < 2.5 seconds | Mobile, 4G | Lighthouse | Must Have | |
| NFR- |
Core Web Vitals: CLS | Cumulative Layout Shift | < 0.1 | Any device | Lighthouse | Must Have |
3. Scalability Requirements
| ID | Requirement | Metric | Launch Target | 12-Month Target | Measurement Method | Priority | |
|---|---|---|---|---|---|---|---|
| NFR-S01 | Concurrent |
Load testing ( |
Must Have | ||||
| NFR-S02 | Load testing | Must Have | |||||
| NFR-S03 | API throughput | Requests per second | 200 RPS | 2,000 RPS | k6 load test | Must Have | |
| NFR-S04 | Data volume |
200,000 | Storage + query monitoring | Should Have | |||
| NFR- | |||||||
| Auto-scaling response | Time to |
< |
< |
Cloud console metrics | Should Have | ||
4. Availability Requirements
| ID | Requirement | Target | Measurement Period | Exclusions | Priority |
|---|---|---|---|---|---|
| NFR-A01 | System uptime SLA | ≥ |
Monthly rolling | Scheduled maintenance windows | Must Have |
| NFR-A02 | Scheduled maintenance window | Max |
Monthly | Must Have | |
| NFR-A03 | Maintenance notification lead time | ≥ 48 hours notice | Per event | Emergency patches: 4 hours | Must Have |
| NFR-A04 | RPO (Recovery Point Objective) | Max |
Per incident | N/A | Must Have |
| NFR-A05 | RTO (Recovery Time Objective) | System restored within |
Per incident | N/A | Must Have |
| NFR-A06 | Database backup frequency | Ongoing | N/A | Must | |
SLA Calculation Reference:
| Uptime % | Annual Downtime | Monthly Downtime |
|---|---|---|
| 99.9% | 8.7 hours | 43.8 minutes |
| 99.5% | 43.8 hours | 3.6 hours |
| 99.0% | 87.6 hours | 7.3 hours |
5. Security Requirements
| ID | Requirement | Category | Target / Standard | Measurement Method | Priority |
|---|---|---|---|---|---|
| NFR-SEC01 | Authentication |
Auth | Code review |
Must Have | |
| NFR-SEC02 | Password policy | Auth | Min 8 chars, 1 uppercase, 1 number, 1 special character | Automated test | Must Have |
| NFR-SEC03 | Auth | Automated test | Must Have | ||
| NFR-SEC04 | Data encryption in transit | Encryption | TLS 1.3 |
SSL Labs scan (grade A+) | Must Have |
| NFR-SEC05 | Data encryption at rest | Encryption | Infrastructure review | Must Have | |
| NFR-SEC06 | Input validation | Injection Prevention | All inputs sanitized server- |
Code review + SAST | Must Have |
| NFR-SEC07 | XSS prevention | Injection Prevention | React default encoding + CSP headers; |
OWASP ZAP / |
Must Have |
| NFR-SEC08 | Must Have | ||||
| NFR-SEC09 | |||||
| Audit logging | Compliance | All auth events, |
Log review | Must Have | |
| NFR- |
|||||
| Code review + penetration test | Must Have | ||||
| NFR- |
Security headers | HTTP Security | HSTS, X-Frame- |
securityheaders.com scan | Must Have |
| NFR- |
Snyk / npm audit in CI | ||||
| Should Have |
6. Reliability Requirements
| ID | Requirement | Metric | Target | Measurement Method | Priority |
|---|---|---|---|---|---|
| NFR-R01 | Application error rate | 5xx errors / total requests | < 0.1% | APM monitoring | Must Have |
| NFR-R02 | |||||
| NFR-R03 | |||||
| NFR-R04 | Must Have | ||||
| NFR-R05 | Data integrity | Zero data corruption |
0 |
Database integrity checks | Must Have |
| NFR-R06 | |||||
| Health check endpoint | System health observable | /api/health returns 200 when healthy | Must Have |
7. Usability Requirements
| ID | Requirement | Target | Measurement Method | Priority |
|---|---|---|---|---|
| NFR-U01 | Time to |
New user |
Must Have | |
| NFR-U02 | Must Have | |||
| NFR-U03 | WCAG compliance | WCAG 2.1 Level AA | Must Have | |
| NFR-U04 | Keyboard navigation | All interactive elements reachable by keyboard | Manual testing | Must Have |
| NFR-U05 | ||||
| Mobile responsiveness | Fully functional on 375px–1440px |
Manual + |
Must Have | |
| NFR-U06 | Language: Serbian | Full UI in Serbian (Latin script) for Phase 1; Cyrillic toggle | Manual review by native speaker | Must Have |
| NFR-U07 | ||||
| All |
Content audit |
8. Compatibility Requirements
| ID | Requirement | Category | Target | Priority |
|---|---|---|---|---|
| NFR-C01 | Web browsers (desktop) | Browser | Chrome 100+, Firefox 100+, Safari 16+, Edge 100+ | Must Have |
| NFR-C02 | Browser | Safari iOS 15+, Chrome Android 100+ | Must Have | |
| NFR-C03 | Mobile operating systems | OS | iOS 15+, Android 11+ | Must Have |
| NFR-C04 | Must Have | |||
| NFR-C05 | Must Have | |||
| NFR-C06 | ||||
| Should Have |
9. Maintainability Requirements
| ID | Requirement | Metric | Target | Measurement Method | Priority |
|---|---|---|---|---|---|
| NFR-M01 | Test coverage (backend) | % |
≥ 80% overall; ≥ 95% for |
CI coverage report | Must Have |
| NFR-M02 | strict: |
Must Have | |||
| NFR-M03 | |||||
| Deployment frequency | Time to deploy |
< 1 hour from PR merge | CI/CD metrics | Should Have | |
| NFR- |
|||||
| All |
Must Have | ||||
| NFR- |
Full build < 3 minutes; incremental < 30 seconds | CI metrics | |||
| NFR-M06 | Log coverage | All external API calls (SEF, email, FX), all errors, all financial mutations logged | Log review | Must Have |
10. Compliance Requirements
| ID | Regulation | Applicability | Requirement | Technical Implementation | Priority |
|---|---|---|---|---|---|
| NFR-COMP01 | Must Have | ||||
| NFR-COMP02 | Zakon o PDV (Serbia) | Yes — all VAT-registered orgs | 20% standard, 10% reduced PDV; monthly filing by 15th; PDV report format for ePorezi | PDV calculation engine; report export | Must Have |
| NFR-COMP03 | Zakon o računovodstvu (Serbia) | Yes | Double-entry; 10-year document retention; annual balance sheet; audit trail | LoggedAction (append-only); DB retention policy | Must Have |
| NFR-COMP04 | GDPR (EU / Norwegian Personvernloven) | Yes — ALAI Holding AS is Norwegian; processes EU citizen data | Lawful basis for processing; right to deletion within 30 days; DPA in place; breach notification within 72h; data export (Article 20) | User data deletion API; audit logs; DPA | Must Have |
| NFR-COMP05 | GDPR — Data minimization | Yes | Collect only data necessary for accounting function | BA review of data model; field-level PII audit | Must Have |
| NFR-COMP06 | GDPR — Cookie consent | Explicit consent before non-essential cookies | Cookie consent banner; opt-in only | ||
| Must Have | |||||
| NFR-COMP07 | Multi-tenancy data isolation | Yes — SaaS requirement | Organization data strictly scoped; no cross-tenant access | organizationId middleware + DB constraint | Must Have |
| NFR-COMP08 | WCAG 2.1 AA | Digital accessibility for all users | NFR- |
Must Have |
11. Data Requirements
| ID | Requirement | Category | Target | Implementation | Priority | ||
|---|---|---|---|---|---|---|---|
| NFR-D01 | Monetary precision | Data |
ALL monetary fields: NUMERIC(19,4) — |
Must Have | |||
| NFR-D02 | Data retention — financial records | Retention | 10 years minimum (Serbia); 11 years (Croatia) | Retention policy in DB; no auto-delete of financial records | Must Have | ||
| NFR-D03 | Data retention — logs | Retention | Application logs: 90 days; Audit |
Log rotation |
Must Have | ||
| NFR- |
Database backup |
Backup | Full backup daily; transaction logs every |
Automated backup schedule | |||
| Must Have | |||||||
| NFR-D05 | Must Have | ||||||
| NFR-D06 | PII identification | Privacy | All PII fields documented; user email, name, tax ID (PIB) identified |
Data dictionary + Prisma annotations | Must Have | ||
| NFR-D07 | Data export (portability) | Portability | User can export |
Export API endpoint | Must Have | ||
| NFR-D08 | Must | ||||||
12. NFR Testing & Verification Plan
| NFR Category | Testing Method | Tools | Frequency | Pass Criteria |
|---|---|---|---|---|
| Performance | Pre-launch + monthly | All NFR-P targets met at normal load | ||
| Scalability | k6 | Pre-launch | ||
| Security | SAST + |
Snyk, OWASP |
CI (SAST), Pre-launch ( |
No critical/high unresolved vulnerabilities |
| Compliance (SEF) | SEF sandbox end-to-end test | SEF sandbox API | Pre-launch | 100% invoice submission success in sandbox |
| Compliance (PDV) | Manual accounting verification + test data | Test data set | Pre-launch + each PDV change | PDV calculations match expected values for 20 test cases |
| Compliance (GDPR) | Manual review + deletion test | Manual | Pre-launch + annual | Right to deletion completes within 30 days; export works |
| Accessibility | axe- |
Per sprint | WCAG 2.1 AA — 0 critical violations | |
| Availability | Uptime monitor | Ongoing + |
SLA |
|
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | John (AI Director) | 2026-02-23 | |
| Reviewer | |||
| Tech Lead | John | 2026-02-23 | |
| Business Analyst | John | 2026-02-23 | |
| Product Owner | John | 2026-02-23 | |
| AI Director (John) | John | 2026-02-23 | |
| Alem Bašić |