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

3.5. Hoeveel uur zijn er verloond?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: MEVA 3.5 (per kwartaal binnen een jaar) + totaal per jaar
2# Parameters: ?jaar, ?zorgkantoor
3# Ontologie: versie 3.0 of nieuwer
4
5PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
6PREFIX onz-pers: <http://purl.org/ozo/onz-pers#>
7PREFIX onz-g:   <http://purl.org/ozo/onz-g#>
8PREFIX onz-org: <http://purl.org/ozo/onz-org#>
9PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
10
11SELECT ?Periode ?Organisatieindeling ?Zorggerelateerd ?Niet_Zorggerelateerd ?Totaal
12WHERE {
13  {
14    SELECT
15      (CONCAT("Q", STR(?kwartaal)) AS ?Periode)
16      (?vestiging AS ?Organisatieindeling)
17      (SUM(?verloonde_uren * ?zorg) AS ?Zorggerelateerd)
18      (SUM(?verloonde_uren * ?niet_zorg) AS ?Niet_Zorggerelateerd)
19      (SUM(?verloonde_uren) AS ?Totaal)
20    WHERE {
21      # BIND(2023 AS ?jaar)
22      # BIND(onz-org:ZorgkantoorMenzis AS ?zorgkantoor)
23
24      # Jaargrenzen
25      BIND(xsd:date(CONCAT(STR(?jaar), '-01-01')) AS ?start_periode)
26      BIND(xsd:date(CONCAT(STR(?jaar), '-12-31')) AS ?eind_periode)
27
28      # Personeels-overeenkomsten
29      ?overeenkomst
30          a onz-pers:ArbeidsOvereenkomst ;
31          onz-pers:heeftOpdrachtnemer ?persoon ;
32          onz-g:hasPart ?overeenkomst_afspraak .
33
34      ?overeenkomst_afspraak
35          a onz-pers:WerkOvereenkomstAfspraak ;
36          onz-g:startDatum ?start_afspraak .
37      OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
38      FILTER(?start_afspraak <= ?eind_periode && ((?eind_afspraak >= ?start_periode) || (!BOUND(?eind_afspraak))))
39
40      ?overeenkomst_afspraak onz-g:isAbout ?functie .
41      ?functie a onz-g:OccupationalPositionRole .
42      ?overeenkomst_afspraak onz-g:isAbout ?locatie .
43      ?locatie a onz-g:StationaryArtifact .
44
45      ?verloonde_periode
46          a onz-fin:VerloondePeriode ;
47          onz-g:definedBy ?overeenkomst ;
48          onz-g:startDatum ?datum_verloonde_periode ;
49          onz-g:hasQuality/onz-g:hasQualityValue/onz-g:hasDataValue ?verloonde_uren .
50      FILTER(?datum_verloonde_periode >= ?start_periode && ?datum_verloonde_periode <= ?eind_periode)
51      FILTER(?datum_verloonde_periode >= ?start_afspraak && (?datum_verloonde_periode <= ?eind_afspraak || !BOUND(?eind_afspraak)))
52
53      # Kwartaal bepalen
54      BIND(CEIL(xsd:decimal(MONTH(?datum_verloonde_periode)) / 3) AS ?kwartaal)
55
56      # Vestiging + Zorgkantoor-regio filter
57      ?locatie onz-g:partOf* ?vestiging_uri .
58      ?vestiging_uri a onz-org:Vestiging ;
59          onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
60      BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
61      ?pc_gebied onz-g:identifiedBy ?postcode ;
62                 onz-g:partOf+ ?zk_regio .
63      ?zk_regio a onz-org:ZorgkantoorRegio .
64      ?zorgkantoor onz-g:hasOperatingRange ?zk_regio .
65
66      {
67        ?vestiging_uri onz-g:identifiedBy ?vest_nr .
68        ?vest_nr a onz-org:Vestigingsnummer ;
69                 onz-g:hasDataValue ?vestiging .
70      } UNION {
71        # Ook de organisatie als geheel opnemen als 'vestiging'
72        ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
73        BIND("Totaal organisatie" AS ?vestiging)
74        BIND("n.v.t." AS ?zk_vestiging)
75      }
76      BIND(IF(!BOUND(?zk_vestiging), ?zorgkantoor, ?zk_vestiging) AS ?zorgkantoor_vestiging)
77
78      # Zorg / niet-zorg indicatoren
79      BIND(IF(EXISTS { ?functie a onz-pers:ZorgverlenerFunctie }, 1, 0) AS ?zorg)
80      BIND(IF(?zorg = 0, 1, 0) AS ?niet_zorg)
81    }
82    GROUP BY ?kwartaal ?vestiging ?zorgkantoor_vestiging
83  }
84  UNION
85  {
86    SELECT
87      ("Totaal jaar" AS ?Periode)
88      (?vestiging AS ?Organisatieindeling)
89      (SUM(?verloonde_uren * ?zorg) AS ?Zorggerelateerd)
90      (SUM(?verloonde_uren * ?niet_zorg) AS ?Niet_Zorggerelateerd)
91      (SUM(?verloonde_uren) AS ?Totaal)
92    WHERE {
93      # BIND(2023 AS ?jaar)
94      # BIND(onz-org:ZorgkantoorMenzis AS ?zorgkantoor)
95
96      # Jaargrenzen
97      BIND(xsd:date(CONCAT(STR(?jaar), '-01-01')) AS ?start_periode)
98      BIND(xsd:date(CONCAT(STR(?jaar), '-12-31')) AS ?eind_periode)
99
100      # Personeels-overeenkomsten
101      ?overeenkomst
102          a onz-pers:ArbeidsOvereenkomst ;
103          onz-pers:heeftOpdrachtnemer ?persoon ;
104          onz-g:hasPart ?overeenkomst_afspraak .
105
106      ?overeenkomst_afspraak
107          a onz-pers:WerkOvereenkomstAfspraak ;
108          onz-g:startDatum ?start_afspraak .
109      OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
110      FILTER(?start_afspraak <= ?eind_periode && ((?eind_afspraak >= ?start_periode) || (!BOUND(?eind_afspraak))))
111
112      ?overeenkomst_afspraak onz-g:isAbout ?functie .
113      ?functie a onz-g:OccupationalPositionRole .
114      ?overeenkomst_afspraak onz-g:isAbout ?locatie .
115      ?locatie a onz-g:StationaryArtifact .
116
117      ?verloonde_periode
118          a onz-fin:VerloondePeriode ;
119          onz-g:definedBy ?overeenkomst ;
120          onz-g:startDatum ?datum_verloonde_periode ;
121          onz-g:hasQuality/onz-g:hasQualityValue/onz-g:hasDataValue ?verloonde_uren .
122      FILTER(?datum_verloonde_periode >= ?start_periode && ?datum_verloonde_periode <= ?eind_periode)
123      FILTER(?datum_verloonde_periode >= ?start_afspraak && (?datum_verloonde_periode <= ?eind_afspraak || !BOUND(?eind_afspraak)))
124
125      # Vestiging + Zorgkantoor-regio filter
126      ?locatie onz-g:partOf* ?vestiging_uri .
127      ?vestiging_uri a onz-org:Vestiging ;
128          onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
129      BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
130      ?pc_gebied onz-g:identifiedBy ?postcode ;
131                 onz-g:partOf+ ?zk_regio .
132      ?zk_regio a onz-org:ZorgkantoorRegio .
133      ?zorgkantoor onz-g:hasOperatingRange ?zk_regio .
134
135      {
136        ?vestiging_uri onz-g:identifiedBy ?vest_nr .
137        ?vest_nr a onz-org:Vestigingsnummer ;
138                 onz-g:hasDataValue ?vestiging .
139      } UNION {
140        ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
141        BIND("Totaal organisatie" AS ?vestiging)
142        BIND("n.v.t." AS ?zk_vestiging)
143      }
144      BIND(IF(!BOUND(?zk_vestiging), ?zorgkantoor, ?zk_vestiging) AS ?zorgkantoor_vestiging)
145
146      # Zorg / niet-zorg indicatoren
147      BIND(IF(EXISTS { ?functie a onz-pers:ZorgverlenerFunctie }, 1, 0) AS ?zorg)
148      BIND(IF(?zorg = 0, 1, 0) AS ?niet_zorg)
149    }
150    GROUP BY ?vestiging ?zorgkantoor_vestiging
151  }
152}
153# Sorteer Q1..Q4 en zet "Jaar" als laatste
154ORDER BY ?Organisatieindeling (IF(?Periode="Totaal jaar", 5, xsd:integer(SUBSTR(?Periode,2))))
155