示例#1
0
def genSelectBox(df, session_state):
    """ 
    This function generates select boxes for choosing the school network
    Parameters: 
        df (type): 2019 school census dataframe
        session_state (type): section dataset
        user_analytics (type): user data by amplitude
    """
    col1, col2, col3, col4 = st.beta_columns([0.3, 0.5, 0.5, 1])

    with col1:
        session_state.state_id = st.selectbox("Estado", df["state_id"].sort_values().unique())
        session_state.state_name = utils.set_state_name(df,session_state.state_id)
    with col2:
        options_city_name = df[df["state_id"] == session_state.state_id]["city_name"].sort_values().unique()
        options_city_name = pd.DataFrame(data=options_city_name, columns=["city_name"])
        x = int(options_city_name[options_city_name["city_name"] == "Todos"].index.tolist()[0])
        session_state.city_name = st.selectbox("Município", options_city_name, index=x)
    with col3:
        options_adiminlevel = utils.filter_place(df,"administrative_level",state_id=session_state.state_id,city_name=session_state.city_name,)
        options_adiminlevel = pd.DataFrame(data=options_adiminlevel, columns=["adiminlevel"])
        y = int(options_adiminlevel[options_adiminlevel["adiminlevel"] == "Todos"].index.tolist()[0])
        session_state.administrative_level = st.selectbox("Nível de Administração", options_adiminlevel, index=y)
    with col4:
        st.write(
            f"""
        <div class="container main-padding">
            <br><br>
        </div>
        """,
            unsafe_allow_html=True,
        )
