Leest DUO MBO-bekostigingsbestanden in en zet ze om naar schone, onderzoeksklare data.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Leest DUO MBO-bekostigingsbestanden in en zet ze om naar schone, onderzoeksklare data. MBO-instellingen worden bekostigd op basis van bestanden die DUO publiceert. Die bestanden zijn ruw en lastig direct te gebruiken. Deze repo leest ze in, decodeert de velden en controleert de kwaliteit. Dat levert twee producten op:檢視完整 README ↗
Leest DUO MBO-bekostigingsbestanden in en zet ze om naar schone, onderzoeksklare data.
MBO-instellingen worden bekostigd op basis van bestanden die DUO publiceert. Die bestanden zijn ruw en lastig direct te gebruiken. Deze repo leest ze in, decodeert de velden en controleert de kwaliteit. Dat levert twee producten op:
data/02-prepared/): elk DUO-bestand per
recordtype, getrouw aan de levering en alleen getypeerd.data/03-output/…/star/): een star schema (dimensies +
feiten) waarin de leveringen zijn samengevoegd, met vastgelegde
ontwerpkeuzes (canonicalisatie, hoofdinschrijving, peildatum, …).Andere CEDA-projecten kunnen op beide voortbouwen.
Doelgroep: analisten en onderzoekers bij mbo-instellingen die met bekostigingsdata werken.
uv sync
export MBO_PSEUDONIMISERING_SALT="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
uv run streamlit run app/main.py
Op Windows: zie Aan de slag.
De repo bevat demo-data, zodat alles direct werkt zonder eigen bestanden.
Pseudonimisering (fail-closed): persoons-identifiers worden gehasht met HMAC-SHA256 plus deze salt, al bij het verwerken van een levering (
mbo verwerk, of "Verwerk bestanden" in de app):02-prepared/bevat geen BSN, onderwijsnummer of PGN, alleen het pseudoniem_persoon_id(#173). ZonderMBO_PSEUDONIMISERING_SALTweigert die stap te draaien. De brondata blijft persoonsgegevens (zie Aan de slag). Productie gebruikt uitsluitend de environment (secret manager); lokaal genereert het -commando hierboven een willekeurige salt per shell. Bewaar die zelf als je pseudoniemen tussen sessies wilt kunnen koppelen. Bewaar echte salts nooit in git — een -fallback is puur voor demo en bevat geen salt meer.
exportapp/config.tomlAlleen voor een vertrouwde omgeving die DUO-gegevens intern aan een eigen administratie koppelt, kun je expliciet kiezen voor identifiers behouden (geen salt, BSN/ONR/PGN blijven in de uitvoer). Een ontbrekende salt kiest dat nooit. Zie Aan de slag.
Alleen lokaal gebruiken: de app is een lokale, single-user analysetool en wordt bewust níet gehost (ook niet op SURF). Er is geen login, geen rolgebaseerd exportrecht en geen audit-log: wie de app draait, kan een tabel desgewenst mét persoonsgegevens downloaden (standaard staan die uit).
Open de app en bekijk de ontdekte bestanden. De twee producten zijn aparte stappen:
Na de verwerking toont het Dashboard een visueel overzicht verdeeld over vijf tabs: rendementen (JR), bekostigingstrechter, opleidingen (BOL/BBL, BPV, KZD), studenten (geslacht, herkomst, gemeente) en GEO-examencijfers.
De zijbalk scheidt de twee producten: Werkbare data (ruw omgezet naar brondata per levering) en Analysemodel (het star schema). Op beide pagina's kies je een tabel, bekijk je een preview van de eerste 1 000 rijen en download je de volledige tabel als CSV. Persoonsgegevens zijn in preview en download standaard verborgen.
CLI:
# Verwerk één ruw bestand naar prepared
uv run mbo verwerk data/01-raw/demo/h15/RO_27DV_20240731_20260324.csv \
data/02-prepared/demo/h15/RO_27DV_20240731_20260324
# Bouw star schema vanuit meerdere prepared-mappen
uv run mbo star \
data/02-prepared/demo/h15/RO_27DV_20240731_20260324 \
data/02-prepared/demo/h16/TBGI_25LX_2027_20251124 \
data/02-prepared/demo/h17/GRONDSLAG_IP_MBO_27DV_20251119_2025 \
--output data/03-output/demo/star \
--relative-to data/02-prepared/demo
Python API:
from mbo_bekostiging_bestanden.pipeline import run_auto_pipeline, run_star
run_auto_pipeline("data/01-raw/demo/h15/RO_27DV_20240731_20260324.csv",
"data/02-prepared/demo/h15/RO_27DV_20240731_20260324")
run_star(
sources=["data/02-prepared/demo/h15/RO_27DV_20240731_20260324",
"data/02-prepared/demo/h16/TBGI_25LX_2027_20251124",
"data/02-prepared/demo/h17/GRONDSLAG_IP_MBO_27DV_20251119_2025"],
target="data/03-output/demo/star",
relative_to="data/02-prepared/demo",
)
# Star schema staat in data/03-output/demo/star/datamodel/
Kwaliteitsoordeel:
run_starvoert de kwaliteitscontrole uit en schrijftquality.json. Directe aanroepen vanbuild_star()ofstack_prepared()(bijv. in een notebook) geven geen kwaliteitssignaal. Voor gevalideerde data: gebruik altijdrun_star.
Wijs app/config.toml naar je eigen mappen en draai dezelfde stappen:
[data]
raw = "data/01-raw/eigen"
prepared = "data/02-prepared/eigen"
output = "data/03-output/eigen"
Zet je ruwe DUO-bestanden (RO_*.csv, TBGI_*.XML, GRONDSLAG_IP_MBO_*.csv) in
de raw-map. De app ontdekt en verwerkt ze automatisch. Echte data staat niet in
git.
data/01-raw/. Drie typen:
RO_*.csv (h15), TBGI_*.XML (h16), GRONDSLAG_IP_MBO_*.csv (h17).data/02-prepared/,
één submap per leveringsbestand (groep/bestandsstam/).data/03-output/star/datamodel/
(zie docs/datamodel.md voor een volledig overzicht)data/*/demo/.export MBO_PSEUDONIMISERING_SALT="ci-test-key-do-not-use-in-production" # alleen tests/CI
uv run pytest # tests
uv run ruff check # lint
De tests draaien fail-closed op persoons-pseudonimisering; zonder
MBO_PSEUDONIMISERING_SALT faalt de stap die het analysemodel bouwt (zie
Quick start).
De vaste testwaarde is publiek en dus herleidbaar: gebruik hem uitsluitend op
synthetische data (tests, CI), nooit voor het verwerken van echte bestanden.
Open de repo in de devcontainer (VS Code / GitHub Codespaces) voor een kant-en-klare omgeving.
docs/CLAUDE.mdOnderhouden door CEDA (cedanl). Bijdragen via issues en pull requests.
MIT