Files
VacatureRadar/docs/quality/TRACEABILITY_MATRIX.md
T

13 KiB
Raw Blame History

Traceabilitymatrix

Legenda: I = geïmplementeerd en getest in de huidige MVP; P = gedeeltelijk/volgende backlogtaak; E = alleen externe productieconfiguratie of bronreview ontbreekt. Bestandsnamen verwijzen naar de primaire implementatie; aanvullende tests kunnen in dezelfde testdirectory staan.

Functionele requirements

ID Status Primaire implementatie Bewijs/tests Vervolgtaak
PR-001 I profiles/models.py, forms/views test_profiles.py, test_views.py
PR-002 I SearchProfile, begeleide skilltaxonomie, informatieve ervaringscontext, defaults/form en geocodeparser tests/unit/test_geocoding.py, tests/integration/test_profile_preferences.py, profiel- en viewtests VR-105/VR-207/VR-208
PR-003 I ProfileRevision, profile services test_profiles.py
PR-004 I begrensde feedbackservice/velden tests/unit/test_feedback_learning.py, test_profiles.py VR-110 uitgevoerd
PR-005 I bootstrap_instance, defaults task/viewtests
PR-010 I sources/models.py test_source_models.py VR-112 breidt health uit
PR-011 I policy + fetch task policy/fetch/tasktests
PR-012 I denylist, e-mailadapter policy/e-mailtests
PR-013 I url_security.py, redirectfetcher security URL/fetchtests VR-115 transporthardening
PR-014 I fetcher.py test_fetcher.py
PR-015 I SourceLease, SourceOriginState, apps/sources/services/scheduling.py, apps/sources/tasks.py test_scheduling.py, test_fetcher.py, test_tasks_and_more_views.py VR-103 afgerond
PR-016 I email_import.py, MailboxConnection, versleutelde platformmailboxservice en gereviewde jobboardcatalogus e-mail- en mailboxintegratietests VR-123/124
PR-017 I candidate/status + basisdiscovery apps/sources/services/discovery.py, tests/unit/test_discovery_rss.py, tests/integration/test_discovery_command.py, tests/integration/test_tasks_and_more_views.py VR-101/102
PR-018 I apps/sources/services/health.py, apps/sources/tasks.py tests/integration/test_source_health.py VR-112
PR-020 I JsonLdJobPostingAdapter JSON-LD-tests/fixtures
PR-021 I HTML/RSS/e-mailadapters + apps/sources/adapters/ats.py + tests/unit/test_ats_adapters.py adaptertests + tests/unit/test_ats_adapters.py VR-106 afgerond
PR-022 I adapters/base.py contract via alle adaptertests
PR-023 I sanitize.py security sanitizationtests
PR-024 I ExtractedJob, CanonicalJobDraft, models pipeline/normalisatietests
PR-025 I JobVersion in pipeline dedupe/lifecycle-integratietest
PR-026 I RawDocument, apps/sources/tasks.py, config/settings.py tests/integration/test_source_health.py VR-112/115 operationaliseert
PR-027 I FieldProvenance pipeline-integratietests
PR-030 I dedupe.py dedupetests
PR-031 I conservatieve fuzzy dedupe tests/unit/test_dedupe_lifecycle_feedback.py, scripts/benchmark.py, tests/benchmark/test_benchmark.py VR-116 benchmark
PR-032 I direct-sourcepreferentie/alias pipeline- en dedupetests VR-108 resolver
PR-033 I canonical constraints/transacties replaytests
PR-040 I features/scoring + deterministische IT-relevantie vóór AI, inclusief contextgebonden fieldtitels tests/unit/test_scoring.py, tests/unit/test_relevance.py, viewtests VR-206/VR-207
PR-041 I scorecomponenten met begrensde skill-evidence; ervaring/senioriteit aantoonbaar zonder score-invloed tests/unit/test_features_distance.py, tests/unit/test_scoring.py VR-105/VR-207/VR-208
PR-042 I unknown/confidencegedrag tests/unit/test_features_distance.py, tests/unit/test_scoring.py VR-105
PR-043 I ScoreRun plus uitlegbare skillvraag-/dekkingsanalyse pipeline-/scoringtests, tests/unit/test_skill_demand.py VR-208
PR-044 I profiel/modelversievelden scoring/profiletests VR-109 promptversie
PR-045 I optionele Ollamaservice/fallback test_ai.py VR-109
PR-046 I geen tools + guardrails AI/securitytests VR-109/115 evaluaties
PR-050 I dashboard/list/skillsradar + Stitch-dominante cockpitshell/feed/rail en ultrawide compositie viewtests, skill-insighttests, VR-119/206/208 browsermatrix VR-114/118/119/206/208 e2e/a11y
PR-051 I detailview/template/provenance + scorehero/intelligence-strip viewtests, VR-119 screenshots VR-114/118/119
PR-052 I feedbackendpoint/UI feedback/viewtests
PR-053 I applicationmodel/serviceflow tests/integration/test_dedupe_lifecycle_feedback.py, tests/integration/test_applications.py VR-113 uitgebreid dossier
PR-054 I notifications/models.py, outbox/services/tasks tests/integration/test_email_import_notifications.py, tests/integration/test_reminders.py VR-111
PR-055 I lifecycle service/task lifecycletests
PR-056 I expliciete non-goal; geen submitcontract AC-043 code review, ADR-0006
PR-060 I health views/service view/healthtests
PR-061 I apps/sources/services/health.py, apps/sources/tasks.py tests/integration/test_source_health.py VR-112 dashboard/metrics
PR-062 I scripts/release_verify.sh, scripts/release_smoke.py, docker-compose*.yml release-verificatie-smoke, configdiff en upgrade/rollbackartefacten VR-117 afgerond
PR-063 I AI standaard uit/fallback volledige testset zonder Ollama
PR-064 I settings/env-example/gitignore configreview en CI VR-115 secretscan

