GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( be813a...3d8811 )
by P.R.
06:43 queued 46s
created

kerapu.Kerapu   A

Complexity

Total Complexity 31

Size/Duplication

Total Lines 297
Duplicated Lines 0 %

Test Coverage

Coverage 97.06%

Importance

Changes 0
Metric Value
eloc 156
dl 0
loc 297
ccs 132
cts 136
cp 0.9706
rs 9.92
c 0
b 0
f 0
wmc 31

9 Methods

Rating   Name   Duplication   Size   Complexity  
A Kerapu.init_static() 0 17 1
A Kerapu.__lees_attribuut_tabel() 0 31 4
B Kerapu.__lees_zorg_product_groepen() 0 31 5
A Kerapu.__init__() 0 34 1
A Kerapu.__lees_attribuut_groepen_tabel() 0 28 5
B Kerapu.__lees_beslis_regel_tabel() 0 43 6
A Kerapu.bepaal_zorg_product_groep() 0 12 1
B Kerapu.__lees_attribuut_groep_koppeling_tabel() 0 37 6
A Kerapu.bepaal_zorg_product() 0 17 2
1
"""
2
Kerapu
3
"""
4 1
import csv
5
6 1
from kerapu import clean_str, clean_int, clean_bool, clean_date
7 1
from kerapu.boom.attribuut import maak_attribuut
8 1
from kerapu.boom.AttribuutGroep import AttribuutGroep
9 1
from kerapu.boom.attribuut_groep_koppeling import maak_attribuut_groep_koppeling
10 1
from kerapu.boom.BeslisRegel import BeslisRegel
11 1
from kerapu.boom.ZorgProductGroep import ZorgProductGroep
12 1
from kerapu.boom.ZorgProductGroepVersie import ZorgProductGroepVersie
13 1
from kerapu.lbz.Diagnose import Diagnose
14 1
from kerapu.lbz.Specialisme import Specialisme
15 1
from kerapu.lbz.Subtraject import Subtraject
16 1
from kerapu.lbz.ZorgActiviteit import ZorgActiviteit
17 1
from kerapu.lbz.ZorgType import ZorgType
18 1
from kerapu.lbz.ZorgVraag import ZorgVraag
19
20
21 1
class Kerapu:
22
    """
23
    Een implementatie van de grouper in Python.
24
    """
25
26
    # ------------------------------------------------------------------------------------------------------------------
27 1
    def __init__(self):
28
        """
29
        Object constructor.
30
        """
31 1
        self.__zorgproductgroep_boom = {}
32
        """
33
        De zorgproductgroepboom. Sleutel is zorgproductgroepcode.
34
35
        :type: dict[str,kerapu.boom.ZorgProductGroep.ZorgProductGroep]
36
        """
37
38 1
        self.__beslisregels = {}
39
        """
40
        Alle beslisregels. Sleutel is het ID van de beslisregel.
41
42
        :type: dict[int,kerapu.boom.BeslisRegel.BeslisRegel]
43
        """
44
45 1
        self.__attribuutgroepen = {}
46
        """
47
        Alle attribuutgroepen. Sleutel is het ID van de attribuutgroep.
48
49
        :type: dict[int,kerapu.boom.AttribuutGroep.AttribuutGroep]
50
        """
51
52 1
        self.__attribuut_groep_koppelingen = {}
53
        """
54
        Alle attribuutgroepkoppelingen. Sleutel is het ID van de attribuutgroep.
55
56
        :type: dict[int,list[kerapu.boom.attribuut_groep_koppeling..AttribuutGroepKoppeling.AttribuutGroepKoppeling]]
57
        """
58
59 1
        self.__attributen = {}
60 1
        """
61
        Alle attributen. Sleutel is het ID van het attribuut.
62
63
        :type: dict[int,kerapu.boom.attribuut.Attribuut.Attribuut]
64
        """
65
66
    # ------------------------------------------------------------------------------------------------------------------
67 1
    def init_static(self, folder: str):
68
        """
69
        Initialiseert alle statistische data.
70
71
        :param str folder: De folder met alle goupertabellen.
72
        """
73 1
        self.__lees_attribuut_tabel(folder)
74 1
        self.__lees_attribuut_groep_koppeling_tabel(folder)
75 1
        self.__lees_attribuut_groepen_tabel(folder)
76 1
        self.__lees_beslis_regel_tabel(folder)
77 1
        self.__lees_zorg_product_groepen(folder)
78
79 1
        Diagnose.init_static(folder)
80 1
        Specialisme.init_static(folder)
81 1
        ZorgActiviteit.init_static(folder)
82 1
        ZorgType.init_static(folder)
83 1
        ZorgVraag.init_static(folder)
84
85
    # ------------------------------------------------------------------------------------------------------------------
86 1
    def __lees_attribuut_tabel(self, folder: str):
87
        """
88
        Leest de attribuuttabel (opgeslagen in CSV).
89
90
        :type: str folder De folder met alle groupertabellen in CSV-formaat.
91
        """
