Skip to content

Formele input validatie voor data pipelines #18

@CorneeldH

Description

@CorneeldH

Type: Pitch

Problem / Opportunity

CEDA-pipelines verwerken bestanden van externe bronnen: DUO-bekostigingsbestanden, Studielink-telbestanden, CAMBO-data, en in de toekomst eigen data van instellingen via het Analytics Platform Onderwijs. Op dit moment vertrouwt de code grotendeels op de aanname dat input het verwachte formaat heeft. In een workshop-setting is dat acceptabel, maar naarmate CEDA richting productiedienstverlening (analytics-as-a-service) gaat, wordt robuuste validatie kritisch.

Dit raakt drie regelgevingskaders:

  • AI Act (Artikel 10 — data quality management): voor de instroomprognose en uitvalanalyse (high-risk AI in onderwijs, Annex III punt 3) moet aantoonbaar zijn dat trainings- en inputdata aan kwaliteitscriteria voldoen
  • NIS2: instellingen die CEDA-tools draaien moeten hun toezichthouder kunnen laten zien dat de software-toeleveringsketen in orde is, inclusief robuuste input handling
  • AVG/GDPR: bij ingestion moeten checks voorkomen dat onbedoeld bijzondere persoonsgegevens worden verwerkt

Het jaarplan 2026 benoemt al privacy-by-design principes (pseudonimisering bij ingestion, checks op gevoelige kenmerken), maar dit is nog niet vertaald naar geformaliseerde validatie in de code.

Appetite

Large (5-6 dagen) — schema-definitie per databron + integratie in bestaande pipelines

Solution

Een validation/ module toevoegen aan de CEDA package-structuur die schema's definieert per databron. Elke ingest-functie roept eerst de validator aan.

Concrete aanpak:

  1. Schema-definitie per databron met Pandera (Python) of pointblank (R):

    • Kolomnamen, types en constraints (bijv. studentnummer is integer, geboortejaar tussen 1940-2010)
    • Verplichte vs optionele kolommen
    • Toegestane waarden voor categorische velden
    • Maximale bestandsgrootte
  2. Validatielaag aan de systeemgrens (de ingest-stap):

    • Valideer vóór dat data de analyse-functies bereikt
    • Duidelijke foutmeldingen bij afwijkingen (welke kolom, welke rij, welke constraint)
    • Fail-fast: bij kritische validatiefouten stopt de pipeline met een leesbare melding
  3. Data quality report per run:

    • Aantal records, missende waarden per kolom, afgewezen records
    • Distributies van key variabelen (sanity checks)
    • Automatisch gegenereerd als artefact bij elke pipeline-run
    • Basis voor AI Act art. 10 compliance
  4. Specifieke security-gerelateerde validatie:

    • Input sanitization: wat als er HTML/SQL/script in tekstvelden zit? (relevant zodra resultaten in webinterface getoond worden — XSS preventie)
    • Check op onverwachte kolommen die niet in het schema staan (voorkomt data leakage)
    • Check op patronen die op BSN of andere bijzondere identifiers lijken (regex-based, aanvullend op pseudonimisering)

Acceptatiecriteria

  • Pandera/pointblank schema's gedefinieerd voor minimaal DUO-bekostigingsbestanden en Studielink-telbestanden
  • ingest-functies in instroomprognose en uitvalanalyse roepen validator aan vóór verwerking
  • Pipeline stopt met leesbare foutmelding bij kritische validatiefouten
  • Data quality report wordt gegenereerd per run (aantal records, missende waarden, afwijzingen)
  • Check op onverwachte kolommen die niet in schema staan
  • Check op patronen die op BSN/bijzondere identifiers lijken
  • Validatie-aanpak gedocumenteerd in standards (uitbreiding van data-conventions.md)

Risks / Rabbit holes

  • Niet proberen alle edge cases in één keer te vangen. Start met de twee meest gebruikte databronnen, voeg incrementeel toe.
  • Schema's niet te strict maken bij eerste versie — je wilt niet dat de pipeline breekt op een kolom die bij één instelling net iets anders heet. Configureerbare strictness levels helpen.
  • Pandera vs pointblank: kies op basis van wat het team al kent. Pandera is matuurder voor Python; voor R is pointblank de beste optie.

No-Gos

  • Geen validatie van de inhoudelijke correctheid van data (dat is analyse, niet validatie)
  • Geen real-time streaming validatie — batch is voldoende voor CEDA's use case
  • Geen eigen validatie-framework bouwen — gebruik bestaande tools

Gevalideerd met

@corneeldenhartogh

Metadata

Metadata

Assignees

Labels

needs-shapingPitch die nog gevormd moet wordentechTechnische verbeteringen

Type

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions