Sursa de adevăr transversală. Orice aplicație GovStack le moștenește implicit prin
anexa tehnică comună (skill parti-comune). Caietul de sarcini specific nu le rescrie —
doar le referențiază, le parametrizează sau notează abateri justificate.
- ID:
CU-<DOMENIU>-NNN (stabil, nu se reutilizează după retragere).
- Nivel: MUST (obligatoriu) / SHOULD (recomandat puternic).
- Stack implicit: Angular, ASP.NET Core / Java Spring Boot, PostgreSQL, Elasticsearch, Redis, RabbitMQ, Kubernetes, GitLab CI/CD.
| ID | Cerință (nivel) | Criteriu de verificare (testabil) | Mapare |
|---|
| CU-SEC-001 | Tot traficul extern și intern de servicii pe TLS ≥ 1.2 (MUST) | scan TLS: HTTP redirecționat la HTTPS; cifruri slabe respinse | Ingress/WAF, mesh |
| CU-SEC-002 | Secretele NU în cod/repo; doar în secret store (MUST) | scan repo fără secrete; secrete din K8s Secrets/Vault | GitLab CI, K8s |
| CU-SEC-003 | Validare input pe server + protecție OWASP Top 10 (MUST) | teste injection/XSS/CSRF negative trec | API |
| CU-SEC-004 | Gestiune vulnerabilități: scan dependențe + imagini la fiecare build (SHOULD) | pipeline blochează CVE critice neacceptate | GitLab CI, registry |
| CU-SEC-005 | Rate limiting & protecție abuz pe API publice (SHOULD) | test depășire prag → 429 | WAF/API gateway |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-AUTH-001 | Autentificarea cetățeanului/funcționarului prin MPass (MUST) | flux E2E login cu cont de test MPass | MPass |
| CU-AUTH-002 | Semnătura electronică prin MSign unde e nevoie de act semnat (MUST) | document semnat validabil | MSign |
| CU-AUTH-003 | Sesiuni cu expirare + revocare; token-uri scurte + refresh (MUST) | sesiune expiră; token revocat → 401 | API |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-RBAC-001 | Acces pe bază de roluri; deny-by-default (MUST) | acțiune fără rol → 403 | API |
| CU-RBAC-002 | Roluri & permisiuni configurabile (nu hardcodate) (MUST) | adăugare rol fără re-deploy | Admin |
| CU-RBAC-003 | Separarea atribuțiilor pentru acțiuni sensibile (4 ochi) (SHOULD) | acțiune critică cere a doua aprobare | Business |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-AUDIT-001 | Orice acțiune cu efect (creare/modificare/ștergere/aprobare) jurnalizată: cine, ce, când, de unde (MUST) | acțiune → înregistrare audit imutabilă | DB audit/append-only |
| CU-AUDIT-002 | Jurnalul de audit este imutabil și păstrat conform retenției legale (MUST) | tentativă de modificare respinsă | storage WORM/append |
| CU-AUDIT-003 | Audit consultabil/filtrabil de rolurile autorizate (SHOULD) | căutare audit după user/perioadă | UI admin |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-OBS-001 | Logs structurate (JSON) cu correlation-id per cerere (MUST) | log cu trace-id propagat între servicii | logging stack |
| CU-OBS-002 | Metrici expuse (RED/USE) + dashboard (MUST) | endpoint /metrics; dashboard live | Prometheus/Grafana |
| CU-OBS-003 | Tracing distribuit pe căile critice (SHOULD) | trace E2E vizibil | OpenTelemetry |
| CU-OBS-004 | Alerte pe SLO-uri (erori, latență, saturare) (SHOULD) | prag depășit → alertă | Alertmanager |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-CACHE-001 | Cache pentru citiri costisitoare/frecvente, cu TTL explicit (SHOULD) | hit-rate măsurat; TTL configurabil | Redis |
| CU-CACHE-002 | Invalidare la scriere (fără date învechite vizibile) (MUST) | după update, citirea reflectă noul stat | Redis |
| CU-CACHE-003 | Degradare grațioasă dacă cache-ul cade (MUST) | Redis down → aplicația merge (mai lent), fără erori 5xx în masă | App |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-SEARCH-001 | Indexare asincronă; sursa de adevăr rămâne în DB (MUST) | după scriere, indexul se actualizează ≤ N s | ES + RabbitMQ |
| CU-SEARCH-002 | Reindexare reproductibilă (rebuild din sursă) (MUST) | rebuild index → rezultate consistente | ES |
| CU-SEARCH-003 | Căutare cu i18n (RO/RU), paginare, filtrare, sortare (SHOULD) | căutare diacritice RO + chirilice RU | ES analyzers |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-DOCS-001 | Documentele în object storage (S3-compatibil), nu în DB/FS local (MUST) | upload/download via storage; pod efemer | S3/MinIO, MDocs |
| CU-DOCS-002 | Scanare antivirus la upload; tipuri/limite validate (MUST) | fișier infectat respins | AV scanner |
| CU-DOCS-003 | Acces la documente controlat de RBAC + URL-uri semnate/expirante (MUST) | link expiră; acces fără drept → 403 | storage + API |
| CU-DOCS-004 | Retenție & ștergere conform legii (SHOULD) | politică de retenție aplicată | storage lifecycle |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-INTEROP-001 | Schimbul de date între instituții prin MConnect, nu punct-la-punct (MUST) | diagrama integrare + contracte de date | MConnect |
| CU-INTEROP-002 | Notificări către cetățean prin MNotify; plăți prin MPay (unde e cazul) (SHOULD) | notificare/plată E2E cu cont test | MNotify/MPay |
| CU-API-001 | API REST versionat, documentat OpenAPI, contracte stabile (MUST) | spec OpenAPI publicată; teste de contract | API |
| CU-API-002 | Idempotență pe operații de scriere expuse extern (MUST) | retry → fără efect dublu | API |
| CU-MSG-001 | Comunicare async via RabbitMQ cu retry + dead-letter (SHOULD) | mesaj eșuat → DLQ, fără pierdere | RabbitMQ |
| CU-API-003 | Structură URL standard api/v{N}/<zonă> cu zone public/citizen/staff/admin/app (MUST) | toate căile respectă structura (audit) | API standard |
| CU-API-004 | Endpoint-uri operaționale standard /health/live, /health/ready, /metrics, /info, /api/v1/openapi.json (MUST) | endpoint-urile există și au formatul standard | API standard |
| CU-API-005 | Erori RFC 7807, paginare/filtrare/corelare standard, deprecare via Sunset (MUST) | răspuns de eroare conform problem+json | API standard |
| CU-API-006 | Conformitatea cu Standardul API e verificată periodic + în CI; abaterile → issue + propuneri (MUST) | audit rulează în CI și pe cadență; raport generat | api-governor |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-DATA-001 | Migrări de schemă versionate, reluabile, fără downtime (expand/contract) (MUST) | migrare aplicată/rollback în CI | Flyway/Liquibase/EF |
| CU-DATA-002 | Backup automat + restore testat periodic (MUST) | restore reușit într-un mediu de test | DB ops |
| CU-DATA-003 | Integritate referențială + tranzacții pe operații compuse (MUST) | operație parțială → rollback | DB |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-PD-001 | Temei legal + minimizare; doar datele necesare (MUST) | registru prelucrări; câmpuri justificate | Legal |
| CU-PD-002 | Drepturile persoanei (acces, rectificare, ștergere) suportate (SHOULD) | cerere de ștergere onorată | App |
| CU-PD-003 | Cifrare la repaus pentru date sensibile + control acces strict (MUST) | date sensibile cifrate; acces auditat | DB/storage |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-I18N-001 | Interfețe și mesaje în RO și RU; fără stringuri hardcodate (MUST) | comutare limbă în UI; fără text fix | Angular i18n |
| CU-A11Y-001 | Conformitate WCAG 2.1 AA pe fluxurile principale (SHOULD) | audit axe-core fără erori critice | Frontend |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-PERF-001 | Țintă implicită: p95 < 500 ms la încărcarea nominală (parametrizabil în caiet) (SHOULD) | test de încărcare confirmă pragul | App |
| CU-AVAIL-001 | Disponibilitate țintă 99,5%/lună; fără SPOF pe căile critice (SHOULD) | min. 2 replici; test de cădere a unei replici | K8s |
| ID | Cerință (nivel) | Criteriu de verificare | Mapare |
|---|
| CU-DEPLOY-001 | Pipeline GitLab CI/CD: build→test→scan→deploy; promovare pe medii (dev→staging→prod) (MUST) | pipeline verde gatează deploy-ul | GitLab CI |
| CU-DEPLOY-002 | Deploy fără downtime (rolling/blue-green) + rollback rapid (MUST) | update fără 5xx; rollback < N min | K8s/ArgoCD |
| CU-DEPLOY-003 | Config prin variabile/Secrets, imagini imutabile, semnate (SHOULD) | aceeași imagine pe toate mediile | registry |
| CU-K8S-001 | Containerizat; liveness/readiness probes; limite resurse (requests/limits) (MUST) | pod nesănătos scos din rotație | K8s |
| CU-K8S-002 | Stateless unde e posibil; starea în servicii dedicate (DB/Redis/ES/S3) (MUST) | restart pod fără pierdere de date | K8s |
| CU-K8S-003 | Autoscalare orizontală pe metrici (HPA) (SHOULD) | încărcare ↑ → replici ↑ | K8s HPA |
Promovarea unui candidat din vault/2-structurat/candidates/ în acest catalog se face cu
aprobarea govstack-architect/teamlead și primește un ID CU-* stabil.