Over Uitwisselprofiel Ministerie van VWS Beleidsontwikkeling over Macro Economische Vraagstukken en Arbeidsmarkt
- Publicatiedatum:
- 19-11-2025
- Inwerkingtreding:
- 19-11-2025
2.23. Wat is het aantal personeelsleden in loondienst met een zorgverleners functie per kwalificatieniveau per Dag-, Avond- en Nacht-dienst (DAN-dienst)?
Concepten
- Arbeidsovereenkomst
- Gewerkte periode
- ODB Kwalificatiewaarde
- Onverplaatsbaar artefact
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- Zorgkantoor regio
- Zorgverlener (functie)
Relaties
- deel van
- gaat over
- gedefinieerd door
- geïdentificeerd door
- heeft deel
- heeft eigenschap of kenmerk
- heeft eigenschapswaarde
- heeft lokaliseerbaar gebied
- heeft opdrachtnemer
- heeft perdurantlocatie
- vestiging van
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: MEVA 2.23 2# Parameter: ?jaar 3# Ontologie: versie 3.0 of nieuwer 4 5PREFIX ofn: <http://www.ontotext.com/sparql/functions/> 6PREFIX onz-g: <http://purl.org/ozo/onz-g#> 7PREFIX onz-pers: <http://purl.org/ozo/onz-pers#> 8PREFIX onz-org: <http://purl.org/ozo/onz-org#> 9PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 10PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 11PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 12 13SELECT 14 ?Periode 15 (?vestiging AS ?Indeling) 16 (?zk_regio_code AS ?Zorgkantoorregio_code) 17 ?Kwalificatieniveau 18 (ROUND( (SUM(?isDag) / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_dagdienst) 19 (ROUND( (SUM(?isAvond) / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_avonddienst) 20(ROUND( (SUM(?isNacht) / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_nachtdienst) 21WHERE { 22 #BIND(2024 AS ?jaar) 23 24 # ── 1) Alle kwalificatieniveaus altijd tonen ───────────────── 25 { 26 SELECT DISTINCT ?Kwalificatieniveau { 27 ?functie a onz-pers:ZorgverlenerFunctie ; 28 onz-g:hasQuality/onz-g:hasQualityValue ?functie_niveau . 29 ?functie_niveau a onz-pers:ODBKwalificatieWaarde ; 30 rdfs:label ?Kwalificatieniveau . 31 } 32 } 33 34 # ── 2) Alle indelingen (vestigingen + totaal organisatie) ──── 35 { 36 SELECT DISTINCT ?vestiging ?zk_regio_code { 37 { 38 ?vestiging_uri a onz-org:Vestiging ; 39 onz-g:identifiedBy ?vest_nr ; 40 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 41 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 42 43 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 44 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 45 ?zk_regio a onz-org:ZorgkantoorRegio . 46 BIND(IF(BOUND(?zk_regio), STRAFTER(STR(?zk_regio), "/onz-org/"), ?unbound) AS ?zk_regio_code) 47 } 48 UNION 49 { 50 ?locatie onz-g:partOf* ?vestiging_uri . 51 ?vestiging_uri onz-org:vestigingVan ?organisatie_uri . 52 BIND("Totaal organisatie" AS ?vestiging) 53 } 54 } 55 } 56 57 # ── 3) Periode-generator (Totaal jaar + Q1–Q4) ─────────────── 58 BIND(?jaar AS ?j) 59 BIND(((ofn:floorMod(?j, 400) = 0) || ((ofn:floorMod(?j, 4) = 0) && (ofn:floorMod(?j, 100) != 0))) AS ?isSchrikkel) 60 61 { 62 # Kwartalen 63 VALUES ?kw { 1 2 3 4 } 64 BIND(STRDT(CONCAT(STR(?j), "-", IF(?kw=1,"01-01", IF(?kw=2,"04-01", IF(?kw=3,"07-01","10-01")))), xsd:date) AS ?p_start_q) 65 BIND(STRDT(CONCAT(STR(?j), "-", IF(?kw=1,"03-31", IF(?kw=2,"06-30", IF(?kw=3,"09-30","12-31")))), xsd:date) AS ?p_eind_q) 66 BIND(?p_start_q AS ?p_start) 67 BIND(?p_eind_q AS ?p_eind) 68 BIND(CONCAT("Q", STR(?kw)) AS ?Periode) 69 BIND(IF(?kw = 1, IF(?isSchrikkel, 91, 90), 70 IF(?kw = 2, 91, 71 IF(?kw = 3, 92, 92))) AS ?kalenderdagen) 72 } 73 UNION 74 { 75 # Totaal jaar 76 BIND("Totaal jaar" AS ?Periode) 77 BIND(xsd:date(CONCAT(STR(?j), "-01-01")) AS ?p_start) 78 BIND(xsd:date(CONCAT(STR(?j), "-12-31")) AS ?p_eind) 79 BIND(IF(?isSchrikkel, 366, 365) AS ?kalenderdagen) 80 } 81 82 # ── 4) Sorteerhulpkolommen ──────────────────────────────────── 83 BIND(IF(?Periode = "Totaal jaar", 0, xsd:integer(SUBSTR(?Periode, 2))) AS ?PeriodeSort) 84 BIND(IF(?vestiging = "Totaal organisatie", 0, 1) AS ?IndelingSort) 85 86 # ── 5) Tellingen direct op top-niveau (geen subselect nodig) ─ 87 # Bouw DAN-venster: 07:00 (startdag) t/m 06:59 (dag na eind) 88 BIND(xsd:dateTime(CONCAT(STR(?p_start), "T07:00:00")) AS ?dan_start) 89 BIND(?p_eind + "P1D"^^xsd:duration AS ?eind_periode_plus) 90 BIND(xsd:dateTime(CONCAT(STR(?eind_periode_plus), "T06:59:00")) AS ?dan_end) 91 92 # Werkperiodes + koppelingen (OPTIONAL zodat lege rijen 0 blijven) 93 OPTIONAL { 94 ?gewerkte_periode a onz-pers:GewerktePeriode ; 95 onz-g:definedBy ?overeenkomst ; 96 onz-g:hasBeginTimeStamp ?start_werk ; 97 onz-g:hasEndTimeStamp ?eind_werk . 98 FILTER(?start_werk >= ?dan_start && ?start_werk <= ?dan_end) 99 100 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; 101 onz-pers:heeftOpdrachtnemer ?medewerker ; 102 onz-g:hasPart ?overeenkomst_afspraak . 103 104 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; 105 onz-g:startDatum ?start_afspraak ; 106 onz-g:isAbout ?functie . 107 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 108 FILTER(?start_afspraak <= ?eind_periode_plus && 109 (!BOUND(?eind_afspraak) || ?eind_afspraak >= ?p_start)) 110 111 ?functie a onz-pers:ZorgverlenerFunctie ; 112 onz-g:hasQuality/onz-g:hasQualityValue ?functie_niveau . 113 ?functie_niveau a onz-pers:ODBKwalificatieWaarde ; rdfs:label ?Kwalificatieniveau . 114 115 # Locatie: werk-locatie als die bestaat, anders afspraak-locatie 116 ?overeenkomst_afspraak onz-g:isAbout ?locatie_afspraak . 117 ?locatie_afspraak a onz-g:StationaryArtifact . 118 OPTIONAL { ?gewerkte_periode onz-g:hasPerdurantLocation ?locatie_werk . } 119 BIND(COALESCE(?locatie_werk, ?locatie_afspraak) AS ?locatie) 120 121 { 122 # Vestiging + regio 123 ?locatie onz-g:partOf* ?vestiging_uri . 124 ?vestiging_uri a onz-org:Vestiging ; 125 onz-g:identifiedBy ?vest_nr ; 126 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 127 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 128 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 129 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 130 ?zk_regio a onz-org:ZorgkantoorRegio . 131 } 132 UNION 133 { 134 # Totaal organisatie 135 ?locatie onz-g:partOf* ?vestiging_uri . 136 ?vestiging_uri onz-org:vestigingVan ?organisatie_uri . 137 BIND("Totaal organisatie" AS ?vestiging) 138 } 139 140 # Uur uit starttijd 141 BIND(HOURS(?start_werk) AS ?start_uur) 142 } 143 144 # Indicatorvariabelen (pakken 0 als er geen match is) 145 BIND(IF(BOUND(?start_uur) && (?start_uur >= 7 && ?start_uur < 15), 1, 0) AS ?isDag) 146 BIND(IF(BOUND(?start_uur) && (?start_uur >= 15 && ?start_uur < 23), 1, 0) AS ?isAvond) 147 BIND(IF(BOUND(?start_uur) && (?start_uur >= 23 || ?start_uur < 7), 1, 0) AS ?isNacht) 148} 149GROUP BY ?Periode ?PeriodeSort ?vestiging ?IndelingSort ?zk_regio_code ?Kwalificatieniveau ?kalenderdagen 150ORDER BY ?PeriodeSort ?IndelingSort ?vestiging ?Kwalificatieniveau