92 1
        with open(folder + '/Attributen.csv', encoding='utf-8') as csv_file:
93 1
            reader = csv.reader(csv_file, )
94 1
            regel_nummer = 0
95 1
            for regel in reader:
96 1
                regel_nummer += 1
97
98
                # Sla de eerste regel met koppen over.
99 1
                if regel_nummer == 1:
100 1
                    continue
101
102 1
                attribuut_id = int(regel[0])
103 1
                boom_parameter_nummer = int(regel[2])
104 1
                filter_toets_wijze = int(regel[3])
105 1
                filter_waarde_type = int(regel[4])
106 1
                onder_filter_waarde = clean_str(regel[5])
107 1
                boven_filter_waarde = clean_str(regel[6])
108
109 1
                self.__attributen[attribuut_id] = maak_attribuut(attribuut_id,
110
                                                                 boom_parameter_nummer,
111
                                                                 filter_toets_wijze,
112
                                                                 filter_waarde_type,
113
                                                                 onder_filter_waarde,
114
                                                                 boven_filter_waarde)
115
116 1
        print("Aantal attributen: %d" % (regel_nummer - 1))
117
118
    # ------------------------------------------------------------------------------------------------------------------
119 1
    def __lees_attribuut_groep_koppeling_tabel(self, folder: str):
120
        """
121
        Leest de  attribuutgroepkoppelingen (opgeslagen in CSV).
122
123
        :type: str folder De folder met alle groupertabellen in CSV-formaat.
124
        """
125 1
        with open(folder + '/AttribuutGroepKoppelingen.csv', encoding='utf-8') as csv_file:
126 1
            reader = csv.reader(csv_file, )
127 1
            regel_nummer = 0
128 1
            for regel in reader:
129 1
                regel_nummer += 1
130
131
                # Sla de eerste regel met koppen over.
132 1
                if regel_nummer == 1:
133 1
                    continue
134
135 1
                attribuut_groep_id = int(regel[1])
136 1
                attribuut_id = int(regel[2])
137 1
                attribuut_toets_wijze = int(regel[3])
138 1
                onder_toets_waarde = clean_int(regel[4])
139 1
                boven_toets_waarde = clean_int(regel[5])
140
141 1
                if attribuut_groep_id not in self.__attribuut_groep_koppelingen:
142 1
                    self.__attribuut_groep_koppelingen[attribuut_groep_id] = []
143
144 1
                if attribuut_id not in self.__attributen:
145
                    raise RuntimeError("Onbekend attribuut: '%d'" % attribuut_id)
146
147 1
                koppeling = maak_attribuut_groep_koppeling(attribuut_groep_id,
148
                                                           self.__attributen[attribuut_id],
149
                                                           attribuut_toets_wijze,
150
                                                           onder_toets_waarde,
151
                                                           boven_toets_waarde)
152
153 1
                self.__attribuut_groep_koppelingen[attribuut_groep_id].append(koppeling)
154
155 1
        print("Aantal attribuutgroepkoppelingen: %d" % (regel_nummer - 1))
156
157
    # ------------------------------------------------------------------------------------------------------------------
158 1
    def __lees_attribuut_groepen_tabel(self, folder: str):
159
        """
160
        Leest de attribuutgroepen (opgeslagen in CSV).
161
162
        :type: str folder De folder met alle groupertabellen in CSV-formaat.
163
        """
164 1
        with open(folder + '/AttribuutGroepen.csv', encoding='utf-8') as csv_file:
165 1
            reader = csv.reader(csv_file, )
166 1
            regel_nummer = 0
167 1
            for regel in reader:
168 1
                regel_nummer += 1
169
170
                # Sla de eerste regel met koppen over.
171 1
                if regel_nummer == 1:
172 1
                    continue
173
174 1
                attribuut_groep_id = int(regel[0])
175 1
                aantal_voorwaarden_voor_true = int(regel[2])
176
177 1
                if attribuut_groep_id not in self.__attribuut_groep_koppelingen:
178
                    raise RuntimeError("Onbekende koppeling: '%d'" % attribuut_groep_id)
179
180 1
                self.__attribuutgroepen[attribuut_groep_id] = AttribuutGroep(attribuut_groep_id,
181
                                                                             aantal_voorwaarden_voor_true,
182
                                                                             self.__attribuut_groep_koppelingen[
183
                                                                                 attribuut_groep_id])
184
185 1
        print("Aantal attributen: %d" % (regel_nummer - 1))
186
187
    # ------------------------------------------------------------------------------------------------------------------
188 1
    def __lees_beslis_regel_tabel(self, folder: str):
189
        """
190
        Leest de beslisregels (opgeslagen in CSV).
191
192
        :type: str folder De folder met alle groupertabellen in CSV-formaat.
193
        """
194 1
        verrijkingen = {}
195 1
        with open(folder + '/BeslisRegels.csv', encoding='utf-8') as csv_file:
196 1
            reader = csv.reader(csv_file, )
197 1
            regel_nummer = 0
