Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
03-10-2025

Inwerkingtreding:
03-10-2025

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 18.2.0 - Complete versie met R en S totalen
2# Parameters: ?startperiode, ?eindperiode
3# Ontologie: versie 3.0.0 of nieuwer
4# 
5# Deze query berekent de winst- en verliesrekening obv Prismant grootboekrubrieken.
6# Structuur: 3 delen via UNION die alle jaarrekeningposten + totalen genereren
7# Performance: Eén database scan voor alle berekeningen
8
9PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
10PREFIX onz-g: <http://purl.org/ozo/onz-g#>
11PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
12
13SELECT
14    ?jaarrekeningpost
15    (SUM(?bedrag_rubriek) AS ?bedrag)
16WHERE
17{
18    {
19        # ================================================================
20        # DEEL 1: Berekening eindtotalen P, Q, R, S uit ruwe grootboekdata
21        # ================================================================
22        {
23            # Bereken alle componentbedragen in één database scan voor performance
24            SELECT 
25                (SUM(?p_bedrag) AS ?p_totaal)      # P Som der bedrijfsopbrengsten
26                (SUM(?q_bedrag) AS ?q_totaal)      # Q Som der bedrijfslasten
27                (SUM(?r_i_bedrag) AS ?r_i_totaal)  # R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten
28                (SUM(?r_ii_bedrag) AS ?r_ii_totaal) # R.II Andere rentebaten en soortgelijke opbrengsten
29                (SUM(?r_iii_bedrag) AS ?r_iii_totaal) # R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten
30                (SUM(?r_iv_bedrag) AS ?r_iv_totaal) # R.IV Rentelasten en soortgelijke kosten
31                (SUM(?s_i_bedrag) AS ?s_i_totaal)  # S.I Belastingen (altijd 0, bestaat niet in Prismant)
32                (SUM(?s_ii_bedrag) AS ?s_ii_totaal) # S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen
33            WHERE {
34                # BIND("2024-01-01"^^xsd:date AS ?startperiode)
35                # BIND("2024-12-31"^^xsd:date AS ?eindperiode)
36                # Haal alle 6-cijferige grootboekrubrieken op
37                {
38                    SELECT DISTINCT ?rubriek WHERE {
39                        ?rubriek a onz-fin:Grootboekrubriek .
40                        FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
41                        FILTER(REGEX(STRAFTER(STR(?rubriek), STR(onz-fin:)), "^[0-9]{6}$"))
42                    }
43                }
44                BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
45
46                # Koppel grootboekposten aan rubrieken binnen meetperiode
47                ?grootboek_post a onz-fin:Grootboekpost ;
48                    onz-g:partOf ?rubriek ;
49                    onz-g:hasDate ?datum ;
50                    onz-fin:heeftGeldBedrag ?geld_bedrag .
51
52                FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
53
54                # Split bedragen op in componenten voor eindtotaal berekeningen
55
56                # --- P: Bedragen voor eindtotaalberekening ---
57                # P.I: 81xxxx (Netto omzet)
58                # P.IV: 82/83/89/919/920/930 (Overige bedrijfsopbrengsten)
59                BIND(
60                    IF(
61                        STRSTARTS(?rubriekCode, "81") ||
62                        STRSTARTS(?rubriekCode, "82") ||
63                        STRSTARTS(?rubriekCode, "83") ||
64                        STRSTARTS(?rubriekCode, "89") ||
65                        STRSTARTS(?rubriekCode, "919") ||
66                        STRSTARTS(?rubriekCode, "920") ||
67                        STRSTARTS(?rubriekCode, "930"),
68                        ?geld_bedrag, 0) AS ?p_bedrag
69                )
70
71                # --- Q: Diverse kostenrubrieken ---
72                # Q.II: 417/418 (Kosten uitbesteed werk en andere externe kosten)
73                # Q.III: 411-419 (Lonen en salarissen)
74                # Q.IV: 420/4221/4223-4225/4229 (Sociale lasten)
75                # Q.V: 4226 (Afschrijvingen)
76                # Q.VI: 480-484 (Afschrijvingen op immateriële vaste activa en materiële vaste activa)
77                # Q.IX: 423/43-47/486/489/905/911-915/921/931 (Overige bedrijfskosten)
78                BIND(
79                    IF(
80                        STRSTARTS(?rubriekCode, "417") ||
81                        STRSTARTS(?rubriekCode, "418") ||
82                        STRSTARTS(?rubriekCode, "411") ||
83                        STRSTARTS(?rubriekCode, "412") ||
84                        STRSTARTS(?rubriekCode, "413") ||
85                        STRSTARTS(?rubriekCode, "414") ||
86                        STRSTARTS(?rubriekCode, "415") ||
87                        STRSTARTS(?rubriekCode, "416") ||
88                        STRSTARTS(?rubriekCode, "419") ||
89                        STRSTARTS(?rubriekCode, "420") ||
90                        STRSTARTS(?rubriekCode, "4221") ||
91                        STRSTARTS(?rubriekCode, "4223") ||
92                        STRSTARTS(?rubriekCode, "4224") ||
93                        STRSTARTS(?rubriekCode, "4225") ||
94                        STRSTARTS(?rubriekCode, "4229") ||
95                        STRSTARTS(?rubriekCode, "4226") ||
96                        STRSTARTS(?rubriekCode, "480") ||
97                        STRSTARTS(?rubriekCode, "481") ||
98                        STRSTARTS(?rubriekCode, "482") ||
99                        STRSTARTS(?rubriekCode, "483") ||
100                        STRSTARTS(?rubriekCode, "484") ||
101                        STRSTARTS(?rubriekCode, "423") ||
102                        STRSTARTS(?rubriekCode, "43") ||
103                        STRSTARTS(?rubriekCode, "44") ||
104                        STRSTARTS(?rubriekCode, "45") ||
105                        STRSTARTS(?rubriekCode, "46") ||
106                        STRSTARTS(?rubriekCode, "47") ||
107                        STRSTARTS(?rubriekCode, "486") ||
108                        STRSTARTS(?rubriekCode, "489") ||
109                        STRSTARTS(?rubriekCode, "905") ||
110                        STRSTARTS(?rubriekCode, "911") ||
111                        STRSTARTS(?rubriekCode, "912") ||
112                        STRSTARTS(?rubriekCode, "913") ||
113                        STRSTARTS(?rubriekCode, "914") ||
114                        STRSTARTS(?rubriekCode, "915") ||
115                        STRSTARTS(?rubriekCode, "921") ||
116                        STRSTARTS(?rubriekCode, "931"),
117                        ?geld_bedrag, 0) AS ?q_bedrag
118                )
119                # R.I: 904xxx (Opbrengst van vorderingen die tot de vaste activa behoren en van effecten)
120                BIND(IF(STRSTARTS(?rubriekCode, "904"), ?geld_bedrag, 0) AS ?r_i_bedrag)
121                # R.II: 900xxx (Andere rentebaten en soortgelijke opbrengsten)
122                BIND(IF(STRSTARTS(?rubriekCode, "900"), ?geld_bedrag, 0) AS ?r_ii_bedrag)
123                # R.III: 903xxx (Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten)
124                BIND(IF(STRSTARTS(?rubriekCode, "903"), ?geld_bedrag, 0) AS ?r_iii_bedrag)
125                # R.IV: 485/901 (Rentelasten en soortgelijke kosten)
126                BIND(IF(STRSTARTS(?rubriekCode, "485") || STRSTARTS(?rubriekCode, "901"), ?geld_bedrag, 0) AS ?r_iv_bedrag)
127                # S.I: Belastingen (bestaat niet in Prismant, altijd 0)
128                BIND(0 AS ?s_i_bedrag)
129                # S.II: 902xxx (Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen)
130                BIND(IF(STRSTARTS(?rubriekCode, "902"), ?geld_bedrag, 0) AS ?s_ii_bedrag)
131            }
132        }
133
134        # Genereer eindtotalen met berekende formules
135        VALUES (?eindtotaal_type ?jaarrekeningpost) {
136            (1 "P Som der bedrijfsopbrengsten")  # P totaal
137            (2 "Q Som der bedrijfslasten")       # Q totaal
138            (3 "R Resultaat voor belastingen")  # P - Q + R.I + R.II - R.III - R.IV
139            (4 "S Resultaat na belastingen")    # R - S.I + S.II
140        }
141
142        # Bereken eindtotalen obv formules uit jaarrekening model D
143        BIND(
144            IF(?eindtotaal_type = 1, ?p_totaal, 
145            IF(?eindtotaal_type = 2, ?q_totaal, 
146            IF(?eindtotaal_type = 3, ?p_totaal - ?q_totaal + ?r_i_totaal + ?r_ii_totaal - ?r_iii_totaal - ?r_iv_totaal, 
147            IF(?eindtotaal_type = 4, ?p_totaal - ?q_totaal + ?r_i_totaal + ?r_ii_totaal - ?r_iii_totaal - ?r_iv_totaal - ?s_i_totaal + ?s_ii_totaal, 
148            0)))) AS ?bedrag_rubriek
149        )
150    }
151    UNION
152    {
153        # ========================================================================
154        # DEEL 2: Individuele jaarrekeningposten uit grootboekdata (bestaande logica)
155        # ========================================================================
156        {
157            # Aggregeer bedragen per grootboekcategorie
158            SELECT
159                ?categorie
160                (SUM(?geld_bedrag) AS ?bedrag_rubriek)
161            WHERE {
162                # BIND("2024-01-01"^^xsd:date AS ?startperiode)
163                # BIND("2024-12-31"^^xsd:date AS ?eindperiode)
164                # Haal alle 6-cijferige grootboekrubrieken op
165                {
166                    SELECT DISTINCT ?rubriek WHERE {
167                        ?rubriek a onz-fin:Grootboekrubriek .
168                        FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
169                        FILTER(REGEX(STRAFTER(STR(?rubriek), STR(onz-fin:)), "^[0-9]{6}$"))
170                    }
171                }
172                BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
173
174                # Wijs rubriekcodes toe aan jaarrekeningcategorieën
175                BIND(
176                    COALESCE(
177                        IF(STRSTARTS(?rubriekCode, "81"), "P.I", ?unbound),
178                        IF(
179                            STRSTARTS(?rubriekCode, "82") ||
180                            STRSTARTS(?rubriekCode, "83") ||
181                            STRSTARTS(?rubriekCode, "89") ||
182                            STRSTARTS(?rubriekCode, "919") ||
183                            STRSTARTS(?rubriekCode, "920") ||
184                            STRSTARTS(?rubriekCode, "930"),
185                            "P.IV", ?unbound
186                        ),
187                        IF(
188                            STRSTARTS(?rubriekCode, "417") ||
189                            STRSTARTS(?rubriekCode, "418"),
190                            "Q.II", ?unbound
191                        ),
192                        IF(
193                            STRSTARTS(?rubriekCode, "411") ||
194                            STRSTARTS(?rubriekCode, "412") ||
195                            STRSTARTS(?rubriekCode, "413") ||
196                            STRSTARTS(?rubriekCode, "414") ||
197                            STRSTARTS(?rubriekCode, "415") ||
198                            STRSTARTS(?rubriekCode, "416") ||
199                            STRSTARTS(?rubriekCode, "419"),
200                            "Q.III", ?unbound
201                        ),
202                        IF(
203                            STRSTARTS(?rubriekCode, "420") ||
204                            STRSTARTS(?rubriekCode, "4221") ||
205                            STRSTARTS(?rubriekCode, "4223") ||
206                            STRSTARTS(?rubriekCode, "4224") ||
207                            STRSTARTS(?rubriekCode, "4225") ||
208                            STRSTARTS(?rubriekCode, "4229"),
209                            "Q.IV", ?unbound
210                        ),
211                        IF(STRSTARTS(?rubriekCode, "4226"), "Q.V", ?unbound),
212                        IF(
213                            STRSTARTS(?rubriekCode, "480") ||
214                            STRSTARTS(?rubriekCode, "481") ||
215                            STRSTARTS(?rubriekCode, "482") ||
216                            STRSTARTS(?rubriekCode, "483") ||
217                            STRSTARTS(?rubriekCode, "484"),
218                            "Q.VI", ?unbound
219                        ),
220                        IF(
221                            STRSTARTS(?rubriekCode, "423") ||
222                            STRSTARTS(?rubriekCode, "43") ||
223                            STRSTARTS(?rubriekCode, "44") ||
224                            STRSTARTS(?rubriekCode, "45") ||
225                            STRSTARTS(?rubriekCode, "46") ||
226                            STRSTARTS(?rubriekCode, "47") ||
227                            STRSTARTS(?rubriekCode, "486") ||
228                            STRSTARTS(?rubriekCode, "489") ||
229                            STRSTARTS(?rubriekCode, "905") ||
230                            STRSTARTS(?rubriekCode, "911") ||
231                            STRSTARTS(?rubriekCode, "912") ||
232                            STRSTARTS(?rubriekCode, "913") ||
233                            STRSTARTS(?rubriekCode, "914") ||
234                            STRSTARTS(?rubriekCode, "915") ||
235                            STRSTARTS(?rubriekCode, "921") ||
236                            STRSTARTS(?rubriekCode, "931"),
237                            "Q.IX", ?unbound
238                        ),
239                        IF(STRSTARTS(?rubriekCode, "904"), "R.I", ?unbound),   
240                        IF(STRSTARTS(?rubriekCode, "900"), "R.II", ?unbound), 
241                        IF(STRSTARTS(?rubriekCode, "903"), "R.III", ?unbound), 
242                        # R.IV: 485/901 (Rentelasten en soortgelijke kosten)
243                        IF(
244                            STRSTARTS(?rubriekCode, "485") ||
245                            STRSTARTS(?rubriekCode, "901"),
246                            "R.IV", ?unbound
247                        ),
248                        # S.II: 902 (Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen)
249                        IF(STRSTARTS(?rubriekCode, "902"), "S.II", ?unbound),
250                        "other"
251                    ) AS ?categorie
252                )
253                FILTER(?categorie != "other")
254
255                # Koppel grootboekposten aan rubrieken binnen meetperiode
256                ?grootboek_post a onz-fin:Grootboekpost ;
257                    onz-g:partOf ?rubriek ;
258                    onz-g:hasDate ?datum ;
259                    onz-fin:heeftGeldBedrag ?geld_bedrag .
260
261                FILTER (?datum >= ?startperiode && ?datum <= ?eindperiode)
262
263            } GROUP BY ?categorie
264        }
265
266        # Map categorieën naar jaarrekeningpost labels
267        VALUES (?categorie ?jaarrekeningpost_child){
268            ("P.I"    "P.I Netto omzet")
269            ("P.IV"   "P.IV Overige bedrijfsopbrengsten")
270            ("Q.II"   "Q.II Kosten uitbesteed werk en andere externe kosten")
271            ("Q.III"  "Q.III Lonen en salarissen")
272            ("Q.IV"   "Q.IV Sociale lasten")
273            ("Q.V"    "Q.V Pensioenlasten")
274            ("Q.VI"   "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa")
275            ("Q.IX"   "Q.IX Overige bedrijfskosten")
276            ("R.I"    "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten")
277            ("R.II"   "R.II Andere rentebaten en soortgelijke opbrengsten")
278            ("R.III"  "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten")
279            ("R.IV"   "R.IV Rentelasten en soortgelijke kosten")
280            ("S.II"   "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen")
281        }
282
283        BIND(?jaarrekeningpost_child AS ?jaarrekeningpost)
284        FILTER(BOUND(?jaarrekeningpost))
285    }
286    UNION
287    {
288        # =======================================================================
289        # DEEL 3: Volledige lijst van alle jaarrekeningposten (bedrag 0 als fallback)
290        # =======================================================================
291        BIND(0 AS ?bedrag_rubriek)
292        VALUES ?jaarrekeningpost {
293            # P: Som der bedrijfsopbrengsten
294            "P.I Netto omzet"
295            "P.II Wijziging in voorraden gereed product en onderhanden werk ten opzichte van de voorafgaande balansdatum"
296            "P.III Geactiveerde productie voor het eigen bedrijf"
297            "P.IV Overige bedrijfsopbrengsten"
298            "P Som der bedrijfsopbrengsten"
299            
300            # Q: Som der bedrijfslasten
301            "Q.I Kosten van grond- en hulpstoffen"
302            "Q.II Kosten uitbesteed werk en andere externe kosten"
303            "Q.III Lonen en salarissen"
304            "Q.IV Sociale lasten"
305            "Q.V Pensioenlasten"
306            "Q.VI Afschrijvingen op immateriële vaste activa en materiële vaste activa"
307            "Q.VII Overige waardevermindering immateriële vaste activa en materiële vaste activa"
308            "Q.VIII Bijzondere waardevermindering van vlottende activa"
309            "Q.IX Overige bedrijfskosten"
310            "Q Som der bedrijfslasten"
311            
312            # R: Financiële baten en lasten
313            "R.I Opbrengst van vorderingen die tot de vaste activa behoren en van effecten"
314            "R.II Andere rentebaten en soortgelijke opbrengsten"
315            "R.III Waardeverandering van vorderingen die tot de vaste activa behoren en van effecten"
316            "R.IV Rentelasten en soortgelijke kosten"
317            "R Resultaat voor belastingen"
318            
319            # S: Belastingen en resultaat deelnemingen
320            "S.I Belastingen"
321            "S.II Aandeel in winst/verlies van ondernemingen waarin wordt deelgenomen"
322            "S Resultaat na belastingen"
323        }
324    }
325} 
326GROUP BY ?jaarrekeningpost
327ORDER BY ?jaarrekeningpost