Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Versie:

Publicatiedatum:23-12-2024

Inwerkingtreding:23-12-2024




Bekijk bron...

11.1 Kortdurend ziekteverzuimpercentage (excl. zwangerschapsverlof)

Concepten

Relaties

Eigenschappen

Instanties

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren 11.1
2# Parameters: ?jaar, ?kwartaal, ?zorgkantoor
3# Ontologie: versie 3.0 of nieuwer
4
5PREFIX onz-g: <http://purl.org/ozo/onz-g#>
6PREFIX onz-org: <http://purl.org/ozo/onz-org#>
7PREFIX time: <http://www.w3.org/2006/time#>
8PREFIX onz-pers: <http://purl.org/ozo/onz-pers#>
9PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
10
11SELECT
12	?vestiging
13	(IF(?noemer_zorg = 0, "Ongedefineerd", 100 * ?teller_zorg / ?noemer_zorg) AS ?indicator_zorg)
14	(IF(?noemer_niet_zorg = 0, "Ongedefineerd", 100 * ?teller_niet_zorg / ?noemer_niet_zorg) AS ?indicator_niet_zorg)
15{
16    SELECT 
17        ?vestiging
18        (SUM(?zorg * ?netto_verzuim_totaal) AS ?teller_zorg)
19        (SUM(?zorg * ?netto_dagen_afspraak) AS ?noemer_zorg)
20        (SUM(?niet_zorg * ?netto_verzuim_totaal) AS ?teller_niet_zorg)
21        (SUM(?niet_zorg * ?netto_dagen_afspraak) AS ?noemer_niet_zorg)
22    {
23        {
24            SELECT
25                ?zorg
26                ?niet_zorg
27                ?overeenkomst_afspraak
28				(MAX(?dagen_afspraak * ?ptf) AS ?netto_dagen_afspraak)
29                (SUM((?dagen_verzuim - ?totaal_hersteld) * ?ptf) AS ?netto_verzuim_totaal)            
30            {
31                SELECT
32                    ?zorg
33                    ?niet_zorg
34                    ?overeenkomst_afspraak
35                    ?ptf
36                    ?ziekte
37                    ?dagen_afspraak
38                    ?dagen_verzuim
39                    (SUM(?dagen_hersteld) AS ?totaal_hersteld)
40                {
41                    # BIND(2023 AS ?jaar)
42                    # BIND("Q3" AS ?kwartaal)
43                    BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')),
44                        IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')),
45                        IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')),
46                        IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')),
47                        '')))) AS ?start_periode)
48                    BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode)
49                    
50                    ?eind_periode ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_periode_reken .
51                    ?overeenkomst 
52                        a onz-pers:ArbeidsOvereenkomst ;
53                        onz-g:hasPart ?overeenkomst_afspraak .
54                    ?overeenkomst_afspraak
55                        a onz-pers:WerkOvereenkomstAfspraak ;
56                        onz-g:startDatum ?start_afspraak .
57                    OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak }
58                    FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak)))
59                    ?overeenkomst_afspraak onz-g:hasPart ?omvang .
60                    ?omvang
61                        a onz-pers:ContractOmvang ;
62                        onz-g:isAbout ?omvang_waarde .
63                    ?omvang_waarde
64                        a onz-pers:ContractOmvangWaarde ;
65                        onz-g:hasDataValue ?omvang_getal ;
66                        onz-g:hasUnitOfMeasure ?omvang_eenheid .
67                    ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor .
68                    BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf)
69                    BIND(IF(EXISTS {?overeenkomst_afspraak onz-g:isAbout/a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?zorg)
70                    BIND(IF(?zorg = 0, 1, 0) AS ?niet_zorg)
71                    BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr)
72                    BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr)
73                    ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_afspraak_reken .
74                    ?eind_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_afspraak_reken .
75                    BIND(?eind_afspraak_reken - ?start_afspraak_reken + 1 AS ?dagen_afspraak)
76                    OPTIONAL {
77                        VALUES ?type_verzuim # Keuze in-/exclusief zwangerschapsverlog
78                        { 
79                            onz-pers:ZiektePeriode
80                            # onz-pers:ZwangerschapsVerlof
81                        }
82                        ?ziekte 
83                            a ?type_verzuim ;
84                            onz-g:definedBy ?overeenkomst ;
85                            onz-g:startDatum ?start_ziekte_periode .
86                        ?start_ziekte_periode ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_ziekte_periode_reken .
87                        OPTIONAL {
88                            ?ziekte onz-g:eindDatum ?eind_ziekte_periode_temp .
89                            ?eind_ziekte_periode_temp ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_ziekte_periode_temp_reken .
90                        }
91                        # FILTER(?start_ziekte_periode <= ?eind_afspraak_corr && (?eind_ziekte_periode_temp >= ?start_afspraak_corr || !BOUND(?eind_ziekte_periode_temp)))
92                        OPTIONAL {
93                            ?ziekte onz-g:hasQuality ?verzuim_tijd .
94                            ?verzuim_tijd
95                                a onz-pers:VerzuimTijdKwaliteit ;
96                                onz-g:hasQualityValue ?verzuim_waarde .
97                            ?verzuim_waarde
98                                onz-g:hasUnitOfMeasure onz-g:percent ;
99                                onz-g:startDatum ?start_verzuim_waarde_temp ;
100                                onz-g:hasDataValue ?verzuim_percentage .
101                            ?start_verzuim_waarde_temp ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_verzuim_waarde_temp_reken_temp
102                            OPTIONAL {
103                                ?verzuim_waarde onz-g:eindDatum ?eind_verzuim_waarde_temp .
104                                ?eind_verzuim_waarde_temp ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_verzuim_waarde_temp_reken_temp
105                            }
106                        }
107                    }
108                    BIND(IF(!BOUND(?start_verzuim_waarde_temp), ?unbound, IF(?start_verzuim_waarde_temp_reken_temp < ?start_afspraak_reken, ?start_afspraak_reken, ?start_verzuim_waarde_temp_reken_temp)) AS ?start_verzuim_waarde_reken)
109                    BIND(IF(!BOUND(?start_verzuim_waarde_temp), ?unbound, IF(!BOUND(?eind_verzuim_waarde_temp_reken_temp) || ?eind_verzuim_waarde_temp_reken_temp > ?eind_afspraak_reken, ?eind_afspraak_reken, ?eind_verzuim_waarde_temp_reken_temp)) AS ?eind_verzuim_waarde_reken)
110
111                    # Gebruikt totale ziekteperiode t/m eind meetperiode als maat voor kort/langdurend verzuim
112                    BIND(IF(!BOUND(?ziekte), ?unbound, IF(!BOUND(?eind_ziekte_periode_temp) || ?eind_ziekte_periode_temp > ?eind_periode, ?eind_periode, ?eind_ziekte_periode_temp)) AS ?eind_ziekte_periode)
113                    BIND(IF(!BOUND(?ziekte), ?unbound, IF(!BOUND(?eind_ziekte_periode_temp_reken) || ?eind_ziekte_periode_temp_reken > ?eind_periode_reken, ?eind_periode_reken, ?eind_ziekte_periode_temp_reken)) AS ?eind_ziekte_periode_reken)
114                    BIND(IF(!BOUND(?ziekte), ?unbound, ?eind_ziekte_periode_reken - ?start_ziekte_periode_reken + 1) AS ?dagen_ziekte_periode)
115                    # Filter kort/langdurend verzuim
116                    BIND(IF(?dagen_ziekte_periode <= 28 || !BOUND(?ziekte), 1, 0) AS ?voorwaarde_1)
117                    BIND(IF(BOUND(?ziekte) && (?start_ziekte_periode <= ?eind_afspraak_corr && (?eind_ziekte_periode >= ?start_afspraak_corr || !BOUND(?eind_ziekte_periode))), 1, 0) AS ?voorwaarde_2)
118                    BIND(IF(!BOUND(?verzuim_tijd) || (BOUND(?verzuim_tijd) && (?start_verzuim_waarde_temp <= ?eind_afspraak_corr && (?eind_verzuim_waarde_temp >= ?start_afspraak_corr || !BOUND(?eind_verzuim_waarde_temp)))), 1, 0) AS ?voorwaarde_3)
119                    BIND(?voorwaarde_1 * ?voorwaarde_2 * ?voorwaarde_3 AS ?geldige_ziekte)
120
121                    BIND(IF(BOUND(?verzuim_tijd), ?geldige_ziekte * (100 - ?verzuim_percentage)/100 * (?eind_verzuim_waarde_reken - ?start_verzuim_waarde_reken + 1), 0) AS ?dagen_hersteld)
122                    BIND(IF(!BOUND(?ziekte), ?unbound, IF(?start_ziekte_periode_reken < ?start_afspraak_reken, ?start_afspraak_reken, ?start_ziekte_periode_reken)) AS ?start_ziekte_reken)
123                    BIND(IF(!BOUND(?ziekte), ?unbound, IF(?eind_ziekte_periode_temp_reken > ?eind_afspraak_reken || !BOUND(?eind_ziekte_periode_temp_reken), ?eind_afspraak_reken, ?eind_ziekte_periode_temp_reken)) AS ?eind_ziekte_reken)
124                    BIND(IF(BOUND(?ziekte), ?geldige_ziekte * (?eind_ziekte_reken - ?start_ziekte_reken + 1), 0) AS ?dagen_verzuim)
125                }
126                GROUP BY
127                    ?zorg
128                    ?niet_zorg
129                    ?overeenkomst_afspraak
130                    ?ptf
131                    ?ziekte
132                    ?dagen_afspraak
133                    ?dagen_verzuim
134            }
135            GROUP BY
136                ?zorg
137                ?niet_zorg
138                ?overeenkomst_afspraak
139        }
140        # BIND(onz-org:ZorgkantoorMenzis AS ?zorgkantoor)
141        ?overeenkomst_afspraak onz-g:isAbout ?locatie .
142        ?locatie 
143            a onz-g:StationaryArtifact ;
144            onz-g:partOf* ?vestiging_uri .
145        ?vestiging_uri a onz-org:Vestiging ;
146            onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 .
147        BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode)
148        ?pc_gebied 
149            onz-g:identifiedBy ?postcode ;
150            onz-g:partOf+ ?zk_regio .
151        ?zk_regio a onz-org:ZorgkantoorRegio .
152        ?zorgkantoor onz-g:hasOperatingRange ?zk_regio .
153        {     
154            ?vestiging_uri onz-g:identifiedBy ?vest_nr.
155            ?vest_nr a onz-org:Vestigingsnummer ;
156            onz-g:hasDataValue ?vestiging .
157            BIND(?zorgkantoor AS ?zorgkantoor_vestiging)
158        } UNION {
159            # Includeer ook de organisatie als geheel en label deze als vestiging
160            ?vestiging_uri onz-org:vestigingVan ?organisatie_uri .
161            BIND("Totaal organisatie" AS ?vestiging)
162            BIND("n.v.t." AS ?zorgkantoor_vestiging)
163        }
164    }
165    GROUP BY ?vestiging
166    ORDER BY ?vestiging 
167}
168ORDER BY ?vestiging
169

Heb je feedback?

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