198 1
            for regel in reader:
199 1
                regel_nummer += 1
200
201
                # Sla de eerste regel met koppen over.
202 1
                if regel_nummer == 1:
203 1
                    continue
204
205 1
                beslis_regel_id = int(regel[0])
206 1
                attribuut_groep_id = int(regel[1])
207 1
                beslist_regel_id_true = clean_int(regel[2])
208 1
                beslist_regel_id_false = clean_int(regel[3])
209 1
                label_true = clean_str(regel[4])
210 1
                label_false = clean_str(regel[5])
211 1
                indicatie_aanspraakbeperking = clean_bool(regel[6])
212
213 1
                if attribuut_groep_id not in self.__attribuutgroepen:
214
                    raise RuntimeError("Onbekende attribuutgroep: '%d'" % attribuut_groep_id)
215
216 1
                verrijkingen[beslis_regel_id] = (beslist_regel_id_true, beslist_regel_id_false)
217
218 1
                self.__beslisregels[beslis_regel_id] = BeslisRegel(beslis_regel_id,
219
                                                                   self.__attribuutgroepen[attribuut_groep_id],
220
                                                                   label_true,
221
                                                                   label_false,
222
                                                                   indicatie_aanspraakbeperking)
223
224
        # Verrijk alle beslisregels met beslisregels voor true en false.
225 1
        for beslis_regel_id, (beslist_regel_id_true, beslist_regel_id_false) in verrijkingen.items():
226 1
            beslist_regel_true = self.__beslisregels.get(beslist_regel_id_true, None)
227 1
            beslist_regel_false = self.__beslisregels.get(beslist_regel_id_false, None)
228 1
            self.__beslisregels[beslis_regel_id].verrijk(beslist_regel_true, beslist_regel_false)
229
230 1
        print("Aantal beslisregels: %d" % (regel_nummer - 1))
231
232
    # ------------------------------------------------------------------------------------------------------------------
233 1
    def __lees_zorg_product_groepen(self, folder: str):
234
        """
235
        Leest de zorgproductgroepen (opgeslagen in CSV).
236
237
        :type: str folder De folder met alle groupertabellen in CSV-formaat.
238
        """
239 1
        with open(folder + '/ZorgProductGroepen.csv', encoding='utf-8') as csv_file:
240 1
            reader = csv.reader(csv_file, )
241 1
            regel_nummer = 0
242 1
            for regel in reader:
243 1
                regel_nummer += 1
244
245
                # Sla de eerste regel met koppen over.
246 1
                if regel_nummer == 1:
247 1
                    continue
248
249 1
                zorg_product_groep_code = clean_str(regel[0])
250 1
                beslist_regel_id_start = int(regel[2])
251 1
                begin_datum = clean_date(regel[3])
252 1
                eind_datum = clean_date(regel[4])
253
254 1
                if zorg_product_groep_code not in self.__zorgproductgroep_boom:
255 1
                    self.__zorgproductgroep_boom[zorg_product_groep_code] = ZorgProductGroep(zorg_product_groep_code)
256
257 1
                versie = ZorgProductGroepVersie(zorg_product_groep_code,
258
                                                self.__beslisregels[beslist_regel_id_start],
259
                                                begin_datum,
260
                                                eind_datum)
261 1
                self.__zorgproductgroep_boom[zorg_product_groep_code].versie_toevoegen(versie)
262
263 1
        print("Aantal zorgproductgroep versies: %d" % (regel_nummer - 1))
264
265
    # ------------------------------------------------------------------------------------------------------------------
266 1
    def bepaal_zorg_product_groep(self, subtraject: Subtraject) -> str:
267
        """
268
        Bepaalt de zorgproductgroep van een subtraject.
269
270
        :param Subtraject subtraject: Het subtraject waarvoor de zorgproductgroep moet worden bepaalt.
271
272
        :rtype: str
273
        """
274 1
        top_boom = self.__zorgproductgroep_boom['0']
275 1
        subtraject.zorg_product_groep_code = top_boom.klim(subtraject)
276
277 1
        return subtraject.zorg_product_groep_code
278
279
    # ------------------------------------------------------------------------------------------------------------------
280 1
    def bepaal_zorg_product(self, subtraject: Subtraject) -> str:
281
        """
282
        Bepaalt de zorgproduct van een subtraject.
283
284
        :param Subtraject subtraject: Het subtraject waarvoor de zorgproductcode moet worden bepaalt.
285
286
        :rtype: str
287
        """
288 1
        zorg_product_groep_code = self.bepaal_zorg_product_groep(subtraject)
289
290 1
        if zorg_product_groep_code is not None:
291 1
            top_boom = self.__zorgproductgroep_boom[zorg_product_groep_code]
292 1
            subtraject.zorg_product_code = top_boom.klim(subtraject)
293
        else:
294
            subtraject.zorg_product_code = None
295
296 1
        return subtraject.zorg_product_code
297
298
# ----------------------------------------------------------------------------------------------------------------------
299