Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 11-07-2025
- Inwerkingtreding:
- 11-07-2025
1.1 Gemiddeld aantal personeelsleden
Concepten
- Arbeidsovereenkomst
- Functie in organisatie-rol
- Inhuurovereenkomst
- Onverplaatsbaar artefact
- Uitzendovereenkomst
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- Zorgkantoor regio
- Zorgverlener (functie)
Relaties
- deel van
- gaat over
- geïdentificeerd door
- heeft deel
- heeft lokaliseerbaar gebied
- heeft opdrachtnemer
- opereert in regio
- vestiging van
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 12# Hoofdquery: Aggregeert resultaten per vestiging voor de uiteindelijke output 13SELECT 14 ?vestiging 15 # ?zorgkantoor_vestiging 16 # Bereken het gemiddeld aantal FTE voor zorg en niet-zorg 17 # met bescherming tegen delen door nul en een maximum van 1,0 FTE per persoon 18 # Dit zorgt ervoor dat een persoon nooit meer dan 1x meetelt, zelfs bij meerdere contracten 19 (SUM(IF(?dagen_periode <= 0, 0, IF(?zorg_aandeel / ?dagen_periode > 1, 1, ?zorg_aandeel / ?dagen_periode))) AS ?zorg) 20 (SUM(IF(?dagen_periode <= 0, 0, IF(?niet_zorg_aandeel / ?dagen_periode > 1, 1, ?niet_zorg_aandeel / ?dagen_periode))) AS ?niet_zorg) 21 (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) 22WHERE { 23 # Middelste query: Aggregeert per persoon, vestiging 24 SELECT 25 ?vestiging 26 ?zorgkantoor_vestiging 27 ?persoon 28 ?dagen_periode 29 # Bereken het aandeel zorg- en niet-zorgdagen binnen de persoon 30 # Dit voorkomt dubbeltelling van medewerkers met gemengde rollen 31 (SUM(?zorg_dagen) AS ?zorg_aandeel) 32 (SUM(?niet_zorg_dagen) AS ?niet_zorg_aandeel) 33 WHERE { 34 # Binnenste query: Voegt datumbereiken samen per persoon en vestiging 35 { 36 SELECT 37 ?vestiging 38 ?zorgkantoor_vestiging 39 ?persoon 40 ?zorg_boolean 41 # Bepaal vroegste start en laatste einddatum voor alle contracten van een persoon 42 (MIN(?start_afspraak_corr) AS ?vroegste_start) 43 (MAX(?eind_afspraak_corr) AS ?laatste_eind) 44 ?dagen_periode 45 WHERE { 46 # Parameters en periode-instellingen 47 # BIND(2024 AS ?jaar) 48 # BIND("Q1" AS ?kwartaal) 49 BIND(IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 50 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 51 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 52 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 53 '')))) AS ?start_periode) 54 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 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 # Werkovereenkomsten 60 VALUES ?personeels_overeenkomst 61 { 62 onz-pers:ArbeidsOvereenkomst 63 onz-pers:UitzendOvereenkomst 64 onz-pers:InhuurOvereenkomst 65 } 66 ?overeenkomst 67 a ?personeels_overeenkomst ; 68 onz-pers:heeftOpdrachtnemer ?persoon ; 69 onz-g:startDatum ?overeenkomst_start ; 70 onz-g:hasPart ?overeenkomst_afspraak . 71 OPTIONAL { 72 ?overeenkomst onz-g:eindDatum ?overeenkomst_eind 73 } 74 ?overeenkomst_afspraak 75 a onz-pers:WerkOvereenkomstAfspraak ; 76 onz-g:startDatum ?start_afspraak . 77 OPTIONAL { 78 ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak 79 } 80 81 # Filteren op basis van de overeenkomstperiode (niet de afspraakperiode) 82 FILTER (?overeenkomst_start <= ?eind_periode && (?overeenkomst_eind >= ?start_periode || !BOUND(?overeenkomst_eind))) 83 84 # Gebruik de gecorrigeerde start- en einddatums van de overeenkomst 85 BIND(IF(?overeenkomst_start < ?start_periode, ?start_periode, ?overeenkomst_start) AS ?start_corr) 86 BIND(IF(!BOUND(?overeenkomst_eind) || ?overeenkomst_eind > ?eind_periode, ?eind_periode, ?overeenkomst_eind) AS ?eind_corr) 87 88 # Corrigeer de afspraakdatums binnen de overeenkomstperiode 89 BIND(IF(?start_afspraak > ?start_corr, ?start_afspraak, ?start_corr) AS ?start_afspraak_corr) 90 BIND(IF(BOUND(?eind_afspraak) && ?eind_afspraak < ?eind_corr, ?eind_afspraak, ?eind_corr) AS ?eind_afspraak_corr) 91 92 # Alleen doorgaan als de gecorrigeerde afspraak geldig is binnen de periode 93 FILTER (?start_afspraak_corr <= ?eind_afspraak_corr) 94 95 # Functie en locatie informatie 96 ?overeenkomst_afspraak onz-g:isAbout ?functie . 97 ?functie a onz-g:OccupationalPositionRole . 98 ?overeenkomst_afspraak onz-g:isAbout ?locatie . 99 ?locatie 100 a onz-g:StationaryArtifact ; 101 onz-g:partOf* ?vestiging_uri . 102 ?vestiging_uri a onz-org:Vestiging ; 103 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 104 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 105 ?pc_gebied 106 onz-g:identifiedBy ?postcode ; 107 onz-g:partOf+ ?zk_regio . 108 ?zk_regio a onz-org:ZorgkantoorRegio . 109 ?zorgkantoor onz-g:hasOperatingRange ?zk_regio . 110 111 # Vestigingsgegevens 112 { 113 ?vestiging_uri onz-g:identifiedBy ?vest_nr . 114 ?vest_nr a onz-org:Vestigingsnummer ; 115 onz-g:hasDataValue ?vestiging . 116 } UNION { 117 # Includeer ook de organisatie als geheel en label deze als vestiging 118 ?vestiging_uri onz-org:vestigingVan ?organisatie_uri . 119 BIND("Totaal organisatie" AS ?vestiging) 120 BIND("n.v.t." AS ?zk_vestiging) 121 } 122 BIND(IF(!BOUND(?zk_vestiging), ?zorgkantoor, ?zk_vestiging) AS ?zorgkantoor_vestiging) 123 124 # Bepaal of functie zorg- of niet-zorg gerelateerd is 125 BIND(IF(EXISTS {?functie a onz-pers:ZorgverlenerFunctie}, 1, 0) AS ?zorg_boolean) 126 } 127 # Groepeer om de vroegste start en laatste einddatum per persoon en vestiging te vinden 128 GROUP BY ?vestiging ?zorgkantoor_vestiging ?persoon ?zorg_boolean ?dagen_periode 129 } 130 131 # Converteer samengevoegde datums naar numerieke waarden voor berekeningen 132 ?vroegste_start ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?vroegste_start_numeriek . 133 ?laatste_eind ^time:inXSDDate/time:inTemporalPosition/time:numericPosition ?laatste_eind_numeriek . 134 135 # Bereken het aantal dagen voor deze samengevoegde periode 136 BIND(?laatste_eind_numeriek - ?vroegste_start_numeriek + 1 AS ?samengevoegde_dagen) 137 138 # Bereken zorg- en niet-zorgdagen op basis van de samengevoegde dagen 139 BIND(IF(?zorg_boolean = 1, ?samengevoegde_dagen, 0) AS ?zorg_dagen) 140 BIND(IF(?zorg_boolean = 0, ?samengevoegde_dagen, 0) AS ?niet_zorg_dagen) 141 } 142 # Groepeer op persoonsniveau per vestiging 143 GROUP BY ?vestiging ?zorgkantoor_vestiging ?persoon ?dagen_periode 144} 145# Groepeer uiteindelijk per vestiging voor de eindresultaten 146GROUP BY ?vestiging ?zorgkantoor_vestiging 147ORDER BY ?vestiging 148