Niet-functionele requirements

ID Status Bewijs Vervolgtaak
NFR-001 I policy-, URL- en fetchersecuritytests + settings/rate-limit tests tests/unit/test_fetcher.py, tests/unit/test_rate_limit.py, tests/unit/test_settings_security.py, tests/integration/test_views.py, tests/integration/test_sources_manual_import.py
NFR-002 P raw-retentie, minimale modellen, privacyrunbooks VR-113/115
NFR-003 I/P replay-, mail- en outboxtests; per-bronfouten VR-103/112
NFR-004 I ScoreRun, provenance, skillvraag met expliciet veld-/tekstonderscheid en UI-copy VR-109/208 uitgebreid evidence
NFR-005 I domeinapps/services/adapters/ADRs continue review
NFR-006 I offline pytest + coveragegate VR-114 verbreedt e2e
NFR-007 P scripts/benchmark.py, tests/benchmark/test_benchmark.py VR-116
NFR-008 I semantische Stitch-dominante templates, zes viewports, dark/light en toetsenbordmenu tests/e2e/test_vr114_browser_and_accessibility.py, docs/design/validation/, VR-118/119
NFR-009 I lokale SQLite en Docker/Unraidconfig, release-smoke en restore VR-117 afgerond
NFR-010 I apps/sources/services/health.py, apps/sources/tasks.py, apps/core/views.py, config/settings.py tests/integration/test_source_health.py

Systeemacceptatie

Criteria Status Primair bewijs
AC-001004 I bootstrap, auth/UI, e-mailingress zonder platformlogin
AC-010015 I integration/security/adaptertests
AC-020025 I normalisatie-, dedupe-, scoring- en AI-fallbacktests
AC-030034 I notificatie- en lifecycletests
AC-040043 I application/feedback/user-scopingtests en ADR-0006
AC-050054 I health/viewtests, verify-script, offline fixtures, coverage en ledger-validator
AC-055 I scripts/release_verify.sh met release-smoke en restore-compare

Onderhoudsregel

Iedere backlogtaak die een requirement wijzigt, werkt in dezelfde commit deze matrix, relevante acceptatiecriteria en tests bij. Een status wordt alleen naar I gezet wanneer de code én het genoemde bewijs bestaan.

