Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
11-07-2025

Inwerkingtreding:
11-07-2025

18.2 Winst- en verliesrekening o.b.v. grootboek (Prismant)

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