Uitwisselprofiel ActiZ Belangenbehartiging
Over Uitwisselprofiel ActiZ Belangenbehartiging
- Publicatiedatum:
- 18-09-2025
- Inwerkingtreding:
- 18-09-2025
2.10 Wat is het aantal gemiddelde gewerkte periodes van personeelsleden in loondienst met een zorgverleners functie per kwalificatieniveau per Dag-, Avond- en Nacht-dienst (DAN-dienst)?
Concepten
- Arbeidsovereenkomst
- Gewerkte periode
- ODB Kwalificatiewaarde
- Onverplaatsbaar artefact
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- 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 opdrachtnemer
- heeft perdurantlocatie
- vestiging van
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: ActiZ 2.10 2# Parameters: ?jaar, ?kwartaal 3# Ontologie: versie 3.0 of nieuwer 4 5PREFIX ofn: <http://www.ontotext.com/sparql/functions/> 6PREFIX onz-g: <http://purl.org/ozo/onz-g#> 7PREFIX onz-pers:<http://purl.org/ozo/onz-pers#> 8PREFIX onz-org: <http://purl.org/ozo/onz-org#> 9PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 10PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 11PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 12 13SELECT 14 (?vestiging AS ?Indeling) 15 (?zk_regio_code AS ?Zorgkantoorregiocode) 16 ?kwalificatieniveau 17 (ROUND(SUM( xsd:decimal(?cntDag) / xsd:decimal(?kalenderdagen) ) * 100) / 100 AS ?Aantal_gemiddelde_gewerkteperiode_dagdienst) 18 (ROUND(SUM( xsd:decimal(?cntAvond) / xsd:decimal(?kalenderdagen) ) * 100) / 100 AS ?Aantal_gemiddelde_gewerkteperiode_avonddienst) 19 (ROUND(SUM( xsd:decimal(?cntNacht) / xsd:decimal(?kalenderdagen) ) * 100) / 100 AS ?Aantal_gemiddelde_gewerkteperiode_nachtdienst) 20WHERE { 21 # Zorg dat alle kwalificatieniveaus altijd zichtbaar zijn 22 { 23 SELECT DISTINCT ?kwalificatieniveau { 24 { 25 ?functie 26 a onz-pers:ZorgverlenerFunctie ; 27 onz-g:hasQuality /onz-g:hasQualityValue ?functie_niveau . 28 ?functie_niveau 29 a onz-pers:ODBKwalificatieWaarde ; 30 rdfs:label ?kwalificatieniveau . 31 } 32 } 33 } 34 35 # Zorg dat alle vestigingen altijd zichtbaar zijn 36 { 37 SELECT DISTINCT ?vestiging ?zk_regio_code { 38 { 39 ?vestiging_uri a onz-org:Vestiging ; 40 onz-g:identifiedBy ?vest_nr ; 41 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 42 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 43 44 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 45 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 46 ?zk_regio a onz-org:ZorgkantoorRegio . 47 48 BIND(IF(BOUND(?zk_regio), STRAFTER(STR(?zk_regio), "/onz-org/"), ?unbound) AS ?zk_regio_code) 49 } UNION { 50 # Tak 2: totaal organisatie, laat ?zk_regio ongebonden (leeg in output) 51 ?locatie onz-g:partOf* ?vestiging_uri . 52 ?vestiging_uri onz-org:vestigingVan ?organisatie_uri . 53 BIND("Totaal organisatie" AS ?vestiging) 54 } 55 } 56 } 57 58 # Vul de rijen 59 OPTIONAL { 60 SELECT 61 ?vestiging ?zk_regio_code ?kwalificatieniveau ?medewerker ?kalenderdagen 62 (SUM(IF(?start_uur >= 7 && ?start_uur < 15, 1, 0)) AS ?cntDag) 63 (SUM(IF(?start_uur >= 15 && ?start_uur < 23, 1, 0)) AS ?cntAvond) 64 (SUM(IF(?start_uur >= 23 || ?start_uur < 7, 1, 0)) AS ?cntNacht) 65 WHERE { 66 #BIND(2024 AS ?jaar) 67 #BIND("Q1" AS ?kwartaal) 68 69 BIND( 70 IF(?kwartaal = 'Q1', xsd:date(CONCAT(STR(?jaar), '-01-01')), 71 IF(?kwartaal = 'Q2', xsd:date(CONCAT(STR(?jaar), '-04-01')), 72 IF(?kwartaal = 'Q3', xsd:date(CONCAT(STR(?jaar), '-07-01')), 73 IF(?kwartaal = 'Q4', xsd:date(CONCAT(STR(?jaar), '-10-01')), 74 '' )))) AS ?start_periode) 75 76 BIND(?start_periode + "P3M"^^xsd:duration + "-P1D"^^xsd:duration AS ?eind_periode) 77 78 # Hardcoded kalenderdagen (Check voor schrikkeljaar) 79 # Divisible by 400 OR (divisible by 4 AND not divisible by 100) 80 BIND(((ofn:floorMod(?jaar, 400) = 0) ||((ofn:floorMod(?jaar, 4) = 0) && (ofn:floorMod(?jaar, 100) != 0)))AS ?isSchrikkel) 81 82 BIND( 83 IF(?kwartaal = "Q1", IF(?isSchrikkel, 91, 90), 84 IF(?kwartaal = "Q2", 91, 85 IF(?kwartaal = "Q3", 92, 86 IF(?kwartaal = "Q4", 92, 0)))) 87 AS ?kalenderdagen) 88 89 # DAN-venster 07:00 → 06:59 90 BIND(xsd:dateTime(CONCAT(STR(?start_periode), "T07:00:00")) AS ?dan_start) 91 BIND(?eind_periode + "P1D"^^xsd:duration AS ?eind_periode_plus) 92 BIND(xsd:dateTime(CONCAT(STR(?eind_periode_plus), "T06:59:00")) AS ?dan_end) 93 94 # Werkperiode 95 ?gewerkte_periode a onz-pers:GewerktePeriode ; 96 onz-g:definedBy ?overeenkomst ; 97 onz-g:hasBeginTimeStamp ?start_werk ; 98 onz-g:hasEndTimeStamp ?eind_werk . 99 FILTER(?start_werk >= ?dan_start && ?start_werk <= ?dan_end) 100 101 # Overeenkomst geldig 102 ?overeenkomst a onz-pers:ArbeidsOvereenkomst ; 103 onz-pers:heeftOpdrachtnemer ?medewerker ; 104 onz-g:hasPart ?overeenkomst_afspraak . 105 106 ?overeenkomst_afspraak a onz-pers:WerkOvereenkomstAfspraak ; 107 onz-g:startDatum ?start_afspraak ; 108 onz-g:isAbout ?functie . 109 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 110 FILTER (?start_afspraak <= ?eind_periode_plus && 111 (!BOUND(?eind_afspraak) || ?eind_afspraak >= ?start_periode)) 112 113 # Functie / kwalificatieniveau 114 ?functie a onz-pers:ZorgverlenerFunctie ; 115 onz-g:hasQuality/onz-g:hasQualityValue ?functie_niveau . 116 ?functie_niveau a onz-pers:ODBKwalificatieWaarde ; rdfs:label ?kwalificatieniveau . 117 118 # 1) Afspraak-locatie (naast de functie aan dezelfde afspraak gekoppeld) 119 ?overeenkomst_afspraak onz-g:isAbout ?locatie_afspraak . 120 ?locatie_afspraak a onz-g:StationaryArtifact . 121 122 # 2) Optioneel een werk-locatie op de gewerkte periode 123 OPTIONAL { ?gewerkte_periode onz-g:hasPerdurantLocation ?locatie_werk . } 124 125 # 3) Kies: werk-locatie als die bestaat, anders de afspraak-locatie 126 BIND(IF(!BOUND(?locatie_werk), ?locatie_afspraak, ?locatie_werk) AS ?locatie) 127 128 { 129 # Tak 1: echte vestiging + afleiding zorgkantoorregio 130 ?locatie onz-g:partOf* ?vestiging_uri . 131 ?vestiging_uri a onz-org:Vestiging ; 132 onz-g:identifiedBy ?vest_nr ; 133 onz-g:hasLocalizableArea/onz-g:identifiedBy/onz-g:hasPart/onz-g:hasPart ?postcode_6 . 134 ?vest_nr a onz-org:Vestigingsnummer ; onz-g:hasDataValue ?vestiging . 135 136 BIND(IRI(SUBSTR(STR(?postcode_6), 1, STRLEN(STR(?postcode_6)) - 2)) AS ?postcode) 137 ?pc_gebied onz-g:identifiedBy ?postcode ; onz-g:partOf+ ?zk_regio . 138 ?zk_regio a onz-org:ZorgkantoorRegio . 139 } 140 UNION 141 { 142 # Tak 2: totaal organisatie, laat ?zk_regio ongebonden (leeg in output) 143 ?locatie onz-g:partOf* ?vestiging_uri . 144 ?vestiging_uri onz-org:vestigingVan ?organisatie_uri . 145 BIND("Totaal organisatie" AS ?vestiging) 146 } 147 148 BIND(IF(BOUND(?zk_regio), STRAFTER(STR(?zk_regio), "/onz-org/"), ?unbound) AS ?zk_regio_code) 149 150 # Uur uit starttijd 151 BIND(HOURS(?start_werk) AS ?start_uur) 152 } 153 GROUP BY ?vestiging ?zk_regio_code ?kwalificatieniveau ?medewerker ?kalenderdagen 154 } 155} 156GROUP BY ?vestiging ?zk_regio_code ?kwalificatieniveau 157ORDER BY ?vestiging ?kwalificatieniveau 158