Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Versie:

Publicatiedatum:27-06-2024

Inwerkingtreding:01-10-2024




Bekijk bron...

6.1.4 Percentage ingezette uren personeel per kwalificatieniveau Q4 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-10-01'^^xsd:date AS ?start_periode)
37                BIND ('2023-12-31'^^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-10-01'^^xsd:date AS ?start_periode)
118                BIND ('2023-12-31'^^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!