Uitwisselprofiel IGJ Contextinformatie t.b.v. onaangekondigd inspectiebezoek
Over Uitwisselprofiel IGJ Contextinformatie t.b.v. onaangekondigd inspectiebezoek
1.2.0
- Publicatiedatum:
- 27-10-2025
- Inwerkingtreding:
- 27-10-2025
1.4.2. Wat is het aantal ingezette uren aan personeel met een zorgverlener functie per dienst?
Concepten
- Arbeidsovereenkomst
- Gewerkte periode
- Inhuurovereenkomst
- ODB Kwalificatiewaarde
- Uitzendovereenkomst
- Vestiging
- Vestigingsnummer
- Werkovereenkomst afspraak
- Zorgverlener (functie)
Relaties
- deel van
- gaat over
- gedefinieerd door
- geïdentificeerd door
- heeft deel
- heeft eigenschap of kenmerk
- heeft eigenschapswaarde
- heeft opdrachtnemer
- heeft perdurantlocatie
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: IGJ 1.4.2 2# Parameters: ?peildatum, ?vestiging 3# Ontologie: versie 3.0 of nieuwer 4 5PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 6PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 7PREFIX onz-pers: <http://purl.org/ozo/onz-pers#> 8PREFIX onz-g: <http://purl.org/ozo/onz-g#> 9PREFIX onz-org: <http://purl.org/ozo/onz-org#> 10 11SELECT 12 ?kwalificatie_niveau 13 (SUM(COALESCE(?dag * ?pil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PIL_dag) 14 (SUM(COALESCE(?avond * ?pil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PIL_avond) 15 (SUM(COALESCE(?nacht * ?pil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PIL_nacht) 16 (SUM(COALESCE(?dag * ?pnil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PNIL_dag) 17 (SUM(COALESCE(?avond * ?pnil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PNIL_avond) 18 (SUM(COALESCE(?nacht * ?pnil, 0.0)) AS ?Aantal_ingezette_uren_ZV_PNIL_nacht) 19{ 20 { 21 SELECT DISTINCT ?kwalificatie_niveau { 22 { 23 ?functie 24 a onz-pers:ZorgverlenerFunctie ; 25 onz-g:hasQuality / onz-g:hasQualityValue ?functie_niveau . 26 ?functie_niveau 27 a onz-pers:ODBKwalificatieWaarde ; 28 rdfs:label ?kwalificatie_niveau . 29 } UNION { 30 BIND("Totaal" AS ?kwalificatie_niveau) 31 } 32 } 33 } 34 35 OPTIONAL{ 36 { 37 SELECT DISTINCT 38 ?medewerker 39 ?kwalificatie_niveau 40 ?dag 41 ?avond 42 ?nacht 43 ?pil 44 ?pnil 45 { 46 # Parameters 47 # BIND("2024-01-15"^^xsd:date AS ?peildatum) 48 # BIND("000001254" AS ?vestigingsnummer) 49 BIND(?peildatum as ?peildatum_argument) 50 51 ?gewerkte_periode 52 a onz-pers:GewerktePeriode ; 53 onz-g:hasBeginTimeStamp ?start_werk ; 54 onz-g:hasEndTimeStamp ?eind_werk ; 55 onz-g:hasPerdurantLocation ?werk_locatie ; 56 onz-g:hasQuality / onz-g:hasQualityValue / onz-g:hasDataValue ?gewerkte_uren ; 57 onz-g:definedBy ?overeenkomst . 58 59 ?werk_locatie onz-g:partOf* ?vestiging . # vind Vestiging die hoort bij werk_locatie 60 61 ?vestiging 62 a onz-org:Vestiging ; 63 onz-g:identifiedBy ?vestigingsnummer_object . 64 ?vestigingsnummer_object 65 a onz-org:Vestigingsnummer ; 66 onz-g:hasDataValue ?vestigingsnummer . # filter vestiging op gegeven vestigingsnummer 67 68 VALUES ?personeels_overeenkomst { 69 onz-pers:ArbeidsOvereenkomst 70 onz-pers:UitzendOvereenkomst 71 onz-pers:InhuurOvereenkomst 72 } 73 74 ?overeenkomst 75 a ?personeels_overeenkomst ; 76 onz-pers:heeftOpdrachtnemer ?medewerker ; 77 onz-g:hasPart ?overeenkomst_afspraak . 78 79 ?overeenkomst_afspraak 80 a onz-pers:WerkOvereenkomstAfspraak ; 81 onz-g:startDatum ?start_afspraak ; 82 onz-g:isAbout ?functie . 83 OPTIONAL { ?overeenkomst_afspraak onz-g:eindDatum ?eind_afspraak } 84 85 ?functie 86 a onz-pers:ZorgverlenerFunctie ; 87 onz-g:hasQuality/onz-g:hasQualityValue ?kwalificatie . 88 ?kwalificatie a onz-pers:ODBKwalificatieWaarde . 89 90 { 91 BIND("Totaal" AS ?kwalificatie_niveau) 92 } UNION { 93 ?kwalificatie rdfs:label ?kwalificatie_niveau 94 } 95 96 # -- DAN-venster: [D 07:00, D+1 07:00] == t/m 06:59 volgende dag 97 BIND(xsd:dateTime(CONCAT(STR(?peildatum_argument), "T07:00:00")) AS ?dan_start) 98 BIND(?dan_start + "P1D"^^xsd:dayTimeDuration AS ?dan_end) # exclusief 07:00 next 99 100 # Contract actief rond peildatum (ruim, kan wat strakker indien wenselijk) 101 BIND(xsd:date(?dan_start + "P1D"^^xsd:dayTimeDuration) AS ?peildatum_plus1) 102 FILTER ( 103 (?start_afspraak <= ?peildatum_argument && (!BOUND(?eind_afspraak) || ?eind_afspraak >= ?peildatum_argument)) 104 ) 105 106 # -- Over-midnight: maak eindtijd 'aware' 107 BIND( 108 IF( 109 ?eind_werk <= ?start_werk, 110 ?eind_werk + "P1D"^^xsd:dayTimeDuration, 111 ?eind_werk) AS ?end_dt 112 ) 113 114 # -- ENIGE benodigde filter: overlap met DAN-venster 115 FILTER( (?end_dt > ?dan_start) && (?start_werk < ?dan_end)) 116 117 118 # ====== Verdeling in D / A / N binnen het DAN-venster ====== 119 120 # (1) Projecteer tijden naar '24+ uurnotatie' t.o.v. kalenderdag van peildatum 121 # 07:00 = 7.0, 14:59 = ~14.9833, 22:59 = ~22.9833, 07:00 next = 31.0 (excl) 122 BIND(HOURS(?start_werk) + (MINUTES(?start_werk) * 0.0166666667) AS ?start_uur_exact) 123 BIND(HOURS(?eind_werk) + (MINUTES(?eind_werk) * 0.0166666667) AS ?eind_uur_exact) 124 125 # Herken vormen t.o.v. peildatum: doorlopend vanaf vorige dag / vroege start volgende dag 126 BIND(xsd:date(?start_werk) < xsd:date(?dan_start) AS ?is_prev_day) 127 BIND(xsd:date(?start_werk) = xsd:date(?dan_start + "P1D"^^xsd:dayTimeDuration) AS ?is_next_day) 128 BIND(?is_next_day && (?start_uur_exact < 7.0) AS ?is_next_day_early) 129 130 # (2) Effectieve start/eind in 24+ notatie, daarna clampen aan [7.0, 31.0) 131 BIND( 132 IF(?is_prev_day, 7.0, 133 IF(?is_next_day_early, ?start_uur_exact + 24.0, ?start_uur_exact) 134 ) AS ?eff_start 135 ) 136 BIND( 137 IF(?is_next_day_early, 31.0, # eindigt uiterlijk bij DAN-einde 138 IF(?eind_uur_exact < ?start_uur_exact, ?eind_uur_exact + 24.0, ?eind_uur_exact) 139 ) AS ?eff_end_raw 140 ) 141 142 # Clamp strikt aan DAN-venster: [7.0, 31.0) (== t/m 06:59 volgende dag) 143 BIND(IF(?eff_start < 7.0, 7.0, ?eff_start) AS ?c_start) 144 BIND(IF(?eff_end_raw > 31.0, 31.0, ?eff_end_raw) AS ?c_end) 145 146 # Totale duur binnen DAN 147 BIND(?c_end - ?c_start AS ?dan_duur) 148 149 # (3) Dag en Avond met exacte eindminuten: dag t/m 14:59, avond t/m 22:59 150 # Dag: [7.0, 15.0) 151 BIND( 152 IF(?c_end > 7.0 && ?c_start < 15.0, 153 (IF(?c_end > 15.0, 15.0, ?c_end) - IF(?c_start < 7.0, 7.0, ?c_start)), 154 0.0) AS ?dag_raw) 155 156 # Avond: [15.0, 23.0) 157 BIND( 158 IF(?c_end > 15.0 && ?c_start < 23.0, 159 (IF(?c_end > 23.0, 23.0, ?c_end) - IF(?c_start < 15.0, 15.0, ?c_start)), 160 0.0) AS ?avond_raw) 161 162 # Nacht = rest binnen DAN 163 BIND(?dan_duur - ?dag_raw - ?avond_raw AS ?nacht_raw) 164 165 # Afronden op tienden uur (desgewenst aanpassen) 166 BIND(ROUND(?dag_raw * 10) * 0.1 AS ?dag) 167 BIND(ROUND(?avond_raw * 10) * 0.1 AS ?avond) 168 BIND(ROUND(?nacht_raw * 10) * 0.1 AS ?nacht) 169 170 # PIL / PNIL 171 BIND(IF (?personeels_overeenkomst = onz-pers:ArbeidsOvereenkomst, 1, 0) AS ?pil) 172 BIND(IF (?pil = 0, 1, 0) AS ?pnil) 173 } 174 } 175 } 176} 177GROUP BY ?kwalificatie_niveau 178ORDER BY ?kwalificatie_niveau