Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 01-05-2026
- Inwerkingtreding:
- 01-05-2026
11.2 Wat is het kortdurend ziekteverzuimpercentage incl. zwangerschapsverlof?
Concepten
- Arbeidsovereenkomst
- Contractomvang
- Contractomvangwaarde
- Onverplaatsbaar artefact
- Verzuimtijd
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- Ziekteperiode
- Zorgkantoor regio
- Zorgverlener (functie)
- Zwangerschapsverlof
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.2 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) # Parameter 49 # BIND("Q1" AS ?kwartaal) # Parameter 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 onz-pers:ZwangerschapsVerlof } 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 BIND(IF(!BOUND(?verzuim_waarde), 100, ?verzuim_percentage) AS ?verzuim_percentage_eff) 92 BIND(IF(!BOUND(?verzuim_waarde), ?start_ziekte_periode, ?start_verzuim_waarde_temp) AS ?start_verzuim_waarde_eff) 93 BIND(IF(!BOUND(?verzuim_waarde), ?eind_ziekte_periode, ?eind_verzuim_waarde_temp) AS ?eind_verzuim_waarde_eff) 94 } 95 96 # Zorg ervoor dat ziekteperiodes overlappen met de looptijd van de afspraak en het kwartaal 97 FILTER((?start_ziekte_periode <= ?eind_afspraak_corr && (?eind_ziekte_periode >= ?start_afspraak_corr || !BOUND(?eind_ziekte_periode)))) 98 FILTER ((?start_ziekte_periode <= ?eind_periode && (?eind_ziekte_periode >= ?start_periode || !BOUND(?eind_ziekte_periode)))) 99 100 # Zorg ervoor dat verzuimperiodes overlappen met de looptijd van de afspraak en het kwartaal 101 FILTER ((?start_verzuim_waarde_eff <= ?eind_periode && (?eind_verzuim_waarde_eff >= ?start_periode || !BOUND(?eind_verzuim_waarde_eff)))) 102 FILTER ((?start_verzuim_waarde_eff <= ?eind_afspraak_corr && (!BOUND(?eind_verzuim_waarde_eff) || ?eind_verzuim_waarde_eff >= ?start_afspraak_corr)) ) 103 104 # Bepaal de einddatum van de ziekteperiode (als langer doorloopt óf geen einddatum: klip op het einde van het kwartaal) 105 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) 106 OPTIONAL { FILTER(BOUND(?eind_ziekte_periode_clip)) ?eind_ziekte_periode_clip ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_ziekte_periode_reken } 107 108 # Filter op kortdurende ziekte (<= 28 dagen) 109 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) 110 FILTER(?dagen_ziekte_periode <= 28) 111 112 # Zorg dat de start- en eind verzuimdatum binnen de meetperiode vallen 113 BIND(IF(?start_verzuim_waarde_eff < ?start_afspraak_corr, ?start_afspraak_corr, ?start_verzuim_waarde_eff) AS ?start_verzuim_waarde_final) 114 BIND(IF(!BOUND(?eind_verzuim_waarde_eff), ?eind_afspraak_corr, IF(?eind_verzuim_waarde_eff > ?eind_afspraak_corr, ?eind_afspraak_corr, ?eind_verzuim_waarde_eff)) AS 115 ?eind_verzuim_waarde_final) 116 117 # Bereken per verzuimperiode het aantal zieke dagen 118 OPTIONAL { 119 FILTER(BOUND(?start_verzuim_waarde_final) && BOUND(?eind_verzuim_waarde_final)) 120 ?start_verzuim_waarde_final ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_verzuim_waarde_final_reken . 121 ?eind_verzuim_waarde_final ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_verzuim_waarde_final_reken . 122 BIND(?eind_verzuim_waarde_final_reken - ?start_verzuim_waarde_final_reken + 1 AS ?dagen_verzuim_periode) 123 } 124 125 # Bereken het ziekteverzuim per dag (PTF * ZIEKTEPERCENTAGE * DAGEN VERZUIM PERIODE) 126 BIND(IF(BOUND(?verzuim_percentage_eff), xsd:decimal(?verzuim_percentage_eff), 100.0) AS ?pct) 127 BIND(IF(BOUND(?dagen_verzuim_periode), ?ptf * (?pct / 100.0) * ?dagen_verzuim_periode, ?unbound) AS ?ziekte_verzuim_totaal) 128 BIND(?ziekte_verzuim_totaal * ?is_zorg AS ?ziekte_verzuim_zorg) 129 BIND(?ziekte_verzuim_totaal - ?ziekte_verzuim_zorg AS ?ziekte_verzuim_niet_zorg) 130 } 131 } 132 UNION 133 # Noemer: selecteer ptf * dagen afspraak van de medewerkers per persoon per afspraak, ongeacht verzuim 134 { 135 SELECT 136 ?overeenkomst_afspraak 137 ?persoon 138 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_niet_zorg) 139 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_zorg) 140 ("0.0"^^xsd:decimal AS ?ziekte_verzuim_totaal) 141 ?noemer_afspraak_niet_zorg 142 ?noemer_afspraak_zorg 143 ?noemer_afspraak_totaal 144 WHERE 145 { 146 # BIND(2024 AS ?jaar) # Parameter 147 # BIND("Q1" AS ?kwartaal) # Parameter 148 BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 149 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 150 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 151 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 152 ?unbound)))) AS ?start_periode) 153 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 154 155 # Selecteer alle arbeidsovereenkomsten die geldig zijn 156 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak . 157 ?overeenkomst onz-pers:heeftOpdrachtnemer ?persoon . 158 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak . 159 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 160 FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak))) 161 162 # Bepaal per overeenkomstafspraak de ptf en zorg/niet-zorg 163 ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde . 164 ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid . 165 ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor . 166 BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf) 167 168 # Check zorg/niet zorg personeel 169 BIND(IF(EXISTS {?overeenkomst_afspraak onz-g:isAbout/a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?is_zorg) 170 171 # Clip de afspraak op het kwartaal 172 BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr) 173 BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr) 174 175 # Bereken hoeveel dagen van de afspraak overlappen met de meetperiode 176 ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_afspraak_reken . 177 ?eind_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_afspraak_reken . 178 BIND(?eind_afspraak_reken - ?start_afspraak_reken + 1 AS ?dagen_afspraak) 179 180 # Noemer per afspraak = PTF * kalenderdagen binnen meetperiode 181 BIND(?ptf * ?dagen_afspraak AS ?noemer_afspraak_totaal) 182 BIND(?noemer_afspraak_totaal * ?is_zorg AS ?noemer_afspraak_zorg) 183 BIND(?noemer_afspraak_totaal - ?noemer_afspraak_zorg AS ?noemer_afspraak_niet_zorg) 184 } 185 } 186 } 187 GROUP BY ?overeenkomst_afspraak ?persoon 188 } 189 190 { 191 # Tak 1: echte vestiging + afleiding zorgkantoorregio 192 ?overeenkomst_afspraak onz-g:isAbout ?locatie . 193 ?locatie a onz-g:StationaryArtifact ; 194 onz-g:partOf* ?vestiging_uri . 195 ?vestiging_uri a onz-org:Vestiging ; 196 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 197 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 198 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 199 ?zk_regio a onz-org:ZorgkantoorRegio . 200 ?zorgkantoor onz-g:hasOperatingRange ?zk_regio . 201 202 ?vestiging_uri onz-g:identifiedBy ?vest_nr . 203 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 204 } 205 UNION 206 { 207 # Tak 2: totaal organisatie, laat ?zk_regio ongebonden (leeg in output) 208 BIND("Organisatie (gecontracteerd + algemeen)" AS ?vestiging) 209 } 210 211} 212GROUP BY ?vestiging 213ORDER BY ?vestiging