示例#2
0
def main(session_state):
    # GOOGLE ANALYTICS SETUP
    if os.getenv("IS_DEV") == "FALSE":
        utils.setup_google_analytics()

    # Amplitude: Get user info
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened farol",
                                                     session_state,
                                                     is_new_page=True)

    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)

    utils.localCSS("style.css")
    st.write(
        """<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MKWTV7X" height="0" width="0" style="display:none;visibility:hidden"></iframe>""",
        unsafe_allow_html=True,
    )

    utils.genHeroSection(
        title1="Farol",
        title2="Covid",
        subtitle="Entenda e controle a Covid-19 em sua cidade e estado.",
        logo="https://i.imgur.com/CkYDPR7.png",
        header=True,
        explain=True)

    # TEMPORARY BANNER FC
    escolasegura_logo = utils.load_image("imgs/escolasegura_favicon.png")
    st.write(
        f"""<div>
            <div class="base-wrapper flex flex-column" style="background-color:#0090A7">
                <div class="white-span header p1" style="font-size:30px;"><img class="icon-cards" src="data:image/png;base64,{escolasegura_logo}" alt="Fonte: Impulso"> COMO PLANEJAR UMA REABERTURA SEGURA?</div>
                <span class="white-span">Veja guias e protocolos para facilitar uma reabertura planejada da rede pública de ensino, respeitando boas práticas de distanciamento e segurança sanitária para controle da Covid-19.
                <br><b>Acesse o Escola Segura: <a target="_blank" style="color:#FFFFFF;" href="http://escolasegura.coronacidades.org">http://escolasegura.coronacidades.org</a></b></span>
        </div>""",
        unsafe_allow_html=True,
    )

    st.write(
        """
    <div class="base-wrapper primary-span">
        <span class="section-header">Selecione seu estado ou município no mapa abaixo:</span>
    </div>""",
        unsafe_allow_html=True,
    )

    # GET DATA
    dfs, cnes_sources = get_data(config)

    # REGION/CITY USER INPUT
    user_input = dict()
    user_input["state_name"] = st.selectbox("Estado",
                                            utils.filter_place(dfs, "state"))

    user_input["health_region_name"] = st.selectbox(
        "Região de Saúde",
        utils.filter_place(dfs,
                           "health_region",
                           state_name=user_input["state_name"]),
    )

    user_input["city_name"] = st.selectbox(
        "Município",
        utils.filter_place(
            dfs,
            "city",
            state_name=user_input["state_name"],
            health_region_name=user_input["health_region_name"],
        ),
    )

    changed_city = user_analytics.safe_log_event(
        "picked farol place",
        session_state,
        event_args={
            "state": user_input["state_name"],
            "city": user_input["city_name"]
        },
    )

    user_input, data = update_user_input_places(user_input, dfs, config)

    # GENERATE MAPS
    map_place_id = utils.Dictionary().get_state_alphabetical_id_by_name(
        user_input["state_name"])

    if os.getenv("IS_LOCAL").upper() == "TRUE":
        map_url = config["br"]["api"]["mapserver_local"]
    else:
        map_url = config["br"]["api"]["mapserver_external"]

    st.write(
        f"""
    <div class="brazil-map-div">
        <div class="alert-levels-map-overlay">
        </div>
        <div>
        <iframe id="map" src="resources/iframe-gen.html?url={map_url}maps/map-iframe?place_id=BR" class="map-br" scrolling="no">
        </iframe>
        </div>
    </div>
    """,
        unsafe_allow_html=True,
    )
    st.write(
        f"""
    <iframe id="map-state" src="resources/iframe-gen.html?url={map_url}maps/map-iframe?place_id={map_place_id}" class="map-state" scrolling="no">
    </iframe>
    """,
        unsafe_allow_html=True,
    )
    st.write(
        f"""
        <div class="selectors-box" id="selectors-box">
        </div>
        <iframe src="resources/select-box-mover.html?place_id={user_input["state_name"]}{user_input["health_region_name"]}{user_input["city_name"]}" height="0px">
        </iframe>""",
        unsafe_allow_html=True,
    )

    # SOURCES PARAMS
    user_input = utils.get_sources(user_input, data, cnes_sources,
                                   ["beds", "icu_beds"])

    # POPULATION PARAMS
    try:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": int(data["active_cases"].fillna(0).values[0]),
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }
    except:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": 0,
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }

    user_input["Rt"] = {
        "best": data["rt_low_95"].values[0],
        "worst": data["rt_high_95"].values[0],
        "is_valid": data["rt_most_likely"].apply(str).values[0],
    }

    user_input["last_updated_cases"] = data[
        "last_updated_subnotification"].max()
    # Update session values to standard ones if changed city or opened page or reseted values
    if (session_state.state_name != user_input["state_name"]
            or session_state.health_region_name !=
            user_input["health_region_name"]
            or session_state.city_name != user_input["city_name"]
            or session_state.number_beds is None or session_state.reset):
        session_state.state_name = user_input["state_name"]
        session_state.health_region_name = user_input["health_region_name"]
        session_state.city_name = user_input["city_name"]

        session_state.state_num_id = user_input["state_num_id"]
        session_state.health_region_id = user_input["health_region_id"]
        session_state.city_id = user_input["city_id"]

        session_state.number_beds = int(
            user_input["number_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_icu_beds = int(
            user_input["number_icu_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_cases = user_input["population_params"][
            "I_confirmed"]
        session_state.number_deaths = user_input["population_params"]["D"]
        session_state.reset = True

    if data["confirmed_cases"].sum() == 0:
        st.write(
            f"""<div class="base-wrapper">
                    Seu município ou Região de Saúde ainda não possui casos reportados oficialmente. Portanto, simulamos como se o primeiro caso ocorresse hoje.
                    <br><br>Caso queria, você pode mudar esse número abaixo:
                </div>""",
            unsafe_allow_html=True,
        )

        user_input["population_params"]["I"] = 1

    else:
        infectious_period = (
            config["br"]["seir_parameters"]["severe_duration"] +
            config["br"]["seir_parameters"]["critical_duration"])
        placeholder_value_pls_solve_this = 0

    # TEMPORARY BANNER - TODO: remove after done
    if user_input["state_name"] in ["Mato Grosso", "Espírito Santo"]:
        st.write("""
            <div>
                <div class="base-wrapper flex flex-column" style="background-color:#0090A7">
                    <div class="white-span header p1" style="font-size:30px;">⚠️ ATENÇÃO: Os municípios e regionais de saúde de MT e ES estão desatualizados</div>
                        <span class="white-span">Utilizamos dados abertos das secretarias estaduais para os cálculos dos indicadores. 
                        Esses dados são capturados diariamente por voluntários do Brasil.io, que vêm enfrenteando problemas na atualização dos dados desses estados.
                        Estamos resolvendo a situação e iremos retornar com os indicadores o mais breve possível.</b></span>
                </div>
            <div>""",
                 unsafe_allow_html=True)

    # DIMENSIONS CARDS
    dimensions = DimensionCards
    utils.genAnalysisDimmensionsSection(dimensions)

    # INDICATORS CARDS
    indicators = IndicatorCards

    indicators = update_indicators(indicators, data, config, user_input,
                                   session_state)

    data["overall_alert"] = data["overall_alert"].map(
        config["br"]["farolcovid"]["categories"])

    if "state" in user_input["place_type"]:
        # Add disclaimer to cities in state alert levels
        total_alert_regions = (dfs["health_region"][
            dfs["health_region"]["state_num_id"] == data["state_num_id"].
            unique()[0]].assign(overall_alert=lambda df: df["overall_alert"].
                                map(config["br"]["farolcovid"]["categories"]))
                               ["overall_alert"].value_counts())

        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
            n_colapse_regions=total_alert_regions[
                total_alert_regions.index.isin(["altíssimo", "alto"])].sum(),
        )

    elif "city" in user_input["place_type"]:
        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
            rt_type=data["rt_place_type"].values[0],
        )

    else:
        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
        )

    # AVAILABLE CAPACITY DISCLAIMER
    st.write(
        """
        <div class='base-wrapper'>
            <i>* Utilizamos %s&percnt; do total de leitos UTI reportados por %s em %s 
            para cálculo da projeção de dias para atingir capacidade máxima.<br><b>Para municípios, utilizamos os recursos da respectiva regional de saúde.</b>
            Leitos enfermaria contém os tipos: cirúrgicos, clínicos e hospital-dia; sendo considerado %s&percnt; já ocupado.</i>
        </div>
        """ % (
            str(
                int(config["br"]["simulacovid"]
                    ["resources_available_proportion"] * 100)),
            user_input["author_number_beds"],
            user_input["last_updated_number_beds"],
            str(
                int(config["br"]["simulacovid"]
                    ["resources_available_proportion"] * 100)),
        ),
        unsafe_allow_html=True,
    )

    # TODO: remove comment on this later!
    # utils.gen_pdf_report()

    # INDICATORS PLOTS
    if st.button("Confira a evolução de indicadores-chave"):
        opening_response = user_analytics.log_event("picked key_indicators",
                                                    dict())
        if st.button("Esconder"):
            pass
        st.write(
            f"""
            <div class="base-wrapper">
                    <span class="section-header primary-span">CÁLCULO DA TAXA DE CONTÁGIO EM {user_input["locality"]}</span>
                    <br><br>
                    <b>A taxa de contágio, conhecida como número de reprodução efetivo (Rt), traduz a dinâmica de disseminação da Covid-19 a cada dia.</b>
                    <br>O valor pode ser lido como o número médio de novas infecções diárias causadas por uma única pessoa infectada.
                    Para mais informações, visite a página de Modelos no menu lateral.
            </div>
            """,
            unsafe_allow_html=True,
        )

        try:
            fig2 = plots.plot_rt_wrapper(user_input[user_input["place_type"]],
                                         user_input["place_type"], config)
            st.plotly_chart(fig2, use_container_width=True)
        except:
            st.write(
                """<div class="base-wrapper"><b>Seu município, regional ou estado não possui mais de 30 dias de dados de casos confirmados.</b>""",
                unsafe_allow_html=True,
            )
        st.write(
            "<div class='base-wrapper'><i>Em breve:</i> gráficos de subnotificação e média móvel (últimos 7 dias) de novos casos por 100k habitantes.</div>",
            unsafe_allow_html=True,
        )

    utils.stylizeButton(
        name="Confira a evolução de indicadores-chave",
        style_string=
        """border: 1px solid var(--main-white);box-sizing: border-box;border-radius: 15px; width: auto;padding: 0.5em;text-transform: uppercase;font-family: var(--main-header-font-family);color: var(--main-white);background-color: var(--main-primary);font-weight: bold;text-align: center;text-decoration: none;font-size: 18px;animation-name: fadein;animation-duration: 3s;margin-top: 1em;""",
        session_state=session_state,
    )

    # AMBASSADOR SECTION
    utils.gen_ambassador_section()

    # PDF-REPORT GEN BUTTON
    # if st.button("Gerar Relatório PDF"):
    #     user_analytics.log_event("generated pdf")
    #     st.write(
    #         """<div class="base-wrapper">Aguarde um momento por favor...</div>""",
    #         unsafe_allow_html=True,
    #     )
    #     st.markdown(
    #         pdfgen.gen_pdf_report(user_input, indicators, data, config),
    #         unsafe_allow_html=True,
    #     )

    # TOOLS
    products = ProductCards

    utils.genProductsSection(products)

    # SELECTION BUTTONS
    # TODO: limpar esse código! está 100% repetido!!!
    if session_state.continuation_selection is None:
        session_state.continuation_selection = [False, False, False, False]

    simula_button_name = "Clique Aqui"  # Simula covid 0space
    saude_button_name = "Clique Aqui "  # Saude em ordem 1space
    distancia_button_name = "Clique_Aqui"  # Distanciamento social
    onda_button_name = "Clique_Aqui "  # onda covid
    if st.button(simula_button_name):  # SIMULA
        session_state.continuation_selection = [True, False, False, False]
    if st.button(distancia_button_name):  # DISTANCIAMENTO
        session_state.continuation_selection = [False, True, False, False]
    if st.button(saude_button_name):  # SAUDE
        session_state.continuation_selection = [False, False, True, False]
    if st.button(onda_button_name):  # ONDA
        session_state.continuation_selection = [False, False, False, True]

    utils.stylizeButton(
        name=simula_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 1},
    )

    utils.stylizeButton(
        name=distancia_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 2},
    )
    utils.stylizeButton(
        name=saude_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 3},
    )
    utils.stylizeButton(
        name=onda_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 4},
    )
    if session_state.continuation_selection[0]:
        user_analytics.safe_log_event(
            "picked simulacovid",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        # Downloading the saved data from memory
        sm.main(user_input, indicators, data, config, session_state)
        # TODO: remove comment on this later!
        # utils.gen_pdf_report()

    elif session_state.continuation_selection[1]:
        user_analytics.safe_log_event(
            "picked distanciamento",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        ds.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[2]:
        user_analytics.safe_log_event(
            "picked saude_em_ordem",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        so.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[3]:
        user_analytics.safe_log_event(
            "picked onda",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        oc.main(user_input, indicators, data, config, session_state)

    # BIG TABLE
    gen_big_table(config, dfs, user_input["state_name"])
    # FOOTER
    utils.gen_whatsapp_button(config["impulso"]["contact"])
    utils.gen_footer()
    user_analytics.conclude_user_session(session_state)
示例#3
0
def load_cities_heatmap(my_dict, session_state):
    st.write(
        """
        <div class="base-wrapper">
            <span class="section-header primary-span">ONDA MORTES DIÁRIAS POR MUNICÍPIO</span>
            <br><br>
            <span class="ambassador-question"><b>Selecione seu estado e município para prosseguir</b></span>
        </div>""",
        unsafe_allow_html=True,
    )
    
    places_ids = get_places_ids(loader.config)
    state_name = st.selectbox("Estado ", utils.filter_place( {'city' : places_ids}, "state"))
    city_name = st.selectbox(
        "Município ",
        utils.filter_place(
            {'city' : places_ids}, "city", state_name=state_name, health_region_name="Todos"
        ),
    )

    deaths_or_cases = (
        st.selectbox("Qual análise você quer ver: Número de mortes ou Taxa de letalidade (mortes por casos)?", ["Mortes", "Letalidade"])
        == "Letalidade"
    )
    # print("checking")
    if city_name != "Todos":  # the user selected something
        # print("passed")
        state_ids = {
            "Acre": "AC",
            "Alagoas": "AL",
            "Amapá": "AP",
            "Amazonas": "AM",
            "Bahia": "BA",
            "Ceará": "CE",
            "Distrito Federal": "DF",
            "Espírito Santo": "ES",
            "Goiás": "GO",
            "Maranhão": "MA",
            "Mato Grosso": "MT",
            "Mato Grosso do Sul": "MS",
            "Minas Gerais": "MG",
            "Pará": "PA",
            "Paraíba": "PB",
            "Paraná": "PR",
            "Pernambuco": "PE",
            "Piauí": "PI",
            "Rio de Janeiro": "RJ",
            "Rio Grande do Norte": "RN",
            "Rio Grande do Sul": "RS",
            "Rondônia": "RO",
            "Roraima": "RR",
            "Santa Catarina": "SC",
            "São Paulo": "SP",
            "Sergipe": "SE",
            "Tocantins": "TO",
        }
        params = {"state_id": state_ids[state_name]}
        br_cases = copy.deepcopy(loading_cached_cities(params))
        # gen_banners()
        uf = my_dict.get_state_alphabetical_id_by_name(state_name)
        da.prepare_heatmap(
            br_cases,
            place_type="city_name",
            group=uf,
            your_city=city_name,
            deaths_per_cases=deaths_or_cases,
        )
示例#4
0
def main(session_state):
    # GOOGLE ANALYTICS SETUP
    if os.getenv("IS_DEV") == "FALSE":
        utils.setup_google_analytics()

    # Amplitude: Get user info
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened farol",
                                                     session_state,
                                                     is_new_page=True)

    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)

    utils.localCSS("style.css")
    st.write(
        """<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MKWTV7X" height="0" width="0" style="display:none;visibility:hidden"></iframe>""",
        unsafe_allow_html=True,
    )

    utils.genHeroSection(
        title1="Farol",
        title2="Covid",
        subtitle="Entenda e controle a Covid-19 em sua cidade e estado.",
        logo="https://i.imgur.com/CkYDPR7.png",
        header=True,
        explain=True)

    if os.getenv("IS_HEROKU") == "TRUE":
        urlpath = os.getenv("urlpath")
    elif os.getenv("IS_DEV") == "TRUE":
        urlpath = 'http://localhost:8501/'
    else:
        urlpath = 'https://farolcovid.coronacidades.org/'
        # urlpath = 'http://localhost:8501/'
    vaccine_logo = utils.load_image("imgs/vaccine.png")
    st.write(
        f"""<div>
            <div class="base-wrapper flex flex-column" style="background-color:#0090A7">
                <div class="white-span header p1" style="font-size:30px;"><img class="icon-cards" src="data:image/png;base64,{vaccine_logo}" alt="Fonte: Impulso">QUER SABER MAIS SOBRE A VACINAÇÃO?</div>
                <span class="white-span">Acompanhe nossos novos dados e descobra como avança a vacinação no seu município ou estado!<br><br>
                <a class="btn-ambassador" href="{urlpath}?page=4" target="_self">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Veja aqui!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
                <br><br><span class="white-span">Saiba quando podemos controlar a pandemia no Brasil no nosso estudo realizado com dados inéditos obtidos pela Lei de Acesso à Informação.<br><br>
                <a class="btn-ambassador" href="{urlpath}?page=3" target="_self">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ler aqui!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
        </div>""",
        unsafe_allow_html=True,
    )

    st.write(
        """
    <div class="base-wrapper primary-span">
        <span class="section-header">Selecione seu estado ou município no mapa abaixo:</span>
    </div>""",
        unsafe_allow_html=True,
    )

    # PEGA BASE DA API
    # GET DATA
    dfs, cnes_sources = get_data(config)
    map_url = "https://helper.coronacidades.org/"
    col1, col2 = st.beta_columns([0.6, 0.35])

    with col2:
        # REGIAO/CIDADE SELECAO USUARIO
        # REGION/CITY USER INPUT
        user_input = dict()
        user_input["state_name"] = st.selectbox(
            "Estado", utils.filter_place(dfs, "state"))

        user_input["health_region_name"] = st.selectbox(
            "Região de Saúde",
            utils.filter_place(dfs,
                               "health_region",
                               state_name=user_input["state_name"]),
        )

        user_input["city_name"] = st.selectbox(
            "Município",
            utils.filter_place(
                dfs,
                "city",
                state_name=user_input["state_name"],
                health_region_name=user_input["health_region_name"],
            ),
        )

        changed_city = user_analytics.safe_log_event(
            "picked farol place",
            session_state,
            event_args={
                "state": user_input["state_name"],
                "city": user_input["city_name"]
            },
        )

        user_input, data = update_user_input_places(user_input, dfs, config)
        map_place_id = utils.Dictionary().get_state_alphabetical_id_by_name(
            user_input["state_name"])
        st.write(
            f"""
        <div class="brazil-map-div">
            <br><br>
            <iframe id="map-state" src="{map_url}maps/map-iframe?place_id={map_place_id}" class="map-state" scrolling="no">
            </iframe>
        </div>
        """,
            unsafe_allow_html=True,
        )
    with col1:
        # GENERATE MAPS
        # st.write(
        #     f"""
        # <div class="brazil-map-div">
        #     <div class="alert-levels-map-overlay">
        #     </div>
        #     <div>
        #     <iframe id="map" src="resources/iframe-gen.html?url={map_url}maps/map-iframe?place_id=BR" class="map-br" scrolling="no">
        #     </iframe>
        #     </div>
        # </div>
        # """,
        #     unsafe_allow_html=True,
        # )

        st.write(
            f"""
        <div class="brazil-map-div">
            <iframe id="map" src="{map_url}maps/map-iframe?place_id=BR" class="map-br" scrolling="no">
            </iframe>
        </div>
        """,
            unsafe_allow_html=True,
        )
    # st.write(
    #     f"""

    # """,
    #     unsafe_allow_html=True,
    # )

    # st.write(
    #     f"""
    # <iframe id="map-state" src="resources/iframe-gen.html?url={map_url}maps/map-iframe?place_id={map_place_id}" class="map-state" scrolling="no">
    # </iframe>
    # """,
    #     unsafe_allow_html=True,
    # )
    # st.write(
    #     f"""
    #     <div class="selectors-box" id="selectors-box">
    #     </div>
    #     <iframe src="resources/select-box-mover.html?place_id={user_input["state_name"]}{user_input["health_region_name"]}{user_input["city_name"]}" height="0px">
    #     </iframe>""",
    #     unsafe_allow_html=True,
    # )

    # SOURCES PARAMS
    user_input = utils.get_sources(user_input, data, cnes_sources,
                                   ["beds", "icu_beds"])

    # POPULATION PARAMS
    try:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": int(data["active_cases"].fillna(0).values[0]),
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }
    except:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": 0,
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }

    user_input["Rt"] = {
        "best": data["rt_low_95"].values[0],
        "worst": data["rt_high_95"].values[0],
        "is_valid": data["rt_most_likely"].apply(str).values[0],
    }

    user_input["last_updated_cases"] = data[
        "last_updated_subnotification"].max()
    # Update session values to standard ones if changed city or opened page or reseted values
    if (session_state.state_name != user_input["state_name"]
            or session_state.health_region_name !=
            user_input["health_region_name"]
            or session_state.city_name != user_input["city_name"]
            or session_state.number_beds is None or session_state.reset):
        session_state.state_name = user_input["state_name"]
        session_state.health_region_name = user_input["health_region_name"]
        session_state.city_name = user_input["city_name"]

        session_state.state_num_id = user_input["state_num_id"]
        session_state.health_region_id = user_input["health_region_id"]
        session_state.city_id = user_input["city_id"]

        session_state.number_beds = int(
            user_input["number_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_icu_beds = int(
            user_input["number_icu_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_cases = user_input["population_params"][
            "I_confirmed"]
        session_state.number_deaths = user_input["population_params"]["D"]
        session_state.reset = True

    if data["confirmed_cases"].sum() == 0:
        st.write(
            f"""<div class="base-wrapper">
                    Seu município ou Região de Saúde ainda não possui casos reportados oficialmente. Portanto, simulamos como se o primeiro caso ocorresse hoje.
                    <br><br>Caso queria, você pode mudar esse número abaixo:
                </div>""",
            unsafe_allow_html=True,
        )

        user_input["population_params"]["I"] = 1

    else:
        infectious_period = (
            config["br"]["seir_parameters"]["severe_duration"] +
            config["br"]["seir_parameters"]["critical_duration"])
        placeholder_value_pls_solve_this = 0

    # ALERT BANNER
    # Aqui ele cria uma lista só com os estados que todas as cidades estao sem o overall_alert para criar um alerta para o estado
    states_list = dfs["city"].groupby(["state_name"]).agg({
        "overall_alert": "count",
        "state_name": "max"
    })
    states_list = states_list.loc[states_list['overall_alert'] < 1]
    # Adiciona forcadamente MT para a lista
    states_list = states_list.append(
        {
            'state_name': 'Mato Grosso',
            'overall_alert': 0
        }, ignore_index=True)
    states_list = states_list['state_name'].to_list()
    utils.noOverallalert(user_input, data, states_list)

    # DIMENSIONS CARDS
    dimensions = DimensionCards
    utils.genAnalysisDimmensionsSection(dimensions)

    # INDICATORS CARDS
    indicators = IndicatorCards

    indicators = update_indicators(indicators, data, config, user_input,
                                   session_state)

    data["overall_alert"] = data["overall_alert"].map({
        0: "novo normal",
        1: "moderado",
        2: "alto",
        3: "altíssimo"
    })

    if "state" in user_input["place_type"]:
        # Add disclaimer to cities in state alert levels
        total_alert_regions = (dfs["health_region"][
            dfs["health_region"]["state_num_id"] ==
            data["state_num_id"].unique()[0]].assign(
                overall_alert=lambda df: df["overall_alert"].map({
                    0: "novo normal",
                    1: "moderado",
                    2: "alto",
                    3: "altíssimo"
                }))["overall_alert"].value_counts())

        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
            n_colapse_regions=total_alert_regions[
                total_alert_regions.index.isin(["altíssimo", "alto"])].sum(),
        )

    elif "city" in user_input["place_type"]:
        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
            rt_type=data["rt_place_type"].values[0],
        )

    else:
        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
        )

    # AVAILABLE CAPACITY DISCLAIMER
    # TODO -> VOLTAR PARA PROJECAO DE LEITOS
    # """
    # <div class='base-wrapper'>
    #     <i>* Utilizamos 100% do total de leitos UTI reportados por %s em %s
    #     para cálculo da projeção de dias para atingir capacidade máxima.<br><b>Para municípios, utilizamos os recursos da respectiva regional de saúde.</b>
    #     Leitos enfermaria contém os tipos: cirúrgicos, clínicos e hospital-dia; sendo considerado %s&percnt; já ocupado.</i>
    # </div>
    # """

    st.write(
        """
        <div class='base-wrapper' 
            <i>* <b>Vacinação</b> </i>
            <li>“A porcentagem da população vacinada em seu local” - Total de pessoas que tomaram ao menos uma dose, dividido pelo total da população do local.<br>
            <li>“Porcentagem da população imunizada” - Total de pessoas que receberam todas as doses recomendadas do imunizante, dividido pelo total da população do local.<br>
            <li>“Total da população sem vacinar” - Número absoluto de habitantes do local que ainda não recebeu nenhuma dose do imunizante.<br>
            <i>Para mais detalhes e explicação completa confira nossa página de Metodologia no menu lateral.</i>
        </div>
        """,
        unsafe_allow_html=True,
    )

    st.write(
        """
        <div class='base-wrapper'>
            <i>* <b>Mudamos o indicador afim de refinarmos ajustes no cálculo de projeção de leitos.</b> Entendemos que a projeção apresentada não capturava a situação da 2ª onda observada nos municípios, regionais e estados, logo substituímos este indicador por ora para revisão dos cálculos. 
            Os valores de referência se baseiam nas estatísticas de países da OCDE, <a target="_blank" style="color:#0068c9;" href="https://docs.google.com/spreadsheets/d/1MKFOHRCSg4KMx5Newi7TYCrjtNyPwMQ38GE1wQ6as70/edit?usp=sharing">veja mais aqui</a></b>.
            As simulações personalizadas ainda podem ser realizadas através do SimulaCovid mais abaixo.<br>
            <li> Leitos Enfermaria: Consideramos %s&percnt; do total reportado por %s em %s dos tipos Cirúrgico, Clínico e Hospital-dia. Para municípios, utilizamos os recursos da respectiva regional de saúde.<br>
            <li> Leitos UTI: Consideramos 100&percnt; do total de leitos UTI reportado por %s em %s. Para municípios, utilizamos os recursos da respectiva regional de saúde.</i>
        </div>
        """ % (
            str(
                int(config["br"]["simulacovid"]
                    ["resources_available_proportion"] * 100)),
            user_input["author_number_beds"],
            user_input["last_updated_number_beds"],
            user_input[
                "author_number_icu_beds"],  # remover na volta de projecao
            user_input[
                "last_updated_number_icu_beds"],  # remover na volta de projecao
        ),
        unsafe_allow_html=True,
    )

    # TODO: remove comment on this later!
    # utils.gen_pdf_report()

    # INDICATORS PLOTS
    if st.button("Confira a evolução de indicadores-chave"):
        opening_response = user_analytics.log_event("picked key_indicators",
                                                    dict())
        if st.button("Esconder"):
            pass
        st.write(
            f"""
            <div class="base-wrapper">
                    <span class="section-header primary-span">CÁLCULO DA TAXA DE CONTÁGIO EM {user_input["locality"]}</span>
                    <br><br>
                    <b>A taxa de contágio, conhecida como número de reprodução efetivo (Rt), traduz a dinâmica de disseminação da Covid-19 a cada dia.</b>
                    <br>O valor pode ser lido como o número médio de novas infecções diárias causadas por uma única pessoa infectada.
                    Para mais informações, visite a página de Modelos no menu lateral.
            </div>
            """,
            unsafe_allow_html=True,
        )

        try:
            fig2 = plots.plot_rt_wrapper(user_input[user_input["place_type"]],
                                         user_input["place_type"], config)
            st.plotly_chart(fig2, use_container_width=True)
        except:
            st.write(
                """<div class="base-wrapper"><b>Seu município, regional ou estado não possui mais de 30 dias de dados de casos confirmados.</b>""",
                unsafe_allow_html=True,
            )
        st.write(
            "<div class='base-wrapper'><i>Em breve:</i> gráficos de subnotificação e média móvel (últimos 7 dias) de novos casos por 100k habitantes.</div>",
            unsafe_allow_html=True,
        )

    utils.stylizeButton(
        name="Confira a evolução de indicadores-chave",
        style_string=
        """border: 1px solid var(--main-white);box-sizing: border-box;border-radius: 15px; width: auto;padding: 0.5em;text-transform: uppercase;font-family: var(--main-header-font-family);color: var(--main-white);background-color: var(--main-primary);font-weight: bold;text-align: center;text-decoration: none;font-size: 18px;animation-name: fadein;animation-duration: 3s;margin-top: 1em;""",
        session_state=session_state,
    )

    # AMBASSADOR SECTION
    utils.gen_ambassador_section()

    # PDF-REPORT GEN BUTTON
    # if st.button("Gerar Relatório PDF"):
    #     user_analytics.log_event("generated pdf")
    #     st.write(
    #         """<div class="base-wrapper">Aguarde um momento por favor...</div>""",
    #         unsafe_allow_html=True,
    #     )
    #     st.markdown(
    #         pdfgen.gen_pdf_report(user_input, indicators, data, config),
    #         unsafe_allow_html=True,
    #     )

    # TOOLS
    products = ProductCards

    utils.genProductsSection(products)

    # SELECTION BUTTONS
    # TODO: limpar esse código! está 100% repetido!!!
    if session_state.continuation_selection is None:
        session_state.continuation_selection = [False, False, False, False]

    simula_button_name = "Clique Aqui"  # Simula covid 0space
    saude_button_name = "Clique Aqui "  # Saude em ordem 1space
    distancia_button_name = "Clique_Aqui"  # Distanciamento social
    onda_button_name = "Clique_Aqui "  # onda covid
    if st.button(simula_button_name):  # SIMULA
        session_state.continuation_selection = [True, False, False, False]
    if st.button(distancia_button_name):  # DISTANCIAMENTO
        session_state.continuation_selection = [False, True, False, False]
    if st.button(saude_button_name):  # SAUDE
        session_state.continuation_selection = [False, False, True, False]
    if st.button(onda_button_name):  # ONDA
        session_state.continuation_selection = [False, False, False, True]

    utils.stylizeButton(
        name=simula_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 1},
    )

    utils.stylizeButton(
        name=distancia_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 2},
    )
    utils.stylizeButton(
        name=saude_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 3},
    )
    utils.stylizeButton(
        name=onda_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 4},
    )
    if session_state.continuation_selection[0]:
        user_analytics.safe_log_event(
            "picked simulacovid",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        # Downloading the saved data from memory
        sm.main(user_input, indicators, data, config, session_state)
        # TODO: remove comment on this later!
        # utils.gen_pdf_report()

    elif session_state.continuation_selection[1]:
        user_analytics.safe_log_event(
            "picked distanciamento",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        ds.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[2]:
        user_analytics.safe_log_event(
            "picked saude_em_ordem",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        so.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[3]:
        user_analytics.safe_log_event(
            "picked onda",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        oc.main(user_input, indicators, data, config, session_state)

    # CHAMA FUNCAO QUE GERA TABELA ID big_table
    # CALL FUNCTION TO GENERATE ID big_table
    gen_big_table(config, dfs, user_input["state_name"])
    # CHAMA FUNCOES DO UTILS PARA O FOOTER
    # CALL FUNCTIONS IN UTILS TO FOOTER
    utils.gen_whatsapp_button(config["impulso"]["contact"])
    utils.gen_footer()
    user_analytics.conclude_user_session(session_state)
示例#5
0
def main(user_input, indicators, data, config, session_state):

    utils.genHeroSection(
        title1="Onda",
        title2="Covid",
        subtitle=
        "Veja e compare a evolução da curva de contágio da Covid-19 em seu estado ou município.",
        logo="https://i.imgur.com/Oy7IiGB.png",
        header=False)

    try:
        # load data
        # print("loading br cases")
        br_cases = loading_cached()
        # print("finished laoding br cases")
        my_dict = utils.Dictionary()
        # ONDA POR ESTADO
        da.prepare_heatmap(br_cases, place_type="state_id")
        st.write("")
        pass
    except Exception as e:
        st.write(str(e))

    # ONDA POR MUNICIPIO
    st.write(
        """
        <div class="base-wrapper">
            <span class="section-header primary-span">ONDA MORTES DIÁRIAS POR MUNICÍPIO</span>
            <br><br>
            <span class="ambassador-question"><b>Selecione seu estado e município para prosseguir</b></span>
        </div>""",
        unsafe_allow_html=True,
    )
    dfs, places_ids = get_data(loader.config)
    state_name = st.selectbox("Estado ", utils.filter_place(dfs, "state"))
    city_name = st.selectbox(
        "Município ",
        utils.filter_place(dfs,
                           "city",
                           state_name=state_name,
                           health_region_name="Todos"),
    )

    deaths_or_cases = (st.selectbox(
        "Qual análise você quer ver: Número de mortes ou Taxa de letalidade (mortes por casos)?",
        ["Mortes", "Letalidade"]) == "Mortes por casos")
    # print("checking")
    if city_name != "Todos":  # the user selected something
        # print("passed")
        br_cases = br_cases[br_cases["state_name"] ==
                            state_name]  # .reset_index()
        # gen_banners()
        uf = my_dict.get_state_alphabetical_id_by_name(state_name)
        da.prepare_heatmap(
            br_cases,
            place_type="city_name",
            group=uf,
            your_city=city_name,
            deaths_per_cases=deaths_or_cases,
        )
        # print("finished preparation")

    # ONDA POR PAÍS
    st.write("")
    da.prepare_heatmap(
        loader.read_data(
            "br",
            loader.config,
            endpoint=config["br"]["api"]["endpoints"]["analysis"]["owid"],
        ),
        place_type="country_pt",
    )
示例#6
0
def main(session_state):
    #  ==== GOOGLE ANALYTICS SETUP ====
    GOOGLE_ANALYTICS_CODE = os.getenv("GOOGLE_ANALYTICS_CODE")
    if GOOGLE_ANALYTICS_CODE:
        import pathlib
        from bs4 import BeautifulSoup

        GA_JS = ("""
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', '%s');
        """ % GOOGLE_ANALYTICS_CODE)
        index_path = pathlib.Path(st.__file__).parent / "static" / "index.html"
        soup = BeautifulSoup(index_path.read_text(), features="lxml")
        if not soup.find(id="google-analytics-loader"):
            script_tag_import = soup.new_tag(
                "script",
                src="https://www.googletagmanager.com/gtag/js?id=%s" %
                GOOGLE_ANALYTICS_CODE,
            )
            soup.head.append(script_tag_import)
            script_tag_loader = soup.new_tag("script",
                                             id="google-analytics-loader")
            script_tag_loader.string = GA_JS
            soup.head.append(script_tag_loader)
            index_path.write_text(str(soup))
    # ====

    # Amplitude: Get user info
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened farol",
                                                     session_state,
                                                     is_new_page=True)

    utils.localCSS("style.css")

    utils.genHeroSection(
        title1="Farol",
        title2="Covid",
        subtitle="Entenda e controle a Covid-19 em sua cidade e estado.",
        logo="https://i.imgur.com/CkYDPR7.png",
        header=True)

    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)

    #TEMPORARY BANNER FC
    st.write(
        """
        <div>
            <div class="base-wrapper flex flex-column" style="background-color:#0090A7">
                <div class="white-span header p1" style="font-size:30px;">O FAROLCOVID ESTÁ DE CARA NOVA!</div>
                <span class="white-span">Aprimoramos a plataforma e adicionamos novas ferramentas para acompanhamento da crise da Covid-19 no Brasil. <b>Que tal explorar com a gente?</b></span>
                <br><div style="margin-top: 15px;"></div>
            <div>
                <a href="#novidades" class="info-btn">Entenda como navegar</a>
            </div>
            <div id="novidades" class="nov-modal-window">
                <div>
                    <a href="#" title="Close" class="info-btn-close" style="color: white;">&times</a>
                    <div style="margin: 10px 15px 15px 15px;">
                        <h1 class="primary-span">Saiba como cada ferramenta apoia a resposta ao coronavírus</h1>
                        <p class="darkblue-span uppercase"> <b>Farol Covid</b> </p>
                        <img class="img-modal" src=%s alt="Ícone Farol Covid">
                        <div>	
                            <p> Acompanhe as 4 dimensões:</p>
                            - Situação da Doença (número de novos casos por habitante);</br>
                            - Controle da Doença (ritmo de contágio)</br>
                            - Capacidade do sistema (número de leitos e capacidade UTI)</br>
                            - Confiança de dados (taxa de subnotificação)</br>
                            <p> E descubra o nível de alerta do estado, regional de saúde ou município.</p>
                        </div>
                        <div>
                        <p class="darkblue-span uppercase"> <b>SimulaCovid</b> </p>
                        <img class="img-modal" src=%s alt="Ícone SimulaCovid">	
                        <p style="height:100px;">Simule o que pode acontecer com o sistema de saúde local se o ritmo de contágio aumentar 
                            ou diminuir e planeje suas ações para evitar a sobrecarga hospitalar.</p>
                        </div>
                        <div>
                        <p class="darkblue-span uppercase"> <b>Distanciamento Social</b> </p>
                        <img class="img-modal" src=%s alt="Ícone Distanciamento Social">
                            <p style="height:100px;">Acompanhe a atualização diária do índice e descubra como está a circulação de pessoas 
                                e o distanciamento social no seu estado ou município.    
                            </p>
                        </div>
                        <div>
                        <p class="darkblue-span uppercase"> <b>Saúde em Ordem</b> </p>
                        <img class="img-modal" src=%s alt="Ícone Saúde em Ordem">
                        <p> Entenda quais atividades deveriam reabrir primeiro na sua região, considerando: </p>
                            - Segurança Sanitária: quais setores trazem menor risco de exposição à Covid-19 para os trabalhadores.</br>
                            - Contribuição Econômica: quais setores movimentam mais a economia daquele estado ou regional de saúde.</br>
                        <p> </p>
                        </div>
                        <div>
                        <p class="darkblue-span uppercase"> <b>Onda Covid</b> </p>
                        <img class="img-modal" src=%s alt="Ícone Onda Covid">
                        <p>Com base no número de óbitos de Covid-19 registrados, acompanhe se seu município já saiu do pico da doença. </p>
                        </div>
                    </div>
                </div>
            </div>
        </div>""" % (config["br"]["icons"]["farolcovid_logo"],
                     config["br"]["icons"]["simulacovid_logo"],
                     config["br"]["icons"]["distanciamentosocial_logo"],
                     config["br"]["icons"]["saudeemordem_logo"],
                     config["br"]["icons"]["ondacovid_logo"]),
        unsafe_allow_html=True,
    )

    st.write(
        """
    <div class="base-wrapper primary-span">
        <span class="section-header">Selecione seu estado ou município no mapa abaixo:</span>
    </div>""",
        unsafe_allow_html=True,
    )

    # GET DATA
    dfs = get_data(config)

    # REGION/CITY USER INPUT
    user_input = dict()
    user_input["state_name"] = st.selectbox("Estado",
                                            utils.filter_place(dfs, "state"))

    user_input["health_region_name"] = st.selectbox(
        "Região de Saúde",
        utils.filter_place(dfs,
                           "health_region",
                           state_name=user_input["state_name"]),
    )

    user_input["city_name"] = st.selectbox(
        "Município",
        utils.filter_place(
            dfs,
            "city",
            state_name=user_input["state_name"],
            health_region_name=user_input["health_region_name"],
        ),
    )

    changed_city = user_analytics.safe_log_event(
        "picked farol place",
        session_state,
        event_args={
            "state": user_input["state_name"],
            "city": user_input["city_name"]
        },
    )

    user_input, data = update_user_input_places(user_input, dfs, config)

    # GENERATE MAPS
    map_place_id = utils.Dictionary().get_state_alphabetical_id_by_name(
        user_input["state_name"])

    if os.getenv("IS_LOCAL") == "TRUE":
        map_url = config["br"]["api"]["mapserver_local"]
    else:
        map_url = config["br"]["api"]["mapserver_external"]

    st.write(
        f"""
    <div class="brazil-map-div">
        <div class="alert-levels-map-overlay">
        </div>
        <div>
        <iframe id="map" src="resources/iframe-gen.html?url={map_url}map-iframe?place_id=BR" class="map-br" scrolling="no">
        </iframe>
        </div>
    </div>
    """,
        unsafe_allow_html=True,
    )
    st.write(
        f"""
    <iframe id="map-state" src="resources/iframe-gen.html?url={map_url}map-iframe?place_id={map_place_id}" class="map-state" scrolling="no">
    </iframe>
    """,
        unsafe_allow_html=True,
    )
    st.write(
        f"""
        <div class="selectors-box" id="selectors-box">
        </div>
        <iframe src="resources/select-box-mover.html?place_id={user_input["state_name"]}{user_input["health_region_name"]}{user_input["city_name"]}" height="0px">
        </iframe>""",
        unsafe_allow_html=True,
    )

    # SOURCES PARAMS
    user_input = utils.get_sources(user_input, data, dfs["city"],
                                   ["beds", "icu_beds"])

    # POPULATION PARAMS
    try:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": int(data["active_cases"].fillna(0).values[0]),
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }
    except:
        user_input["population_params"] = {
            "N": int(data["population"].fillna(0).values[0]),
            "D": int(data["deaths"].fillna(0).values[0]),
            "I": 0,
            "I_confirmed": int(data["confirmed_cases"].fillna(0).values[0]),
            "I_compare": int(data["confirmed_cases"].fillna(0).values[0]),
        }

    user_input["Rt"] = {
        "best": data["rt_low_95"].values[0],
        "worst": data["rt_high_95"].values[0],
        "is_valid": data["rt_most_likely"].apply(str).values[0],
    }

    user_input["last_updated_cases"] = data[
        "last_updated_subnotification"].max()
    # Update session values to standard ones if changed city or opened page or reseted values
    if (session_state.state_name != user_input["state_name"]
            or session_state.health_region_name !=
            user_input["health_region_name"]
            or session_state.city_name != user_input["city_name"]
            or session_state.number_beds is None or session_state.reset):
        session_state.state_name = user_input["state_name"]
        session_state.health_region_name = user_input["health_region_name"]
        session_state.city_name = user_input["city_name"]

        session_state.state_num_id = user_input["state_num_id"]
        session_state.health_region_id = user_input["health_region_id"]
        session_state.city_id = user_input["city_id"]

        session_state.number_beds = int(
            user_input["number_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_icu_beds = int(
            user_input["number_icu_beds"] *
            config["br"]["simulacovid"]["resources_available_proportion"])
        session_state.number_cases = user_input["population_params"][
            "I_confirmed"]
        session_state.number_deaths = user_input["population_params"]["D"]
        session_state.reset = True

    if data["confirmed_cases"].sum() == 0:
        st.write(
            f"""<div class="base-wrapper">
                    Seu município ou Região de Saúde ainda não possui casos reportados oficialmente. Portanto, simulamos como se o primeiro caso ocorresse hoje.
                    <br><br>Caso queria, você pode mudar esse número abaixo:
                </div>""",
            unsafe_allow_html=True,
        )

        user_input["population_params"]["I"] = 1

    else:
        infectious_period = (
            config["br"]["seir_parameters"]["severe_duration"] +
            config["br"]["seir_parameters"]["critical_duration"])
        placeholder_value_pls_solve_this = 0

    # DIMENSIONS CARDS
    dimensions = DimensionCards
    utils.genAnalysisDimmensionsSection(dimensions)

    # INDICATORS CARDS
    indicators = IndicatorCards

    indicators = update_indicators(indicators, data, config, user_input,
                                   session_state)

    data["overall_alert"] = data["overall_alert"].map(
        config["br"]["farolcovid"]["categories"])
    if "state" in user_input["place_type"]:
        # Add disclaimer to cities in state alert levels
        total_alert_regions = dfs["health_region"][
            dfs["health_region"]["state_num_id"] == data["state_num_id"].
            unique()[0]].assign(overall_alert=lambda df: df[
                "overall_alert"].map(config["br"]["farolcovid"]["categories"])
                                )["overall_alert"].value_counts()

        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
            n_colapse_regions=total_alert_regions[
                total_alert_regions.index.isin(["altíssimo", "alto"])].sum(),
        )

    else:
        utils.genKPISection(
            place_type=user_input["place_type"],
            locality=user_input["locality"],
            alert=data["overall_alert"].values[0],
            indicators=indicators,
        )

    # AVAILABLE CAPACITY DISCLAIMER
    st.write(
        """
        <div class='base-wrapper'>
            <i>* Utilizamos %s&percnt; da capacidade hospitalar reportada por %s em %s 
            para cálculo da projeção de dias para atingir capacidade máxima.<br><b>Para municípios, utilizamos os recursos da respectiva regional de saúde.</b>
            São considerados leitos os tipos: cirúrgicos, clínicos e hospital-dia. A capacidade de UTI é dada pelo total de leitos UTI Covid adulto.</i>
        </div>
        """ % (
            str(
                int(config["br"]["simulacovid"]
                    ["resources_available_proportion"] * 100)),
            user_input["author_number_beds"],
            user_input["last_updated_number_beds"],
        ),
        unsafe_allow_html=True,
    )

    # TODO: remove comment on this later!
    # utils.gen_pdf_report()

    # INDICATORS PLOTS
    if st.button("Confira a evolução de indicadores-chave"):
        opening_response = user_analytics.log_event("picked key_indicators",
                                                    dict())
        if st.button("Esconder"):
            pass
        st.write(
            f"""
            <div class="base-wrapper">
                    <span class="section-header primary-span">CÁLCULO DO RITMO DE CONTÁGIO EM {user_input["locality"]}</span>
                    <br><br>
                    O ritmo de contágio, conhecido como número de reprodução efetivo (Rt), traduz a dinâmica de disseminação do Covid a cada dia.
                    <br>O valor pode ser lido como o número médio de novas infecções diárias causadas por uma única pessoa infectada.
                    Para mais informações, visite a página de Metodologia.
            </div>
            """,
            unsafe_allow_html=True,
        )

        try:
            fig2 = plots.plot_rt_wrapper(user_input[user_input["place_type"]],
                                         user_input["place_type"])
            st.plotly_chart(fig2, use_container_width=True)
        except:
            st.write(
                """<div class="base-wrapper"><b>Seu município, regional ou estado não possui mais de 30 dias de dados de casos confirmados.</b>""",
                unsafe_allow_html=True,
            )
        st.write(
            "<div class='base-wrapper'><i>Em breve:</i> gráficos de subnotificação e média móvel de novos casos por 100k habitantes.</div>",
            unsafe_allow_html=True,
        )

    utils.stylizeButton(
        name="Confira a evolução de indicadores-chave",
        style_string=
        """border: 1px solid var(--main-white);box-sizing: border-box;border-radius: 15px; width: auto;padding: 0.5em;text-transform: uppercase;font-family: var(--main-header-font-family);color: var(--main-white);background-color: var(--main-primary);font-weight: bold;text-align: center;text-decoration: none;font-size: 18px;animation-name: fadein;animation-duration: 3s;margin-top: 1em;""",
        session_state=session_state,
    )

    # AMBASSADOR SECTION
    utils.gen_ambassador_section()

    # indicators["hospital_capacity"].left_display = user_input["number_beds"]
    # indicators["hospital_capacity"].right_display = user_input["number_icu_beds"]
    # indicators["subnotification_rate"].left_display = user_input["population_params"][
    # "D"
    # ]

    # PDF-REPORT GEN BUTTON
    # if st.button("Gerar Relatório PDF"):
    #     user_analytics.log_event("generated pdf")
    #     st.write(
    #         """<div class="base-wrapper">Aguarde um momento por favor...</div>""",
    #         unsafe_allow_html=True,
    #     )
    #     st.markdown(
    #         pdfgen.gen_pdf_report(user_input, indicators, data, config),
    #         unsafe_allow_html=True,
    #     )

    # TOOLS
    products = ProductCards
    # products[2].recommendation = f'Risco {data["overall_alert"].values[0]}'

    utils.genProductsSection(products)

    # SELECTION BUTTONS
    # TODO: limpar esse código! está 100% repetido!!!
    if session_state.continuation_selection is None:
        session_state.continuation_selection = [False, False, False, False]

    simula_button_name = "Clique Aqui"  # Simula covid 0space
    saude_button_name = "Clique Aqui "  # Saude em ordem 1space
    distancia_button_name = "Clique_Aqui"  # Distanciamento social
    onda_button_name = "Clique_Aqui "  # onda covid
    if st.button(simula_button_name):  # SIMULA
        session_state.continuation_selection = [True, False, False, False]
    if st.button(distancia_button_name):  # DISTANCIAMENTO
        session_state.continuation_selection = [False, True, False, False]
    if st.button(saude_button_name):  # SAUDE
        session_state.continuation_selection = [False, False, True, False]
    if st.button(onda_button_name):  # ONDA
        session_state.continuation_selection = [False, False, False, True]

    utils.stylizeButton(
        name=simula_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 1},
    )

    utils.stylizeButton(
        name=distancia_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 2},
    )
    utils.stylizeButton(
        name=saude_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 3},
    )
    utils.stylizeButton(
        name=onda_button_name,
        style_string="""border: 1px solid black;""",
        session_state=session_state,
        others={"ui_binSelect": 4},
    )
    if session_state.continuation_selection[0]:
        user_analytics.safe_log_event(
            "picked simulacovid",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        # Downloading the saved data from memory
        user_input["number_beds"] = session_state.number_beds
        user_input["number_icu_beds"] = session_state.number_icu_beds
        user_input["number_deaths"] = session_state.number_deaths
        user_input["number_cases"] = session_state.number_cases
        sm.main(user_input, indicators, data, config, session_state)
        # TODO: remove comment on this later!
        # utils.gen_pdf_report()

    elif session_state.continuation_selection[1]:
        user_analytics.safe_log_event(
            "picked distanciamento",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        ds.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[2]:
        user_analytics.safe_log_event(
            "picked saude_em_ordem",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        so.main(user_input, indicators, data, config, session_state)

    elif session_state.continuation_selection[3]:
        user_analytics.safe_log_event(
            "picked onda",
            session_state,
            event_args={
                "state": session_state.state_name,
                "health_region": session_state.health_region_name,
                "city": session_state.city_name,
            },
            alternatives=[
                "picked saude_em_ordem",
                "picked simulacovid",
                "picked onda",
                "picked distanciamento",
            ],
        )
        oc.main(user_input, indicators, data, config, session_state)

    # BIG TABLE
    gen_big_table(config, dfs)
    # FOOTER
    utils.gen_whatsapp_button(config["impulso"]["contact"])
    utils.gen_footer()
    user_analytics.conclude_user_session(session_state)
def genSelectBox(df, session_state):
    """ 
    This function generates select boxes for choosing the school network

    Parameters: 
        df (type): 2019 school census dataframe
        session_state (type): section dataset
        user_analytics (type): user data by amplitude
    """

    st.write(
        f"""
        <div class="main-padding" id="top">
            <div class="subtitle-section"> Selecione sua rede </div>
        </div>
        """,
        unsafe_allow_html=True,
    )
    col1, col2, col3, col4 = st.beta_columns([0.3, 0.5, 0.5, 1])

    with col1:
        session_state.state_id = st.selectbox("Estado",
                                              utils.filter_place(df, "state"))
        session_state.state_name = utils.set_state_name(
            df, session_state.state_id)
    with col2:
        options_city_name = utils.filter_place(df,
                                               "city",
                                               state_id=session_state.state_id)
        options_city_name = pd.DataFrame(data=options_city_name,
                                         columns=["city_name"])
        x = int(options_city_name[options_city_name["city_name"] ==
                                  "Todos"].index.tolist()[0])
        session_state.city_name = st.selectbox("Município",
                                               options_city_name,
                                               index=x)
        import pathlib
        from bs4 import BeautifulSoup
        GA_JS = ("""
        window.dataLayer = window.dataLayer || [];
        function municipio(){dataLayer.push('municipio_value': '%s');}
        """ % session_state.city_name)
        index_path = pathlib.Path(st.__file__).parent / "static" / "index.html"
        soup = BeautifulSoup(index_path.read_text())
        script_tag_loader = soup.new_tag("script")
        script_tag_loader.string = GA_JS
    with col3:
        options_adiminlevel = utils.filter_place(
            df,
            "administrative_level",
            state_id=session_state.state_id,
            city_name=session_state.city_name,
        )
        options_adiminlevel = pd.DataFrame(data=options_adiminlevel,
                                           columns=["adiminlevel"])
        y = int(options_adiminlevel[options_adiminlevel["adiminlevel"] ==
                                    "Todos"].index.tolist()[0])
        session_state.administrative_level = st.selectbox(
            "Nível de Administração", options_adiminlevel, index=y)
    with col4:
        st.write(
            f"""
        <div class="container main-padding">
            <br><br>
        </div>
        """,
            unsafe_allow_html=True,
        )