Aanvullende traceability-opmerking

  • VR-102 is gerealiseerd met auditbare policyreviews (SourcePolicyReview), robotscache met TTL/size/SSRF-controles en fail-closed policy-gating op verlopen of conflicterende reviews.
  • VR-107 is gerealiseerd met apps/sources/views.py, apps/sources/services/manual_import.py, templates/sources/list.html, static/js/manual_import.js en bijhorende unit/integration-tests.
  • VR-115 is afgerond met productie-hardening voor config/settings.py, DNS-rebindmitigatie in apps/sources/services/fetcher.py, rate limiting op login en handmatige import, CI-secret- en kwetsbaarheidsscans, non-root/read-only containerhardening en bijbehorende security/unit/integration-tests.
  • VR-118 vertaalt de aangeleverde Stitch Intelligence Cockpit naar de bestaande server-rendered routes. Bewijs staat in docs/design/STITCH_INTEGRATION_PLAN.md, docs/design/validation/, de view/a11ytests en de gedeelde lokale shell/assets.
  • VR-119 herwerkt die vertaling na productfeedback zodat de Stitch-schermcompositie, feeddichtheid en hoofd-/zijpanelhiërarchie dominant zijn. Bewijs staat in docs/design/validation/VR-119_REPORT.md, de vr119-*.png-screenshots en de uitgebreide HTML/a11ytest.
  • VR-120 vereenvoudigt thuislocatie tot postcode, vervangt JSON-/tekstinvoer door begeleide checkboxes en levert twee gereviewde livewerkgeverfeeds. Bewijs staat in docs/operations/LIVE_SOURCE_CATALOG.md, de profiel-/adapter-/pipelinetests en de bronruns in de lokale database.
  • VR-121 breidt de catalogus uit tot tien livebronnen, ondersteunt meerdere werkgeverfeeds op gedeelde ATS-hosts, voegt een begrensde Corda Campus-adapter toe en houdt VDAB/Indeed uitsluitend op de bestaande veilige e-mail-/handmatige ingress. Bewijs staat in docs/operations/LIVE_SOURCE_CATALOG.md, de bronmigratie en de regionale/ATS/seedtests.
  • VR-122 operationaliseert de veilige platformingress als dagelijkse, configureerbare en begrensde mailboxpoll. VDAB-alerts krijgen expliciete provenance, replay blijft idempotent en de bronpagina onderscheidt de werkende jobalertroute van de contractueel afgeschermde officiële Vacature API. Bewijs staat in de e-mailadapter-/importtests, apps/sources/services/imap_import.py en ADR-0005.
  • VR-123 vervangt die globale poll door gebruikersgescopeerde VDAB- en Indeed-mailboxkoppelingen met versleutelde app-wachtwoorden, afzonderlijke intervallen, per-mailboxleases en UI-beheer. Bewijs staat in tests/unit/test_mailbox_credentials.py, tests/integration/test_mailbox_connections.py, de migratie en ADR-0009.
  • VR-124 breidt dezelfde mailboxingang uit met LinkedIn, ictjob.be, Jobat, StepStone, EuroBrussels en BrusselsJobs. De platformgebonden parser accepteert uitsluitend gelabelde HTTPS-links op het gekozen jobboarddomein; fixtures, adapter-/integratietests en de centrale denylist bewijzen de afscherming.
  • VR-125 vervangt de twee Brusselse nicheboards door Careerjet, Randstad en Robert Half, retireert buitenregionale werkgevers zonder provenanceverlies en voegt host- en padgebonden adapters toe voor ACA Group, Xplore Group, UHasselt, PXL en ZOL in de kern Hasselt-Genk.
  • VR-126 herankert profiel en broncatalogus op postcode 2400 Mol en 40 km. De host-, pad- en locatiefilters voor SCK CEN, Cipal Schaubroeck, VanRoey, NTX en Thomas More worden gedekt door regionale adaptertests, source-viewtests, live bronruns en de bijgewerkte threat T-39.
  • VR-201 activeert Gemeente Mol en zeven bijkomende Kempen-werkgevers na menselijke voorwaardenreview, fixtures, fail-closed locatie-/routefilters en twee livecycli. Twaalf interessante werkgevers zonder stabiele actieve ingang staan afzonderlijk en niet-scanbaar op de UI-waaklijst. Bewijs staat in de livecatalogus, seeddata, KempenEmployerAdapter, bronruns en adapter-/seed-/viewtests.
  • VR-205 laadt de officiële Belgische GeoNames-postcodedataset 2026-04-03 onder CC BY 4.0, documenteert bron- en afgeleide checksums en lost 2400 Mol op naar het benaderende postcodecentrum. Bewijs staat in config-data/geodata/README.local.md, het importlog, geocodingtests en de opnieuw berekende profiel-vacaturescores.
  • VR-206 voegt een titelgestuurde IT-relevantiegrens vóór scoring/AI toe, maakt de persoonlijke radarselectie de standaard en benut Stitch-panelen dynamisch tot 2560 px. Bewijs staat in apps/jobs/services/relevance.py, de score-/viewtests en docs/design/validation/VR-206_AUDIT.md.
  • VR-207 breidt het profiel uit met gegroepeerde field-/infrastructuurrollen, cv-skills en een ervaringsband. Skill-evidence is op vier treffers begrensd, afwezigheid wordt niet als tekort gepresenteerd en ambigue fieldtitels vereisen een onafhankelijk IT-contextsignaal. Persoonlijke cv-waarden staan uitsluitend in de lokale gebruikersdatabase; repositorytests en documentatie blijven gesaneerd.
  • VR-208 maakt die ervaringsband uitsluitend informatief en verwijdert ook senioriteitsinvloed uit de AI-component en feedbacklearning. De gebruikersgescopeerde Skillsradar analyseert actuele niet-uitgesloten IT-vacatures van actieve bronnen, onderscheidt skillveldbewijs van tekstinferentie en toont profieldekking en mogelijke leerkansen met categorie-/dekkingsfilters.