Insuficiência Renal

- numpy - pandas

Por favor, aguarde enquanto o programa carrega.

Nenhum dado é enviado. São apenas processados no seu próprio dispositivo.

A análise à creatinina na urina pode ser feita diretamente num laboratório. Deve custar pouco mais de 1€.

O diagnóstico é meramente demonstrativo do protocolo clínico, consulte um profissional.

No fim clique num botão para ficar com os dados para mostrar ao médico.

# -*- coding: utf-8 -*- import numpy as np import pandas as pd from datetime import date from datetime import datetime import time import random from js import alert, prompt, localStorage, window def calculate_age(born): today = date.today() return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) def status_urine(urine_output): if urine_output < .5: return -1 # low< elif urine_output > 1.5: return 1 # high else: return 0 def status_creatinine(value, dict_data): if dict_data['sex'] == 'm': if value < 0.74: return -1 elif value > 1.35: return 1 else: return 0 elif dict_data['sex'] == 'f': if value < 0.59: return -1 elif value > 1.04: return 1 else: return 0 def AKI_type(dict_data): dict_data['creatinine'].sort_values(by='date', ascending = True, inplace = True) #ascending -> oldest first base_creatine = dict_data['creatinine']['value'].tolist()[0] current_creatine = dict_data['creatinine']['value'].tolist()[-1] creatine_change = current_creatine / base_creatine age = calculate_age(dict_data['birthdate']) if dict_data['sex'] == 'm': eGFR_constant = 1.23 elif dict_data['sex'] == 'f': eGFR_constant = 1.04 dict_data['weight'].sort_values(by='date', ascending = True, inplace = True) #ascending -> oldest first weight = dict_data['weight']['value'].tolist()[-1] eGFR = ( 140 - age ) * weight * eGFR_constant / dict_data['creatinine']['value'].tolist()[-1]*88.4 dict_data['urine_output'].sort_values(by='date', ascending = True, inplace = True) #ascending -> oldest first urine_output = dict_data['urine_output']['value'].tolist()[-1] if creatine_change >= 3 or current_creatine >= 4 or dict_data['hemodialysis'] == 1 or (age < 18 and eGFR < 35) or urine_output < .3: return 3 elif (creatine_change >= 2 and creatine_change < 3) or urine_output < .5: return 2 elif (creatine_change >= 1.5 and creatine_change < 2) or urine_output < .5: ## add or Increase of 0.3 mg/dL return 1 else: return 0 ## general/personal and dataseries data in the same dict? dict_data = {'creatinine': pd.DataFrame(columns=['date','value','units','status','condition_1']), 'birthdate': np.nan, 'sex': '', 'weight': pd.DataFrame(columns=['date','value','units','status','condition_1']), 'height': pd.DataFrame(columns=['date','value','units','status','condition_1']), 'hemodialysis': 0, 'urine_output': pd.DataFrame(columns=['date','value','units','status','condition_1']), } dict_data['sex'] = str(prompt('Sexo Masculino (m) ou Feminino (f)?\n')).lower() weight = float(prompt('Peso (kg):\n')) new_row = {'date': datetime.today().strftime('%Y-%m-%d'), 'value': weight, 'units': 'kg', 'status': '', 'condition_1': ''} dict_data['weight'].loc[len(dict_data['weight'])] = new_row # ou simplesmente usar algo já pré-formatado, tipo excel, etc.? day = str(prompt('Data de nascimento (dia):\n')) month = str(prompt('Data de nascimento (mês):\n')) year = str(prompt('Data de nascimento (ano):\n')) dict_data['birthdate'] = datetime.strptime(year + '-' + month + '-' + day, '%Y-%m-%d') # we can put this inside a while loop to keep asking if the user has more data points creatinine = float(prompt('Creatinina anterior do costume (mg/dL):\n')) day = str(prompt('no Dia:\n')) month = str(prompt('no Mês:\n')) year = str(prompt('no Ano:\n')) fulldate = year + '-' + month + '-' + day new_row = {'date': fulldate, 'value': creatinine, 'units': 'mg/dL', 'status': status_creatinine(creatinine, dict_data), 'condition_1': ''} dict_data['creatinine'].loc[len(dict_data['creatinine'])] = new_row creatinine = float(prompt('Creatinina atual (mg/dL):\n')) # assuming the analysis was today... new_row = {'date': datetime.today().strftime('%Y-%m-%d'), 'value': creatinine, 'units': 'mg/dL', 'status': status_creatinine(creatinine, dict_data), 'condition_1': ''} dict_data['creatinine'].loc[len(dict_data['creatinine'])] = new_row hemodialysis = int(prompt('Fez hemodiálise? Sim (1) ou Não (0).')) dict_data['hemodialysis'] = hemodialysis urine_output = float(prompt('Urina nas últimas 6 horas (em Litros)\n')) # Na verdade, 6, 12, 24... dict_data['creatinine'].sort_values(by='date', ascending = True, inplace = True) #ascending -> oldest first weight = dict_data['weight']['value'].tolist()[-1] urine_output = round(((1000*urine_output/6)/weight), 2) new_row = {'date': datetime.today().strftime('%Y-%m-%d'), 'value': urine_output, 'units': 'mL/kg/h', 'status': status_urine(urine_output), 'condition_1': ''} dict_data['urine_output'].loc[len(dict_data['urine_output'])] = new_row #AKI AKI_result = AKI_type(dict_data) if AKI_type(dict_data) > 0: print(f'Parece ter insuficiência renal de tipo {str(AKI_result)}.') alert(f'Parece ter insuficiência renal de tipo {str(AKI_result)}.') else: print('Não parece ter insuficiência renal.') alert('Não parece ter insuficiência renal.') print('=========================') #Cause type age = calculate_age(dict_data['birthdate']) print('Idade') print(str(age)) print('=========================') for i in dict_data: if isinstance(dict_data[i], pd.core.frame.DataFrame): if dict_data[i].empty != True: print(i) list2 = dict_data[i].columns.tolist() row_width = 10 formatted_row = " | ".join("{:<{width}}".format(elem, width=row_width) for elem in list2) print(formatted_row) dict_data[i].sort_values(by='date', ascending = False, inplace = True) #print instead of display? for row in range(len(dict_data[i])): list1 = dict_data[i].loc[row].tolist() list2 = [str(list1[element]) for element in range(len(list1))] formatted_row = " | ".join("{:<{width}}".format(elem, width=row_width) for elem in list2) print(formatted_row) print('=========================') else: print(i) print(dict_data[i]) print('=========================')

Referências:

National Kidney Foundation. How to Classify CKD.

J. Larry Jameson, Joseph Loscalzo, Dan Longo, Dennis Kasper, Stephen Hauser e Anthony Fauci, Harrison'S Principles Of Internal Medicine, Twenty-First Edition (2022)

Agarwal R. Defining end-stage renal disease in clinical trials: a framework for adjudication. Nephrology Dialysis Transplantation. 2015; 31(6): p.864-867

Popular posts from this blog

Rede do Sistema Nervoso Humano, com Músculos inervados