Broncode voor kerapu.lbz.Diagnose

import csv
from typing import Optional, Dict, List, Tuple

from kerapu import clean_code, clean_date, clean_str, LEN_DIAGNOSE_CODE, LEN_SPECIALISME_CODE


[documentatie]class Diagnose: """ Klasse voor diagnosen. """ # ------------------------------------------------------------------------------------------------------------------ __diagnose_tabel: Dict[Tuple[str, str], List[Dict[str, str]]] = {} """ De diagnosen referentietabel. """ # ------------------------------------------------------------------------------------------------------------------ def __init__(self, specialisme_code: str, diagnose_code: str): """ Object constructor. :param str specialisme_code: De code van het uitvoerend specialisme. :param str diagnose_code: De code van deze diagnose. """ self.__specialisme_code: str = clean_code(specialisme_code, LEN_SPECIALISME_CODE) """ De code van het uitvoerend specialisme. """ self.__diagnose_code: str = clean_code(diagnose_code, LEN_DIAGNOSE_CODE) """ De code van deze diagnose. """ # ------------------------------------------------------------------------------------------------------------------ @staticmethod def __lees_diagnose_tabel(folder: str) -> None: """ Leest de diagnose referentietabel (opgeslagen in CSV). :param str folder: De folder met alle goupertabellen. """ with open(folder + '/Diagnosen.csv', 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) regel_nummer = 0 for regel in reader: regel_nummer += 1 # Sla de eerste regel met koppen over. if regel_nummer == 1: continue specialisme_code = clean_code(regel[0], LEN_SPECIALISME_CODE) diagnose_code = clean_code(regel[1], LEN_DIAGNOSE_CODE) diagnose_attribute_code = clean_str(regel[3]) diagnose_cluster01 = clean_str(regel[5]) diagnose_cluster02 = clean_str(regel[6]) diagnose_cluster03 = clean_str(regel[7]) diagnose_cluster04 = clean_str(regel[8]) diagnose_cluster05 = clean_str(regel[9]) diagnose_cluster06 = clean_str(regel[10]) begin_datum = clean_date(regel[11]) eind_datum = clean_date(regel[12]) sleutel = (specialisme_code, diagnose_code) rij = {'specialisme_code': specialisme_code, 'diagnose_code': diagnose_code, 'diagnose_attribute_code': diagnose_attribute_code, 'diagnose_cluster1': diagnose_cluster01, 'diagnose_cluster2': diagnose_cluster02, 'diagnose_cluster3': diagnose_cluster03, 'diagnose_cluster4': diagnose_cluster04, 'diagnose_cluster5': diagnose_cluster05, 'diagnose_cluster6': diagnose_cluster06, 'begin_datum': begin_datum, 'eind_datum': eind_datum} if sleutel not in Diagnose.__diagnose_tabel: Diagnose.__diagnose_tabel[sleutel] = [] Diagnose.__diagnose_tabel[sleutel].append(rij) print("Aantal diagnosen: %d" % (regel_nummer - 1)) # ------------------------------------------------------------------------------------------------------------------
[documentatie] @staticmethod def init_static(folder: str) -> None: """ Initialiseert alle statistische data. :param str folder: De folder met alle goupertabellen. """ Diagnose.__lees_diagnose_tabel(folder)
# ------------------------------------------------------------------------------------------------------------------ def __diagnose_referentie(self, datum: str) -> Optional[Dict]: """ Zoekt de referentie data voor deze diagnose in de diagnosen referentietabel. :param str datum: De begindatum van het subtraject. :rtype: dict[str,str] """ if (self.__specialisme_code, self.__diagnose_code) in self.__diagnose_tabel: for referentie in self.__diagnose_tabel[(self.__specialisme_code, self.__diagnose_code)]: if referentie['begin_datum'] <= datum <= referentie['eind_datum']: # Een geldige referentie rij gevonden. return referentie # Er is geen geldige referentie rij gevonden. return None else: return None # ------------------------------------------------------------------------------------------------------------------
[documentatie] def diagnose_attribute_aantal(self, diagnose_attribute_code: str, datum: str) -> int: """ Geeft het aantal malen (d.w.z. 0 of 1) data deze diagnose voldoet aan een (specialismecode, diagnosecode) op een peildatum. :param str diagnose_attribute_code: De attribuutcode voor de (specialismecode, diagnosecode) combinatie. :param str datum: De peildatum. :rtype: int """ referentie = self.__diagnose_referentie(datum) if not referentie: # De diagnose komt niet voor in de referentie tabel. Geef 0 terug. return 0 if referentie['diagnose_attribute_code'] == diagnose_attribute_code: return 1 return 0
# ------------------------------------------------------------------------------------------------------------------
[documentatie] def diagnose_cluster_aantal(self, cluster_code: str, cluster_nummer: int, datum: str) -> int: """ Geeft het aantal malen (d.w.z. 0 of 1) data deze diagnose voorkomt in een diagnosecodecluster op een peildatum. :param str cluster_code: De diagnoseclustercode. :param int cluster_nummer: De clusternummer (0..6). :param str datum: De peildatum. :rtype: int """ referentie = self.__diagnose_referentie(datum) if not referentie: # De diagnose komt niet voor in de referentie tabel. Geef 0 terug. return 0 if cluster_nummer == 0: return 1 if 1 <= cluster_nummer <= 6: if referentie['diagnose_cluster%d' % cluster_nummer] == cluster_code: # Deze diagnose komt voor in het gevraagde cluster. return 1 return 0 raise RuntimeError("Onbekend clusternummer %d." % cluster_nummer)
# ----------------------------------------------------------------------------------------------------------------------