Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
08-09-2026

Inwerkingtreding:
09-09-2026

18.2 Wat is de winst- en verliesrekening o.b.v. Grootboek?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren-inkoop 18.2
2# Canonical id: [monorepo_id] - "Wat is de winst- en verliesrekening o.b.v. Grootboek?"
3# Parameters: ?startperiode, ?eindperiode
4# Ontologie: versie 3.0.0 of nieuwer
5
6PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
7PREFIX onz-g: <http://purl.org/ozo/onz-g#>
8PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
9
10SELECT
11?jaarrekeningpost
12(IF(SUM(?heeftData)>0, SUM(?bedrag_rubriek), "Niet beschikbaar") AS ?bedrag)
13WHERE
14{
15    {
16        # ================================================================
17        # DEEL 1: Berekening eindtotalen P, Q, R, S uit ruwe grootboekdata
18        ## deze berekening lijkt misschien overbodig omdat je ook de subposten uit deel 2 zou kunnen optellen,
19        ## alleen die kunnen theoretisch leeg zijn wat tot reken problemen leidt. Vandaar deze pragmatische keuze
20        # ================================================================
21        {
22            # Bereken alle componentbedragen in één database scan voor performance
23            SELECT
24            (SUM(?p_bedrag) AS ?p_totaal)      # P Som der bedrijfsopbrengsten
25            (SUM(?q_bedrag) AS ?q_totaal)      # Q Som der bedrijfslasten
26            (SUM(?r_bedrag) AS ?r_totaal)  # R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten
27            (SUM(?s_bedrag) AS ?s_totaal)  # S.I Belastingen
28
29            (SUM(?p_flag) AS ?p_has_data)
30            (SUM(?q_flag) AS ?q_has_data)
31            (SUM(?r_flag) AS ?r_has_data)
32            (SUM(?s_flag) AS ?s_has_data)
33            WHERE {
34                #BIND("2024-01-01"^^xsd:date AS ?startperiode)
35                #BIND("2024-12-31"^^xsd:date AS ?eindperiode)
36
37                # Koppel grootboekposten aan rubrieken binnen meetperiode
38                ?grootboek_post a onz-fin:Grootboekpost ;
39                onz-g:partOf ?rubriek ;
40                onz-g:hasDate ?datum ;
41                onz-fin:heeftGeldBedrag ?geld_bedrag .
42
43                # Match directe ouder: Grootboekrekening (RGS) of Grootboekrubriek (Prismant)
44                {
45                    { ?rubriek a onz-fin:Grootboekrekening }
46                    UNION
47                    { ?rubriek a onz-fin:Grootboekrubriek }
48                }
49                # Anti-dubbeltelling: houd alleen het bladniveau (geen transitive ancestors)
50                FILTER NOT EXISTS {
51                    ?grootboek_post onz-g:partOf ?child .
52                    ?child onz-g:partOf ?rubriek .
53                    FILTER(?child != ?rubriek)
54                    { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
55                }
56                FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
57                BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
58
59                FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
60
61                # Parameters voor building block winst_verlies_posten.rq
62
63                # >>> START BB: BB-005_winst_verlies_posten.rq
64                # =============================================================================
65                # Totaal-niveau: P, Q, R, S
66                # =============================================================================
67
68                # --- P: Som der bedrijfsopbrengsten ---
69                # Prismant: P.I=81, P.IV=82/83/89/919/920/930
70                # RGS: P.I=WOmz/WBat, P.II = WWiv minus WWivGvp, III=WWivGvp, P.IV=WOvb
71                # voor de som P volstaat het om WWiv hier te zetten want zo wordt WWivGvp ook maar 1x geteld.
72                BIND(
73                IF(
74                STRSTARTS(?rubriekCode, "81") ||
75                STRSTARTS(?rubriekCode, "82") ||
76                STRSTARTS(?rubriekCode, "83") ||
77                STRSTARTS(?rubriekCode, "89") ||
78                STRSTARTS(?rubriekCode, "919") ||
79                STRSTARTS(?rubriekCode, "920") ||
80                STRSTARTS(?rubriekCode, "930") ||
81                STRSTARTS(?rubriekCode, "WOmz") ||
82                STRSTARTS(?rubriekCode, "WBat") ||
83                STRSTARTS(?rubriekCode, "WWiv") ||
84                STRSTARTS(?rubriekCode, "WOvb"),
85                ?geld_bedrag, 0) AS ?p_bedrag
86                )
87
88                # --- Q: Som der bedrijfslasten ---
89                # Q.I RGS: WKpr minus WKprKuw
90                # Q.II: 417/418 (Kosten uitbesteed werk en andere externe kosten), RGS: WKprKuw
91                # Q.III: 411-419 (Lonen en salarissen), RGS: WPer minus WPerSol minus WPerPen
92                # Q.IV: 420/4221/4223-4225/4229 (Sociale lasten), RGS: WPerSol
93                # Q.V: 4226 (Pensioenlasten), RGS: WPerPen
94                # Q.VI: 480-484 (Afschrijvingen op immateriële vaste activa en materiële vaste activa), RGS: WAfs
95                # Q.VII: RGS: WWvi
96                # Q.VIII: RGS: WBwv
97                # Q.IX: 423/43-47/486/489/905/911-915/921/931 (Overige bedrijfskosten), RGS: WBed
98                # ook hier volstaat het voor de som van Q om alleen WPer te noemen zodat WPerSol en WPerPen niet dubbel geteld worden
99                BIND(
100                IF(
101                STRSTARTS(?rubriekCode, "417") ||
102                STRSTARTS(?rubriekCode, "418") ||
103                STRSTARTS(?rubriekCode, "411") ||
104                STRSTARTS(?rubriekCode, "412") ||
105                STRSTARTS(?rubriekCode, "413") ||
106                STRSTARTS(?rubriekCode, "414") ||
107                STRSTARTS(?rubriekCode, "415") ||
108                STRSTARTS(?rubriekCode, "416") ||
109                STRSTARTS(?rubriekCode, "419") ||
110                STRSTARTS(?rubriekCode, "420") ||
111                STRSTARTS(?rubriekCode, "4221") ||
112                STRSTARTS(?rubriekCode, "4223") ||
113                STRSTARTS(?rubriekCode, "4224") ||
114                STRSTARTS(?rubriekCode, "4225") ||
115                STRSTARTS(?rubriekCode, "4229") ||
116                STRSTARTS(?rubriekCode, "4226") ||
117                STRSTARTS(?rubriekCode, "480") ||
118                STRSTARTS(?rubriekCode, "481") ||
119                STRSTARTS(?rubriekCode, "482") ||
120                STRSTARTS(?rubriekCode, "483") ||
121                STRSTARTS(?rubriekCode, "484") ||
122                STRSTARTS(?rubriekCode, "423") ||
123                STRSTARTS(?rubriekCode, "43") ||
124                STRSTARTS(?rubriekCode, "44") ||
125                STRSTARTS(?rubriekCode, "45") ||
126                STRSTARTS(?rubriekCode, "46") ||
127                STRSTARTS(?rubriekCode, "47") ||
128                STRSTARTS(?rubriekCode, "486") ||
129                STRSTARTS(?rubriekCode, "489") ||
130                STRSTARTS(?rubriekCode, "905") ||
131                STRSTARTS(?rubriekCode, "911") ||
132                STRSTARTS(?rubriekCode, "912") ||
133                STRSTARTS(?rubriekCode, "913") ||
134                STRSTARTS(?rubriekCode, "914") ||
135                STRSTARTS(?rubriekCode, "915") ||
136                STRSTARTS(?rubriekCode, "921") ||
137                STRSTARTS(?rubriekCode, "931") ||
138                STRSTARTS(?rubriekCode, "WKpr") ||
139                STRSTARTS(?rubriekCode, "WPer") ||
140                STRSTARTS(?rubriekCode, "WAfs") ||
141                STRSTARTS(?rubriekCode, "WWvi") ||
142                STRSTARTS(?rubriekCode, "WBwv") ||
143                STRSTARTS(?rubriekCode, "WBed"),
144                ?geld_bedrag, 0) AS ?q_bedrag
145                )
146
147                # --- R: Financiële baten en lasten ---
148                # Prismant: R.I=904, R.II=900, R.III=903, R.IV=485/901
149                # RGS: R.I=WOvt, R.II=WFbeRlm, R.III=WWfa, R.IV=WFbe minus WFbeRlm
150                # voor de som R volstaat het om WFbe hier te zetten want zo wordt WFbeRlm ook maar 1x geteld.
151                BIND(
152                IF(
153                STRSTARTS(?rubriekCode, "904") ||
154                STRSTARTS(?rubriekCode, "900") ||
155                STRSTARTS(?rubriekCode, "903") ||
156                STRSTARTS(?rubriekCode, "485") ||
157                STRSTARTS(?rubriekCode, "901") ||
158                STRSTARTS(?rubriekCode, "WOvt") ||
159                STRSTARTS(?rubriekCode, "WWfa") ||
160                STRSTARTS(?rubriekCode, "WFbe"),
161                ?geld_bedrag, 0) AS ?r_bedrag
162                )
163
164                # --- S: Belastingen en resultaat deelnemingen ---
165                # Prismant: S.II=902
166                # RGS: S.I=WBel, S.II=WRed
167                BIND(
168                IF(
169                STRSTARTS(?rubriekCode, "902") ||
170                STRSTARTS(?rubriekCode, "WBel") ||
171                STRSTARTS(?rubriekCode, "WRed"),
172                ?geld_bedrag, 0) AS ?s_bedrag
173                )
174
175                # =============================================================================
176                # Detail-niveau: P.I t/m S.II
177                # =============================================================================
178
179                # --- P.I Netto omzet ---
180                # Prismant: 81, RGS: WOmz/WBat
181                BIND(
182                IF(
183                STRSTARTS(?rubriekCode, "81") ||
184                STRSTARTS(?rubriekCode, "WOmz") ||
185                STRSTARTS(?rubriekCode, "WBat"),
186                ?geld_bedrag, 0
187                ) AS ?p_i_bedrag
188                )
189
190                # --- P.II Wijziging in voorraden ---
191                # RGS: WWiv minus WWivGpv (Prismant: niet beschikbaar)
192                BIND(IF(STRSTARTS(?rubriekCode, "WWiv"), ?geld_bedrag, 0) AS ?p_ii_plus_bedrag)
193                BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_ii_min_bedrag)
194
195                # --- P.III Geactiveerde productie voor het eigen bedrijf ---
196                # RGS: WWivGpv (Prismant: niet beschikbaar)
197                BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_iii_bedrag)
198
199                # --- P.IV Overige bedrijfsopbrengsten ---
200                # Prismant: 82/83/89/919/920/930, RGS: WOvb
201                BIND(
202                IF(
203                STRSTARTS(?rubriekCode, "82") ||
204                STRSTARTS(?rubriekCode, "83") ||
205                STRSTARTS(?rubriekCode, "89") ||
206                STRSTARTS(?rubriekCode, "919") ||
207                STRSTARTS(?rubriekCode, "920") ||
208                STRSTARTS(?rubriekCode, "930") ||
209                STRSTARTS(?rubriekCode, "WOvb"),
210                ?geld_bedrag, 0
211                ) AS ?p_iv_bedrag
212                )
213
214                # --- Q.I Kosten van grond- en hulpstoffen ---
215                # RGS: WKpr minus WKprKuw (Prismant: niet beschikbaar)
216                BIND(IF(STRSTARTS(?rubriekCode, "WKpr"), ?geld_bedrag, 0) AS ?q_i_plus_bedrag)
217                BIND(IF(STRSTARTS(?rubriekCode, "WKprKuw"), ?geld_bedrag, 0) AS ?q_i_min_bedrag)
218
219                # --- Q.II Kosten uitbesteed werk en andere externe kosten ---
220                # Prismant: 417/418, RGS: WKprKuw
221                BIND(
222                IF(
223                STRSTARTS(?rubriekCode, "417") ||
224                STRSTARTS(?rubriekCode, "418") ||
225                STRSTARTS(?rubriekCode, "WKprKuw"),
226                ?geld_bedrag, 0
227                ) AS ?q_ii_bedrag
228                )
229
230                # --- Q.III Lonen en salarissen ---
231                # Prismant: 411-419, RGS: WPer minus WPerSol minus WPerPen
232                BIND(
233                IF(
234                STRSTARTS(?rubriekCode, "411") ||
235                STRSTARTS(?rubriekCode, "412") ||
236                STRSTARTS(?rubriekCode, "413") ||
237                STRSTARTS(?rubriekCode, "414") ||
238                STRSTARTS(?rubriekCode, "415") ||
239                STRSTARTS(?rubriekCode, "416") ||
240                STRSTARTS(?rubriekCode, "419") ||
241                STRSTARTS(?rubriekCode, "WPer"),
242                ?geld_bedrag, 0
243                ) AS ?q_iii_bedrag
244                )
245                BIND(
246                IF(
247                STRSTARTS(?rubriekCode, "WPerSol") ||
248                STRSTARTS(?rubriekCode, "WPerPen"),
249                ?geld_bedrag, 0
250                ) AS ?q_iii_min_bedrag
251                )
252
253                # --- Q.IV Sociale lasten ---
254                # Prismant: 420/4221/4223-4225/4229, RGS: WPerSol
255                BIND(
256                IF(
257                STRSTARTS(?rubriekCode, "420") ||
258                STRSTARTS(?rubriekCode, "4221") ||
259                STRSTARTS(?rubriekCode, "4223") ||
260                STRSTARTS(?rubriekCode, "4224") ||
261                STRSTARTS(?rubriekCode, "4225") ||
262                STRSTARTS(?rubriekCode, "4229") ||
263                STRSTARTS(?rubriekCode, "WPerSol"),
264                ?geld_bedrag, 0
265                ) AS ?q_iv_bedrag
266                )
267
268                # --- Q.V Pensioenlasten ---
269                # Prismant: 4226, RGS: WPerPen
270                BIND(
271                IF(
272                STRSTARTS(?rubriekCode, "4226") ||
273                STRSTARTS(?rubriekCode, "WPerPen"),
274                ?geld_bedrag, 0
275                ) AS ?q_v_bedrag
276                )
277
278                # --- Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa ---
279                # Prismant: 480-484, RGS: WAfs
280                BIND(
281                IF(
282                STRSTARTS(?rubriekCode, "480") ||
283                STRSTARTS(?rubriekCode, "481") ||
284                STRSTARTS(?rubriekCode, "482") ||
285                STRSTARTS(?rubriekCode, "483") ||
286                STRSTARTS(?rubriekCode, "484") ||
287                STRSTARTS(?rubriekCode, "WAfs"),
288                ?geld_bedrag, 0
289                ) AS ?q_vi_bedrag
290                )
291
292                # --- Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa ---
293                # RGS: WWvi (Prismant: niet beschikbaar)
294                BIND(IF(STRSTARTS(?rubriekCode, "WWvi"), ?geld_bedrag, 0) AS ?q_vii_bedrag)
295
296                # --- Q.VIII Bijzondere waardevermindering van vlottende activa ---
297                # RGS: WBwv (Prismant: niet beschikbaar)
298                BIND(IF(STRSTARTS(?rubriekCode, "WBwv"), ?geld_bedrag, 0) AS ?q_viii_bedrag)
299
300                # --- Q.IX Overige bedrijfskosten ---
301                # Prismant: 423/43-47/486/489/905/911-915/921/931
302                # RGS: WBed
303                BIND(
304                IF(
305                STRSTARTS(?rubriekCode, "423") ||
306                STRSTARTS(?rubriekCode, "43") ||
307                STRSTARTS(?rubriekCode, "44") ||
308                STRSTARTS(?rubriekCode, "45") ||
309                STRSTARTS(?rubriekCode, "46") ||
310                STRSTARTS(?rubriekCode, "47") ||
311                STRSTARTS(?rubriekCode, "486") ||
312                STRSTARTS(?rubriekCode, "489") ||
313                STRSTARTS(?rubriekCode, "905") ||
314                STRSTARTS(?rubriekCode, "911") ||
315                STRSTARTS(?rubriekCode, "912") ||
316                STRSTARTS(?rubriekCode, "913") ||
317                STRSTARTS(?rubriekCode, "914") ||
318                STRSTARTS(?rubriekCode, "915") ||
319                STRSTARTS(?rubriekCode, "921") ||
320                STRSTARTS(?rubriekCode, "931") ||
321                STRSTARTS(?rubriekCode, "WBed"),
322                ?geld_bedrag, 0
323                ) AS ?q_ix_bedrag
324                )
325
326                # --- R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten ---
327                # Prismant: 904, RGS: WOvt
328                BIND(
329                IF(
330                STRSTARTS(?rubriekCode, "904") ||
331                STRSTARTS(?rubriekCode, "WOvt"),
332                ?geld_bedrag, 0
333                ) AS ?r_i_bedrag
334                )
335
336                # --- R.II Andere rentebaten en soortgelijke opbrengsten ---
337                # Prismant: 900, RGS: WFbeRlm
338                BIND(
339                IF(
340                STRSTARTS(?rubriekCode, "900") ||
341                STRSTARTS(?rubriekCode, "WFbeRlm"),
342                ?geld_bedrag, 0
343                ) AS ?r_ii_bedrag
344                )
345
346                # --- R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten ---
347                # Prismant: 903, RGS: WWfa
348                BIND(
349                IF(
350                STRSTARTS(?rubriekCode, "903") ||
351                STRSTARTS(?rubriekCode, "WWfa"),
352                ?geld_bedrag, 0
353                ) AS ?r_iii_bedrag
354                )
355
356                # --- R.IV Rentelasten en soortgelijke kosten ---
357                # Prismant: 485/901, RGS: WFbe minus WFbeRlm
358                BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901") || STRSTARTS(?rubriekCode, "WFbe"), ?geld_bedrag, 0) AS ?r_iv_plus_bedrag)
359                BIND(IF(STRSTARTS(?rubriekCode, "WFbeRlm"), ?geld_bedrag, 0) AS ?r_iv_min_bedrag)
360
361                # --- S.I Belastingen ---
362                # RGS: WBel (Prismant: niet beschikbaar)
363                BIND(IF(STRSTARTS(?rubriekCode, "WBel"), ?geld_bedrag, 0) AS ?s_i_bedrag)
364
365                # --- S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen ---
366                # Prismant: 902, RGS: WRed
367                BIND(
368                IF(
369                STRSTARTS(?rubriekCode, "902") ||
370                STRSTARTS(?rubriekCode, "WRed"),
371                ?geld_bedrag, 0
372                ) AS ?s_ii_bedrag
373                )
374                # <<< END BB: BB-005_winst_verlies_posten.rq
375
376                # --- Data detection flags: 1 als de grootboekpost bij het component hoort ---
377                BIND(IF(
378                STRSTARTS(?rubriekCode, "81") || STRSTARTS(?rubriekCode, "82") || STRSTARTS(?rubriekCode, "83") ||
379                STRSTARTS(?rubriekCode, "89") || STRSTARTS(?rubriekCode, "919") || STRSTARTS(?rubriekCode, "920") ||
380                STRSTARTS(?rubriekCode, "930") || STRSTARTS(?rubriekCode, "WOmz") || STRSTARTS(?rubriekCode, "WBat") ||
381                STRSTARTS(?rubriekCode, "WWiv") || STRSTARTS(?rubriekCode, "WOvb"),
382                1, 0) AS ?p_flag)
383                BIND(IF(
384                STRSTARTS(?rubriekCode, "417") || STRSTARTS(?rubriekCode, "418") ||
385                STRSTARTS(?rubriekCode, "411") || STRSTARTS(?rubriekCode, "412") || STRSTARTS(?rubriekCode, "413") ||
386                STRSTARTS(?rubriekCode, "414") || STRSTARTS(?rubriekCode, "415") || STRSTARTS(?rubriekCode, "416") ||
387                STRSTARTS(?rubriekCode, "419") || STRSTARTS(?rubriekCode, "420") || STRSTARTS(?rubriekCode, "4221") ||
388                STRSTARTS(?rubriekCode, "4223") || STRSTARTS(?rubriekCode, "4224") || STRSTARTS(?rubriekCode, "4225") ||
389                STRSTARTS(?rubriekCode, "4229") || STRSTARTS(?rubriekCode, "4226") ||
390                STRSTARTS(?rubriekCode, "480") || STRSTARTS(?rubriekCode, "481") || STRSTARTS(?rubriekCode, "482") ||
391                STRSTARTS(?rubriekCode, "483") || STRSTARTS(?rubriekCode, "484") ||
392                STRSTARTS(?rubriekCode, "423") || STRSTARTS(?rubriekCode, "43") || STRSTARTS(?rubriekCode, "44") ||
393                STRSTARTS(?rubriekCode, "45") || STRSTARTS(?rubriekCode, "46") || STRSTARTS(?rubriekCode, "47") ||
394                STRSTARTS(?rubriekCode, "486") || STRSTARTS(?rubriekCode, "489") || STRSTARTS(?rubriekCode, "905") ||
395                STRSTARTS(?rubriekCode, "911") || STRSTARTS(?rubriekCode, "912") || STRSTARTS(?rubriekCode, "913") ||
396                STRSTARTS(?rubriekCode, "914") || STRSTARTS(?rubriekCode, "915") || STRSTARTS(?rubriekCode, "921") ||
397                STRSTARTS(?rubriekCode, "931") || STRSTARTS(?rubriekCode, "WKpr") || STRSTARTS(?rubriekCode, "WPer") ||
398                STRSTARTS(?rubriekCode, "WAfs") || STRSTARTS(?rubriekCode, "WWvi") || STRSTARTS(?rubriekCode, "WBwv") ||
399                STRSTARTS(?rubriekCode, "WBed"),
400                1, 0) AS ?q_flag)
401                BIND(IF(
402                STRSTARTS(?rubriekCode, "904") ||
403                STRSTARTS(?rubriekCode, "900") ||
404                STRSTARTS(?rubriekCode, "903") ||
405                STRSTARTS(?rubriekCode, "485") ||
406                STRSTARTS(?rubriekCode, "901") ||
407                STRSTARTS(?rubriekCode, "WOvt") ||
408                STRSTARTS(?rubriekCode, "WWfa") ||
409                STRSTARTS(?rubriekCode, "WFbe"),
410                1, 0) AS ?r_flag)
411                BIND(IF(
412                STRSTARTS(?rubriekCode, "WBel") ||
413                STRSTARTS(?rubriekCode, "902") ||
414                STRSTARTS(?rubriekCode, "WRed"),
415                1, 0) AS ?s_flag)
416
417            }
418        }
419
420        # Genereer eindtotalen met berekende formules
421        VALUES (?eindtotaal_type ?jaarrekeningpost) {
422            (1 "P Som der bedrijfsopbrengsten")  # P totaal
423            (2 "Q Som der bedrijfslasten")       # Q totaal
424            (3 "R Resultaat voor belastingen")  # P + Q + R
425            (4 "S Resultaat na belastingen")    # R + S
426        }
427
428        # Tel de bedragen op, als er geen data is gebruik dan nul
429        BIND(
430        IF(?eindtotaal_type = 1, COALESCE(?p_totaal, 0),
431        IF(?eindtotaal_type = 2, COALESCE(?q_totaal, 0),
432        IF(?eindtotaal_type = 3, COALESCE(?p_totaal, 0) + COALESCE(?q_totaal, 0) + COALESCE(?r_totaal, 0),
433        IF(?eindtotaal_type = 4, COALESCE(?p_totaal, 0) + COALESCE(?q_totaal, 0) + COALESCE(?r_totaal, 0) + 				COALESCE(?s_totaal, 0),
434        0)))) AS ?bedrag_rubriek
435        )
436
437        BIND(
438        IF(?eindtotaal_type = 1, ?p_has_data,
439        IF(?eindtotaal_type = 2, ?q_has_data,
440        IF(?eindtotaal_type = 3, ?p_has_data + ?q_has_data + ?r_has_data,
441        IF(?eindtotaal_type = 4, ?p_has_data + ?q_has_data + ?r_has_data + ?s_has_data,
442        0)))) AS ?heeftData
443        )
444
445    }
446    UNION
447    {
448        # ========================================================================
449        # DEEL 2: Individuele jaarrekeningposten uit grootboekdata
450        ## Inclusief een oplossing om lege posten als niet bestaand weer te geven.
451        ## In dit geval via heeftData = 0 en dan in de buitenste select dit weer te geven met een string
452        # Werkt voor Prismant én RGS
453        # ========================================================================
454        {
455            SELECT
456            ?jaarrekeningpost
457            ?bedrag_rubriek
458            ?heeftData
459            WHERE {
460                {
461                    SELECT
462                    (SUM(?p_i_bedrag) AS ?p_i_totaal)
463                    (SUM(?p_ii_plus_bedrag) AS ?p_ii_plus_totaal)
464                    (SUM(?p_ii_min_bedrag) AS ?p_ii_min_totaal)
465                    (SUM(?p_iii_bedrag) AS ?p_iii_totaal)
466                    (SUM(?p_iv_bedrag) AS ?p_iv_totaal)
467
468                    (SUM(?q_i_plus_bedrag) AS ?q_i_plus_totaal)
469                    (SUM(?q_i_min_bedrag) AS ?q_i_min_totaal)
470                    (SUM(?q_ii_bedrag) AS ?q_ii_totaal)
471                    (SUM(?q_iii_bedrag) AS ?q_iii_totaal)
472                    (SUM(?q_iii_min_bedrag) AS ?q_iii_min_totaal)
473                    (SUM(?q_iv_bedrag) AS ?q_iv_totaal)
474                    (SUM(?q_v_bedrag) AS ?q_v_totaal)
475                    (SUM(?q_vi_bedrag) AS ?q_vi_totaal)
476                    (SUM(?q_vii_bedrag) AS ?q_vii_totaal)
477                    (SUM(?q_viii_bedrag) AS ?q_viii_totaal)
478                    (SUM(?q_ix_bedrag) AS ?q_ix_totaal)
479
480                    (SUM(?r_i_bedrag) AS ?r_i_totaal)
481                    (SUM(?r_ii_bedrag) AS ?r_ii_totaal)
482                    (SUM(?r_iii_bedrag) AS ?r_iii_totaal)
483                    (SUM(?r_iv_plus_bedrag) AS ?r_iv_plus_totaal)
484                    (SUM(?r_iv_min_bedrag) AS ?r_iv_min_totaal)
485
486                    (SUM(?s_i_bedrag) AS ?s_i_totaal)
487                    (SUM(?s_ii_bedrag) AS ?s_ii_totaal)
488
489                    (SUM(?p_i_flag) AS ?p_i_has_data)
490                    (SUM(?p_ii_flag) AS ?p_ii_has_data)
491                    (SUM(?p_iii_flag) AS ?p_iii_has_data)
492                    (SUM(?p_iv_flag) AS ?p_iv_has_data)
493                    (SUM(?q_i_flag) AS ?q_i_has_data)
494                    (SUM(?q_ii_flag) AS ?q_ii_has_data)
495                    (SUM(?q_iii_flag) AS ?q_iii_has_data)
496                    (SUM(?q_iv_flag) AS ?q_iv_has_data)
497                    (SUM(?q_v_flag) AS ?q_v_has_data)
498                    (SUM(?q_vi_flag) AS ?q_vi_has_data)
499                    (SUM(?q_vii_flag) AS ?q_vii_has_data)
500                    (SUM(?q_viii_flag) AS ?q_viii_has_data)
501                    (SUM(?q_ix_flag) AS ?q_ix_has_data)
502                    (SUM(?r_i_flag) AS ?r_i_has_data)
503                    (SUM(?r_ii_flag) AS ?r_ii_has_data)
504                    (SUM(?r_iii_flag) AS ?r_iii_has_data)
505                    (SUM(?r_iv_flag) AS ?r_iv_has_data)
506                    (SUM(?s_i_flag) AS ?s_i_has_data)
507                    (SUM(?s_ii_flag) AS ?s_ii_has_data)
508                    WHERE {
509                        #BIND("2024-01-01"^^xsd:date AS ?startperiode)
510                        #BIND("2024-12-31"^^xsd:date AS ?eindperiode)
511
512                        ?grootboek_post a onz-fin:Grootboekpost ;
513                        onz-g:partOf ?rubriek ;
514                        onz-g:hasDate ?datum ;
515                        onz-fin:heeftGeldBedrag ?geld_bedrag .
516
517                        # Match directe ouder: Grootboekrekening (RGS) of Grootboekrubriek (Prismant)
518                        {
519                            { ?rubriek a onz-fin:Grootboekrekening }
520                            UNION
521                            { ?rubriek a onz-fin:Grootboekrubriek }
522                        }
523                        # Anti-dubbeltelling: houd alleen het bladniveau (geen transitive ancestors)
524                        FILTER NOT EXISTS {
525                            ?grootboek_post onz-g:partOf ?child .
526                            ?child onz-g:partOf ?rubriek .
527                            FILTER(?child != ?rubriek)
528                            { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
529                        }
530                        FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
531                        BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
532
533                        FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
534
535                        # Parameters voor building block winst_verlies_posten.rq
536
537                        # >>> START BB: BB-005_winst_verlies_posten.rq
538                        # =============================================================================
539                        # Totaal-niveau: P, Q, R, S
540                        # =============================================================================
541
542                        # --- P: Som der bedrijfsopbrengsten ---
543                        # Prismant: P.I=81, P.IV=82/83/89/919/920/930
544                        # RGS: P.I=WOmz/WBat, P.II = WWiv minus WWivGvp, III=WWivGvp, P.IV=WOvb
545                        # voor de som P volstaat het om WWiv hier te zetten want zo wordt WWivGvp ook maar 1x geteld.
546                        BIND(
547                        IF(
548                        STRSTARTS(?rubriekCode, "81") ||
549                        STRSTARTS(?rubriekCode, "82") ||
550                        STRSTARTS(?rubriekCode, "83") ||
551                        STRSTARTS(?rubriekCode, "89") ||
552                        STRSTARTS(?rubriekCode, "919") ||
553                        STRSTARTS(?rubriekCode, "920") ||
554                        STRSTARTS(?rubriekCode, "930") ||
555                        STRSTARTS(?rubriekCode, "WOmz") ||
556                        STRSTARTS(?rubriekCode, "WBat") ||
557                        STRSTARTS(?rubriekCode, "WWiv") ||
558                        STRSTARTS(?rubriekCode, "WOvb"),
559                        ?geld_bedrag, 0) AS ?p_bedrag
560                        )
561
562                        # --- Q: Som der bedrijfslasten ---
563                        # Q.I RGS: WKpr minus WKprKuw
564                        # Q.II: 417/418 (Kosten uitbesteed werk en andere externe kosten), RGS: WKprKuw
565                        # Q.III: 411-419 (Lonen en salarissen), RGS: WPer minus WPerSol minus WPerPen
566                        # Q.IV: 420/4221/4223-4225/4229 (Sociale lasten), RGS: WPerSol
567                        # Q.V: 4226 (Pensioenlasten), RGS: WPerPen
568                        # Q.VI: 480-484 (Afschrijvingen op immateriële vaste activa en materiële vaste activa), RGS: WAfs
569                        # Q.VII: RGS: WWvi
570                        # Q.VIII: RGS: WBwv
571                        # Q.IX: 423/43-47/486/489/905/911-915/921/931 (Overige bedrijfskosten), RGS: WBed
572                        # ook hier volstaat het voor de som van Q om alleen WPer te noemen zodat WPerSol en WPerPen niet dubbel geteld worden
573                        BIND(
574                        IF(
575                        STRSTARTS(?rubriekCode, "417") ||
576                        STRSTARTS(?rubriekCode, "418") ||
577                        STRSTARTS(?rubriekCode, "411") ||
578                        STRSTARTS(?rubriekCode, "412") ||
579                        STRSTARTS(?rubriekCode, "413") ||
580                        STRSTARTS(?rubriekCode, "414") ||
581                        STRSTARTS(?rubriekCode, "415") ||
582                        STRSTARTS(?rubriekCode, "416") ||
583                        STRSTARTS(?rubriekCode, "419") ||
584                        STRSTARTS(?rubriekCode, "420") ||
585                        STRSTARTS(?rubriekCode, "4221") ||
586                        STRSTARTS(?rubriekCode, "4223") ||
587                        STRSTARTS(?rubriekCode, "4224") ||
588                        STRSTARTS(?rubriekCode, "4225") ||
589                        STRSTARTS(?rubriekCode, "4229") ||
590                        STRSTARTS(?rubriekCode, "4226") ||
591                        STRSTARTS(?rubriekCode, "480") ||
592                        STRSTARTS(?rubriekCode, "481") ||
593                        STRSTARTS(?rubriekCode, "482") ||
594                        STRSTARTS(?rubriekCode, "483") ||
595                        STRSTARTS(?rubriekCode, "484") ||
596                        STRSTARTS(?rubriekCode, "423") ||
597                        STRSTARTS(?rubriekCode, "43") ||
598                        STRSTARTS(?rubriekCode, "44") ||
599                        STRSTARTS(?rubriekCode, "45") ||
600                        STRSTARTS(?rubriekCode, "46") ||
601                        STRSTARTS(?rubriekCode, "47") ||
602                        STRSTARTS(?rubriekCode, "486") ||
603                        STRSTARTS(?rubriekCode, "489") ||
604                        STRSTARTS(?rubriekCode, "905") ||
605                        STRSTARTS(?rubriekCode, "911") ||
606                        STRSTARTS(?rubriekCode, "912") ||
607                        STRSTARTS(?rubriekCode, "913") ||
608                        STRSTARTS(?rubriekCode, "914") ||
609                        STRSTARTS(?rubriekCode, "915") ||
610                        STRSTARTS(?rubriekCode, "921") ||
611                        STRSTARTS(?rubriekCode, "931") ||
612                        STRSTARTS(?rubriekCode, "WKpr") ||
613                        STRSTARTS(?rubriekCode, "WPer") ||
614                        STRSTARTS(?rubriekCode, "WAfs") ||
615                        STRSTARTS(?rubriekCode, "WWvi") ||
616                        STRSTARTS(?rubriekCode, "WBwv") ||
617                        STRSTARTS(?rubriekCode, "WBed"),
618                        ?geld_bedrag, 0) AS ?q_bedrag
619                        )
620
621                        # --- R: Financiële baten en lasten ---
622                        # Prismant: R.I=904, R.II=900, R.III=903, R.IV=485/901
623                        # RGS: R.I=WOvt, R.II=WFbeRlm, R.III=WWfa, R.IV=WFbe minus WFbeRlm
624                        # voor de som R volstaat het om WFbe hier te zetten want zo wordt WFbeRlm ook maar 1x geteld.
625                        BIND(
626                        IF(
627                        STRSTARTS(?rubriekCode, "904") ||
628                        STRSTARTS(?rubriekCode, "900") ||
629                        STRSTARTS(?rubriekCode, "903") ||
630                        STRSTARTS(?rubriekCode, "485") ||
631                        STRSTARTS(?rubriekCode, "901") ||
632                        STRSTARTS(?rubriekCode, "WOvt") ||
633                        STRSTARTS(?rubriekCode, "WWfa") ||
634                        STRSTARTS(?rubriekCode, "WFbe"),
635                        ?geld_bedrag, 0) AS ?r_bedrag
636                        )
637
638                        # --- S: Belastingen en resultaat deelnemingen ---
639                        # Prismant: S.II=902
640                        # RGS: S.I=WBel, S.II=WRed
641                        BIND(
642                        IF(
643                        STRSTARTS(?rubriekCode, "902") ||
644                        STRSTARTS(?rubriekCode, "WBel") ||
645                        STRSTARTS(?rubriekCode, "WRed"),
646                        ?geld_bedrag, 0) AS ?s_bedrag
647                        )
648
649                        # =============================================================================
650                        # Detail-niveau: P.I t/m S.II
651                        # =============================================================================
652
653                        # --- P.I Netto omzet ---
654                        # Prismant: 81, RGS: WOmz/WBat
655                        BIND(
656                        IF(
657                        STRSTARTS(?rubriekCode, "81") ||
658                        STRSTARTS(?rubriekCode, "WOmz") ||
659                        STRSTARTS(?rubriekCode, "WBat"),
660                        ?geld_bedrag, 0
661                        ) AS ?p_i_bedrag
662                        )
663
664                        # --- P.II Wijziging in voorraden ---
665                        # RGS: WWiv minus WWivGpv (Prismant: niet beschikbaar)
666                        BIND(IF(STRSTARTS(?rubriekCode, "WWiv"), ?geld_bedrag, 0) AS ?p_ii_plus_bedrag)
667                        BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_ii_min_bedrag)
668
669                        # --- P.III Geactiveerde productie voor het eigen bedrijf ---
670                        # RGS: WWivGpv (Prismant: niet beschikbaar)
671                        BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), ?geld_bedrag, 0) AS ?p_iii_bedrag)
672
673                        # --- P.IV Overige bedrijfsopbrengsten ---
674                        # Prismant: 82/83/89/919/920/930, RGS: WOvb
675                        BIND(
676                        IF(
677                        STRSTARTS(?rubriekCode, "82") ||
678                        STRSTARTS(?rubriekCode, "83") ||
679                        STRSTARTS(?rubriekCode, "89") ||
680                        STRSTARTS(?rubriekCode, "919") ||
681                        STRSTARTS(?rubriekCode, "920") ||
682                        STRSTARTS(?rubriekCode, "930") ||
683                        STRSTARTS(?rubriekCode, "WOvb"),
684                        ?geld_bedrag, 0
685                        ) AS ?p_iv_bedrag
686                        )
687
688                        # --- Q.I Kosten van grond- en hulpstoffen ---
689                        # RGS: WKpr minus WKprKuw (Prismant: niet beschikbaar)
690                        BIND(IF(STRSTARTS(?rubriekCode, "WKpr"), ?geld_bedrag, 0) AS ?q_i_plus_bedrag)
691                        BIND(IF(STRSTARTS(?rubriekCode, "WKprKuw"), ?geld_bedrag, 0) AS ?q_i_min_bedrag)
692
693                        # --- Q.II Kosten uitbesteed werk en andere externe kosten ---
694                        # Prismant: 417/418, RGS: WKprKuw
695                        BIND(
696                        IF(
697                        STRSTARTS(?rubriekCode, "417") ||
698                        STRSTARTS(?rubriekCode, "418") ||
699                        STRSTARTS(?rubriekCode, "WKprKuw"),
700                        ?geld_bedrag, 0
701                        ) AS ?q_ii_bedrag
702                        )
703
704                        # --- Q.III Lonen en salarissen ---
705                        # Prismant: 411-419, RGS: WPer minus WPerSol minus WPerPen
706                        BIND(
707                        IF(
708                        STRSTARTS(?rubriekCode, "411") ||
709                        STRSTARTS(?rubriekCode, "412") ||
710                        STRSTARTS(?rubriekCode, "413") ||
711                        STRSTARTS(?rubriekCode, "414") ||
712                        STRSTARTS(?rubriekCode, "415") ||
713                        STRSTARTS(?rubriekCode, "416") ||
714                        STRSTARTS(?rubriekCode, "419") ||
715                        STRSTARTS(?rubriekCode, "WPer"),
716                        ?geld_bedrag, 0
717                        ) AS ?q_iii_bedrag
718                        )
719                        BIND(
720                        IF(
721                        STRSTARTS(?rubriekCode, "WPerSol") ||
722                        STRSTARTS(?rubriekCode, "WPerPen"),
723                        ?geld_bedrag, 0
724                        ) AS ?q_iii_min_bedrag
725                        )
726
727                        # --- Q.IV Sociale lasten ---
728                        # Prismant: 420/4221/4223-4225/4229, RGS: WPerSol
729                        BIND(
730                        IF(
731                        STRSTARTS(?rubriekCode, "420") ||
732                        STRSTARTS(?rubriekCode, "4221") ||
733                        STRSTARTS(?rubriekCode, "4223") ||
734                        STRSTARTS(?rubriekCode, "4224") ||
735                        STRSTARTS(?rubriekCode, "4225") ||
736                        STRSTARTS(?rubriekCode, "4229") ||
737                        STRSTARTS(?rubriekCode, "WPerSol"),
738                        ?geld_bedrag, 0
739                        ) AS ?q_iv_bedrag
740                        )
741
742                        # --- Q.V Pensioenlasten ---
743                        # Prismant: 4226, RGS: WPerPen
744                        BIND(
745                        IF(
746                        STRSTARTS(?rubriekCode, "4226") ||
747                        STRSTARTS(?rubriekCode, "WPerPen"),
748                        ?geld_bedrag, 0
749                        ) AS ?q_v_bedrag
750                        )
751
752                        # --- Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa ---
753                        # Prismant: 480-484, RGS: WAfs
754                        BIND(
755                        IF(
756                        STRSTARTS(?rubriekCode, "480") ||
757                        STRSTARTS(?rubriekCode, "481") ||
758                        STRSTARTS(?rubriekCode, "482") ||
759                        STRSTARTS(?rubriekCode, "483") ||
760                        STRSTARTS(?rubriekCode, "484") ||
761                        STRSTARTS(?rubriekCode, "WAfs"),
762                        ?geld_bedrag, 0
763                        ) AS ?q_vi_bedrag
764                        )
765
766                        # --- Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa ---
767                        # RGS: WWvi (Prismant: niet beschikbaar)
768                        BIND(IF(STRSTARTS(?rubriekCode, "WWvi"), ?geld_bedrag, 0) AS ?q_vii_bedrag)
769
770                        # --- Q.VIII Bijzondere waardevermindering van vlottende activa ---
771                        # RGS: WBwv (Prismant: niet beschikbaar)
772                        BIND(IF(STRSTARTS(?rubriekCode, "WBwv"), ?geld_bedrag, 0) AS ?q_viii_bedrag)
773
774                        # --- Q.IX Overige bedrijfskosten ---
775                        # Prismant: 423/43-47/486/489/905/911-915/921/931
776                        # RGS: WBed
777                        BIND(
778                        IF(
779                        STRSTARTS(?rubriekCode, "423") ||
780                        STRSTARTS(?rubriekCode, "43") ||
781                        STRSTARTS(?rubriekCode, "44") ||
782                        STRSTARTS(?rubriekCode, "45") ||
783                        STRSTARTS(?rubriekCode, "46") ||
784                        STRSTARTS(?rubriekCode, "47") ||
785                        STRSTARTS(?rubriekCode, "486") ||
786                        STRSTARTS(?rubriekCode, "489") ||
787                        STRSTARTS(?rubriekCode, "905") ||
788                        STRSTARTS(?rubriekCode, "911") ||
789                        STRSTARTS(?rubriekCode, "912") ||
790                        STRSTARTS(?rubriekCode, "913") ||
791                        STRSTARTS(?rubriekCode, "914") ||
792                        STRSTARTS(?rubriekCode, "915") ||
793                        STRSTARTS(?rubriekCode, "921") ||
794                        STRSTARTS(?rubriekCode, "931") ||
795                        STRSTARTS(?rubriekCode, "WBed"),
796                        ?geld_bedrag, 0
797                        ) AS ?q_ix_bedrag
798                        )
799
800                        # --- R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten ---
801                        # Prismant: 904, RGS: WOvt
802                        BIND(
803                        IF(
804                        STRSTARTS(?rubriekCode, "904") ||
805                        STRSTARTS(?rubriekCode, "WOvt"),
806                        ?geld_bedrag, 0
807                        ) AS ?r_i_bedrag
808                        )
809
810                        # --- R.II Andere rentebaten en soortgelijke opbrengsten ---
811                        # Prismant: 900, RGS: WFbeRlm
812                        BIND(
813                        IF(
814                        STRSTARTS(?rubriekCode, "900") ||
815                        STRSTARTS(?rubriekCode, "WFbeRlm"),
816                        ?geld_bedrag, 0
817                        ) AS ?r_ii_bedrag
818                        )
819
820                        # --- R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten ---
821                        # Prismant: 903, RGS: WWfa
822                        BIND(
823                        IF(
824                        STRSTARTS(?rubriekCode, "903") ||
825                        STRSTARTS(?rubriekCode, "WWfa"),
826                        ?geld_bedrag, 0
827                        ) AS ?r_iii_bedrag
828                        )
829
830                        # --- R.IV Rentelasten en soortgelijke kosten ---
831                        # Prismant: 485/901, RGS: WFbe minus WFbeRlm
832                        BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901") || STRSTARTS(?rubriekCode, "WFbe"), ?geld_bedrag, 0) AS ?r_iv_plus_bedrag)
833                        BIND(IF(STRSTARTS(?rubriekCode, "WFbeRlm"), ?geld_bedrag, 0) AS ?r_iv_min_bedrag)
834
835                        # --- S.I Belastingen ---
836                        # RGS: WBel (Prismant: niet beschikbaar)
837                        BIND(IF(STRSTARTS(?rubriekCode, "WBel"), ?geld_bedrag, 0) AS ?s_i_bedrag)
838
839                        # --- S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen ---
840                        # Prismant: 902, RGS: WRed
841                        BIND(
842                        IF(
843                        STRSTARTS(?rubriekCode, "902") ||
844                        STRSTARTS(?rubriekCode, "WRed"),
845                        ?geld_bedrag, 0
846                        ) AS ?s_ii_bedrag
847                        )
848                        # <<< END BB: BB-005_winst_verlies_posten.rq
849
850                        # --- Data detection flags: 1 als de grootboekpost bij het component hoort ---
851                        BIND(IF(
852                        STRSTARTS(?rubriekCode, "81") || STRSTARTS(?rubriekCode, "WOmz") ||
853                        STRSTARTS(?rubriekCode, "WBat"),
854                        1, 0) AS ?p_i_flag)
855                        BIND(IF(STRSTARTS(?rubriekCode, "WWiv"), 1, 0) AS ?p_ii_flag)
856                        BIND(IF(STRSTARTS(?rubriekCode, "WWivGpv"), 1, 0) AS ?p_iii_flag)
857                        BIND(IF(
858                        STRSTARTS(?rubriekCode, "82") || STRSTARTS(?rubriekCode, "83") ||
859                        STRSTARTS(?rubriekCode, "89") || STRSTARTS(?rubriekCode, "919") ||
860                        STRSTARTS(?rubriekCode, "920") || STRSTARTS(?rubriekCode, "930") ||
861                        STRSTARTS(?rubriekCode, "WOvb"),
862                        1, 0) AS ?p_iv_flag)
863                        BIND(IF(STRSTARTS(?rubriekCode, "WKpr"), 1, 0) AS ?q_i_flag)
864                        BIND(IF(
865                        STRSTARTS(?rubriekCode, "417") || STRSTARTS(?rubriekCode, "418") ||
866                        STRSTARTS(?rubriekCode, "WKprKuw"),
867                        1, 0) AS ?q_ii_flag)
868                        BIND(IF(
869                        STRSTARTS(?rubriekCode, "411") || STRSTARTS(?rubriekCode, "412") ||
870                        STRSTARTS(?rubriekCode, "413") || STRSTARTS(?rubriekCode, "414") ||
871                        STRSTARTS(?rubriekCode, "415") || STRSTARTS(?rubriekCode, "416") ||
872                        STRSTARTS(?rubriekCode, "419") || STRSTARTS(?rubriekCode, "WPer"),
873                        1, 0) AS ?q_iii_flag)
874                        BIND(IF(
875                        STRSTARTS(?rubriekCode, "420") || STRSTARTS(?rubriekCode, "4221") ||
876                        STRSTARTS(?rubriekCode, "4223") || STRSTARTS(?rubriekCode, "4224") ||
877                        STRSTARTS(?rubriekCode, "4225") || STRSTARTS(?rubriekCode, "4229") ||
878                        STRSTARTS(?rubriekCode, "WPerSol"),
879                        1, 0) AS ?q_iv_flag)
880                        BIND(IF(
881                        STRSTARTS(?rubriekCode, "4226") || STRSTARTS(?rubriekCode, "WPerPen"),
882                        1, 0) AS ?q_v_flag)
883                        BIND(IF(
884                        STRSTARTS(?rubriekCode, "480") || STRSTARTS(?rubriekCode, "481") ||
885                        STRSTARTS(?rubriekCode, "482") || STRSTARTS(?rubriekCode, "483") ||
886                        STRSTARTS(?rubriekCode, "484") || STRSTARTS(?rubriekCode, "WAfs"),
887                        1, 0) AS ?q_vi_flag)
888                        BIND(IF(STRSTARTS(?rubriekCode, "WWvi"), 1, 0) AS ?q_vii_flag)
889                        BIND(IF(STRSTARTS(?rubriekCode, "WBwv"), 1, 0) AS ?q_viii_flag)
890                        BIND(IF(
891                        STRSTARTS(?rubriekCode, "423") || STRSTARTS(?rubriekCode, "43") ||
892                        STRSTARTS(?rubriekCode, "44") || STRSTARTS(?rubriekCode, "45") ||
893                        STRSTARTS(?rubriekCode, "46") || STRSTARTS(?rubriekCode, "47") ||
894                        STRSTARTS(?rubriekCode, "486") || STRSTARTS(?rubriekCode, "489") ||
895                        STRSTARTS(?rubriekCode, "905") || STRSTARTS(?rubriekCode, "911") ||
896                        STRSTARTS(?rubriekCode, "912") || STRSTARTS(?rubriekCode, "913") ||
897                        STRSTARTS(?rubriekCode, "914") || STRSTARTS(?rubriekCode, "915") ||
898                        STRSTARTS(?rubriekCode, "921") || STRSTARTS(?rubriekCode, "931") ||
899                        STRSTARTS(?rubriekCode, "WBed"),
900                        1, 0) AS ?q_ix_flag)
901                        BIND(IF(STRSTARTS(?rubriekCode, "904") || STRSTARTS(?rubriekCode, "WOvt"), 1, 0) AS ?r_i_flag)
902                        BIND(IF(STRSTARTS(?rubriekCode, "900") || STRSTARTS(?rubriekCode, "WFbeRlm"), 1, 0) AS ?r_ii_flag)
903                        BIND(IF(STRSTARTS(?rubriekCode, "903") || STRSTARTS(?rubriekCode, "WWfa"), 1, 0) AS ?r_iii_flag)
904                        BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901") || STRSTARTS(?rubriekCode, "WFbe"), 1, 0) AS ?r_iv_flag)
905                        BIND(IF(STRSTARTS(?rubriekCode, "WBel"), 1, 0) AS ?s_i_flag)
906                        BIND(IF(STRSTARTS(?rubriekCode, "902") || STRSTARTS(?rubriekCode, "WRed"), 1, 0) AS ?s_ii_flag)
907                    }
908                }
909
910                VALUES (?detail_type ?jaarrekeningpost) {
911                    (1  "P.I Netto omzet")
912                    (2  "P.II Wijziging in voorraden gereed product en onderhanden werk ten opzichte van de voorafgaande balansdatum")
913                    (3  "P.III Geactiveerde productie voor het eigen bedrijf")
914                    (4  "P.IV Overige bedrijfsopbrengsten")
915                    (5  "Q.I Kosten van grond- en hulpstoffen")
916                    (6  "Q.II Kosten uitbesteed werk en andere externe kosten")
917                    (7  "Q.III Lonen en salarissen")
918                    (8  "Q.IV Sociale lasten")
919                    (9  "Q.V Pensioenlasten")
920                    (10 "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa")
921                    (11 "Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa")
922                    (12 "Q.VIII Bijzondere waardevermindering van vlottende activa")
923                    (13 "Q.IX Overige bedrijfskosten")
924                    (14 "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten")
925                    (15 "R.II Andere rentebaten en soortgelijke opbrengsten")
926                    (16 "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten")
927                    (17 "R.IV Rentelasten en soortgelijke kosten")
928                    (18 "S.I Belastingen")
929                    (19 "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen")
930                }
931
932                BIND(
933                IF(?detail_type = 1, ?p_i_totaal,
934                IF(?detail_type = 2, ?p_ii_plus_totaal - ?p_ii_min_totaal,
935                IF(?detail_type = 3, ?p_iii_totaal,
936                IF(?detail_type = 4, ?p_iv_totaal,
937                IF(?detail_type = 5, ?q_i_plus_totaal - ?q_i_min_totaal,
938                IF(?detail_type = 6, ?q_ii_totaal,
939                IF(?detail_type = 7, ?q_iii_totaal - ?q_iii_min_totaal  ,
940                IF(?detail_type = 8, ?q_iv_totaal,
941                IF(?detail_type = 9, ?q_v_totaal,
942                IF(?detail_type = 10, ?q_vi_totaal,
943                IF(?detail_type = 11, ?q_vii_totaal,
944                IF(?detail_type = 12, ?q_viii_totaal,
945                IF(?detail_type = 13, ?q_ix_totaal,
946                IF(?detail_type = 14, ?r_i_totaal,
947                IF(?detail_type = 15, ?r_ii_totaal,
948                IF(?detail_type = 16, ?r_iii_totaal,
949                IF(?detail_type = 17, ?r_iv_plus_totaal - ?r_iv_min_totaal,
950                IF(?detail_type = 18, ?s_i_totaal,
951                IF(?detail_type = 19, ?s_ii_totaal,
952                0
953                )))))))))))))))))))
954                AS ?bedrag_rubriek
955                )
956
957                # Bepaal of er data beschikbaar is voor de individuele jaarrekeningpost
958                BIND(
959                IF(?detail_type = 1, IF(?p_i_has_data > 0, 1, 0),
960                IF(?detail_type = 2, IF(?p_ii_has_data > 0, 1, 0),
961                IF(?detail_type = 3, IF(?p_iii_has_data > 0, 1, 0),
962                IF(?detail_type = 4, IF(?p_iv_has_data > 0, 1, 0),
963                IF(?detail_type = 5, IF(?q_i_has_data > 0, 1, 0),
964                IF(?detail_type = 6, IF(?q_ii_has_data > 0, 1, 0),
965                IF(?detail_type = 7, IF(?q_iii_has_data > 0, 1, 0),
966                IF(?detail_type = 8, IF(?q_iv_has_data > 0, 1, 0),
967                IF(?detail_type = 9, IF(?q_v_has_data > 0, 1, 0),
968                IF(?detail_type = 10, IF(?q_vi_has_data > 0, 1, 0),
969                IF(?detail_type = 11, IF(?q_vii_has_data > 0, 1, 0),
970                IF(?detail_type = 12, IF(?q_viii_has_data > 0, 1, 0),
971                IF(?detail_type = 13, IF(?q_ix_has_data > 0, 1, 0),
972                IF(?detail_type = 14, IF(?r_i_has_data > 0, 1, 0),
973                IF(?detail_type = 15, IF(?r_ii_has_data > 0, 1, 0),
974                IF(?detail_type = 16, IF(?r_iii_has_data > 0, 1, 0),
975                IF(?detail_type = 17, IF(?r_iv_has_data > 0, 1, 0),
976                IF(?detail_type = 18, IF(?s_i_has_data > 0, 1, 0),
977                IF(?detail_type = 19, IF(?s_ii_has_data > 0, 1, 0),
978                0)))))))))))))))))))
979                AS ?heeftData
980                )
981            }
982        }
983    }
984
985    UNION
986    {
987        # =======================================================================
988        # DEEL 3: Volledige lijst van alle jaarrekeningposten
989        # =======================================================================
990        BIND(0 AS ?bedrag_rubriek)
991        BIND(0 AS ?heeftData)  # Tijdens initieren is het nog onduidelijk of er data voor de rubriek aanwezig is
992        VALUES ?jaarrekeningpost {
993            # P: Som der bedrijfsopbrengsten
994            "P.I Netto omzet"
995            "P.II Wijziging in voorraden gereed product en onderhanden werk ten opzichte van de voorafgaande balansdatum"
996            "P.III Geactiveerde productie voor het eigen bedrijf"
997            "P.IV Overige bedrijfsopbrengsten"
998            "P Som der bedrijfsopbrengsten"
999            # Q: Som der bedrijfslasten
1000            "Q.I Kosten van grond- en hulpstoffen"
1001            "Q.II Kosten uitbesteed werk en andere externe kosten"
1002            "Q.III Lonen en salarissen"
1003            "Q.IV Sociale lasten"
1004            "Q.V Pensioenlasten"
1005            "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa"
1006            "Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa"
1007            "Q.VIII Bijzondere waardevermindering van vlottende activa"
1008            "Q.IX Overige bedrijfskosten"
1009            "Q Som der bedrijfslasten"
1010            # R: Financiële baten en lasten
1011            "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten"
1012            "R.II Andere rentebaten en soortgelijke opbrengsten"
1013            "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten"
1014            "R.IV Rentelasten en soortgelijke kosten"
1015            "R Resultaat voor belastingen"
1016            # S: Belastingen en resultaat deelnemingen
1017            "S.I Belastingen"
1018            "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen"
1019            "S Resultaat na belastingen"
1020        }
1021    } }
1022GROUP BY ?jaarrekeningpost
1023ORDER BY ?jaarrekeningpost