Uitwisselprofiel Ministerie van VWS Beleidsontwikkeling over Macro Economische Vraagstukken en Arbeidsmarkt

Over Uitwisselprofiel Ministerie van VWS Beleidsontwikkeling over Macro Economische Vraagstukken en Arbeidsmarkt


Publicatiedatum:
19-11-2025

Inwerkingtreding:
19-11-2025

2.3. Wat is het aantal werknemers met een zorgverlener functie per kwalificatieniveau per soort werkovereenkomst?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: MEVA 2.3
2# Parameters: ?jaar
3# Ontologie: versie 3.0 of nieuwer
4
5PREFIX onz-org: <http://purl.org/ozo/onz-org#>
6PREFIX onz-g:   <http://purl.org/ozo/onz-g#>
7PREFIX onz-pers:<http://purl.org/ozo/onz-pers#>
8PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>
9PREFIX xsd:     <http://www.w3.org/2001/XMLSchema#>
10
11SELECT
12  ?Periode
13  (?vestiging AS ?Indeling)
14  (?zk_regio_code AS ?Zorgkantoorregio_code)
15  (?kwalificatie_niveau AS ?Kwalificatieniveau)
16  (SUM(?onbep_flag)  AS ?Aantal_ZV_medewerkers_onbepaalde_tijd)
17  (SUM(?bep_flag)    AS ?Aantal_ZV_medewerkers_bepaalde_tijd)
18  (SUM(?oproep_flag) AS ?Aantal_ZV_medewerkers_oproep)
19  (SUM(?bbl_flag)    AS ?Aantal_ZV_medewerkers_BBL)
20  (SUM(?inhuur_flag) AS ?Aantal_ZV_medewerkers_inhuur)
21  (SUM(?uitzend_flag)AS ?Aantal_ZV_medewerkers_uitzend)
22  (SUM(?stage_flag)  AS ?Aantal_ZV_medewerkers_stage)
23  (SUM(?vrijw_flag)  AS ?Aantal_ZV_medewerkers_vrijwilliger)
24  (SUM(?present_flag) AS ?Totaal)
25WHERE {
26  {
27    SELECT
28      ?Periode
29      ?vestiging
30      ?zk_regio_code
31      ?kwalificatie_niveau
32      ?persoon
33      (MAX(?is_onbep)  AS ?onbep_flag)
34      (MAX(?is_bep)    AS ?bep_flag)
35      (MAX(?is_oproep) AS ?oproep_flag)
36      (MAX(?is_bbl)    AS ?bbl_flag)
37      (MAX(?is_inhuur) AS ?inhuur_flag)
38      (MAX(?is_uitzend)AS ?uitzend_flag)
39      (MAX(?is_stage)  AS ?stage_flag)
40      (MAX(?is_vrijw)  AS ?vrijw_flag)
41      (1 AS ?present_flag)
42    WHERE {
43      # -- Periode (kwartalen + totaal jaar) --
44      # BIND(2024 AS ?jaar)
45      VALUES ?kw { 1 2 3 4 0 }   # 0 = Totaal jaar
46      BIND(xsd:integer(?jaar) AS ?_jaar)
47
48      BIND( IF(?kw=0,
49               xsd:date(CONCAT(STR(?_jaar), "-01-01")),
50               xsd:date(CONCAT(STR(?_jaar), "-",
51                               IF(?kw=1,"01-01",
52                               IF(?kw=2,"04-01",
53                               IF(?kw=3,"07-01","10-01")))))
54          ) AS ?p_start )
55
56      BIND( IF(?kw=0,
57               xsd:date(CONCAT(STR(?_jaar), "-12-31")),
58               xsd:date(CONCAT(STR(?_jaar), "-",
59                               IF(?kw=1,"03-31",
60                               IF(?kw=2,"06-30",
61                               IF(?kw=3,"09-30","12-31")))))
62          ) AS ?p_eind )
63
64      BIND( IF(?kw=0, "Totaal jaar", CONCAT("Q", STR(?kw))) AS ?Periode )
65
66      # -- Overeenkomsten & afspraken (alle relevante typen) --
67      VALUES ?type_overeenkomst {
68        onz-pers:ArbeidsOvereenkomstOnbepaaldeTijd
69        onz-pers:ArbeidsOvereenkomstBepaaldeTijd
70        onz-pers:OproepOvereenkomst
71        onz-pers:ArbeidsOvereenkomstBBL
72        onz-pers:InhuurOvereenkomst
73        onz-pers:UitzendOvereenkomst
74        onz-pers:StageOvereenkomst
75        onz-pers:VrijwilligersOvereenkomst
76      }
77
78      ?overeenkomst a ?type_overeenkomst ;
79                    onz-pers:heeftOpdrachtnemer ?persoon ;
80                    onz-g:hasPart ?overeenkomst_afspraak .
81
82      ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ;
83                              onz-g:startDatum ?start_afspraak ;
84                              onz-g:isAbout ?functie, ?locatie .
85      OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
86
87      FILTER( ?start_afspraak <= ?p_eind &&
88              ( !BOUND(?eind_afspraak) || ?eind_afspraak >= ?p_start ) )
89
90      # -- Zorgverlener functie + kwalificatieniveau --
91      ?functie a onz-pers:ZorgverlenerFunctie ;
92               onz-g:hasQuality / onz-g:hasQualityValue ?functie_niveau .
93      ?functie_niveau a onz-pers:ODBKwalificatieWaarde ;
94                      rdfs:label ?kwalificatie_niveau .
95
96      # -- Koppel locatie -> vestiging; zowel echte vestiging als totaal organisatie --
97      ?locatie a onz-g:StationaryArtifact ;
98               onz-g:partOf* ?vestiging_uri .
99
100      {
101        # Tak 1: echte vestiging + afleiding zorgkantoorregio
102        ?vestiging_uri a onz-org:Vestiging ;
103                       onz-g:identifiedBy ?vest_nr ;
104                       onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
105        ?vest_nr a onz-org:Vestigingsnummer ;
106                 onz-g:hasDataValue ?vestiging .
107
108        BIND( IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode )
109        ?pc_gebied onz-g:identifiedBy ?postcode ;
110                   onz-g:partOf+ ?zk_regio .
111        ?zk_regio a onz-org:ZorgkantoorRegio .
112
113        BIND( STRAFTER(STR(?zk_regio), "/onz-org/") AS ?zk_regio_code )
114      }
115      UNION
116      {
117        # Tak 2: totaal organisatie, laat zorgkantoorregio leeg
118        ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
119        BIND("Totaal organisatie" AS ?vestiging)
120        # BIND("" AS ?zk_regio_code) # Weglaten ZK regio code bij totaal organisatie
121      }
122
123      # -- Type-specifieke vlaggen per persoon (Fuseki-vriendelijk) --
124      BIND( IF(?type_overeenkomst = onz-pers:ArbeidsOvereenkomstOnbepaaldeTijd, 1, 0) AS ?is_onbep )
125      BIND( IF(?type_overeenkomst = onz-pers:ArbeidsOvereenkomstBepaaldeTijd,   1, 0) AS ?is_bep )
126      BIND( IF(?type_overeenkomst = onz-pers:OproepOvereenkomst,                1, 0) AS ?is_oproep )
127      BIND( IF(?type_overeenkomst = onz-pers:ArbeidsOvereenkomstBBL,            1, 0) AS ?is_bbl )
128      BIND( IF(?type_overeenkomst = onz-pers:InhuurOvereenkomst,                1, 0) AS ?is_inhuur )
129      BIND( IF(?type_overeenkomst = onz-pers:UitzendOvereenkomst,               1, 0) AS ?is_uitzend )
130      BIND( IF(?type_overeenkomst = onz-pers:StageOvereenkomst,                 1, 0) AS ?is_stage )
131      BIND( IF(?type_overeenkomst = onz-pers:VrijwilligersOvereenkomst,         1, 0) AS ?is_vrijw )
132    }
133    # één regel per persoon x vestiging x kwalificatieniveau x periode
134    GROUP BY ?Periode ?vestiging ?zk_regio_code ?kwalificatie_niveau ?persoon
135  }
136}
137GROUP BY
138  ?Periode ?vestiging ?zk_regio_code ?kwalificatie_niveau
139ORDER BY
140  (IF(?Periode = "Totaal jaar", 0, xsd:integer(SUBSTR(?Periode, 2))))
141  (IF(?Indeling = "Totaal organisatie", 0, 1))
142  ?Indeling
143  ?kwalificatie_niveau
144