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