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

ZorgVraag.zorg_vraag_attribute_aantal()   A

Complexity

Conditions 3

Size

Total Lines 20
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 7
nop 3
dl 0
loc 20
ccs 7
cts 7
cp 1
crap 3
rs 10
c 0
b 0
f 0
1
"""
2
Kerapu
3
"""
4 1
import csv
5 1
from typing import Optional
6
7 1
from kerapu import clean_code, LEN_SPECIALISME_CODE, LEN_ZORG_VRAAG_CODE, clean_str, clean_date
8
9
10 1
class ZorgVraag:
11
    """
12
    Klasse voor zorgvragen.
13
    """
14
    # ------------------------------------------------------------------------------------------------------------------
15 1
    __zorg_vraag_tabel = {}
16
    """
17
    De zorgvragen referentietabel.
18
19
    :type: dict[(str,str),list[dict[str,str]]]
20
    """
21
22
    # ------------------------------------------------------------------------------------------------------------------
23 1
    def __init__(self, specialisme_code: str, zorg_vraag_code: str):
24
        """
25
        Object constructor.
26
27
        :param str specialisme_code: De code van het uitvoerend specialisme.
28
        :param str zorg_vraag_code: De code van deze zorgvraag.
29
        """
30 1
        self.__specialisme_code = clean_code(specialisme_code, LEN_SPECIALISME_CODE)
31
        """
32
        De code van het uitvoerend specialisme.
33
34
        :type: str
35
        """
36
37 1
        self.__zorg_vraag_code = clean_code(zorg_vraag_code, LEN_ZORG_VRAAG_CODE)
38 1
        """
39
        De code van deze zorgvraag.
40
41
        :type: str
42
        """
43
44
    # ------------------------------------------------------------------------------------------------------------------
45 1
    @staticmethod
46 1
    def init_static(folder: str):
47
        """
48
        Initialiseert alle statistische data.
49
50
        :param str folder: De folder met alle goupertabellen.
51
        """
52 1
        ZorgVraag.__lees_zorg_vraag_tabel(folder)
53
54
    # ------------------------------------------------------------------------------------------------------------------
55 1
    def __zorg_vraag_referentie(self, datum) -> Optional[dict]:
56
        """
57
        Zoekt de referentie data voor deze zorg_vraag in de zorgvraag referentietabel.
58
59
        :param datum: De begindatum van het subtraject.
60
61
        :rtype: dict[str,str]
62
        """
63
64 1
        if (self.__specialisme_code, self.__zorg_vraag_code) in self.__zorg_vraag_tabel:
65 1
            for referentie in self.__zorg_vraag_tabel[(self.__specialisme_code, self.__zorg_vraag_code)]:
66 1
                if referentie['begin_datum'] <= datum <= referentie['eind_datum']:
67
                    # Een geldige referentie rij gevonden.
68 1
                    return referentie
69
70
            # Er is geen geldige referentie rij gevonden.
71 1
            return None
72
73
        else:
74 1
            return None
75
76
    # ------------------------------------------------------------------------------------------------------------------
77 1
    def zorg_vraag_attribute_aantal(self, zorg_vraag_attribuut_code: str, datum: str) -> int:
78
        """
79
        Geeft het aantal malen (d.w.z. 0 of 1) data deze diagnose voldoet aan een (specialismecode, zorgvraagcode)
80
        combinatie op een peildatum.
81
82
        :param str zorg_vraag_attribuut_code: De attribuutcode voor (specialismecode, diagnosecode) combinatie.
83
        :param str datum: De peildatum.
84
85
        :rtype: int
86
        """
87 1
        referentie = self.__zorg_vraag_referentie(datum)
88
89 1
        if not referentie:
90
            # De diagnose komt niet voor in de referentie tabel. Geef 0 terug.
91 1
            return 0
92
93 1
        if referentie['zorg_vraag_attribute_code'] == zorg_vraag_attribuut_code:
94 1
            return 1
95
96 1
        return 0
97
98
    # ------------------------------------------------------------------------------------------------------------------
99 1
    def zorg_vraag_cluster_aantal(self, cluster_code: str, cluster_nummer: int, datum: str) -> int:
100
        """
101
        Geeft het aantal malen (d.w.z. 0 of 1) dat deze zorgvraag voorkomt in een zorgvraagcluster op een peildatum.
102
103
        :param str cluster_code: De zorgvraagclustercode.
104
        :param int cluster_nummer: Het clusternummer (0..2).
105
        :param str datum: De peildatum.
106
107
        :rtype: int
108
        """
109 1
        referentie = self.__zorg_vraag_referentie(datum)
110
111 1
        if not referentie:
112
            # Deze zorgvraag komt niet voor in de referentie tabel. Geef 0 terug.
113 1
            return 0
114
115 1
        if cluster_nummer == 0:
116
            return 1
117
118 1
        if 1 <= cluster_nummer <= 2:
119 1
            if referentie['zorg_vraag_cluster%d' % cluster_nummer] == cluster_code:
120
                # Deze zorgvraag komt voor in het gevraagde cluster.
121 1
                return 1
122
123 1
            return 0
124
125
        raise RuntimeError("Onbekend clusternummer %d." % cluster_nummer)
126
127
    # ------------------------------------------------------------------------------------------------------------------
128 1
    @staticmethod
129 1
    def __lees_zorg_vraag_tabel(folder: str):
130
        """
131
        Leest de zorg_vraag referentietabel (opgeslagen in CSV).
132
133
        :param str folder: De folder met alle goupertabellen.
134
        """
135 1
        with open(folder + '/ZorgVragen.csv', encoding='utf-8') as csv_file:
136 1
            reader = csv.reader(csv_file, )
137 1
            regel_nummer = 0
138 1
            for regel in reader:
139 1
                regel_nummer += 1
140
141
                # Sla de eerste regel met koppen over.
142 1
                if regel_nummer == 1:
143 1
                    continue
144
145 1
                specialisme_code = clean_code(regel[0], LEN_SPECIALISME_CODE)
146 1
                zorg_vraag_code = clean_code(regel[1], LEN_ZORG_VRAAG_CODE)
147 1
                zorg_vraag_attribuut_code = clean_str(regel[3])
148 1
                zorg_vraag_cluster01 = clean_str(regel[4])
149 1
                zorg_vraag_cluster02 = clean_str(regel[5])
150 1
                begin_datum = clean_date(regel[6])
151 1
                eind_datum = clean_date(regel[7])
152
153 1
                sleutel = (specialisme_code, zorg_vraag_code)
154
155 1
                rij = {'specialisme_code':          specialisme_code,
156
                       'zorg_vraag_code':           zorg_vraag_code,
157
                       'zorg_vraag_attribute_code': zorg_vraag_attribuut_code,
158
                       'zorg_vraag_cluster1':       zorg_vraag_cluster01,
159
                       'zorg_vraag_cluster2':       zorg_vraag_cluster02,
160
                       'begin_datum':               begin_datum,
161
                       'eind_datum':                eind_datum}
162
163 1
                if sleutel not in ZorgVraag.__zorg_vraag_tabel:
164 1
                    ZorgVraag.__zorg_vraag_tabel[sleutel] = []
165
166 1
                ZorgVraag.__zorg_vraag_tabel[sleutel].append(rij)
167
168 1
        print("Aantal zorgvragen: %d" % (regel_nummer - 1))
169
170
# ----------------------------------------------------------------------------------------------------------------------
171