def update_indicators(indicators, data, config, user_input, session_state): # TODO: indicadores quando cidade não posssui dados for group in config["br"]["indicators"].keys(): ref = [ config["br"]["indicators"][group]["risk"] if group != "social_isolation" else config["br"]["indicators"][group]["display"] ][0] if data[ref].fillna("").values[0] == "": indicators[group].display = "- " indicators[group].risk = "nan" if group != "hospital_capacity": indicators[group].right_display = "- " indicators[group].left_display = "- " else: if group == "subnotification_rate": indicators[group].display = str( int( 10 * data[config["br"]["indicators"][group]["display"]] .fillna("- ") .values[0] ) ) else: indicators[group].display = fix_type( data[config["br"]["indicators"][group]["display"]] .fillna("- ") .values[0], group, ) indicators[group].risk = [ str(data[config["br"]["indicators"][group]["risk"]].values[0]) if group != "social_isolation" else "Fonte: inloco" ][0] indicators[group].left_display = fix_type( data[config["br"]["indicators"][group]["left_display"]] .fillna("- ") .values[0], group, ) indicators[group].right_display = fix_type( data[config["br"]["indicators"][group]["right_display"]] .fillna("- ") .values[0], group, ) if (session_state.state != user_input["state_name"]) or ( session_state.city != user_input["city_name"] ): session_state.state = user_input["state_name"] session_state.city = user_input["city_name"] elif session_state.refresh: indicators["subnotification_rate"].left_display = session_state.cases indicators["hospital_capacity"].left_display = session_state.number_beds indicators["hospital_capacity"].right_display = session_state.number_ventilators user_input["number_beds"] = session_state.number_beds user_input["number_ventilators"] = session_state.number_ventilators # recalcula capacidade hospitalar user_input["strategy"] = "isolation" user_input = sm.calculate_recovered(user_input, data) indicators["hospital_capacity"].display = fix_type( get_dday(run_simulation(user_input, config), "I2", user_input["number_beds"] * config["simulator"]["resources_available_proportion"])[ "best" ], "hospital_capacity", ) return indicators
def update_indicators(indicators, data, config, user_input, session_state): # TODO: indicadores quando cidade não posssui dados for group in config["br"]["indicators"].keys(): ref = [ config["br"]["indicators"][group]["risk"] if group != "social_isolation" else config["br"]["indicators"][group]["display"] ][0] if data[ref].fillna("").values[0] == "": indicators[group].display = "- " indicators[group].risk = "nan" if group != "hospital_capacity": indicators[group].right_display = "- " indicators[group].left_display = "- " else: if group == "subnotification_rate": indicators[group].display = str( int(10 * data[config["br"]["indicators"][group] ["display"]].fillna("- ").values[0])) else: indicators[group].display = fix_type( data[config["br"]["indicators"][group]["display"]].fillna( "- ").values[0], group, ) indicators[group].risk = [ str(data[config["br"]["indicators"][group]["risk"]].values[0]) if group != "social_isolation" else "Fonte: inloco" ][0] indicators[group].left_display = fix_type( data[config["br"]["indicators"][group]["left_display"]].fillna( "- ").values[0], group, ) indicators[group].right_display = fix_type( data[config["br"]["indicators"][group] ["right_display"]].fillna("- ").values[0], group, ) if (session_state.state != user_input["state_name"]) or ( session_state.city != user_input["city_name"]): session_state.state = user_input["state_name"] session_state.city = user_input["city_name"] elif session_state.refresh: indicators["subnotification_rate"].left_display = session_state.cases indicators[ "hospital_capacity"].left_display = session_state.number_beds indicators[ "hospital_capacity"].right_display = session_state.number_ventilators user_input["number_beds"] = session_state.number_beds user_input["number_ventilators"] = session_state.number_ventilators # recalcula capacidade hospitalar user_input["strategy"] = "isolation" user_input = sm.calculate_recovered(user_input, data) dmonth = get_dmonth( run_simulation(user_input, config), "I2", user_input["number_beds"] * config["br"]["simulacovid"]["resources_available_proportion"], )["best"] # TODO: add no config e juntar com farol dic_dmonth = { 1: { "preffix": "até 1", "class": "ruim" }, 2: { "preffix": "até 2", "class": "insatisfatório" }, 3: { "preffix": "+ de 2", "class": "bom" }, } indicators["hospital_capacity"].risk = dic_dmonth[dmonth]["class"] indicators["hospital_capacity"].display = dic_dmonth[dmonth]["preffix"] return indicators
def main(user_input, indicators, data, config, session_state): if indicators["rt"].display != "- ": st.write( f""" <div class="base-wrapper"> <span class="section-header primary-span">Simule o impacto de diferentes ritmos de contágio no seu sistema hospitalar</span> <br><br> <span>Agora é a hora de se preparar para evitar a sobrecarga hospitalar. No momento, em {user_input["locality"]}, estimamos que <b>o ritmo de contágio esteja entre {indicators["rt"].display}</b>, ou seja, cada pessoa doente infectará em média entre outras {indicators["rt"].display} pessoas. </span> </div>""", unsafe_allow_html=True, ) else: st.write( f""" <div class="base-wrapper"> <span class="section-header primary-span">Simule o impacto de diferentes ritmos de contágio no seu sistema hospitalar</span> <br><br> <span>Agora é a hora de se preparar para evitar a sobrecarga hospitalar. No momento, em {user_input["locality"]}, não temos dados suficientes para estimativa do ritmo de contágio. Por isso, <b>iremos simular com o ritmo de contágio do seu estado, que está entre {user_input["state_rt"]}</b>, ou seja, cada pessoa doente infectará em média entre outras {user_input["state_rt"]} pessoas. </span> </div>""", unsafe_allow_html=True, ) dic_scenarios = { "Cenário Estável: O que acontece se seu ritmo de contágio continuar constante?": "isolation", "Cenário Negativo: O que acontece se dobrar o seu ritmo de contágio?": "nothing", "Cenário Positivo: O que acontece se seu ritmo de contágio diminuir pela metade?": "lockdown", } option = st.selectbox( "", ["Selecione uma mudança no seu ritmo de contágio"] + list(dic_scenarios.keys()), ) if option == "Selecione uma mudança no seu ritmo de contágio": pass else: # utils.genInputCustomizationSectionHeader(user_input["locality"]) # user_input, session_state = utils.genInputFields( # user_input, sources, config, session_state # ) # calculate recovered cases user_input = calculate_recovered(user_input, data) # SIMULATOR SCENARIOS: BEDS & RESPIRATORS user_input["strategy"] = dic_scenarios[option] # TODO: melhorar aqui! como fazer a estimatima de casos ativos quando é modificado? if (user_input["population_params"]["I"] == user_input["population_params"]["I_confirmed"]): user_input["population_params"]["I"] = user_input[ "population_params"]["I_confirmed"] dfs = simulator.run_simulation(user_input, config) dday_beds = simulator.get_dday( dfs, "I2", int(user_input["number_beds"] * config["simulator"]["resources_available_proportion"]), ) dday_ventilators = simulator.get_dday( dfs, "I3", int(user_input["number_ventilators"] * config["simulator"]["resources_available_proportion"]), ) # fig, dday_beds, dday_ventilators = simulator.run_simulation(user_input, config) utils.genChartSimulationSection( SimulatorOutput( color=BackgroundColor.SIMULATOR_CARD_BG, min_range_beds=dday_beds["worst"], max_range_beds=dday_beds["best"], min_range_ventilators=dday_ventilators["worst"], max_range_ventilators=dday_ventilators["best"], ), plot_simulation(dfs, user_input, config), ) utils.genWhatsappButton() utils.genFooter()
def main(user_input, indicators, data, config, session_state): user_analytics = amplitude.gen_user(utils.get_server_session()) utils.localCSS("style.css") utils.genHeroSection( title1="Simula", title2="Covid", subtitle="Um simulador da demanda por leitos hospitalares.", logo="https://i.imgur.com/w5yVANW.png", header=False, ) if (user_input["place_type"] == user_input["rt_level"] ): # indicators["rt"].display != "- ": st.write( f""" <div class="base-wrapper"> <span class="section-header primary-span">Simule o impacto de diferentes ritmos de contágio no seu sistema hospitalar</span> <br><br> <span>Agora é a hora de se preparar para evitar a sobrecarga hospitalar. No momento, em {user_input["locality"]}, estimamos que <b>a taxa de contágio esteja entre {indicators["control"].left_display}</b>, ou seja, cada pessoa doente infectará em média entre outras {indicators["control"].left_display} pessoas. </span> </div>""", unsafe_allow_html=True, ) else: places = {"health_region_id": "Regional", "state_num_id": "Estado"} st.write( f""" <div class="base-wrapper"> <span class="section-header primary-span">Simule o impacto de diferentes ritmos de contágio no seu sistema hospitalar</span> <br><br> <span>Agora é a hora de se preparar para evitar a sobrecarga hospitalar. No momento, em {user_input["locality"]}, não temos dados suficientes para estimativa do ritmo de contágio. Por isso, <b>iremos simular com a taxa de contágio do seu {places[user_input["rt_level"]]}, que está entre {str(user_input["rt_values"]["best"])}-{str(user_input["rt_values"]["worst"])}</b>, ou seja, cada pessoa doente infectará em média entre outras {str(user_input["rt_values"]["best"])}-{str(user_input["rt_values"]["worst"])} pessoas. </span> </div>""", unsafe_allow_html=True, ) # CHANGE DATA SECTION utils.genInputCustomizationSectionHeader(user_input["locality"]) old_user_input = dict(user_input) user_input, session_state = utils.genInputFields(user_input, config, session_state) if session_state.reset: session.rerun() if session_state.update: opening_response = user_analytics.log_event( "updated sim_numbers", { "beds_change": session_state.number_beds - int(old_user_input["number_beds"]), "icu_beds_change": session_state.number_icu_beds - int(old_user_input["number_icu_beds"]), "cases_change": session_state.number_cases - int(old_user_input["population_params"]["I_confirmed"]), "deaths_change": session_state.number_deaths - int(old_user_input["population_params"]["D"]), }, ) session_state.update = False session.rerun() dic_scenarios = { "Cenário Estável: O que acontece se seu ritmo de contágio continuar constante?": "estavel", "Cenário Negativo: O que acontece se dobrar o seu ritmo de contágio?": "negativo", "Cenário Positivo: O que acontece se seu ritmo de contágio diminuir pela metade?": "positivo", } option = st.selectbox( "", ["Selecione uma mudança no seu ritmo de contágio"] + list(dic_scenarios.keys()), ) if option == "Selecione uma mudança no seu ritmo de contágio": pass else: # calculate recovered cases user_input = _calculate_recovered(data, user_input) # SIMULATOR SCENARIOS: BEDS & RESPIRATORS user_input["strategy"] = dic_scenarios[option] if user_input["strategy"] == "estavel": user_analytics.log_event("picked stable_scenario") elif user_input["strategy"] == "positivo": user_analytics.log_event("picked positive_scenario") elif user_input["strategy"] == "negativo": user_analytics.log_event("picked negative_scenario") # Caso o usuário altere os casos confirmados, usamos esse valor para a estimação if (session_state.number_cases is not None) and ( session_state.number_cases != user_input["population_params"]["I_compare"]): user_input["population_params"]["I"] = session_state.number_cases # Roda a simulação dfs = simulator.run_simulation(_prepare_simulation(user_input, config), config) dday_beds = simulator.get_dday(dfs, "I2", int(user_input["number_beds"])) dday_icu_beds = simulator.get_dday(dfs, "I3", int(user_input["number_icu_beds"])) utils.genChartSimulationSection( SimulatorOutput( # color=BackgroundColor.SIMULATOR_CARD_BG, min_range_beds=dday_beds["worst"], max_range_beds=dday_beds["best"], min_range_icu_beds=dday_icu_beds["worst"], max_range_icu_beds=dday_icu_beds["best"], ), plot_simulation(dfs, user_input), )