Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 01-05-2026
- Inwerkingtreding:
- 01-05-2026
11.1 Wat is het kortdurend 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.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 AS ?Indeling) 13 (IF(SUM(?noemer_som_zorg) = 0, "Ongedefinieerd", 14 ROUND( (100.0 * SUM(?ziekte_som_zorg) / SUM(?noemer_som_zorg)) * 100 ) / 100 15 ) AS ?Zorg) 16 (IF(SUM(?noemer_som_niet_zorg) = 0, "Ongedefinieerd", 17 ROUND( (100.0 * SUM(?ziekte_som_niet_zorg) / SUM(?noemer_som_niet_zorg)) * 100 ) / 100 18 ) AS ?Niet_zorg) 19 (IF(SUM(?noemer_som_totaal) = 0, "Ongedefinieerd", 20 ROUND( (100.0 * SUM(?ziekte_som_totaal) / SUM(?noemer_som_totaal)) * 100 ) / 100 21 ) AS ?Totaal) 22WHERE 23{ 24 { 25 SELECT 26 ?overeenkomst_afspraak 27 ?persoon 28 (SUM(?ziekte_verzuim_zorg) AS ?ziekte_som_zorg) 29 (SUM(?noemer_afspraak_zorg) AS ?noemer_som_zorg) 30 (SUM(?ziekte_verzuim_niet_zorg) AS ?ziekte_som_niet_zorg) 31 (SUM(?noemer_afspraak_niet_zorg) AS ?noemer_som_niet_zorg) 32 (SUM(?ziekte_verzuim_totaal) AS ?ziekte_som_totaal) 33 (SUM(?noemer_afspraak_totaal) AS ?noemer_som_totaal) 34 WHERE 35 { 36 # TELLER: selecteer het ?ziekte_verzuim van de medewerkers per persoon per werkovereenkomstafspraak 37 { 38 SELECT 39 ?overeenkomst_afspraak 40 ?persoon 41 ?ziekte_verzuim_zorg 42 ?ziekte_verzuim_niet_zorg 43 ?ziekte_verzuim_totaal 44 ("0.0"^^xsd:decimal AS ?noemer_afspraak_zorg) 45 ("0.0"^^xsd:decimal AS ?noemer_afspraak_niet_zorg) 46 ("0.0"^^xsd:decimal AS ?noemer_afspraak_totaal) 47 WHERE { 48 49 # BIND(2024 AS ?jaar) # Parameter 50 # BIND("Q2" AS ?kwartaal) # Parameter 51 BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 52 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 53 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 54 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 55 ?unbound)))) AS ?start_periode) 56 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 57 58 # Selecteer alle arbeidsovereenkomsten die geldig zijn 59 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; onz-g:hasPart ?overeenkomst_afspraak ; 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 kortdurende 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) # Parameter 144 # BIND("Q2" AS ?kwartaal) # Parameter 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 ; onz-pers:heeftOpdrachtnemer ?persoon . 154 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; onz-g:hasPart ?omvang ; onz-g:startDatum ?start_afspraak . 155 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 156 FILTER (?start_afspraak <= ?eind_periode && (?eind_afspraak >= ?start_periode || !BOUND(?eind_afspraak))) 157 158 # Bepaal per overeenkomstafspraak de ptf en zorg/niet-zorg 159 ?omvang a onz-pers:ContractOmvang ; onz-g:isAbout ?omvang_waarde . 160 ?omvang_waarde a onz-pers:ContractOmvangWaarde ; onz-g:hasDataValue ?omvang_getal ; onz-g:hasUnitOfMeasure ?omvang_eenheid . 161 ?omvang_eenheid onz-g:hasDataValue ?eenheid_factor . 162 BIND(?omvang_getal/(36/?eenheid_factor) AS ?ptf) 163 164 # Check zorg/niet zorg personeel 165 BIND(IF(EXISTS {?overeenkomst_afspraak onz-g:isAbout/a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?is_zorg) 166 167 # Clip de afspraak op het kwartaal 168 BIND(IF(?start_afspraak < ?start_periode, ?start_periode, ?start_afspraak) AS ?start_afspraak_corr) 169 BIND(IF(?eind_afspraak > ?eind_periode || !BOUND(?eind_afspraak), ?eind_periode, ?eind_afspraak) AS ?eind_afspraak_corr) 170 171 # Bereken hoeveel dagen van de afspraak overlappen met de meetperiode 172 ?start_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?start_afspraak_reken . 173 ?eind_afspraak_corr ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?eind_afspraak_reken . 174 BIND(?eind_afspraak_reken - ?start_afspraak_reken + 1 AS ?dagen_afspraak) 175 176 # Noemer per afspraak = PTF * kalenderdagen binnen meetperiode 177 BIND(?ptf * ?dagen_afspraak AS ?noemer_afspraak_totaal) 178 BIND(?noemer_afspraak_totaal * ?is_zorg AS ?noemer_afspraak_zorg) 179 BIND(?noemer_afspraak_totaal - ?noemer_afspraak_zorg AS ?noemer_afspraak_niet_zorg) 180 } 181 } 182 } 183 GROUP BY ?overeenkomst_afspraak ?persoon 184 } 185 186 { 187 ?overeenkomst_afspraak onz-g:isAbout ?locatie . 188 # Tak 1: echte vestiging + afleiding zorgkantoorregio 189 ?locatie a onz-g:StationaryArtifact ; onz-g:partOf* ?vestiging_uri . 190 ?vestiging_uri a onz-org:Vestiging ; 191 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 192 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 193 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 194 ?zk_regio a onz-org:ZorgkantoorRegio . 195 ?zorgkantoor onz-g:hasOperatingRange ?zk_regio . 196 ?vestiging_uri onz-g:identifiedBy ?vest_nr . 197 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 198 } 199 UNION 200 { 201 # Tak 2: totaal organisatie, laat ?zk_regio ongebonden (leeg in output) 202 BIND("Organisatie (gecontracteerd + algemeen)" AS ?vestiging) 203 } 204 205} 206GROUP BY ?vestiging 207ORDER BY ?Indeling