Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
03-10-2025

Inwerkingtreding:
03-10-2025

1.1 Wat is het gemiddeld aantal personeelsleden?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren 1.1
2# Parameters: ?jaar, ?kwartaal, ?zorgkantoor
3# Ontologie: versie 3.0.0 of nieuwer
4
5PREFIX onz-g:   <http://purl.org/ozo/onz-g#>
6PREFIX onz-pers:<http://purl.org/ozo/onz-pers#>
7PREFIX onz-org: <http://purl.org/ozo/onz-org#>
8PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>
9PREFIX xsd:     <http://www.w3.org/2001/XMLSchema#>
10PREFIX time:    <http://www.w3.org/2006/time#>
11
12SELECT
13  (?vestiging AS ?Indeling)
14  (SUM(IF(?dagen_periode <= 0, 0, IF(?zorg_aandeel       / ?dagen_periode > 1, 1, ?zorg_aandeel       / ?dagen_periode))) AS ?Zorg)
15  (SUM(IF(?dagen_periode <= 0, 0, IF(?niet_zorg_aandeel  / ?dagen_periode > 1, 1, ?niet_zorg_aandeel  / ?dagen_periode))) AS ?Niet_zorg)
16  (SUM(IF(?dagen_periode <= 0, 0, IF((?zorg_aandeel + ?niet_zorg_aandeel) / ?dagen_periode > 1, 1, (?zorg_aandeel + ?niet_zorg_aandeel) / ?dagen_periode))) AS ?Totaal)
17WHERE {
18  # -------------------------------
19  # MIDDENLAAG: per persoon × vestiging
20  # -------------------------------
21  SELECT
22    ?vestiging
23    ?zorgkantoor_vestiging
24    ?persoon
25    ?dagen_periode
26    # MERGE/UNION: aantal unieke dagen met dekking per categorie
27    (SUM(?zorg_dagen_uni)      AS ?zorg_aandeel)
28    (SUM(?niet_zorg_dagen_uni) AS ?niet_zorg_aandeel)
29  WHERE {
30    # -------------------------------
31    # BINNENLAAG: knip afspraken, tel unieke dagen per categorie
32    # -------------------------------
33    {
34      SELECT
35        ?vestiging
36        ?zorgkantoor_vestiging
37        ?persoon
38        ?dagen_periode
39        (COUNT(DISTINCT ?dag_num_zorg)     AS ?zorg_dagen_uni)
40        (COUNT(DISTINCT ?dag_num_nietzorg) AS ?niet_zorg_dagen_uni)
41      WHERE {
42        # ---- Parameters & periode ----
43        #BIND(2024 AS ?jaar)
44        #BIND("Q1" AS ?kwartaal)
45
46        BIND(
47          IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')),
48          IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')),
49          IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')),
50          IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')),
51          '')))) AS ?start_periode
52        )
53        BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode)
54
55        ?start_periode ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_periode_numeriek .
56        ?eind_periode  ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_periode_numeriek .
57        BIND(?eind_periode_numeriek - ?start_periode_numeriek + 1 AS ?dagen_periode)
58
59        # ---- Geldige werkovereenkomsten ----
60        VALUES ?personeels_overeenkomst {
61          onz-pers:ArbeidsOvereenkomst
62          onz-pers:UitzendOvereenkomst
63          onz-pers:InhuurOvereenkomst
64        }
65
66        # ---- Afspraken + knippen ----
67        ?overeenkomst a ?personeels_overeenkomst ;
68                      onz-pers:heeftOpdrachtnemer ?persoon ;
69                      onz-g:startDatum ?overeenkomst_start ;
70                      onz-g:hasPart ?overeenkomst_afspraak .
71        OPTIONAL { ?overeenkomst onz-g:eindDatum ?overeenkomst_eind }
72
73        ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ;
74                               onz-g:startDatum ?start_afspraak .
75        OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
76
77        FILTER( ?overeenkomst_start <= ?eind_periode &&
78                ( ?overeenkomst_eind >= ?start_periode || !BOUND(?overeenkomst_eind) ) )
79
80        BIND( IF(?overeenkomst_start <  ?start_periode, ?start_periode, ?overeenkomst_start) AS ?start_corr )
81        BIND( IF(!BOUND(?overeenkomst_eind) || ?overeenkomst_eind > ?eind_periode, ?eind_periode, ?overeenkomst_eind) AS ?eind_corr )
82
83        BIND( IF(?start_afspraak > ?start_corr, ?start_afspraak, ?start_corr) AS ?start_afspraak_corr )
84        BIND( IF(BOUND(?eind_afspraak) && ?eind_afspraak < ?eind_corr, ?eind_afspraak, ?eind_corr) AS ?eind_afspraak_corr )
85        FILTER(?start_afspraak_corr <= ?eind_afspraak_corr)
86
87        # ---- Categorie & vestiging ----
88        ?overeenkomst_afspraak onz-g:isAbout ?functie .
89        ?functie a onz-g:OccupationalPositionRole .
90        BIND( IF(EXISTS { ?functie a onz-pers:ZorgverlenerFunctie }, 1, 0) AS ?zorg_boolean )
91
92        ?overeenkomst_afspraak onz-g:isAbout ?locatie .
93        ?locatie a onz-g:StationaryArtifact ;
94                 onz-g:partOf* ?vestiging_uri .
95        ?vestiging_uri a onz-org:Vestiging ;
96                       onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
97
98        BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
99        ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio .
100        ?zk_regio a onz-org:ZorgkantoorRegio .
101        ?zorgkantoor onz-g:hasOperatingRange ?zk_regio .
102
103        {
104          ?vestiging_uri onz-g:identifiedBy ?vest_nr .
105          ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging .
106        } UNION {
107          ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
108          BIND("Totaal organisatie" AS ?vestiging)
109          BIND("n.v.t." AS ?zk_vestiging)
110        }
111        BIND( IF(!BOUND(?zk_vestiging), ?zorgkantoor, ?zk_vestiging) AS ?zorgkantoor_vestiging )
112
113        # ---- Kalender: alle dagen in dit kwartaal (offset 0..99, gefilterd tot eind) ----
114        VALUES ?tiendetal {0 1 2 3 4 5 6 7 8 9}
115        VALUES ?eental   {0 1 2 3 4 5 6 7 8 9}
116        BIND((?tiendetal*10 + ?eental) AS ?offset)
117        BIND(?start_periode_numeriek + ?offset AS ?dag_num)
118        FILTER(?dag_num <= ?eind_periode_numeriek)
119
120        # ---- Dag binnen deze afspraak? Zo ja, tel voor de juiste categorie ----
121        ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_num .
122        ?eind_afspraak_corr  ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?end_num .
123        FILTER(?start_num <= ?dag_num && ?dag_num <= ?end_num)
124
125        # DISTINCT in de COUNT voorkomt dubbeltelling bij overlap op dezelfde dag
126        BIND(IF(?zorg_boolean = 1, ?dag_num, ?unbound) AS ?dag_num_zorg)
127        BIND(IF(?zorg_boolean = 0, ?dag_num, ?unbound) AS ?dag_num_nietzorg)
128      }
129      GROUP BY ?vestiging ?zorgkantoor_vestiging ?persoon ?dagen_periode
130    }
131  }
132  GROUP BY ?vestiging ?zorgkantoor_vestiging ?persoon ?dagen_periode
133}
134GROUP BY ?vestiging ?zorgkantoor_vestiging
135ORDER BY ?vestiging
136