Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling

Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling


Publicatiedatum:
15-07-2026

Inwerkingtreding:
16-07-2026

20.2 Solvabiliteit - wat is het weerstandsvermogen?

Concepten

Relaties

Eigenschappen

SPARQL query

Code gekopieerd

...

Kopieer naar klembord

1# Indicator: Zorgkantoren 20.2.0
2# Parameters: ?peildatum
3# Ontologie: versie 3.0.0 of nieuwer
4#
5PREFIX onz-fin: <http://purl.org/ozo/onz-fin#>
6PREFIX onz-g:   <http://purl.org/ozo/onz-g#>
7PREFIX xsd:     <http://www.w3.org/2001/XMLSchema#>
8
9SELECT
10  ("Weerstandsvermogen" AS ?Kental)
11  ( 
12    IF(
13      BOUND(?bedrijfsopbrengsten) && (?bedrijfsopbrengsten != 0),
14      ROUND(xsd:decimal(?eigenvermogen) / xsd:decimal(?bedrijfsopbrengsten) * 100) / 100,
15      "Ongedefinieerd"
16    ) AS ?Waarde
17  )
18
19WHERE {
20  # DEEL 1: D Eigen vermogen (balans op peildatum, uit 18.1)
21  {
22    SELECT
23      (SUM(IF(?jaarrekeningpost = "D Eigen vermogen", ?bedrag, 0)) AS ?eigenvermogen)
24    WHERE {
25      {
26        SELECT ?jaarrekeningpost (SUM(?bedrag_rubriek) AS ?bedrag)
27        WHERE {
28          {
29            # Middle select: totaal per rubriek (saldo + latere mutaties)
30            SELECT ?rubriek ?categorie (SUM(?geld_bedrag_post) + SUM(?saldo_waarde) / COUNT(?saldo_waarde) AS ?bedrag_rubriek)
31            WHERE {
32              {
33                # Innerste subquery: meest recente saldo per rubriek
34                SELECT ?rubriek ?categorie
35                       (IF(BOUND(?saldo_bedrag), ?saldo_bedrag, 0) AS ?saldo_waarde)
36                       ?peildatum_argument
37                       (IF(BOUND(?saldo_datum), ?saldo_datum, ?unbound) AS ?begin_datum)
38                WHERE {
39                  # BIND("2024-12-31"^^xsd:date AS ?peildatum)
40                  BIND(?peildatum AS ?peildatum_argument)
41
42                  # Prismant: prefix-mapping op 6-cijferige Grootboekrubrieken
43                  {
44                      { ?rubriek a onz-fin:Grootboekrubriek }
45                      UNION
46                      { ?rubriek a onz-fin:Grootboekrekening }
47                      BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
48                      FILTER(REGEX(?rubriekCode, "^[0-9]{6}$"))
49                      VALUES (?prismantPrefix ?categorie) {
50                          ("0511"  "D.I")
51                          ("05413" "D.IV")
52                          ("05311" "D.V")
53                          ("05342" "D.V")
54                          ("05423" "D.V")
55                          ("05323" "D.VI")
56                          ("0539"  "D.VII")
57                          ("05493" "D.VII")
58                          ("05915" "D.VII")
59                          ("091"   "D.VIII")
60                      }
61                      FILTER(STRSTARTS(?rubriekCode, ?prismantPrefix))
62                  }
63                  UNION
64                  {
65                  # RGS: exacte mapping
66                      VALUES (?rubriekCode ?categorie) {
67                          ("BEivGok" "D.I")
68                          ("BEivAgi" "D.II")
69                          ("BEivHer" "D.III")
70                          ("BEivWer" "D.IV")
71                          ("BEivStr" "D.IV")
72                          ("BEivBer" "D.V")
73                          ("BEivBef" "D.VI")
74                          ("BEivOvr" "D.VII")
75                          ("BEivOre" "D.VIII")
76                      }
77                      BIND(IRI(CONCAT(STR(onz-fin:), ?rubriekCode)) AS ?rubriek)
78                      { ?rubriek a onz-fin:Grootboekrubriek }
79                      UNION
80                      { ?rubriek a onz-fin:Grootboekrekening }
81                  }
82
83                  # Meest recente eindsaldo per rubriek (tiebreaker binnen OPTIONAL)
84                  OPTIONAL {
85                    ?rubriek onz-g:isAbout ?saldo .
86                    ?saldo a onz-fin:EindSaldo ;
87                           onz-fin:heeftGeldBedrag ?saldo_bedrag ;
88                           onz-g:hasDate ?saldo_datum .
89                    FILTER(?saldo_datum <= ?peildatum_argument)
90                    FILTER NOT EXISTS {
91                      ?rubriek onz-g:isAbout ?otherSaldo .
92                      ?otherSaldo a onz-fin:EindSaldo ;
93                                  onz-g:hasDate ?otherDatum .
94                      FILTER(
95                        ?otherSaldo != ?saldo
96                        && ?otherDatum <= ?peildatum_argument
97                        && (
98                          ?otherDatum > ?saldo_datum
99                          || (?otherDatum = ?saldo_datum && STR(?otherSaldo) > STR(?saldo))
100                        )
101                      )
102                    }
103                  }
104                }
105              }
106
107              # Grootboekposten na saldo
108              OPTIONAL {
109                ?grootboek_post a onz-fin:Grootboekpost ;
110                      onz-g:partOf ?rubriek ;
111                      onz-g:hasDate ?datum ;
112                      onz-fin:heeftGeldBedrag ?geld_bedrag_temp .
113                # Anti-dubbeltelling
114                FILTER NOT EXISTS {
115                    ?grootboek_post onz-g:partOf ?child .
116                    ?child onz-g:partOf ?rubriek .
117                    FILTER(?child != ?rubriek)
118                    { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
119                }
120                FILTER(
121                  ?datum <= ?peildatum_argument
122                  && (!BOUND(?begin_datum) || ?datum > ?begin_datum)
123                )
124              }
125              BIND(IF(BOUND(?geld_bedrag_temp), ?geld_bedrag_temp, 0) AS ?geld_bedrag_post)
126            }
127            GROUP BY ?rubriek ?categorie
128          }
129          VALUES (?categorie ?jaarrekeningpost) {
130            ("D.I"    "D Eigen vermogen")
131            ("D.II"   "D Eigen vermogen")
132            ("D.III"  "D Eigen vermogen")
133            ("D.IV"   "D Eigen vermogen")
134            ("D.V"    "D Eigen vermogen")
135            ("D.VI"   "D Eigen vermogen")
136            ("D.VII"  "D Eigen vermogen")
137            ("D.VIII" "D Eigen vermogen")
138          }
139        }
140        GROUP BY ?jaarrekeningpost
141      }
142    }
143  }
144
145  # DEEL 2: Bedrijfsopbrengsten (W&V over meetperiode, uit 18.2)
146  {
147    SELECT ((?p_totaal) AS ?bedrijfsopbrengsten)
148    WHERE {
149      {
150        SELECT (SUM(?p_bedrag) AS ?p_totaal)
151        WHERE {
152
153          #BIND("2024-12-31"^^xsd:date AS ?peildatum)
154          BIND(
155            IF(
156                MONTH(?peildatum) = 12 && DAY(?peildatum) = 31,
157                xsd:date(CONCAT(STR(YEAR(?peildatum)), "-01-01")),
158                xsd:date(CONCAT(STR(YEAR(?peildatum)-1), "-07-01"))
159            )
160            AS ?startperiode)
161          BIND(?peildatum AS ?eindperiode)
162
163          # Selecteer rubrieken: zowel Prismant (Grootboekrubriek) als RGS (Grootboekrekening)
164          {
165              { ?rubriek a onz-fin:Grootboekrubriek }
166              UNION
167              { ?rubriek a onz-fin:Grootboekrekening }
168          }
169          FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:)))
170          BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode)
171
172          ?post a onz-fin:Grootboekpost ;
173                onz-g:partOf ?rubriek ;
174                onz-g:hasDate ?datum ;
175                onz-fin:heeftGeldBedrag ?geld_bedrag .
176          # Anti-dubbeltelling
177          FILTER NOT EXISTS {
178              ?post onz-g:partOf ?child .
179              ?child onz-g:partOf ?rubriek .
180              FILTER(?child != ?rubriek)
181              { { ?child a onz-fin:Grootboekrekening } UNION { ?child a onz-fin:Grootboekrubriek } }
182          }
183          FILTER(?datum >= ?startperiode && ?datum <= ?eindperiode)
184
185          # Categorie-toewijzing
186          # Prismant: 81, 82, 83, 89, 919, 920, 930 → P
187          # RGS: WOmz, WRev, WRvi, WRgr, WWvv, WNoa, WLbe, WBat, WWiv, WWivGpv, WOvb → P
188          BIND(
189            IF(
190                STRSTARTS(?rubriekCode, "81") ||
191                STRSTARTS(?rubriekCode, "82") ||
192                STRSTARTS(?rubriekCode, "83") ||
193                STRSTARTS(?rubriekCode, "89") ||
194                STRSTARTS(?rubriekCode, "919") ||
195                STRSTARTS(?rubriekCode, "920") ||
196                STRSTARTS(?rubriekCode, "930") ||
197                STRSTARTS(?rubriekCode, "WOmz") ||
198                STRSTARTS(?rubriekCode, "WRev") ||
199                STRSTARTS(?rubriekCode, "WRvi") ||
200                STRSTARTS(?rubriekCode, "WRgr") ||
201                STRSTARTS(?rubriekCode, "WWvv") ||
202                STRSTARTS(?rubriekCode, "WNoa") ||
203                STRSTARTS(?rubriekCode, "WLbe") ||
204                STRSTARTS(?rubriekCode, "WBat") ||
205                STRSTARTS(?rubriekCode, "WWiv") ||
206                STRSTARTS(?rubriekCode, "WWivGpv") ||
207                STRSTARTS(?rubriekCode, "WOvb"),
208                ?geld_bedrag, 0
209            ) AS ?p_bedrag
210          )
211        }
212      }
213    }
214  }
215}
216ORDER BY ?Kental
217