Let op: dit is een oudere versie van deze publicatie. Ga naar de laatste versie

Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

6.1.3 Percentage ingezette uren personeel per kwalificatieniveau Q3 2023

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren 6.1
2# Parameters: $(start_periode), $(eind_periode)
3# Ontologie: versie 2.0.0 of nieuwer
4
5PREFIX onz-g: <http://purl.org/ozo/onz-g#>
6PREFIX onz-org: <http://purl.org/ozo/onz-org#>
7PREFIX onz-pers: <http://purl.org/ozo/onz-pers#>
8PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
9PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
10
11SELECT 
12    ?vestiging
13    ?kwalificatie_niveau
14    (?kwalificatie_uren AS ?ingezette_uren)
15    ((?kwalificatie_uren/?totaal_uren)*100 AS ?percentage)
16WHERE 
17{   
18    # subquery: bereken het aantal ingezette uren per kwalificatieniveau en vestiging
19    {
20        SELECT 
21            ?vestiging
22            ?kwalificatie_niveau
23            (SUM(?uren) AS ?kwalificatie_uren)
24        WHERE
25        {
26            # selecteer alle geregistreerde uren van de werknemers per 
27            SELECT DISTINCT
28                ?gewerkte_periode
29                ?start_werk
30                ?eind_werk
31                ?uren
32                ?kwalificatie_niveau
33                ?vestiging
34            WHERE 
35            {      
36                BIND ('2023-07-01'^^xsd:date AS ?start_periode)
37                BIND ('2023-09-30'^^xsd:date AS ?eind_periode)
38                
39                # selecteer werkovereenkomsten waarbij werknemer een zorgverlenerfunctie heeft
40                ?functie 
41                    a onz-pers:ZorgverlenerFunctie ;  
42                    a/ onz-g:hasQuality /onz-g:hasQualityValue ?functie_niveau ;
43                    onz-g:startDatum ?start_functie .
44                OPTIONAL { ?functie onz-g:eindDatum ?eind_functie . }
45                
46                FILTER(?start_functie <= ?eind_periode && ((?eind_functie >= ?start_periode) || (!BOUND(?eind_functie))))
47                BIND(IF(!BOUND(?eind_functie), ?eind_periode, 
48                    IF(?eind_functie < ?eind_periode, ?eind_functie, ?eind_periode)
49                ) AS ?eind_functie_reken)
50                BIND(IF(?start_functie < ?start_periode, ?start_periode, ?start_functie) AS ?start_functie_reken)
51                
52                ?overeenkomst 
53                    a onz-pers:ArbeidsOvereenkomst ;
54                    onz-pers:heeftOpdrachtnemer ?medewerker ;
55                    onz-g:isAbout ?locatie_contract ;
56                    onz-g:isAbout ?functie .
57
58                ?functie_niveau
59                    a onz-pers:ODBKwalificatieWaarde ;
60                    rdfs:label ?kwalificatie_niveau .
61
62                # selecteer uren van gewerkte periode binnen periode
63                ?gewerkte_periode 
64                    a onz-pers:GewerktePeriode ;
65                    onz-g:definedBy ?overeenkomst ;
66                    onz-g:hasBeginTimeStamp ?start_werk_datetime ;
67                    onz-g:hasEndTimeStamp ?eind_werk_datetime ; 
68                    onz-g:hasQuality / onz-g:hasQualityValue / onz-g:hasDataValue ?uren_voor_correctie .
69                OPTIONAL{?gewerkte_periode onz-g:hasPerdurantLocation ?locatie_werk .}
70                # Als begin- en endTimeStamp van type dateTime zijn dan omzetten zodat vergeleken kan worden met start en eind period
71                BIND(STRDT(SUBSTR(STR(?start_werk_datetime), 1, 10), xsd:date) AS ?start_werk)
72                BIND(STRDT(SUBSTR(STR(?eind_werk_datetime), 1, 10), xsd:date) AS ?eind_werk)
73                FILTER(?start_werk >= ?start_functie_reken && ?eind_werk <= ?eind_functie_reken)
74
75                ?locatie_contract a onz-g:StationaryArtifact
76                BIND(IF(!BOUND(?locatie_werk), ?locatie_contract, ?locatie_werk) AS ?locatie)
77                
78                # selecteer locatie met bijbehorende vestiging
79                {
80                    ?locatie onz-g:partOf* ?vestiging_uri .
81                    ?vestiging_uri 
82                        a onz-org:Vestiging ;
83                        onz-g:identifiedBy ?vest_nr.
84                    ?vest_nr a onz-org:Vestigingsnummer ;
85                        onz-g:hasDataValue ?vestiging .
86                } UNION {
87                    # Includeer ook de organisatie als geheel en label deze als vestiging
88                    ?locatie onz-g:partOf*/onz-org:vestigingVan ?organisatie_uri .
89                    ?organisatie_uri
90                        a onz-g:Business ;
91                        rdfs:label ?Organisatie .
92                    BIND(CONCAT('Totaal ',?Organisatie) AS ?vestiging)
93                }
94
95                BIND(IF(!BOUND(?locatie_werk) && BOUND(?vestiging_uri), 0, 1) AS ?correctie)
96                BIND(?uren_voor_correctie * ?correctie AS ?uren)
97            }
98        }
99        GROUP BY ?vestiging ?kwalificatie_niveau
100    }
101    # subquery: bereken het aantal ingezette uren per vestiging
102    {
103        SELECT 
104            ?vestiging
105            (SUM(?uren) AS ?totaal_uren)
106        # selecteer alle geregistreerde uren van de werknemers per vestiging
107        WHERE
108        {
109            SELECT DISTINCT
110                ?gewerkte_periode
111                ?start_werk
112                ?eind_werk
113                ?uren
114                ?vestiging
115            WHERE 
116            { 
117                BIND ('2023-07-01'^^xsd:date AS ?start_periode)
118                BIND ('2023-09-30'^^xsd:date AS ?eind_periode)
119
120                # selecteer werkovereenkomsten waarbij werknemer een zorgverlenerfunctie heeft
121                ?functie 
122                    a onz-pers:ZorgverlenerFunctie ;  
123                    onz-g:startDatum ?start_functie .
124                OPTIONAL { ?functie onz-g:eindDatum ?eind_functie . }
125                
126                FILTER(?start_functie <= ?eind_periode && ((?eind_functie >= ?start_periode) || (!BOUND(?eind_functie))))
127                BIND(IF(!BOUND(?eind_functie), ?eind_periode, 
128                    IF(?eind_functie < ?eind_periode, ?eind_functie, ?eind_periode)
129                ) AS ?eind_functie_reken)
130                BIND(IF(?start_functie < ?start_periode, ?start_periode, ?start_functie) AS ?start_functie_reken)
131                
132                ?overeenkomst 
133                    a onz-pers:ArbeidsOvereenkomst ;
134                    onz-pers:heeftOpdrachtnemer ?medewerker ;
135                    onz-g:isAbout ?locatie_contract ;
136                    onz-g:isAbout ?functie .
137                
138                # selecteer uren van gewerkte periode binnen periode
139                ?gewerkte_periode 
140                    a onz-pers:GewerktePeriode ;
141                    onz-g:definedBy ?overeenkomst ;
142                    onz-g:hasBeginTimeStamp ?start_werk_datetime ;
143                    onz-g:hasEndTimeStamp ?eind_werk_datetime ; 
144                    onz-g:hasQuality / onz-g:hasQualityValue / onz-g:hasDataValue ?uren_voor_correctie .
145                OPTIONAL{?gewerkte_periode onz-g:hasPerdurantLocation ?locatie_werk .}
146                # Als begin- en endTimeStamp van type dateTime zijn dan omzetten zodat vergeleken kan worden met start en eind period
147                BIND(STRDT(SUBSTR(STR(?start_werk_datetime), 1, 10), xsd:date) AS ?start_werk)
148                BIND(STRDT(SUBSTR(STR(?eind_werk_datetime), 1, 10), xsd:date) AS ?eind_werk)
149                FILTER(?start_werk >= ?start_functie_reken && ?eind_werk <= ?eind_functie_reken)
150
151                ?locatie_contract a onz-g:StationaryArtifact
152                BIND(IF(!BOUND(?locatie_werk), ?locatie_contract, ?locatie_werk) AS ?locatie)
153
154                # selecteer locatie met bijbehorende vestiging
155                {
156                    ?locatie onz-g:partOf* ?vestiging_uri .
157                    ?vestiging_uri 
158                        a onz-org:Vestiging ;
159                        onz-g:identifiedBy ?vest_nr.
160                    ?vest_nr a onz-org:Vestigingsnummer ;
161                        onz-g:hasDataValue ?vestiging .
162                } UNION {
163                    # Includeer ook de organisatie als geheel en label deze als vestiging
164                    ?locatie onz-g:partOf*/onz-org:vestigingVan ?organisatie_uri .
165                    ?organisatie_uri
166                        a onz-g:Business ;
167                        rdfs:label ?Organisatie .
168                    BIND(CONCAT('Totaal ',?Organisatie) AS ?vestiging)
169                }
170
171                BIND(IF(!BOUND(?locatie_werk) && BOUND(?vestiging_uri), 0, 1) AS ?correctie)
172                BIND(?uren_voor_correctie * ?correctie AS ?uren)
173            }
174        }
175        GROUP BY ?vestiging
176    }
177}
178ORDER BY ?vestiging ?kwalificatie_niveau
179

Heb je feedback?

Loopt u tegen een issue of vraag aan bij het KIK-V product? Neem dan contact met ons op!