Example #1
0
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
Example #2
0
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
Example #3
0
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()
Example #4
0
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),
        )