Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 18-06-2026
- Inwerkingtreding:
- 18-06-2026
18.1 Wat is de balans o.b.v. Grootboek?
Concepten
Relaties
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: Zorgkantoren 18.1.0 2# Parameters: ?peildatum 3# Ontologie: versie 3.0.0 of nieuwer 4 5PREFIX onz-fin: <http://purl.org/ozo/onz-fin#> 6prefix onz-zorg: <http://purl.org/ozo/onz-zorg#> 7PREFIX onz-g: <http://purl.org/ozo/onz-g#> 8PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 9 10SELECT 11 (?jaarrekeningpost AS ?Jaarrekeningpost) 12 (IF(SUM(?heeftData)>0, SUM(?bedrag_rubriek), "Niet beschikbaar") AS ?Bedrag) 13WHERE { 14 { # Subquery 1: Jaarrekeningposten 15 { # Middle select: Bereken het totaal per rubriek (saldo + latere mutaties) 16 SELECT 17 ?rubriek ?jaarrekeningpost_child 18 (SUM(?geld_bedrag_post) + SUM(?saldo_waarde)/COUNT(?saldo_waarde) AS ?bedrag_rubriek) 19 (IF(COUNT(?heeftBeginsaldo)+COUNT(?heeftGrootboekPost)=0, 0, 1) AS ?heeftData) 20 21 WHERE { 22 { # Innermost select: 23 # - Haal het meest recente saldo per rubriek op als beginsaldo, 0 indien geen saldo in data 24 # - Haal de bijbehorende datum op om alle posten na beginsaldo bij toe te voegen 25 SELECT 26 ?rubriek ?jaarrekeningpost_child 27 (IF(BOUND(?saldo_bedrag), ?saldo_bedrag, 0) AS ?saldo_waarde) 28 ?peildatum_argument 29 (IF(BOUND(?saldo_datum), ?saldo_datum, ?unbound) AS ?begin_datum) 30 ?saldo_datum ?saldo ?heeftBeginsaldo 31 WHERE { 32 33 #BIND("2024-12-31"^^xsd:date AS ?peildatum) 34 BIND(?peildatum as ?peildatum_argument) 35 36 # Bind jaarrekeningpost_child(jaarrekening subpost)op basis van rubriekCode 37 # Deze code gaat ervan uit dat alle prismant codes die met cijfers beginnen en 6 cijfers hebben 38 # Er bestaan ook codes die eruit zien als onz-fin:rubriek05 39 # deze nemen we bewust niet mee (want dat zijn verzamelniveaus) 40 { 41 # Prismant: prefix-mapping, want Prismant consolideert niet dus we willen onderliggende rubrieken 42 { 43 ?rubriek a onz-fin:Grootboekrubriek . 44 } 45 UNION 46 { 47 ?rubriek a onz-fin:Grootboekrekening . 48 # in de testdata is deze branch overbodig, voor de zekerheid laten staan omdat in werkelijkheid 49 # de codes waarschijnlijk grootboekrekeningen zijn 50 } 51 BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode) 52 53 VALUES (?prismantPrefix ?jaarrekeningpost_child) { 54 ("00" "A.I") 55 ("01" "A.II") 56 ("03" "A.III") 57 ("3" "B.I") 58 ("12" "B.II") 59 ("131" "B.III") 60 ("132" "B.IV") 61 ("0511" "D.I") 62 ("05413" "D.IV") 63 ("05311" "D.V") 64 ("05342" "D.V") 65 ("05423" "D.V") 66 ("05323" "D.VI") 67 ("0539" "D.VII") 68 ("05493" "D.VII") 69 ("05915" "D.VII") 70 ("091" "D.VIII") 71 ("06" "E") 72 ("07" "F") 73 ("14" "G") 74 ("15" "G") 75 } 76 FILTER(STRSTARTS(?rubriekCode, ?prismantPrefix)) 77 } 78 UNION 79 { 80 # RGS: exacte mapping, want RGS consolideert zelf onderliggende rubrieken 81 # Dit houdt in dat rubrieken naast de directe boekingen ook de totaaltelling 82 # van alle boekingen op alle onderliggende rubrieken bevatten (algemene uitgangspunten)BELANGRIJK 83 # We willen dus niet dubbel tellen en vandaar exacte match 84 VALUES (?rubriekCode ?jaarrekeningpost_child) { 85 ("BIva" "A.I") 86 ("BMva" "A.II") 87 ("BFva" "A.III") 88 ("BVas" "A.III") 89 ("BVrd" "B.I") 90 ("BPro" "B.I") 91 ("BObd" "B.I") 92 ("BVor" "B.II") 93 ("BVfi" "B.II") 94 ("BEff" "B.III") 95 ("BLim" "B.IV") 96 ("BEivGok" "D.I") 97 ("BEivAgi" "D.II") 98 ("BEivHer" "D.III") 99 ("BEivWer" "D.IV") 100 ("BEivStr" "D.IV") 101 ("BEivBer" "D.V") 102 ("BEivBef" "D.VI") 103 ("BEivOvr" "D.VII") 104 ("BEivOre" "D.VIII") 105 ("BVrz" "E") 106 ("BEga" "E") 107 ("BLas" "F") 108 ("BSch" "G") 109 } 110 111 BIND(IRI(CONCAT(STR(onz-fin:), ?rubriekCode)) AS ?rubriek) 112 { 113 ?rubriek a onz-fin:Grootboekrubriek . 114 } 115 UNION 116 { 117 ?rubriek a onz-fin:Grootboekrekening . 118 } 119 } 120 121 122 OPTIONAL { 123 ?rubriek onz-g:isAbout ?saldo . 124 ?saldo 125 a onz-fin:EindSaldo ; 126 onz-fin:heeftGeldBedrag ?saldo_bedrag ; 127 onz-g:hasDate ?saldo_datum . 128 129 FILTER (?saldo_datum <= ?peildatum_argument) 130 131 FILTER NOT EXISTS { 132 ?rubriek onz-g:isAbout ?saldo2 . 133 ?saldo2 134 a onz-fin:EindSaldo ; 135 onz-g:hasDate ?saldo_datum2 . 136 137 FILTER(?saldo2 != ?saldo) 138 FILTER (?saldo_datum2 <= ?peildatum_argument) 139 FILTER ( 140 ?saldo_datum2 > ?saldo_datum 141 || ( 142 ?saldo_datum2 = ?saldo_datum 143 && STR(?saldo2) > STR(?saldo) 144 ) 145 ) 146 } 147 } 148 # Bind alleen als er een saldo in de data aanwezig was 149 BIND(IF(BOUND(?saldo_bedrag), 1, ?unbound) AS ?heeftBeginsaldo) 150 151 } 152 } # End of innermost query: Alle aanwezige beginsaldos zijn gevonden 153 154 # Selecteer de bijbehorende grootboekpost bij de rubriek 155 OPTIONAL { 156 ?grootboek_post 157 a onz-fin:Grootboekpost ; 158 onz-g:partOf ?rubriek ; 159 onz-g:hasDate ?datum ; 160 onz-fin:heeftGeldBedrag ?geld_bedrag_temp . 161 # Behoud de grootboek post alleen voor de meest specifieke rubriek, 162 # om dubbeltelling bij meerdere rubrieken te voorkomen 163 FILTER NOT EXISTS { 164 ?grootboek_post onz-g:partOf ?specifiekereRubriek . 165 ?specifiekereRubriek onz-g:partOf+ ?rubriek . 166 } 167 FILTER (?datum <= ?peildatum_argument && (?datum > ?begin_datum || !BOUND(?begin_datum))) 168 BIND (1 AS ?heeftGrootboekPost) 169 } 170 BIND(IF(BOUND(?geld_bedrag_temp), ?geld_bedrag_temp, 0) AS ?geld_bedrag_post) 171 172 } GROUP BY ?rubriek ?jaarrekeningpost_child 173 } # End of middle query: Alle beginsaldos + transacties daarna zijn gevonden (eindtotaal bekend) 174 175 # De rest van subquery 1 breidt de jaarrekeningposten uit met hun bijbehorende totaal posten 176 VALUES (?jaarrekeningpost_child ?jaarrekeningpost_child_uitgebreid) { 177 ("A.I" "A.I Immateriële vaste activa") 178 ("A.II" "A.II Materiële vaste activa") 179 ("A.III" "A.III Financiële vaste activa") 180 ("B.I" "B.I Voorraden") 181 ("B.II" "B.II Vorderingen") 182 ("B.III" "B.III Effecten") 183 ("B.IV" "B.IV Liquide middelen") 184 ("D.I" "D.I Gestort en opgevraagd kapitaal") 185 ("D.II" "D.II Agio") # 186 ("D.III" "D.III Herwaarderingsreserve") # 187 ("D.IV" "D.IV Wettelijke en statutaire reserve") 188 ("D.V" "D.V Bestemmingsreserve") 189 ("D.VI" "D.VI Bestemmingsfonds") 190 ("D.VII" "D.VII Overige reserves") 191 ("D.VIII" "D.VIII Onverdeelde winst") 192 ("E" "E Voorzieningen") 193 ("F" "F Langlopende schulden (nog voor meer dan een jaar)") 194 ("G" "G Kortlopende schulden (ten hoogste 1 jaar)") 195 } 196 197 BIND( 198 IF(STRSTARTS(?jaarrekeningpost_child, "A."), "A Vaste activa", 199 IF(STRSTARTS(?jaarrekeningpost_child, "B."), "B Vlottende activa", 200 IF(STRSTARTS(?jaarrekeningpost_child, "D."), "D Eigen vermogen", 201 ?unbound))) AS ?jaarrekeningpost_parent # Fallback naar ?unbound om dubbeltelling te voorkomen 202 ) 203 204 BIND( 205 IF(STRSTARTS(?jaarrekeningpost_child, "A.") || STRSTARTS(?jaarrekeningpost_child, "B."), "C Totaal activa", 206 IF(STRSTARTS(?jaarrekeningpost_child, "D.") || ?jaarrekeningpost_child = "E" || ?jaarrekeningpost_child = "F" || ?jaarrekeningpost_child = "G", "H Totaal passiva", 207 208 ?unbound)) AS ?jaarrekeningpost_grandparent 209 ) 210 211 VALUES ?x {1 2 3} 212 BIND( 213 IF(?x = 1, ?jaarrekeningpost_child_uitgebreid, 214 IF(?x = 2, ?jaarrekeningpost_parent, 215 IF(?x = 3, ?jaarrekeningpost_grandparent, 216 ?unbound))) AS ?jaarrekeningpost 217 ) 218 219 FILTER(BOUND(?jaarrekeningpost)) 220 221 } # End of subquery 1: Alle totalen voor de aanwezige jaarrekeningposten zijn bepaald (inclusief de overkoepelende jaarrekeningposten) 222 UNION 223 { # Subquery 2: Initieer alle jaarrekeningposten met bedrag=0 224 225 VALUES ?jaarrekeningpost { 226 "A.I Immateriële vaste activa" 227 "A.II Materiële vaste activa" 228 "A.III Financiële vaste activa" 229 "A Vaste activa" 230 231 "B.I Voorraden" 232 "B.II Vorderingen" 233 "B.III Effecten" 234 "B.IV Liquide middelen" 235 "B Vlottende activa" 236 237 "C Totaal activa" 238 239 "D.I Gestort en opgevraagd kapitaal" 240 "D.II Agio" 241 "D.III Herwaarderingsreserve" 242 "D.IV Wettelijke en statutaire reserve" 243 "D.V Bestemmingsreserve" 244 "D.VI Bestemmingsfonds" 245 "D.VII Overige reserves" 246 "D.VIII Onverdeelde winst" 247 "D Eigen vermogen" 248 249 "E Voorzieningen" 250 "F Langlopende schulden (nog voor meer dan een jaar)" 251 "G Kortlopende schulden (ten hoogste 1 jaar)" 252 "H Totaal passiva" 253 } 254 255 BIND(0 AS ?bedrag_rubriek) 256 BIND(0 AS ?heeftData) # Tijdens initieren is het nog onduidelijk of er data voor de rubriek aanwezig is 257 } 258 259} GROUP BY ?jaarrekeningpost 260ORDER BY ?jaarrekeningpost