Uitwisselprofiel ActiZ Belangenbehartiging

Over Uitwisselprofiel ActiZ Belangenbehartiging


Publicatiedatum:
07-07-2026

Inwerkingtreding:
16-07-2026

2.10 Wat is het aantal gemiddelde gewerkte periodes van personeelsleden in loondienst met een zorgverleners functie per kwalificatieniveau per Dag-, Avond- en Nacht-dienst (DAN-dienst)?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1PREFIX ofn: <http://www.ontotext.com/sparql/functions/>
2# Indicator: ActiZ 2.10 
3# Parameters: ?jaar, ?kwartaal
4# Ontologie: versie 3.0 of nieuwer
5
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  (?vestiging AS ?Indeling)
15  (?zk_regio_code AS ?Zorgkantoorregio_code)
16(?kwalificatieniveau AS ?Kwalificatieniveau)
17  (ROUND((SUM(?isDag)   / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_dagdienst)
18  (ROUND((SUM(?isAvond) / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_avonddienst)
19  (ROUND((SUM(?isNacht) / xsd:decimal(?kalenderdagen)) * 100) / 100 AS ?Aantal_gemiddelde_gewerkte_perioden_nachtdienst)
20WHERE {
21  # BIND(2024 AS ?jaar)
22  # BIND("Q1" AS ?kwartaal)
23
24  BIND(?jaar AS ?j)
25
26  # Schrikkeljaar: standaard SPARQL (geen ofn:floorMod)
27  BIND(xsd:integer(?j) AS ?ji)
28  BIND(((?ji - (xsd:integer(?ji / 400) * 400) = 0) || ((?ji - (xsd:integer(?ji / 4) * 4) = 0) && (?ji - (xsd:integer(?ji / 100) * 100) != 0))) AS ?isSchrikkel)
29
30  BIND(
31    STRDT(
32      CONCAT(
33        STR(?j), "-",
34        IF(?kwartaal = "Q1", "01-01",
35        IF(?kwartaal = "Q2", "04-01",
36        IF(?kwartaal = "Q3", "07-01", "10-01")))
37      ),
38      xsd:date
39    ) AS ?p_start
40  )
41
42  BIND(
43    STRDT(
44      CONCAT(
45        STR(?j), "-",
46        IF(?kwartaal = "Q1", "03-31",
47        IF(?kwartaal = "Q2", "06-30",
48        IF(?kwartaal = "Q3", "09-30", "12-31")))
49      ),
50      xsd:date
51    ) AS ?p_eind
52  )
53
54  BIND(
55    IF(?kwartaal = "Q1", IF(?isSchrikkel, 91, 90),
56    IF(?kwartaal = "Q2", 91,
57    IF(?kwartaal = "Q3", 92, 92)))
58    AS ?kalenderdagen
59  )
60
61  BIND(IF(?vestiging = "Totaal organisatie", 0, 1) AS ?IndelingSort)
62
63  # DAN-venster
64  BIND(xsd:dateTime(CONCAT(STR(?p_start), "T07:00:00")) AS ?dan_start)
65  BIND(?p_eind + "P1D"^^xsd:duration AS ?eind_periode_plus)
66  BIND(xsd:dateTime(CONCAT(STR(?eind_periode_plus), "T06:59:00")) AS ?dan_end)
67
68  # Alle kwalificatieniveaus altijd tonen
69  {
70    SELECT DISTINCT ?kwalificatieniveau {
71      ?functie a onz-pers:ZorgverlenerFunctie ;
72               onz-g:hasQuality/onz-g:hasQualityValue ?functie_niveau .
73      ?functie_niveau a onz-pers:ODBKwalificatieWaarde ;
74                      rdfs:label ?kwalificatieniveau .
75    }
76  }
77
78  # Alle indelingen (vestigingen + totaal) — 1x resolutie via subquery
79  {
80    SELECT DISTINCT ?vestiging ?zk_regio_code {
81      {
82        ?vestiging_uri a onz-org:Vestiging ;
83                       onz-g:identifiedBy ?vest_nr ;
84                       onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
85        ?vest_nr a onz-org:Vestigingsnummer ;
86                 onz-g:hasDataValue ?vestiging .
87        BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
88        ?pc_gebied onz-g:identifiedBy ?postcode ;
89                   onz-g:partOf+ ?zk_regio .
90        ?zk_regio a onz-org:ZorgkantoorRegio .
91        BIND(STRAFTER(STR(?zk_regio), "/onz-org/") AS ?zk_regio_code)
92      }
93      UNION
94      {
95        ?locatie_init onz-g:partOf? ?vestiging_uri .
96        ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
97        BIND("Totaal organisatie" AS ?vestiging)
98        BIND("n.v.t." AS ?zk_regio_code)
99      }
100    }
101  }
102
103  OPTIONAL {
104    # Subquery: pre-resolve GewerktePeriode → vestiging (1x, niet per cross-join rij)
105    {
106      SELECT ?vestiging ?zk_regio_code ?kwalificatieniveau ?start_uur
107      WHERE {
108        # BIND(2024 AS ?jaar)
109        # BIND("Q1" AS ?kwartaal)
110
111        BIND(?jaar AS ?j2)
112        BIND(
113          STRDT(CONCAT(STR(?j2), "-",
114            IF(?kwartaal = "Q1", "01-01", IF(?kwartaal = "Q2", "04-01",
115            IF(?kwartaal = "Q3", "07-01", "10-01")))), xsd:date) AS ?p_start2)
116        BIND(
117          STRDT(CONCAT(STR(?j2), "-",
118            IF(?kwartaal = "Q1", "03-31", IF(?kwartaal = "Q2", "06-30",
119            IF(?kwartaal = "Q3", "09-30", "12-31")))), xsd:date) AS ?p_eind2)
120        BIND(xsd:dateTime(CONCAT(STR(?p_start2), "T07:00:00")) AS ?dan_start2)
121        BIND(?p_eind2 + "P1D"^^xsd:duration AS ?eind_periode_plus2)
122        BIND(xsd:dateTime(CONCAT(STR(?eind_periode_plus2), "T06:59:00")) AS ?dan_end2)
123
124        ?gewerkte_periode a onz-pers:GewerktePeriode ;
125                          onz-g:hasBeginTimeStamp ?start_werk ;
126                          onz-g:hasEndTimeStamp ?eind_werk ;
127                          onz-g:definedBy ?overeenkomst .
128        FILTER(?start_werk >= ?dan_start2 && ?start_werk <= ?dan_end2)
129
130        BIND(HOURS(?start_werk) AS ?start_uur)
131
132        ?overeenkomst a onz-pers:ArbeidsOvereenkomst ;
133                      onz-g:hasPart ?overeenkomst_afspraak .
134
135        ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ;
136                               onz-g:startDatum ?start_afspraak ;
137                               onz-g:isAbout ?functie ;
138                               onz-g:isAbout ?locatie_afspraak .
139        OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
140        FILTER(?start_afspraak <= ?eind_periode_plus2 &&
141               (!BOUND(?eind_afspraak) || ?eind_afspraak >= ?p_start2))
142
143        ?functie a onz-pers:ZorgverlenerFunctie ;
144                 onz-g:hasQuality/onz-g:hasQualityValue ?functie_niveau .
145        ?functie_niveau a onz-pers:ODBKwalificatieWaarde ;
146                        rdfs:label ?kwalificatieniveau .
147
148        ?locatie_afspraak a onz-g:StationaryArtifact .
149        OPTIONAL { ?gewerkte_periode onz-g:hasPerdurantLocation ?locatie_werk . }
150        BIND(COALESCE(?locatie_werk, ?locatie_afspraak) AS ?locatie)
151
152        {
153          # Vestiging + regio — partOf beperkt tot 2 niveaus
154          ?locatie (onz-g:partOf)? ?vestiging_uri .
155          ?vestiging_uri a onz-org:Vestiging ;
156                         onz-g:identifiedBy ?vest_nr ;
157                         onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
158          ?vest_nr a onz-org:Vestigingsnummer ;
159                   onz-g:hasDataValue ?vestiging .
160          BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
161          ?pc_gebied onz-g:identifiedBy ?postcode ;
162                     onz-g:partOf+ ?zk_regio .
163          ?zk_regio a onz-org:ZorgkantoorRegio .
164          BIND(STRAFTER(STR(?zk_regio), "/onz-org/") AS ?zk_regio_code)
165        }
166        UNION
167        {
168          # Totaal organisatie — partOf beperkt tot 2 niveaus
169          ?locatie (onz-g:partOf)? ?vestiging_uri .
170          ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
171          BIND("Totaal organisatie" AS ?vestiging)
172          BIND("n.v.t." AS ?zk_regio_code)
173        }
174      }
175    }
176  }
177
178  # Indicatorvariabelen
179  BIND(IF(BOUND(?start_uur) && (?start_uur >= 7  && ?start_uur < 15), 1, 0) AS ?isDag)
180  BIND(IF(BOUND(?start_uur) && (?start_uur >= 15 && ?start_uur < 23), 1, 0) AS ?isAvond)
181  BIND(IF(BOUND(?start_uur) && (?start_uur >= 23 || ?start_uur < 7),  1, 0) AS ?isNacht)
182}
183GROUP BY
184  ?vestiging
185  ?IndelingSort
186  ?zk_regio_code
187  ?kwalificatieniveau
188  ?kalenderdagen
189ORDER BY ?IndelingSort ?vestiging ?kwalificatieniveau
190