Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 01-05-2026
- Inwerkingtreding:
- 01-05-2026
11.3 Wat is het langdurend ziekteverzuimpercentage excl. zwangerschapsverlof?
Concepten
- Arbeidsovereenkomst
- Contractomvang
- Contractomvangwaarde
- Onverplaatsbaar artefact
- Verzuimtijd
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- Ziekteperiode
- Zorgkantoor regio
- Zorgverlener (functie)
Relaties
- deel van
- gaat over
- gedefinieerd door
- geïdentificeerd door
- heeft deel
- heeft eigenschap of kenmerk
- heeft eigenschapswaarde
- heeft lokaliseerbaar gebied
- heeft meeteenheid
- heeft opdrachtnemer
- opereert in regio
Eigenschappen
Instanties
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: ZK 11.3 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 (?vestiging AS ?Indeling) 12 (IF(SUM(?noemer_som_zorg) = 0, "Ongedefinieerd", 13 ROUND( (100.0 * SUM(?ziekte_som_zorg) / SUM(?noemer_som_zorg)) * 100 ) / 100 14 ) AS ?Zorg) 15 (IF(SUM(?noemer_som_niet_zorg) = 0, "Ongedefinieerd", 16 ROUND( (100.0 * SUM(?ziekte_som_niet_zorg) / SUM(?noemer_som_niet_zorg)) * 100 ) / 100 17 ) AS ?Niet_zorg) 18 (IF(SUM(?noemer_som_totaal) = 0, "Ongedefinieerd", 19 ROUND( (100.0 * SUM(?ziekte_som_totaal) / SUM(?noemer_som_totaal)) * 100 ) / 100 20 ) AS ?Totaal) 21WHERE 22{ 23 { 24 SELECT 25 ?overeenkomst_afspraak 26 ?persoon 27 (SUM(?ziekte_verzuim_zorg) AS ?ziekte_som_zorg) 28 (SUM(?noemer_afspraak_zorg) AS ?noemer_som_zorg) 29 (SUM(?ziekte_verzuim_niet_zorg) AS ?ziekte_som_niet_zorg) 30 (SUM(?noemer_afspraak_niet_zorg) AS ?noemer_som_niet_zorg) 31 (SUM(?ziekte_verzuim_totaal) AS ?ziekte_som_totaal) 32 (SUM(?noemer_afspraak_totaal) AS ?noemer_som_totaal) 33 WHERE 34 { 35 # TELLER: selecteer het ?ziekte_verzuim van de medewerkers per persoon per werkovereenkomstafspraak 36 { 37 SELECT 38 ?overeenkomst_afspraak 39 ?persoon 40 ?ziekte_verzuim_zorg 41 ?ziekte_verzuim_niet_zorg 42 ?ziekte_verzuim_totaal 43 ("0.0"^^xsd:decimal AS ?noemer_afspraak_zorg) 44 ("0.0"^^xsd:decimal AS ?noemer_afspraak_niet_zorg) 45 ("0.0"^^xsd:decimal AS ?noemer_afspraak_totaal) 46 WHERE { 47 48 # BIND(2024 AS ?jaar) 49 # BIND("Q2" AS ?kwartaal) 50 BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 51 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 52 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 53 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 54 ?unbound)))) AS ?start_periode) 55 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 56 57 # Selecteer alle arbeidsovereenkomsten die geldig zijn 58 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak . 59 ?overeenkomst onz-pers:heeftOpdrachtnemer ?persoon . 60 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak . 61 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 62 FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak))) 63 64 # Bepaal per overeenkomstafspraak de ptf en zorg/niet-zorg 65 ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde . 66 ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid . 67 ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor . 68 BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf) 69 70 # Check zorg/niet zorg personeel 71 BIND(IF(EXISTS {?overeenkomst_afspraak onz-g:isAbout/a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?is_zorg) 72 73 # Clip de afspraak op het kwartaal 74 BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr) 75 BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr) 76 77 # Check per afspraak of er ziekteverzuim is en wanneer deze start en eindigt 78 OPTIONAL { 79 VALUES ?type_verzuim { onz-pers:ZiektePeriode } 80 ?ziekte a ?type_verzuim ; onz-g:definedBy ?overeenkomst ; onz-g:startDatum ?start_ziekte_periode . 81 ?start_ziekte_periode ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_ziekte_periode_reken . 82 OPTIONAL { ?ziekte onz-g:eindDatum ?eind_ziekte_periode } 83 84 OPTIONAL { 85 ?ziekte onz-g:hasQuality ?verzuim_tijd . 86 ?verzuim_tijd a onz-pers:VerzuimTijdKwaliteit ; onz-g:hasQualityValue ?verzuim_waarde . 87 ?verzuim_waarde onz-g:hasUnitOfMeasure onz-g:percent ; onz-g:startDatum ?start_verzuim_waarde_temp . 88 OPTIONAL { ?verzuim_waarde onz-g:hasDataValue ?verzuim_percentage } 89 OPTIONAL { ?verzuim_waarde onz-g:eindDatum ?eind_verzuim_waarde_temp } 90 } 91 } 92 93 # Zorg ervoor dat ziekteperiodes overlappen met de looptijd van de afspraak en het kwartaal 94 FILTER((?start_ziekte_periode <= ?eind_afspraak_corr && (?eind_ziekte_periode >= ?start_afspraak_corr || !BOUND(?eind_ziekte_periode)))) 95 FILTER ((?start_ziekte_periode <= ?eind_periode && (?eind_ziekte_periode >= ?start_periode || !BOUND(?eind_ziekte_periode)))) 96 97 # Zorg ervoor dat verzuimperiodes overlappen met de looptijd van de afspraak en het kwartaal 98 FILTER ((?start_verzuim_waarde_temp <= ?eind_periode && (?eind_verzuim_waarde_temp >= ?start_periode || !BOUND(?eind_verzuim_waarde_temp)))) 99 FILTER ((?start_verzuim_waarde_temp <= ?eind_afspraak_corr && (!BOUND(?eind_verzuim_waarde_temp) || ?eind_verzuim_waarde_temp >= ?start_afspraak_corr)) ) 100 101 # Bepaal de einddatum van de ziekteperiode (als langer doorloopt óf geen einddatum: klip op het einde van het kwartaal) 102 BIND(IF(!BOUND(?ziekte), ?unbound, IF(!BOUND(?eind_ziekte_periode) || ?eind_ziekte_periode > ?eind_periode, ?eind_periode, ?eind_ziekte_periode)) AS ?eind_ziekte_periode_clip) 103 OPTIONAL { FILTER(BOUND(?eind_ziekte_periode_clip)) ?eind_ziekte_periode_clip ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_ziekte_periode_reken } 104 105 # Filter op langdurige ziekte (> 28 dagen) 106 BIND(IF( !BOUND(?eind_ziekte_periode_reken) || !BOUND(?start_ziekte_periode_reken), ?unbound, ?eind_ziekte_periode_reken - ?start_ziekte_periode_reken + 1) AS ?dagen_ziekte_periode) 107 FILTER(?dagen_ziekte_periode > 28) 108 109 # Zorg dat de start- en eind verzuimdatum binnen de meetperiode vallen 110 BIND(IF(?start_verzuim_waarde_temp < ?start_afspraak_corr, ?start_afspraak_corr, ?start_verzuim_waarde_temp) AS ?start_verzuim_waarde_final) 111 BIND(IF(!BOUND(?eind_verzuim_waarde_temp), ?eind_afspraak_corr, IF(?eind_verzuim_waarde_temp > ?eind_afspraak_corr, ?eind_afspraak_corr, ?eind_verzuim_waarde_temp)) AS 112 ?eind_verzuim_waarde_final) 113 114 # Bereken per verzuimperiode het aantal zieke dagen 115 OPTIONAL { 116 FILTER(BOUND(?start_verzuim_waarde_final) && BOUND(?eind_verzuim_waarde_final)) 117 ?start_verzuim_waarde_final ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_verzuim_waarde_final_reken . 118 ?eind_verzuim_waarde_final ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_verzuim_waarde_final_reken . 119 BIND(?eind_verzuim_waarde_final_reken - ?start_verzuim_waarde_final_reken + 1 AS ?dagen_verzuim_periode) 120 } 121 122 # Bereken het ziekteverzuim per dag (PTF * ZIEKTEPERCENTAGE * DAGEN VERZUIM PERIODE) 123 BIND(IF(BOUND(?verzuim_percentage), xsd:decimal(?verzuim_percentage), 100.0) AS ?pct) 124 BIND(IF(BOUND(?dagen_verzuim_periode), ?ptf * (?pct / 100.0) * ?dagen_verzuim_periode, ?unbound) AS ?ziekte_verzuim_totaal) 125 BIND(?ziekte_verzuim_totaal * ?is_zorg AS ?ziekte_verzuim_zorg) 126 BIND(?ziekte_verzuim_totaal - ?ziekte_verzuim_zorg AS ?ziekte_verzuim_niet_zorg) 127 } 128 } 129 UNION 130 # Noemer: selecteer ptf * dagen afspraak van de medewerkers per persoon per afspraak, ongeacht verzuim 131 { 132 SELECT 133 ?overeenkomst_afspraak 134 ?persoon 135 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_niet_zorg) 136 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_zorg) 137 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_totaal) 138 ?noemer_afspraak_niet_zorg 139 ?noemer_afspraak_zorg 140 ?noemer_afspraak_totaal 141 WHERE 142 { 143 # BIND(2024 AS ?jaar) 144 # BIND("Q2" AS ?kwartaal) 145 BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 146 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 147 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 148 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 149 ?unbound)))) AS ?start_periode) 150 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 151 152 # Selecteer alle arbeidsovereenkomsten die geldig zijn 153 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak . 154 ?overeenkomst onz-pers:heeftOpdrachtnemer ?persoon . 155 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak . 156 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 157 FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak))) 158 159 # Bepaal per overeenkomstafspraak de ptf en zorg/niet-zorg 160 ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde . 161 ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid . 162 ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor . 163 BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf) 164 165 # Check zorg/niet zorg personeel 166 BIND(IF(EXISTS {?overeenkomst_afspraak onz-g:isAbout/a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?is_zorg) 167 168 # Clip de afspraak op het kwartaal 169 BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr) 170 BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr) 171 172 # Bereken hoeveel dagen van de afspraak overlappen met de meetperiode 173 ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_afspraak_reken . 174 ?eind_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_afspraak_reken . 175 BIND(?eind_afspraak_reken - ?start_afspraak_reken + 1 AS ?dagen_afspraak) 176 177 # Noemer per afspraak = PTF * kalenderdagen binnen meetperiode 178 BIND(?ptf * ?dagen_afspraak AS ?noemer_afspraak_totaal) 179 BIND(?noemer_afspraak_totaal * ?is_zorg AS ?noemer_afspraak_zorg) 180 BIND(?noemer_afspraak_totaal - ?noemer_afspraak_zorg AS ?noemer_afspraak_niet_zorg) 181 } 182 } 183 } 184 GROUP BY ?overeenkomst_afspraak ?persoon 185 } 186 187 { 188 # per vestiging 189 ?overeenkomst_afspraak onz-g:isAbout ?locatie . 190 ?locatie a onz-g:StationaryArtifact ; 191 onz-g:partOf* ?vestiging_uri . 192 ?vestiging_uri a onz-org:Vestiging ; 193 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 194 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 195 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 196 ?zk_regio a onz-org:ZorgkantoorRegio . 197 ?zorgkantoor onz-g:hasOperatingRange ?zk_regio . 198 199 ?vestiging_uri onz-g:identifiedBy ?vest_nr . 200 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 201 } 202 UNION 203 { 204 # totaal organisatie 205 BIND("Organisatie (gecontracteerd + algemeen)" AS ?vestiging) 206 } 207 208} 209GROUP BY ?vestiging 210ORDER BY ?Indeling