Exemplo n.º 1
0
def main():
    """ 
    This is a function that returns the "about" page
      
    Parameters: 
        session_state (type): section dataset
    """
    he.genHeader("termo")
    st.write(
        f"""
        <div class="conteudo main-title" style="padding-top: 50px;"> 
            <b>Termos de Uso</b>
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            1. Estou ciente que as sugestões e recomendações apresentadas na plataforma Escola Segura são meramente indicativas, feitas a partir de dados oficiais públicos e estudos referenciados já publicados. 
    <br><br>2. Estou   ciente   de   que   a   utilização   dos   referenciais   da   plataforma   não corresponde a uma certificação de melhores práticas para a reabertura de escolas. 
    <br><br>3. Estou   ciente   que   a   plataforma   Escola   Segura  não configura qualquer obrigação ou responsabilidade perante as decisões efetivadas pelos gestores públicos.
    <br><br>4. Estou  ciente  que é  responsabilidade exclusiva da rede pública e degestores públicos a tomada de qualquer decisão a respeito da reaberturade   escolas,   inclusive   quanto   à   pertinência   dos   cenários   produzidos   pela plataforma Escola Segura com a realidade local.
    <br><br>5. Estou  ciente  é que  responsabilidade exclusiva da rede pública e degestores públicos   a   avaliação   e   a   eventual   adoção   de   medidas   deprevenção   necessárias   para   garantir   a   adequação   sanitária   dosestabelecimentos   públicos   de   ensino   para   os   diferentes   cenários   dereabertura de escolas. 
    <br><br>6. Estou   ciente   da   metodologia   utilizada   pela   plataforma   Escola   Segura, disponibilizada e atualizada <a href="{urlpath}?page=sobre">aqui</a>.
        </div>
        """,
        unsafe_allow_html=True,
    )
    utils.localCSS("localCSS.css")
    # utils.gen_title(title="Quem somos?")

    tm.genGuia()
    foo.genFooter()
Exemplo n.º 2
0
def main(session_state):
    utils.localCSS("vacinastyle.css")
    he.genHeader("4")
    st.write(
        f"""
        <div class="base-wrapper" style="background-color:#0090A7;">
            <div class="hero-wrapper">
                <div class="hero-container" style="width:45%;">
                    <div class="hero-container-content">
                        <span class="subpages-container-product white-span">Vacinômetro</span>
                        <span class="subpages-subcontainer-product white-span">Veja a evolução da vacinação em sua cidade ou estado! </span>
                        <span class="subpages-container-subtitle white-span">Acompanhe e compare as informações mais atualizadas sobre a vacinação nos municípios do Brasil.</span>
                    </div>
                </div>
                <div class="subpages-container-image">   
                    <img style="width: 100%;" src="https://i.imgur.com/w5yVANW.png"/>
                </div>
            </div><br>
        </div>
        <div>
            <br><br>
        </div>
        <div class="base-wrapper">
            <embed src="https://helper.coronacidades.org/vacinatable" width="100%" height="550">
         </div>
        """,
        unsafe_allow_html=True,
    )
Exemplo n.º 3
0
def main():
    ana = 'https://media-exp1.licdn.com/dms/image/C4E03AQGdLO2wZpvasA/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=BsnUsaEI-eLrn_oxLf7cEyXKGx2_7OBJZ9suUrRev_8'
    carabetta = 'https://media-exp1.licdn.com/dms/image/C4D03AQF8rJe40DpQqA/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=6smhmNk7Ppktq5cX4vxhD4x-A6mMTdZnIAEu5DlV18g'
    fernanda = 'https://media-exp1.licdn.com/dms/image/C4D03AQFveYuReCqBVg/profile-displayphoto-shrink_200_200/0?e=1593043200&v=beta&t=14iMvOQdBESRi2OmsqmAdDBWVh0xdb_77Tw_dUycAto'
    saru = 'https://media-exp1.licdn.com/dms/image/C5603AQHB6rggvacwQw/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=jj_atUnkJJm8SDKB1GQBF5n8bM-8dUKsTJE1Nsph3qE'
    diego = 'https://media-exp1.licdn.com/dms/image/C4D03AQGc03RUyqn7rQ/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=VQeYTDAIkwXnCBISvvBne6GO-hOnHUu70s35OwcH4RE'
    luiz = 'https://media-exp1.licdn.com/dms/image/C4E03AQHSVHQ8br4SoQ/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=rzj5_o4-AXYpcLG2EN6xOaB_c8-Ki-HQSIBUArD_ZxM'

    utils.localCSS("style.css")

    logo = Logo.IMPULSO.value

    st.write('''
    <div class="base-wrapper">
        <img class="team-logo" src="%s" />
            <h1 class="primary-span">Quem Somos</h1>
            <div class="profiles-container">
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">Ana Paula Pellegrino, Doutoranda em Ciência Política da Georgetown University</span>
            </div>
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">Diego Oliveira, Mestre em Física Aplicada pela Unicamp</span>
            </div>
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">Fernanda Scovino, Graduada em Matemática Aplicada pela FGV</span>
            </div>
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">Gabriel Saruhashi, Graduando em Ciência da Computação e Psicologia na Yale University</span>
            </div>
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">João Carabetta, Mestre em Matemática Aplicada pela FGV</span>
            </div>
            <div class="profile">
                <img class="profile-photo" src="%s"/>
                <span class="profile-name">Luiz Felipe Costa, Graduado em Sistemas de Informação pela UNIFEI</span>
            </div>
        </div>
        <div class="collaborator-container">
            <h1 class="primary-span">Com colaboração de:</h1>
            <span>Fátima Marinho, Doutora em Epidemiologia e Medicina Preventiva pela USP e professora da Faculdade de Medicina da Universidade de Minas Gerais</span>
            <span>Sarah Barros Leal, Médica e Mestranda em Saúde Global na University College London</span>
            <span>H. F. Barbosa, Mestre em Relações Internacionais pela Universidade da Califórnia, San Diego</span>
            <span>Teresa Soter, mestranda em Sociologia na Oxford University</span>
        </div>
    </div>
''' % (logo, ana, diego, fernanda, saru, carabetta, luiz),
             unsafe_allow_html=True)
Exemplo n.º 4
0
def main(session_state=None):
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened analysis",
                                                     session_state,
                                                     is_new_page=True)
    utils.localCSS("style.css")
    utils.localCSS("icons.css")

    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)
    br_cases = loader.read_data(
        "br",
        config,
        endpoint=config["br"]["api"]["endpoints"]["analysis"]["cases"])

    st.write(
        """
        <div class="base-wrapper">
                <span class="section-header primary-span">MORTES DIÁRIAS POR MUNICÍPIO</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    user_uf = st.selectbox("Selecione um estado para análise:",
                           utils.get_ufs_list())

    prepare_heatmap(
        br_cases,
        place_type="city_name",
        group=user_uf,
    )

    prepare_heatmap(
        br_cases,
        place_type="state_id",
    )

    prepare_heatmap(
        loader.read_data(
            "br",
            config,
            endpoint=config["br"]["api"]["endpoints"]["analysis"]["owid"]),
        place_type="country_pt",
    )
Exemplo n.º 5
0
def main():

    utils.localCSS("style.css")
    utils.localCSS("icons.css")

    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)
    br_cases = loader.read_data(
        "br",
        config,
        endpoint=config["br"]["api"]["endpoints"]["analysis"]["cases"])

    st.write(
        """
        <div class="base-wrapper">
                <span class="section-header primary-span">MORTES DIÁRIAS POR MUNICÍPIO</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    user_uf = st.selectbox("Selecione um estado para análise:",
                           utils.get_ufs_list())

    prepare_heatmap(
        br_cases,
        place_type="city",
        group=user_uf,
    )

    prepare_heatmap(
        br_cases,
        place_type="state",
    )

    prepare_heatmap(
        loader.read_data(
            "br",
            config,
            endpoint=config["br"]["api"]["endpoints"]["analysis"]["owid"]),
        place_type="country_pt",
    )
Exemplo n.º 6
0
def main():
    """ 
    This is a function that returns the "about" page
      
    Parameters: 
        session_state (type): section dataset
    """
    he.genHeader("duvidasfrequentes")
    subtitle = """A Escola Segura, ferramenta online focada em orientar uma reabertura planejada da rede de ensino pública diante da Covid-19, promoveu encontros online com Wanderson Oliveira, epidemiologista e ex-Secretário Nacional de Vigilância em Saúde, para solucionar dúvidas de gestoras e gestores públicos sobre o assunto. 
Quatro encontros foram realizados, sempre às terças-feiras (24/11, 01/12, 08/12 e 15/12), e trataram sobre o uso de EPI nas escolas, a importância da definição conjunta de fluxos e sistemas de notificação entre secretarias de saúde e de educação, bem como ressaltaram as boas práticas pelo país.
<br><br>
Atua na gestão pública e precisa de apoio para pensar os desafios da saúde municipal e da reabertura de escolas? <a href="https://coronacidades.org/fale-conosco/" target="_self" style="text-decoration: none;">Fale conosco.</a>"""
    utils.main_title(title="<b>Dúvidas Frequentes</b>", subtitle=subtitle)
    utils.localCSS("localCSS.css")
    # utils.gen_title(title="Quem somos?")
    pergunta1 = """Wanderson Oliveira considera que o acesso a testes é um fator que pode ser diferenciador para aquelas escolas localizadas em cidades maiores em comparação com as instaladas em localidades menores. Mas mesmo sem a possibilidade de confirmar a covid-19 por teste, a escola tem total possibilidade de fazer a vigilância da doença, usando como critério a identificação de sintomas. “A realidade logística é diferente, mas se eu identifico sinais da síndrome respiratória e já afasto o caso suspeito, o teste é um acessório, o mais importante é identificar o suspeito e agir”, explica."""
    pergunta2 = """O epidemiologista elencou algumas boas práticas adotadas por redes de ensino no país para controlar a Covid-19 entre estudantes. Uma delas é fornecer grupos de máscaras divididas por cor para orientar a troca ao longo do período escolar. “O aluno utiliza três máscaras em um período, no primeiro horário são as máscaras azuis, no segundo as máscaras brancas e no terceiro, máscaras amarelas. Com essa divisão, a equipe escolar consegue identificar se os estudantes estão fazendo a renovação das máscaras corretamente”, exemplificou. Outra boa prática é a adoção, sempre que possível, de atividades ao ar livre, em que a chance de transmissão do coronavírus é muito menor. """
    pergunta3 = """No modelo de reabertura fundamentado em bolhas, os estudantes só interagem com um grupo fixo de pessoas na escola. Caso haja alguma contaminação, é possível, em um primeiro momento, isolar apenas aquela bolha, que esteve em contato com o suspeito. Wanderson Oliveira explica que esse modelo precisa ser adaptado à realidade de cada escola. “Não posso fazer uma reabertura escolar pensando na escola que existia antes da pandemia. É uma outra escola, que gira em torno de 40% a 60% da capacidade anterior instalada”, explica. “Eu posso dividir grupos de estudantes em uma mesma sala, bem ventilada, e organizar de tal maneira que crie camadas de proteção. Se todos os estudantes, professores, funcionários estiverem usando máscara, higienização das mãos e respeitando a distância de 1,5m**, o risco de contaminação é baixo”, reforça.
    <br><br>**A recomendação dada aqui pelo especialista está de acordo com um intervalo maior de segurança. Para referências do Ministério da Educação do Brasil, <a href="https://www.gov.br/mec/pt-br/assuntos/GuiaderetornodasAtividadesPresenciaisnaEducaoBsica.pdf">veja aqui.</a>"""
    pergunta4 = """Segundo Wanderson Oliveira, esses critérios vão variar de acordo com a realidade da escola e o modelo pedagógico adotado nessa retomada. “Se a escolha foi pelo sistema de bolhas, em que existem grupos de estudantes e não há contato entre alunos fora dessas bolhas, pode ser o caso de fazer o isolamento só daquele grupo, ou de uma sala de aula, mas não será necessário fechar a escola toda”, esclareceu. Caso o modelo adotado contemple a mesclagem de turmas, será necessário avaliar caso a caso. A adesão ao uso de EPIs, a ventilação dos espaços e a distância entre carteiras devem ser considerados nessa avaliação. 
<br>
Segundo o especialista, fechar a escola diante de uma necessidade de conter a Covid-19 não deve ser considerado um retrocesso, mas o processo sempre em aprimoramento. “Se eu tive um caso e precisei fechar a escola, interrompo as atividades por 14 dias, monitoro a evolução daquele caso, se a testagem deu positivo ou negativo, e depois retomo as atividades presenciais, com as medidas e cuidados necessários”, complementou. """
    pergunta5 = """A orientação de Wanderson Oliveira é para que as escolas promovam a vigilância de síndrome gripal. Segundo o especialista, em um primeiro momento, só com sintomas, não é possível cravar que um quadro é ou não de Covid-19. Diante da suspeita, os protocolos já devem ser acionados e as medidas serão mais ou menos restritivas dependendo da confirmação após a realização de testes. “Na definição de síndrome gripal eu tenho um quadro de sintomas, como tosse, febre e dor no corpo, por exemplo. Todos que apresentarem esse quadro serão considerados suspeitos pela escola”, explicou. “A escola passa a fazer parte de um rede de vigilância em saúde”, reforçou. """
    pergunta6 = """De acordo com o especialista, o diálogo com a comunidade deve ser uma constante no processo de retomada de atividades presenciais em escolas. “Precisamos dialogar com pais, responsáveis, lideranças comunitárias onde a escola está inserida para esclarecer que a pandemia não acabou. As medidas preventivas objetivam evitar ao máximo que casos dentro da escola aconteçam, mas eles podem acontecer”, reforçou. 
<br>
Para esse diálogo, a orientação é para que as escolas criem ambientes para ouvir e sanar dúvidas dos pais sobre os protocolos e medidas adotados. Wanderson Oliveira sugere o uso de ferramentas digitais gratuitas, como as disponíveis no Google, para promover reuniões online com pais e responsáveis e a criação de canais específicos no WhatsApp para essa comunicação. 
<br>
Além das escolas, as secretarias municipais de educação também podem contribuir com uma comunicação constante e esclarecedora com esse público. “Às vezes, a escola não tem dinheiro para manter uma linha de telefone exclusiva para essa comunicação com pais e responsáveis. A prefeitura poderia suprir essa situação, estabelecer um canal para receber demandas de pais e responsáveis, criar boletins informativos para que os pais se mantenham informados sobre o que está acontecendo no ambiente da escola em relação à Covid”, complementou."""
    pergunta7 = """O epidemiologista Wanderson Oliveira reforça a importância do uso de EPIs e adoção de medidas preventivas em uma eventual reabertura de escolas. Segundo o especialista, é fundamental o uso de máscaras para crianças acima de oito anos e todos os profissionais da equipe escolar, a manutenção de espaços ventilados e da distância de 1,5 metros** entre os estudantes, bem como a higienização constante das mãos com água, sabão e álcool em gel.<br>    
O que deve ser evitado é o contato próximo, sem máscara, por mais de 15 minutos, a menos de um metro e meio de distância. Passar no corredor de máscara, por exemplo, não é contato próximo”, explicou.
<br><br>**A recomendação dada aqui pelo especialista está de acordo com um intervalo maior de segurança. Para referências do Ministério da Educação do Brasil, <a href="https://www.gov.br/mec/pt-br/assuntos/GuiaderetornodasAtividadesPresenciaisnaEducaoBsica.pdf">veja aqui.</a>"""
    utils.gen_title(title="Quais diferenças de estratégia podemos pensar para escolas urbanas e rurais?", subtitle=pergunta1)
    utils.gen_title(title="Quais boas estratégias têm sido adotadas no dia a dia de escolas que já reabriram e podem servir de exemplo?", subtitle=pergunta2)
    utils.gen_title(title="Como a dinâmica de bolhas pode ser implementada no ensino público?", subtitle=pergunta3)
    utils.gen_title(title="Que critérios adotar para decidir fechar uma turma ou uma escola inteira?", subtitle=pergunta4)
    utils.gen_title(title="Como identificar casos suspeitos e monitorar a presença da Covid-19 nas escolas?", subtitle=pergunta5)
    utils.gen_title(title="Como conscientizar e manter a comunicação com pais e responsáveis sobre regras e eventuais medidas de restrição?", subtitle=pergunta6)
    utils.gen_title(title="Quais os principais protocolos e equipamentos de proteção individual que devem ser adotados dentro da escola em uma eventual reabertura?", subtitle=pergunta7)

    tm.genSimule()
    foo.genFooter()
Exemplo n.º 7
0
def main(session_state):
    utils.localCSS("style.css")
    he.genHeader("3")
    st.write(
        f"""
        <div class="base-wrapper" style="background-color:#0090A7;">
            <div class="hero-wrapper">
                <div class="hero-container" style="width:45%;">
                    <div class="hero-container-content">
                        <span class="subpages-container-product white-span">Estudo sobre vacinação </br>contra covid-19 e </br>redução de óbitos no Brasil</span>
                        <span class="subpages-container-subtitle 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.</span>
                    </div>
                </div>
                <div class="subpages-container-image">   
                    <img style="width: 100%;" src="https://i.imgur.com/w5yVANW.png"/>
                </div>
            </div><br>
        </div>
        """,
        unsafe_allow_html=True,
    )
    st.write(
        """
        <div>
                <div class="base-wrapper">
                        <div>
                            <span>Utilizando dados inéditos sobre os grupos prioritários para vacinação da Covid-19, obtidos pela Lei de Acesso à Informação, nós da Impulso Gov, projetamos quando podemos controlar a pandemia no Brasil.<br><br></span>
                            <span>A partir da análise das informações disponíveis publicamente sobre produção nacional de vacina e dos acordos do Brasil para importação, e considerando quantas pessoas estão em cada grupo prioritário nos municípios brasileiros, eliminando a dupla-contagem, foi possível apontar três cenários para o avanço da vacinação no país.<br><br></span>
                            <span><b>Os números mostram que, no cenário intermediário, que parece mais provável agora, a vacinação dos grupos prioritários seria possível até o fim de abril.</b> Já no pior cenário, em que o país só consiga alcançar metade da sua capacidade de produção de vacinas, todas as pessoas integrantes de grupos prioritários no Brasil estariam imunizadas até o fim de julho.<br><br></span>
                            <span>O estudo, coordenado por Marco Brancher, especialista em dados e saúde da Impulso Gov, também projeta como a vacinação pode impactar na redução de óbitos no Brasil.<br><br></span>
                        </div>
                        <embed src="https://coronacidades.org/wp-content/uploads/2021/04/2020.03.31-Apresentac%CC%A7a%CC%83o-Dados-Vacinac%CC%A7a%CC%83o.pdf" width="100%" height="550">
                </div>
        </div>
        """,
        unsafe_allow_html=True,
    )
Exemplo n.º 8
0
def main(session_state):
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened who_is",
                                                     session_state,
                                                     is_new_page=True)
    utils.localCSS("style.css")
    he.genHeader("2")

    st.write(
        """
        <div class="base-wrapper">
            <br><br>
            <a href="https://coronacidades.org/"><img class="coronacidades-logo" src="%s" width="300"/></a><br><br>
                <span>
                Coronacidades é uma plataforma feita para gestores públicos, que reúne
                ferramentas e informações chave para superar a COVID-19.<br>Além dos recursos online, 
                nosso time multidisciplinar está a postos para apoiar municípios e estados
                parceiros no planejamento e implementação de ações específicas nas áreas
                de saúde, assistência social, planejamento e economia. Entre em contato
                conosco.<br><br>
                <i>O CoronaCidades é uma iniciativa da Impulso, do Instituto Arapyau e do
                Instituto de Estudos de Políticas de Saúde (IEPS). 
                <b><a target="_blank" style="color:#3E758A;" href="https://coronacidades.org/pessoas/">Conheça quem faz o Coronacidades.org aqui!</a></b></i>
                </span><br><br><br>
            <a href="https://www.impulsogov.com.br/"><img class="impulso-logo" src="%s" width="150"/></a><br><br>
                <span>
                O FarolCovid e SimulaCovid são desenvolvidos pela Impulso, uma
                organização não-governamental sem fins lucrativos cujo principal
                objetivo é criar capacidade analítica em governos. Fortalecemos o
                processo de coleta e análise de dados para auxiliar gestores públicos na
                tomada de decisão diária, visando aprimoramento contínuo de suas
                políticas.
                </span><br><br>
        </div>
        """ % (Logo.CORONACIDADES.value, Logo.IMPULSO.value),
        unsafe_allow_html=True,
    )
Exemplo n.º 9
0
def main(session_state):
    utils.localCSS("vacinastyle.css")
    he.genHeader("4")
    st.write(
        f"""
        <div class="base-wrapper" style="background-color:#0090A7;">
            <div class="hero-wrapper">
                <div class="hero-container" style="width:45%;">
                    <div class="hero-container-content">
                        <span class="subpages-container-product white-span">Vacinômetro</span>
                        <span class="subpages-subcontainer-product white-span">Veja a evolução da vacinação em sua cidade ou estado! </span>
                        <span class="subpages-container-subtitle white-span">Acompanhe e compare as informações mais atualizadas sobre a vacinação nos municípios do Brasil.</span>
                    </div>
                </div>
                <div class="subpages-container-image">   
                    <img style="width: 100%;" src="https://i.imgur.com/w5yVANW.png"/>
                </div>
            </div><br>
        </div>
        <div class="base-wrapper">
            <span>  Aguarde o carregamento da tabela abaixo.</span>
            <br><br>
            <embed src="https://helper.coronacidades.org/vacinatable" width="100%" height="550">
        </div>
        """,
        unsafe_allow_html=True,
    )

    
    # st.write(
    #     """
    #     <div class="base-wrapper">
    #         <embed src="https://codepen.io/gabriellearruda/embed/yLgPjyR?height=432&theme-id=light&default-tab=result" width="100%" height="550">
    #     </div>""",
    #     unsafe_allow_html=True,
    # )
Exemplo n.º 10
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),
        )
Exemplo n.º 11
0
def main(session_state):
    # Analytics
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event(
        "opened saude_em_ordem_description", session_state, is_new_page=True)

    # Layout
    utils.localCSS("style.css")

    utils.genHeroSection(
        title1="Farol",
        title2="Covid",
        subtitle="Entenda a metodologia da ferramenta.",
        logo="https://i.imgur.com/CkYDPR7.png",
        header=True,
    )

    st.write(
        """
        <div class="base-wrapper flex flex-column" style="background-color: rgb(0, 144, 167);">
            <div class="white-span header p1" style="font-size:30px;">MODELOS, LIMITAÇÕES E FONTES</div>
        </div><br><br>
        """,
        unsafe_allow_html=True,
    )

    # NIVEIS DE ALERTA
    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">NÍVEIS DE ALERTA (FAROLCOVID): Como saber se estou no controle da Covid-19?</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    # Intro
    st.write(
        f"""<div class="base-wrapper">Até que uma vacina ou tratamento definitivos sejam encontrados para a Covid-19, será
            necessário <b>controlar a quantidade de pessoas infectadas</b> e a <b>disponibilidade de
            recursos do sistema de saúde</b>, para ter certeza de que todos(as) receberão o
            tratamento necessário, <b>sem que o sistema venha a colapsar.</b> Depois de um primeiro
            momento de mitigação da Covid-19 nos estados e municípios brasileiros, passamos a uma
            nova fase de resposta à pandemia: a de supressão da doença. Nela, é necessário avaliar
            periodicamente qual o cenário e quais as ações mais adequada para a cidade, regional de
            saúde ou estado, de acordo com indicadores sobre a dinâmica de transmissão da doença e
            sua capacidade de resposta.<br><br> É a partir dessa avaliação que políticas de
            resposta à Covid-19 devem ser calibradas: <b>o objetivo é chegar no "novo normal," onde
            a situação está sob controle.</b> Para auxiliar a população e os gestores públicos nessa
            tarefa, desenvolvemos uma classificação em Níveis de Alerta, baseada em 4 eixos,
            correspondentes a perguntas-chave que devem ser respondidas por quem está tomando
            decisões sobre resposta à pandemia. Cada pergunta é respondida através de um indicador
            de referência:<br><br>
            <span class="subsection-header">Situação da Covid-19: Qual a incidência da doença na minha população?</span><br>
            <b>Indicador</b>: Novos casos por 100k habitantes (média movel 7 dias).<br>
            <b>Qual sua tendência?</b> Aumentadno, estabilizando ou diminuindo?<br><br>
            <span class="subsection-header">Controle da Covid-19: Estamos conseguindo frear o surgimento de novos casos?</span><br>
            <b>Indicador</b>: Taxa de contágio (Número efetivo de Reprodução - R_t)<br>
            <b>Qual sua tendência?</b>Aumentado, estabilizando ou diminuindo?<br><br>
            <span class="subsection-header">Capacidade do sistema: Como está a capacidade de resposta do sistema de saúde? </span><br>
            <b>Indicador</b>: Dias até atingir ocupação total de leitos UTI-Covid<br>
            <b>Qual sua tendência?</b> Aumentado, estabilizando ou diminuindo?<br><br>
            <span class="subsection-header">Confiança nos dados: Quão representativo são os casos oficialmente identificados 
            frente ao total de casos esperados?</span><br>
            <b>Indicador</b>: Taxa de subnotificação<br>
            <b>Qual sua tendência?</b> Aumentado, estabilizando ou diminuindo?<br><br>
            É importante notar que a classificação em níveis de alerta é <b>dinâmica</b>, ou seja,
            <b>muda conforme os indicadores das cidades e municípios são atualizados diariamente</b>.
            Portanto, aconselhamos que seja feito um acompanhamento frequente do FarolCovid por parte
            de gestores. Esses números podem, ainda, ser uma importante ferramenta para comunicação com
            os cidadãos, servindo de embasamento e justificativa para a tomada de decisão adequada a
            cada realidade local. O público, em geral, também pode utilizar esses números para engajar o
            poder público em um debate informado sobre quais são as melhores políticas para sua cidade,
            regional ou e estado.<br><br><br>
            <span class="subsection-header"><b>Como os Indicadores-Chave são avaliados?</b></span><br>
            Avaliamos os indicadores-chave em 4 níveis crescentes de risco: <strong style="color:#0090A7">Novo Normal</strong>, 
            <strong style="color:#F7B500">Moderado</strong>, <strong style="color:#F77800">Alto</strong> ou
            <strong style="color:#F02C2E">Altíssimo</strong>, e também suas tendências (se estão diminuindo,
            estabilizando ou crescendo). 
            A classificação de cada indicador segue a tabela de valores de referência abaixo. Após analisar cada indicador, classificamos 
            o município, regional ou estado no nível de alerta <b>equivalente ao mais alto entre os de cada indicador individual</b>. 
            Caso o município não conte com algum dos indicadores, mostramos o número correspondente para o nível regional. 
            Nesse caso, ele não terá classificação de risco.
            </div>""",
        unsafe_allow_html=True,
    )

    # Valores de referência
    st.write(
        """<div class="base-wrapper"><div style="margin: 10px 10px 10px 10px;">
            <div class="info-div-table">
            <table class="info-table">
            <tbody>
                <tr>
                    <td class="grey-bg"><strong>Dimensão</strong></td>
                    <td class="grey-bg"><strong>Indicador</strong></td>
                    <td class="grey-bg"><strong>Novo Normal</strong></td>
                    <td class="grey-bg"><strong>Risco Moderado</strong></td>
                    <td class="grey-bg"><strong>Risco Alto</strong></td>
                    <td class="grey-bg"><strong>Risco Altíssimo</strong></td>
                </tr>
                <tr>
                    <td rowspan="2">
                    <p><span>Situação da doença</span></p><br/>
                    </td>
                    <td><span>Novos casos diários (Média móvel 7 dias)</span></td>
                    <td class="light-blue-bg bold"><span>x&lt;=3.7</span></td>
                    <td class="light-yellow-bg bold"><span>3.7&lt;x&lt;=12.5</span></td>
                    <td class="light-orange-bg bold"><span>12.5&lt;=x&lt;=27.4</span></td>
                    <td class="light-red-bg bold"><span>x &gt;= 27.4</span></td>
                </tr>
                <tr>
                    <td><span>Tendência de novos casos diários</span></td>
                    <td class="lightgrey-bg" colspan="4"><span>Se crescendo*, mover para o nível mais alto</span></td>
                </tr>
                <tr>
                    <td><span>Controle da doença</span></td>
                    <td><span>Número de reprodução efetiva</span></td>
                    <td class="light-blue-bg bold"><span>&lt;0.5</span></td>
                    <td class="light-yellow-bg bold"><span>&lt;0.5 - 1&gt;</span></td>
                    <td class="light-orange-bg bold"><span>&lt;1 - 1.2&gt;</span>&nbsp;</td>
                    <td class="light-red-bg bold"><span>&gt;1.2</span></td>
                </tr>
                <tr>
                    <td><span>Capacidade de respostas do sistema de saúde</span></td>
                    <td><span>Projeção de tempo para ocupação total de leitos UTI</span></td>
                    <td class="light-blue-bg bold">60 - 90 dias</td>
                    <td class="light-yellow-bg bold"><span>30 - 60 dias</span></td>
                    <td class="light-orange-bg bold"><span>15 - 30 dias</span></td>
                    <td class="light-red-bg bold"><span>0 - 15 dias</span></td>
                </tr>
                <tr>
                    <td><span>Confiança dos dados</span></td>
                    <td><span>Subnotificação (casos <b>não</b> diagnosticados a cada 10 infectados)</span></td>
                    <td class="light-blue-bg bold"><span>4&gt;=x&gt;0</span></td>
                    <td class="light-yellow-bg bold"><span>6&gt;=x&gt;4</span></td>
                    <td class="light-orange-bg bold"><span>7&gt;=x&gt;6</span></td>
                    <td class="light-red-bg bold"><span>10&gt;=x&gt;=7</span></td>
                </tr>
            </tbody>
            </table>
            </div>
            <div style="font-size: 14px">
                * Como determinamos a tendência:
                <ul class="sub"> 
                    <li> Crescendo: caso o aumento de novos casos esteja acontecendo por pelo menos 5 dias. </li>
                    <li> Descrescendo: caso a diminuição de novos casos esteja acontecendo por pelo menos 14 dias. </li>
                    <li> Estabilizando: qualquer outra mudança. </li>
                </ul>
            </div>
            </div>
        </div>""",
        unsafe_allow_html=True,
    )

    # Limitação
    st.write(
        """<div class="base-wrapper"><span class="subsection-header"><b>Essas métricas são suficientes?</b></span><br>
        <b>Não.</b><br><br>Desenvolvemos os níveis de alerta do FarolCovid com dados públicos e abertos, disponíveis
        online. É um primeiro passo para o gestor orientar sua tomada de decisão de maneira informada,
        orientado por dados que o atualizam tanto sobre o estágio de evolução da doença em seu local 
        quanto sua capacidade de resposta. O gestor público, entretanto, conta com uma riqueza
        maior de informações que deve ser utilizada na formulação de respostas adequadas à sua realidade.
        Informações como a quantidade de testes realizados, a taxa de pessoas que testam positivo e o tempo
        médio de internação são outros fatores importantes para a tomada de decisão. Estamos à disposição
        para apoiar o gestor público a aprofundar a análise para seu estado ou município, de forma
        inteiramente gratuita. <a class="github-link" href="https://coronacidades.org/fale-conosco/>Entre em contato pelo Coronacidades.org</a>!
        </div>""",
        unsafe_allow_html=True,
    )

    # Detalhes
    st.write(
        """<div class="base-wrapper"><span class="subsection-header"><b>Detalhes da distribuição dos indicadores-chave</b></span><br>
        Para ilustrar as classificações dos indicadores, geramos os gráficos das distribuições de cada indicador 
        (diagonal) e as distribuições por pares de indicadores (em cada eixo) abaixo, para cidades, regionais e estados.
        </div>""",
        unsafe_allow_html=True,
    )

    # st.image(
    #     Image.open("imgs/cities_indicators_202009.png"),
    #     use_column_width=True,
    #     caption="Distribuição de indicadores-chaves para cidades (retrato de 1/set/2020. Cada ponto representa uma cidade, os eixos x e y trazem os valores dos indicadores-chaves para aquela cidade. Na diagonal segue o histograma do indicador-chave.",
    # )

    # st.write("<br><br>", unsafe_allow_html=True)

    # st.image(
    #     Image.open("imgs/states_indicators_202009.png"),
    #     use_column_width=True,
    #     caption="Distribuição de indicadores-chaves para regionais de saúde (retrato de 1/set/2020). Cada ponto representa uma estado, os eixos x e y trazem os valores dos indicadores-chaves para aquela cidade. Na diagonal segue o histograma do indicador-chave.",
    # )

    # st.image(
    #     Image.open("imgs/states_indicators_202009.png"),
    #     use_column_width=True,
    #     caption="Distribuição de indicadores-chaves para estados (retrato de 1/set/2020). Cada ponto representa uma estado, os eixos x e y trazem os valores dos indicadores-chaves para aquela cidade. Na diagonal segue o histograma do indicador-chave.",
    # )

    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">CÁLCULO E CLASSIFICAÇÃO DE INDICADORES</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    indicador = st.radio(
        "Selecione abaixo o indicador para ver a descrição em detalhe:",
        [
            "SITUAÇÃO DA DOENÇA: Média móvel de novos casos por 100 mil habitantes",
            "CONTROLE DA DOENÇA: Taxa de contágio (Rt)",
            "CAPACIDADE DO SISTEMA: Dias até atingir ocupação total de leitos UTI-Covid",
            "CONFIANÇA NOS DADOS: Taxa de subnotificação de casos",
        ],
    )

    if (indicador ==
            "SITUAÇÃO DA DOENÇA: Média móvel de novos casos por 100 mil habitantes"
        ):
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">SITUAÇÃO DA DOENÇA: Média móvel de novos casos por 100 mil habitantes</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        st.write(
            """<div class="base-wrapper">
            <span class="subsection-header"><b>Como saber o quão crítico é o nível de novos casos?</b></span><br> 
            Para responder essa pergunta precisamos entender como vem evoluindo a incidência dos casos na
            população ao longo do tempo e onde estamos nessa curva. Logo, os valores de referência para a
            classificação dos níveis de alerta foram definidos com base na série histórica de novos casos de
            Covid-19 nas capitais brasileiras, por maior consistência no reporte de casos e também maior período
            de tempo transcorrido desde o 1º caso. 
            Como calculamos os valores de referência?  Dada a série histórica, com a média móvel semanal de
            novos casos diários por 100mil habitantes das capitais, separamos a distribuição de novos casos por
            dia das capitais em 4 intervalos traduzidos nos quartis:<br>
            <li>Novo normal (Q1): máximo dentre 25% dos menores valores de novos casos diários;</li>
            <li>Moderado (Q2):máximo dentre 50% dos menores valores de novos casos diários;</li>
            <li>Alto (Q3): máximo dentre 75% dosmenores valores de novos casos diários; </li>
            <li>Altíssimo: todos os valores acima do classificado para alto.</li><br>
            O valor final é dado pela média dos quartis das capitais. Tomemos o exemplo de Aracaju: abaixo temos
            a distribuição da média de novos casos até 30/08/2020. Até esta data, 25% dos dias tiveram uma média
            de até 1.7 por 100 mil habitantes (novo normal); 50% dos dias tiveram uma média até de 22.7
            (moderado); e 75% foram abaixo de 61.3 (alto - os valores acima deste são considerados altíssimo).
            </div>""",
            unsafe_allow_html=True,
        )

        st.image(
            Image.open("imgs/new_cases_aracaju_20200830.png"),
            use_column_width=True,
            caption=
            "Distribuição da média móvel semanal de novos casos por 100mil habitantes em Aracaju (retrato de 30/ago/2020).",
        )

        st.write(
            """<div class="base-wrapper">
            A distribuição de todas as capitais abaixo reflete parte da variação local de
            intensidade e progressão da doença em diferentes localidades do Brasil. A média dos
            quartis de todas as capitais nos fornece os valores de referência utilizados para a
            classificação da Situação da doença - novo normal até 3.7 (Q1); moderado até 12.5 (Q2);
            alto até 27.4 (Q3); altíssimo acima de 27.4.
            </div>""",
            unsafe_allow_html=True,
        )

        st.image(
            Image.open("imgs/new_cases_capitals_20200830.png"),
            use_column_width=True,
            caption=
            "Distribuição da média móvel semanal de novos casos por 100mil habitantes para todas as capitais (retrato de 30/ago/2020).",
        )

        st.write(
            """<div class="base-wrapper">
            <span class="subsection-header"><b>LIMITAÇÕES</b></span><br> 
            <li>Utilizamos dados abertos de casos reportados - ou seja, as datas são do reporte do caso e não do
            início dos sintomas. Como sabemos que existe um  atraso entre o início dos sintomas e a inserção do
            resultado do teste no sistema, os valores não traduzem fielmente a realidade do dia de hoje.</li>
            <li>Existe viés de seleção atrelado ao período de evolução da doença que não observamos ainda. Isso ocorre
            pois nenhuma das capitais extinguiram o número de novos casos diários até a 30/08/2020. Caso a
            tendência seja somente de diminuição do número de casos a partir de hoje, por exemplo, os valores de
            referência estariam superestimados.</li>
            <li> Existe também viés de seleção relacionado ao porte das capitais. 
            Por um lado, estas possuem maior densidade populacional, o que aumenta a chance de terem
            maior número de casos, mas por outro lado, também possuem maior infraestrutura para resposta à
            crise. Estas foram escolhidas por ter uma maior estabilidade no reporte dos casos e maior número de
            testes RT-PCR dentre os testes realizados (que indica a presença ativa do vírus no organismo).</li>
            </div>""",
            unsafe_allow_html=True,
        )

    if indicador == "CONFIANÇA NOS DADOS: Taxa de subnotificação de casos":

        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">CONFIANÇA NOS DADOS: Taxa de subnotificação de casos</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        st.write(
            """<div class="base-wrapper">
                <span class="subsection-header"><b>O que é?</b></span><br> 
                Um modelo de subnotificação é uma ferramenta estatística utilizada para auxiliar a compreensão da
                real situação de infectados num determinado local, pois os dados de casos reportados não refletem
                perfeitamente a realidade, uma vez que há - por diversas razões - casos não identificados
                oficialmente. Alguns dos fatores que aumentam o grau de subnotificação são a falta de testagem
                massiva na população; detecção de casos somente após apresentação de sintomas; e a própria
                característica da doença de existirem infectados assintomáticos, que são transmissores ainda que em
                menor escala (WHO, 2020).
                <br><br><span class="subsection-header"><b>Como foi desenvolvido?</b></span><br> 
                O modelo de subnotificação do grupo de pesquisa <a class="github-link" href='http://www.cemeai.icmc.usp.br/ModCovid19/'>ModCovid</a> 
                foi desenvolvido inicialmente para ajudar a determinar o estágio da epidemia em Aracaju e Maceió.
                <br><br><span class="subsection-header"><b>Por que é importante?</b></span><br> 
                Para a evolução da epidemia numa região precisamos descobrir quantos novos casos de infecção são
                gerados a cada dia, a partir de um certo momento no tempo. Porém, sabemos que a medição desses casos
                é deficiente, principalmente por gargalos na testagem de Covid-19 em nosso país. Portanto,
                calculamos um número corrigido de casos a partir de comparações com proporções esperadas de mortes
                para casos, conforme a literatura nascente sobre a dinâmica da Covid-19 em diferentes populações.
                Isso nos permite planejar novas ações de combate à disseminação, sua ordem de prioridade e
                preparação para novos leitos de atendimento.
                <br><br><span class="subsection-header"><b>Como o modelo funciona?</b></span><br> 
                Fazemos uma regressão a partir do número de mortos reportados por Covid-19 para estimar o número
                de casos de pessoas infectadas 14 dias compatível com aquela quantidade de mortes. Ao compará-lo com
                a quantidade de casos registrados, calculamos a taxa de subnotificação correspondente. O período de
                14 dias é um tempo médio aproximado para a evolução da doença do momento da infecção até o
                falecimento de um indivíduo (Alison, 2020).
                <br><br><span class="subsection-header"><b>Como é feito o cálculo</b></span><br> 
                Utilizando uma <a class="github-link" href="https://www.inf.ufsc.br/~andre.zibetti/probabilidade/binomial_negativa.html">distribuição binomial negativa</a> 
                como modelo probabilístico, o cálculo gera o número de casos positivos que seriam esperados dado o número mortes observadas.
                A distribuição modela a probabilidade de que um número  de novos infectados possa falecer 14 dias
                após de ter se tornado infeccioso, dado o total de mortes até a data () e a taxa de mortalidade por
                infecção (IFR). A taxa de mortalidade por infecção (IFR) das regiões é calculada utilizando IFRs por
                faixa etária estimados em Hubei, segundo Verity, Robert, et al. (2020)[1], e obtém-se a IFR total da
                região ponderada pela população em cada faixa com os dados da População Residente (CNES - 2019).<br><br>
                Selecionamos a série histórica de mortes da região a partir da 15a morte e com pelo menos 15 dias
                desde o 1o caso, de maneira a garantir significância estatística. Dado o total de mortes  e a IFR,
                realizamos 100.000 simulações para cada data da série e os casos estimados são dados pelo valor
                médio da distribuição gerada.
                <br><br><span class="subsection-header"><b>LIMITES E CONSIDERAÇÕES SOBRE O MODELO</b></span><br> 
                <li>Existe atraso na confirmação do diagnóstico de mortes por Covid-19, logo a data do reporte não
                reflete a data real de quando ocorreu o óbito. Isso significa que estamos olhando muitas vezes para
                um retrato do passado e não de agora. Quanto maior o atraso no reporte, menos ajustada está a taxa
                de subnotificação à realidade atual.</li>
                <li>Existe subnotificação de mortes que ocorrem fora do ambiente
                hospitalar, que podem influenciar sensivelmente as estimativas. Quem morre de Covid-19 em casa não é
                necessariamente reportado nas estatísticas de óbito por Covid e portanto leva a subestimarmos o
                tamanho da subnotificação.</li>
                <li>Existem inconsistências no reporte de mortes por Covid-19. Há uma
                superestimação da subnotificação atrelada à protocolos de notificação independente da causa
                principal da morte ser Covid-19.</li>
                <br>Outras opções para a estimação de infecciosos podem ser o uso de
                pacientes com Síndrome Respiratória Aguda Grave (SRAG), pacientes em leitos hospitalares de
                retaguarda e pacientes internados em leitos de UTI. Essas estratégias, porém, podem ser ainda mais
                imprecisas, uma vez que há uma grande incerteza envolvendo questões básicas como o número total de
                leitos disponíveis (SUS e particulares), etiologia dos casos de SRAG e disponibilidade local de
                UTIs. Neste momento, com uma amostragem relativamente pequena no início da epidemia, a estimação
                dos infecciosos usando a série histórica dos mortos se mostra a melhor opção. Reiteramos que dados
                de testagem massiva e estruturada em modelos estatísticos e probabilísticos são essenciais para o
                controle da evolução da doença em um futuro próximo.
                </div>""",
            unsafe_allow_html=True,
        )

    if indicador == "CONTROLE DA DOENÇA: Taxa de contágio (Rt)":

        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">CONTROLE DA DOENÇA: Taxa de contágio (Rt)</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        st.write(
            """<div class="base-wrapper">
            <span class="subsection-header"><b>O que é?</b></span><br> 
            O número de reprodução efetivo (Rt) traduz a quantidade de pessoas que cada pessoa
            doente infectará em determinado intervalo de tempo.  Já o número básico de reprodução
            (<i>R0</i>) da uma doença traduz qual a dinâmica de contágio de todo o curso de transmissão em
            determinado grupo populacional, sendo, portanto, fixo para a doença. Mas a quantidade de
            novas infecções geradas por cada pessoa varia ao longo do tempo: se, no início, há menos
            pessoas imunes, ele tende a ser mais alto; enquanto, tudo mais constante, o aumento da
            imunidade na população se traduzirá em um número menor de novas infecções. Igualmente,
            mudanças de comportamento - como a redução de contato entre pessoas ou uso de máscaras, no
            caso de doenças transmitidas por vias áreas, como a Covid-19 - também influenciam o número
            de novas infecções.<br><br> A Covid-19 chegou em momentos distintos em cada cidade brasileira e
            a sociedade também reagiu de maneira diferente em cada uma delas. Portanto, medir o
            <i>Rt</i>, traduzindo o <i>R0</i> para o momento específico no qual cada local se encontra, a
            nível municipal e estadual, traz informações importantes sobre a taxa de contágio da doença.
            Enquanto o <i>R0</i> é um número geral, portanto, o  então é calculado para cada local e
            momento no tempo. Por exemplo, um <i>Rt</i> maior do que 1 indica que, mantendo-se o
            comportamento e intervenções ativas até aquele dia, ainda há tendência de crescimento
            exponencial da doença naquela população. Esperamos que cada pessoa infectada naquele momento
            infectará mais de uma pessoa no futuro - gerando uma curva de contágio que se acelera
            rapidamente. Já um <i>Rt</i> abaixo de 1 se traduz na expectativa de que o número de novas infecções 
            vai diminuir ao longo do tempo, indicando que a situação está sob controle se todas as medidas e
            comportamentos forem mantidos.<br><br>Uma boa notícia: por causa da mudança de comportamento, o
            <i>Rt</i> tende a ser menor que o <i>R0</i>, como explicam os desenvolvedores do
            <i>CovidActNow</i>. Calculá-lo também nos permite, portanto, comparar qual seria a evolução
            do contágio da Covid-19 caso medidas restritivas de contato e contágio não tivessem sido
            adotadas.<br> Medir diretamente o número efetivo de reprodução da Covid-19 não é possível.
            Porém, podemos estimar o número de reprodução instantâneo (<i>Rt</i>) mais provável pelo
            número de novos casos por dia.<br><br>
            <span class="subsection-header"><b>Como funciona o modelo?</b></span><br> 
            O modelo utilizado para o cálculo do Rt foi desenvolvido por Cori et.
            al (2013) e implementado no pacote <i>EpiEstim</i>, podendo ser utilizado no R (linguagem de
            programação) ou no Excel. Ele toma como entrada a série de casos da doença na população e
            estima o Rt utilizando um modelo bayesiano. Esse modelo estima a distribuição a posteriori
            do Rt dado o número de casos ativos no tempo <i>t</i> e a infectividadde da doença no local.
            A infectividade pode ser entendida como a probabilidade de um indivíduo infectar pessoas o
            momento de evolução da doenca no qual se encontra - por exemplo, um indivíduo com Covid no
            4º dia de sintomas é mais infeccioso que o um indivíduo no 15º dia.  Esse valor não é
            observado, portanto, é estimado pela distribuição esperada do tempo de geração da doença
            (intevalo serial) - que é o tempo esperado entre uma pessoa apresentar os sintomas e uma
            pessoa contaminada por esta passar a apresentar os sintomas da doença. Esse número para a
            Covid hoje segue uma distribuição com média de 4.7 e desvio padrão de 2.9 (Hiroshi, 2020).<br><br>
            Dada a série de novos casos por dia, e a média e desvio padrão do intervalo serial, o modelo
            então estima o valor mais provável do número de reprodução básica da doença no tempo
            <i>t</i> e os respectivos intervalos de confiança. Utilizamos o intevalo de 95% de confiança
            para reportar as estimativas.
            </div>""",
            unsafe_allow_html=True,
        )

    if (indicador ==
            "CAPACIDADE DO SISTEMA: Dias até atingir ocupação total de leitos UTI-Covid"
        ):

        st.write(
            """<div class="base-wrapper">Ver metodologia do SimulaCovid: a capacidade hospitalar é projetada com os dados mais recentes da doença no município, regional ou estado.
                </div>""",
            unsafe_allow_html=True,
        )

    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">FERRAMENTAS</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    ferramenta = st.radio(
        "Selecione abaixo uma das ferramenta para ver mais detalhes:",
        [
            "FarolCovid (acima)",
            "SimulaCovid",
            "Saúde em Ordem",
        ],
    )

    if ferramenta == "FarolCovid (acima)":
        pass

    if ferramenta == "Saúde em Ordem":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">SAÚDE EM ORDEM</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        saude_em_ordem_description.main(session_state)

    if ferramenta == "SimulaCovid":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">SIMULACOVID: Modelo Epidemiológico</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        model_description.main(session_state)

    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">FONTES DE DADOS</span>
        </div>""",
        unsafe_allow_html=True,
    )

    gen_table()

    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">REFERÊNCIAS</span>
        </div>""",
        unsafe_allow_html=True,
    )

    st.write(
        """<div class="base-wrapper">
        Agência Nacional de Saúde Suplementar, 2012. Taxa de Ocupação Operacional Geral. Disponível em:
        http://www.ans.gov.br/images/stories/prestadores/E-EFI-03.pdf <br> <br>CDC, 2019. Severe Outcomes
        Among Patients with Coronavirus Disease 2019 (COVID-19) — United States, February 12–March 16, 2020.
        MMWR Morb Mortal Wkly Rep. ePub: 18 March 2020. DOI: http://dx.doi.org/10.15585/mmwr.mm6912e2.<br>
        <br>G. Stein, V. N. Sulzbach and Lazzari. Nota Técnica sobre o Índice Setorial para Distanciamento
        Controlado.  Technical report, 2020<br> <br>Cori, A., Ferguson, N.M., Fraser, C. and Cauchemez, S., 2013. A new framework and software to estimate time-varying reproduction numbers during epidemics. American journal of epidemiology, 178(9), pp.1505-1512. 
        <br> <br> Hill, A, 2020. Model Description. Modelling COVID-19 Spread vs
        Healthcare Capacity. Disponível em: https://alhill.shinyapps.io/COVID19seir/<br> <br>Lazaro Gamio.
        The workers who face the greatest coronavirus risk, 2020.
        https://www.nytimes.com/interactive/2020/03/15/business/economy/coronavirus-worker-risk.html.<br> <br>
        Li, R., Pei, S., Chen, B., Song, Y., Zhang, T., Yang, W., & Shaman, J., 2020. Substantial
        undocumented infection facilitates the rapid dissemination of novel coronavirus (SARS-CoV2).
        Science, 3221(March), eabb3221. DOI: https://doi.org/10.1126/science.abb3221<br> <br>Max Roser, Hannah
        Ritchie, Esteban Ortiz-Ospina and Joe Hasell (2020) - "Coronavirus Disease (COVID-19)". Published
        online at OurWorldInData.org. Retrieved from: 'https://ourworldindata.org/coronavirus' [Online
        Resource]<br> <br>Ministério da Saúde do Brasil, 2020. Boletim Diário. 28 mar. 2020. Disponível em:
        https://www.saude.gov.br/images/pdf/2020/marco/28/28.03%20-%20COVID.pdf
        <br> <br>Nishiura, Hiroshi, Natalie M. Linton, and Andrei R. Akhmetzhanov. "Serial interval of novel coronavirus (COVID-19) infections." International journal of infectious diseases (2020).<br> <br>Vanessa Neumann Sulzbach.
        Essays on Labor Market Polarization in Brazil. Unpublished PhD’s Thesis, 2020.<br> <br>Verity, Robert, et
        al. "Estimates of the severity of coronavirus disease 2019: a model-based analysis." The Lancet
        infectious diseases (2020). Disponível em:
        https://www.medrxiv.org/content/10.1101/2020.03.09.20033357v1 <br> <br>Walker, P.G., Whittaker, C., Watson,
        O., Baguelin, M., Ainslie, K.E.C., Bhatia, S., Bhatt, S., Boonyasiri, A., Boyd, O., Cattarino, L.
        and Cucunubá, Z., 2020. The global impact of COVID-19 and strategies for mitigation and suppression.
        Imperial College London, doi: https://doi. org/10.25561/77735. <br> <br>[1] Wang, C, et al. (2020) Evolving
        Epidemiology and Impact of Non-pharmaceutical Interventions on the Outbreak of Coronavirus Disease
        2019 in Wuhan, China. DOI: https://doi.org/10.1101/2020.03.03.20030593 e pdf de apresentação
        https://docs.google.com/presentation/d/1-rvZs0zsXF_0Tw8TNsBxKH4V1LQQXq7Az9kDfCgZDfE/edit#slide=id.p1
        <br> <br>[2] Wang, J., Zhou, M., & Liu, F., 2020. Reasons for healthcare workers becoming infected with novel
        coronavirus disease 2019 (COVID-19) in China. Journal of Hospital Infection. DOI:
        https://doi.org/10.1016/j.jhin.2020.03.002 <br> <br>Y. O. de Lima, D. M. Costa, and J. M. de Souza. Covid-19:
        Risco de contágio por ocupação no Brasil: Nota metodológica. Technical report, 2020.
        <br> <br>[2] Wang, J., Zhou, M., & Liu, F., 2020. Serial interval of novel coronavirus (COVID-19) infections. Journal of Hospital Infection. DOI:
        https://doi.org/10.1016/j.jhin.2020.03.002 <br> <br>Y. O. de Lima, D. M. Costa, and J. M. de Souza. Covid-19:
        Risco de contágio por ocupação no Brasil: Nota metodológica. Technical report, 2020.
        </div>""",
        unsafe_allow_html=True,
    )
Exemplo n.º 12
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)
Exemplo n.º 13
0
def main():
    session_state = session.SessionState.get(
        key=session.get_user_id(),
        update=False,
        state_name="Acre",
        state_id="AC",
        city_name="Todos",
        administrative_level="Todos",
        escola="",
        refresh=False,
        reset=False,
        already_generated_user_id=None,
        pages_open=None,
        amplitude_events=None,
        button_styles=dict(),
        continuation_selection=None,
        button_simule=0,
        section1_organize=False,
        section2_manage=False,
        nivelsimulacao=""
    )
    utils.localCSS("localCSS.css")
    he.genHeader("simulation")
    config = yaml.load(open("config/config.yaml", "r"), Loader=yaml.FullLoader)
    # df = get_data()
    subtitle = """Sabemos que no planejamento da reabertura surgem muitas dúvidas... Quantas turmas podem voltar? Quantos litros de álcool gel preciso comprar? 
    <br>
    O retorno às atividades presenciais deve ser planejado segundo as condições da sua rede. Simule abaixo o retorno e veja os recursos e materiais necessários para uma reabertura segura!
    <br>
    <b>Se você é gestor da rede:</b><br>
    Preencha os dados da sua rede e obtenha uma simulação geral das condições de retorno. 
    <br>
    <b>Se você é gestor de uma escola:</b><br>
    Preencha os dados específicos da sua escola, por série ou por etapa de ensino, e obtenha as condições e materiais necessários para voltar ás aulas presenciais com segurança.
    <br><br>
    <b>Selecione o nível que gostaria de simular:</b>
    <br>"""
    utils.main_title(title="<b>Simule o retorno:</b> como organizar a reabertura?", subtitle=subtitle)


    session_state.nivelsimulacao = st.selectbox(
        "",
        # ["Selecione o nível que gostaria de simular:", "Nível Escolar", "Rede Municipal"],
        ["", "Nível Escolar", "Rede Municipal", "Rede Federal", "Rede Estadual"],
    )
    if session_state.nivelsimulacao=="Nível Escolar":
        df = pd.read_csv("pages/dadosporescolas.csv")
        utils.gen_title(title="Selecione sua localização:", subtitle="")
        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)

        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"])
        session_state.city_name = st.selectbox("Município", options_city_name)

        data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name)]
        session_state.escola = st.selectbox(
            "Escola",
            ["", "Minha escola não está na lista"] + list(data["codinep_nomedaescola"]),
        )
        # data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name) & (df["nomedaescola"] == session_state.escola)]
        if session_state.escola == "Minha escola não está na lista":
            data = {'Unnamed: 0':[0], 'idescola':[0], 'nomedaescola':[0], 'city_id':[0], 'city_name':[0],'state_id':[0], 'state_name':[0], 'numsalas':[1], 'alunos':[1], 'tipoescola':[0],'professores':[1]}
            data = pd.DataFrame(data, columns=['Unnamed: 0', 'idescola', 'nomedaescola', 'city_id', 'city_name','state_id', 'state_name', 'numsalas', 'alunos', 'tipoescola','professores'])
            params = genQuetions(data)
            if st.button("simular retorno"):
                genSimulationResult(params, config)
        elif session_state.escola != "":
            data = data[data["codinep_nomedaescola"] == session_state.escola]
            params = genQuetions(data)
            if st.button("simular retorno"):
                genSimulationResult(params, config)
    # if session_state.nivelsimulacao=="Nível Escolar Turma":
    #     df = pd.read_csv("pages/dadosporturmasagrupado.csv")
    #     utils.gen_title(title="Selecione sua localização:", subtitle="")
    #     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)

    #     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"])
    #     session_state.city_name = st.selectbox("Município", options_city_name)

    #     data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name)]
    #     session_state.escola = st.selectbox(
    #         "Escola",
    #         ["Selecione a Escola"] + list(data["codinep_nomedaescola"].unique()),
    #     )
    #     data = data[data["codinep_nomedaescola"] == session_state.escola]
    #     # data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name) & (df["nomedaescola"] == session_state.escola)]
    #     if session_state.escola != "Selecione a Escola":
    #         params = genMultiQuetions(data)
    #         if st.button("simular retorno"):
    #             genSimulationResult(params, config)
                
    if session_state.nivelsimulacao=="Rede Municipal":
        df = pd.read_csv("pages/dadosporescolas.csv")
        utils.gen_title(title="Selecione sua localização:", subtitle="")
        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)
        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"])
        session_state.city_name = st.selectbox("Município", options_city_name)
        escolas_municipio_opcao = st.selectbox(
            "Você gostaria de simular:",
            ["Todas as Escolas do Município", "Escolas de Administração Municipal"],
        )
        if escolas_municipio_opcao=="Todas as Escolas do Município":
            data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name)]
        else:
            data = df[(df["state_id"] == session_state.state_id) & (df["city_name"] == session_state.city_name) & (df["tipoescola"] == 3)]
        params = genMunicipioQuetions(data)
        if st.button("simular retorno"):
            genSimulationResultMunicipio(params, config, data)
    
    if session_state.nivelsimulacao=="Rede Federal":
        df = pd.read_csv("pages/dadosporescolas.csv")
        utils.gen_title(title="Selecione sua localização:", subtitle="")
        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)
        data = df[(df["state_id"] == session_state.state_id) & (df["tipoescola"] == 1)]
        params = genMunicipioQuetions(data)
        if st.button("simular retorno"):
                genSimulationResultMunicipio(params, config, data)
    
    if session_state.nivelsimulacao=="Rede Estadual":
        df = pd.read_csv("pages/dadosporescolas.csv")
        utils.gen_title(title="Selecione sua localização:", subtitle="")
        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)

        # escolas_estado_opcao = st.selectbox(
        #     "Você gostaria de simular:",
        #     ["Todas as Escolas do Estado", "Escolas de Administração Estadual"],
        # )
        escolas_estado_opcao = st.selectbox(
            "Você gostaria de simular:",
            ["Escolas de Administração Estadual"],
        )
        if escolas_estado_opcao=="Todas as Escolas do Estado":
            data = df[(df["state_id"] == session_state.state_id)]
        else:
            data = df[(df["state_id"] == session_state.state_id) & (df["tipoescola"] == 2)]
        params = genEstadoQuetions(data)
        if st.button("simular retorno"):
            if escolas_estado_opcao=="Todas as Escolas do Estado":
                data = pd.read_csv("pages/redeestadual.csv")
            else:
                data = pd.read_csv("pages/redeestadual.csv")
            genSimulationEstadoResult(params, config, session_state, data)

    tm.genGuia()
    foo.genFooter()
Exemplo n.º 14
0
def main(session_state):
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event("opened risk_level",
                                                     session_state,
                                                     is_new_page=True)

    # Config labels
    config = yaml.load(open("configs/config.yaml", "r"),
                       Loader=yaml.FullLoader)
    date_update = config["br"]["farolcovid"]["date_update"]

    # Layout
    utils.localCSS("style.css")

    st.write(
        f"""<div class="base-wrapper"><span class="subsection-header">Atualização - v.2 ({date_update})</span>""",
        unsafe_allow_html=True,
    )

    st.write(
        """<div class="base-wrapper">
            <span class="subsection-header"><b>Níveis de classificação</span></b></br>
            Depois de um primeiro momento de mitigação da Covid-19 nos estados e municípios brasileiros, passamos a uma
            nova fase de resposta à pandemia: a de supressão da doença. Nela, é necessário avaliar
            periodicamente qual o cenário e quais as ações mais adequada para a cidade, regional de
            saúde ou estado, de acordo com indicadores sobre a dinâmica de transmissão da doença e
            sua capacidade de resposta.<br><br> É a partir dessa avaliação que políticas de
            resposta à Covid-19 devem ser calibradas: <b>o objetivo é chegar no "novo normal," onde
            a situação está sob controle.</b> Para auxiliar a população e os gestores públicos nessa
            tarefa, desenvolvemos uma classificação em Níveis de Alerta, baseada em 4 eixos,
            correspondentes a perguntas-chave que devem ser respondidas por quem está tomando
            decisões sobre resposta à pandemia. Adaptamos os antigos "níveis de risco" dos municípios, 
            regiões de saúde e estados com a nova metodologia de <a target="_blank" style="color:#3E758A;" href="https://coronacidades.org/niveis-de-alerta/">Níveis de Alerta</a> 
            desenvolvida pela Vital Strategies e adaptada pela Impulso, composta por 4 níveis:</br>
            <br>
            <li><strong style="color:#F02C2E">Altíssimo</strong>: Há um crescente número de casos de Covid-19 e grande número deles não são detectados</li>
            <li><strong style="color:#F77800">Alto</strong>: Há muitos casos de Covid-19 com transmissão comunitária. A presença de casos não detectados é provável.</li>
            <li><strong style="color:#F7B500">Moderado</strong>: há um número moderado de casos e a maioria tem uma fonte de transmissão conhecida.</li>
            <li><strong style="color:#0090A7">Novo Normal</strong>: casos são raros e técnicas de rastreamento de contato e monitoramento de casos suspeitos evitam disseminação.</li>
            <br></div>
        """,
        unsafe_allow_html=True,
    )

    st.write(
        """<div class="base-wrapper">
        <span class="subsection-header"><b>Classificação</span></b></br>
        A classificação de cada indicador segue a tabela de valores de referência abaixo. Após analisar cada indicador, classificamos 
        o município, regional ou estado no nível de alerta <b>equivalente ao mais alto entre os de cada indicador individual</b>. 
        Caso o município não conte com algum dos indicadores, mostramos o número correspondente para o nível regional. 
        Nesse caso, ele não terá classificação de risco.</div>""",
        unsafe_allow_html=True,
    )

    # Valores de referência
    st.write("""
        <div class="base-wrapper">%s</div>
        """ % gen_reference_table(config),
             unsafe_allow_html=True)

    st.write(
        """<div class="base-wrapper">
        <span class="subsection-header"><b>Indicadores</span></b></br>
        <br>
        <span class="subsection-header"><b>Situação da Covid-19:</b> Qual a incidência da doença na minha população?</span><br>
        <b>Indicador</b>: Novos casos por 100mil habitantes (média móvel 7 dias).<br>
        <b>Qual sua tendência?</b> Aumentando, estabilizando ou diminuindo?<br><br>
        Utilizamos como indicador nessa dimensão os <b>novos casos reportados de Covid-19 por 100 mil habitantes (medido em média móvel de sete dias)</b>. 
        Essa é uma métrica importante para entender como a doença está atingindo a população no momento atual, e qual sua <b>tendência</b> de evolução dos 
        novos casos - piorando (crescendo pelo menos há 5 dias), melhorando (diminuindo pelo menos há 14 dias) ou estável.</br>
        <br><span class="subsection-header"><b>Controle da Covid-19:</b> Estamos conseguindo frear o surgimento de novos casos?</span><br>
        <b>Indicador</b>: Taxa de contágio (Número efetivo de Reprodução - Rt)<br>
        <b>Qual sua tendência?</b>Aumentado, estabilizando ou diminuindo?<br><br>
        Por não possuirmos dados abertos de testagem estruturados da maioria dos municípios brasileiros, optamos por classificar o controle através da <b>taxa de contágio</b>. 
        Essa métrica busca estimar quantas pessoas em média uma pessoa está infectando hoje - é uma tentativa de entender o espalhamento da doença 
        quando não temos informação de rastreamento de contatos.</br>
        <br>
        Comparado com a versão anterior do Farol, fizemos uma alteração em nosso modelo estatístico de forma <b>a capturar melhor as variações 
        nos novos casos</b>, porém este modelo não se mostrou consistente para algumas cidades. Revertemos o cálculo para o modelo anterior 
        enquanto estudamos uma solução.</br>
        <br><span class="subsection-header"><b>Capacidade do sistema:</b> Como está a capacidade de resposta do sistema de saúde? </span><br>
        <b>Indicador</b>: Dias até atingir ocupação total de leitos UTI<br>
        <b>Qual sua tendência?</b> Aumentado, estabilizando ou diminuindo?<br><br>
        Comparado à versão anterior do Farol Covid, passamos a realizar a projeção de em quanto tempo todos os leitos UTI da regional 
        de saúde (caso município ou região) ou estado estarão ocupados, não mais o número de ventiladores. Realizamos essa mudança por entender 
        que essa rubrica, adotada pelo CNES a partir do mês de maio, traduz de maneira mais fiel a disponibilidade de equipamentos para 
        pacientes Covid. Ajustamos também os valores de referência para ser mais conservadores, observando um período de até 1 mês de cobertura 
        ao invés de 3 meses na versão anterior.</br>
        <br><span class="subsection-header"><b>Confiança nos dados:</b> Quão representativo são os casos oficialmente identificados 
        frente ao total de casos esperados?</span><br>
        <b>Indicador</b>: Taxa de subnotificação<br>
        <b>Qual sua tendência?</b> Aumentado, estabilizando ou diminuindo?<br><br>
        Propomos um 4º nível de análise devido a lidarmos com <b>dados abertos de reporte de casos e 
        mortes</b>, e já ser conhecido o baixo nível de testagem no país. Na versão anterior do Farol já apresentávamos a taxa de subnotificação 
        de casos como uma métrica importante dado o baixo nível de testagem e protocolos de reporte de casos com sintomas avançados para mostrar 
        o quanto possivelmente não estamos observando do espalhamento da doença.</br>
        <br>
        Na nova versão, junto à organização ModCovid com pesquisadores da USP, ajustamos a taxa de notificação para capturar melhor 
        características locais, com base na distribuição etária do município, região ou estado e na incidência da doença em diferentes 
        faixas etárias, e também estimar casos assintomáticos. <b>Isso fez com que alguns municípios que tinham uma baixa subnotificação 
        aumentassem seu nível de alerta</b>, pois consideramos os casos assintomáticos agora nessa métrica. Em contrapartida, ajustamos os 
        valores de referência dos níveis de subnotificação considerando cerca de 30%, de casos assintomáticos, que são de extrema dificuldade 
        de serem diagnosticados.
        </div>""",
        unsafe_allow_html=True,
    )

    # Limitação
    st.write(
        """<div class="base-wrapper"><span class="subsection-header"><b>Essas métricas são suficientes?</b></span><br>
        <b>Não.</b><br><br>Desenvolvemos os níveis de alerta do FarolCovid com dados públicos e abertos, disponíveis
        online. É um primeiro passo para o gestor orientar sua tomada de decisão de maneira informada,
        orientado por dados que o atualizam tanto sobre o estágio de evolução da doença em seu local 
        quanto sua capacidade de resposta. O gestor público, entretanto, conta com uma riqueza
        maior de informações que deve ser utilizada na formulação de respostas adequadas à sua realidade.
        Informações como a quantidade de testes realizados, a taxa de pessoas que testam positivo e o tempo
        médio de internação são outros fatores importantes para a tomada de decisão. Estamos à disposição
        para apoiar o gestor público a aprofundar a análise para seu estado ou município, de forma
        inteiramente gratuita. <a class="github-link" href="https://coronacidades.org/fale-conosco/>Entre em contato pelo Coronacidades.org</a>!
        </div>""",
        unsafe_allow_html=True,
    )

    # Detalhes dos indicadores
    gen_indicators_details(session_state, date_update)
Exemplo n.º 15
0
def main():
    """ 
    This is a function that returns the "about" page
      
    Parameters: 
        session_state (type): section dataset
    """
    utils.localCSS("localCSS.css")
    he.genHeader("sobre")
    utils.main_title(title="<b>Quem Somos?</b>", subtitle="")
    utils.gen_title(title="Sobre Nós", subtitle="")
    impulsodescricao = """A Impulso é uma organização não governamental com a missão auxiliar governos na melhora da entrega de 
    serviços públicos de saúde à população através do uso de dados e tecnologia, apoiando o processo de 
    tomada de decisão e visando o aprimoramento contínuo de políticas públicas. Foi fundada em 2019 e é 
    uma das idealizadoras da plataforma <a target="_blank" href="https://coronacidades.org/">CoronaCidades.org</a>."""
    gestodescricao = """O Instituto Gesto é uma organização sem fins lucrativos, criado com o apoio da Fundação Lemann, 
    a partir da evolução do programa Formar.
    Foi concebido para atender a crescente demanda de aprimoramento da gestão pública por meio de programas de 
    fortalecimento e otimização da atuação dos servidores públicos 
    O Instituto tem a missão de gerar uma profunda transformação na forma de se fazer a gestão pública no Brasil."""
    biddescricao = """O Banco Interamericano de Desenvolvimento tem como missão melhorar vidas. 
    Criado em 1959, o BID é uma das principais fontes de financiamento de longo prazo para o desenvolvimento 
    econômico, social e institucional da América Latina e do Caribe. O BID também realiza projetos de pesquisas 
    de vanguarda e oferece assessoria sobre políticas, assistência técnica e capacitação a clientes públicos e 
    privados em toda a região."""
    lemanndescricao = """A Fundação Lemann acredita que um Brasil feito por todos e para todos é um Brasil 
    que acredita no seu maior potencial: gente. Isso só acontece com educação de qualidade e com 
    o apoio a pessoas que querem resolver os grandes desafios sociais do país. Nós realizamos 
    projetos ao lado de professores, gestores escolares, secretarias de educação e governos 
    por uma aprendizagem de qualidade. Também apoiamos centenas de talentos, lideranças e organizações 
    que trabalham pela transformação social. Tudo para ajudar a construir um país mais justo, 
    inclusivo e avançado. Saiba mais em: <a target="_blank" href="https://fundacaolemann.org.br/">fundacaolemann.org.br</a>"""
    imaninabledescricao = """Imaginable Futures é uma empresa de investimento filantrópico global que acredita 
    que a aprendizagem tem o poder de estimular o potencial humano e tem como missão oferecer 
    a cada aluno oportunidades e ferramentas para que eles imaginem e realizem um futuro brilhante. 
    Com compromisso com a parceria e a cocriação, a organização está capacitando alunos, famílias 
    e comunidades para serem os agentes que moldam o futuro. A Imaginable Futures é um empreendimento 
    do The Omidyar Group, fundada e financiada por Pierre e Pam Omidyar."""
    formardescricao = """O programa Formar foi concebido na Fundação Lemann e atua em parceria com 
    redes públicas de educação em todo o Brasil. Sua gestão é feita por uma equipe 
    multidisciplinar de consultores e especialistas que buscam o aprimoramento da gestão 
    pedagógica e administrativa, a partir do engajamento de dirigentes e equipes gestoras 
    das secretarias e escolas que compõem os sistemas de educação. Buscam também estimular 
    a adoção de políticas públicas perenes que contribuam na melhoria do processo de 
    aprendizagem juntamente com professores e estudantes."""
    st.write(
        f"""
        <div class="conteudo" style="padding-bottom: 10px;">
            <b>Impulso</b><br>{impulsodescricao}<br>
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            <b>Instituto Gesto</b><br>{gestodescricao}<br>
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            <b>Fundação Lemann</b><br>{lemanndescricao}<br>
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            <b>Imaginable Futures</b><br>{imaninabledescricao}<br>
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            <b>Programa Formar</b><br>{formardescricao}<br>
        </div>
        """,
        unsafe_allow_html=True,
    )
    embasamento = """Para a construção do Escola Segura, revisamos a literatura científica, consultamos protocolos encontrados em manuais de retomada do ensino presencial tanto no Brasil como no exterior e pesquisamos as melhores práticas e seus resultados para trazer informações atualizadas e embasadas na ciência. Não menos importante, conversamos com gestores escolares das diversas regiões do país para compreender os desafios enfrentados por eles em seu trabalho com a rede escolar e com a comunidade. Essas conversas levantaram questões e desafios que guiaram nossa busca pelo o que há de mais consolidado na literatura científica e nas diretrizes técnicas de órgãos reguladores sobre uma retomada segura das atividades em ambiente escolar.<br><br>
Após a revisão de documentos técnicos e guias operacionais realizados por agências especializadas como o Center of Disease Control and Prevention (CDC - EUA)[15][20],pela  Escola de Saúde Pública T.H. Chan da Universidade de Harvard[21], pela Organização Mundial da Saúde (OMS)[19], pelo MInistério da Educação[18] e da Saúde[16] do Brasil, pela Fiocruz[17] e pelo Município de Sobral[22] e realizando conversas técnicas com especialistas na área de Educação e gestão escolar, desenvolvemos os 10 Passos, uma ferramenta para guiar a retomada presencial das aulas nas escolas. O objetivo dos 10 Passos é  fornecer ao gestor uma visão objetiva sobre as principais macro ações a serem tomadas durante o processo de retomada das atividades presenciais nas escolas, servindo de guia para reflexões mais aprofundadas sobre cada etapa em um segundo momento.<br><br>
Para esse segundo momento, o Escola Segura traz uma série de ferramentas auxiliares como o Simulador de Retomada, Plano de Ação e Monitoramento, Ferramentas de Verificação e Notificação de Casos Suspeitos e/ou Confirmados, e Protocolos de Atuação.<br><br>
Na estruturação do Simulador foram utilizados como base modelos de retomada do ensino presencial apresentados pela UNESCO[2][4], pela ONU[3], e pela Comissão de Educação do Estado da Carolina do Norte - EUA[5]. Utilizamos também considerações sobre espalhamento da COVID19 dentro dos ambientes de ensino apresentadas em papers e reportagens sobre a experiência de outros países[1][6][7][8][9]. <br><br>
Para as informações sobre protocolos de limpeza e higienização do ambiente escolar, foram utilizados manuais disponibilizados pelo Governo do Amazonas para a retomada das atividades escolares[10] e determinações técnicas de agências de regulação e vigilância sanitária como a ANVISA[12][13] e o CDC (Center for Disease Control) - EUA[14]. Consultamos também as diretrizes sobre cuidado e limpeza em ambientes com risco biológico elaboradas pelo Centro Colaborador para a Qualidade do Cuidado e Segurança do Paciente - Proqualis[11] - entidade vinculada ao ICICT/Fiocruz e que tem como objetivo ser uma fonte de conteúdos técnico-científicos para a área da saúde para adaptar esses cuidados ao ambiente escolar, considerando as melhores práticas que devem ser realizadas quando o risco de contaminação está presente.<br><br>
O Escola Segura traz também uma ferramentas específicas com protocolos sanitários a serem seguidos pelos funcionários das Escolas em relação ao ambiente escolar, ao transporte escolar, à secretaria e atividades administrativas e a comunidade. Para a elaboração desses protocolos, orientações do Center for Disease Control (CDC)-EUA[15] e da ONU[19] foram utilizadas como bases, sendo feitas adaptações que refletem as diversas realidades encontradas no Brasil.<br><br>
O Escola Segura traz um modelo de Plano de Ação e Monitoramento na identificação de casos para auxiliar o gestor a organizar sua rede para lidar com casos suspeitos e/ou confirmados entre alunos e funcionários. Para a criação desse plano de ação, foram utilizadas novamente as considerações do CDC-EUA, além de diretrizes dos Ministérios da Educação[18] e da Saúde[16] do Brasil, e Fiocruz[17]."""
    utils.gen_title(title="Embasamento científico e metodológico",
                    subtitle=embasamento)
    embasamentosimulador = """Uma das ferramentas disponíveis no Escola Segura é o Simulador de Retomada Presencial das Atividades Escolares. O objetivo dessa ferramenta é auxiliar o gestor escolar no planejamento da capacidade física das escolas de sua rede, considerando o número de docentes, alunos e salas na simulação de possíveis modelos a serem adotados. 
<br><br>Utilizando o Simulador, o gestor poderá testar diferentes configurações de carga horária diária presencial (de 0 até 6 horas) e remota (de 0 até 6 horas) que cada turma terá e como essa configuração escolhida afeta a organização e dimensionamento das necessidades estruturais para a retomada. 
<br><br>Para utilizar o Simulador, o gestor deve primeiramente selecionar qual 1. Estado da federação, 2.  Município e 3. Nível de Administração (Estadual, Municipal, ou Todos) ele deseja. A partir dessa informação, o Simulador traz, segundo os dados do último CENSO ESCOLAR, o 4. “Total de alunos matriculados” e o 5. “Total de professores” da rede. Atenção: Se o nível selecionado for Rede - tanto Municipal como Estadual - os dessas categorias são fixos, mas se o nível selecionado for "Escolar" esses valores são livres para serem alterados. O gestor pode ainda, inserir a 6. quantidade de alunos e de 7. professores que ele já estima que não irão retornar presencialmente (exemplo: professores e alunos que fazem parte de grupos de alto risco para a Covid-19).
<br><br>No segundo passo, o gestor deve informar a 1. “Quantidade de salas disponíveis” e 2. o “número máximo de alunos em cada sala”. Deixamos como referência uma ferramenta de auxílio para esse cálculo que foi desenvolvida pela Faculdade de Educação da UNICAMP. 
<br><br>No terceiro e último passo, o gestor pode selecionar a 1. quantidade de “horas diárias presencial” que deseja atribuir às turmas (variando de 0 à 8 horas diárias), 2. A quantidade de “horas diárias de aula remota por turma” (variando de 0 à 6 horas diárias), 3. “Número de turnos em um dia” (variando de 0 à 12 turnos por dia). O gestor preenche ainda a quantidade de 4. “Horas aula diárias por professor” e 5. “Tempo de hora aula” (em minutos).
<br><br>Com isso, o Simulador devolve ao gestor três grupos de informação: Sobre turmas, sobre sua organização de recursos, e sobre a quantidade necessária de materiais como máscaras, álcool em gel e termômetros.
<br><br>Sobre turmas, o resultado da simulação informa a quantidade de turmas que o gestor consegue retornar e também a quantidade de dias letivos necessários para cumprir as 800 horas anuais determinadas pelo MEC[24].
<br><br>Sobre a organização, o resultado da simulação traz o número de alunos e professores que retornariam e os que não retornariam - baseado na informação passada pelo gestor, o número de salas ocupadas com aulas presenciais e o número de salas ficaram livres. Esse cálculo é realizado com base nos parâmetros definidos pelo próprio gestor nos segundo e terceiro passos.
<br><br>Sobre os materiais, o resultado da simulação traz a quantidade que seriam necessárias semanalmente a serem disponibilizadas para alunos e docentes de: álcool em gel, máscaras e termômetros. Esses cálculos são realizados com base nas informações passadas pelo gestor e em determinações técnicas da Fiocruz / Proqualis [11][17] e dos Ministérios da Saúde[16]  e Educação[18]."""
    st.write(
        f"""
        <div class="conteudo title-section" style="padding-bottom:20px;"> 
            <img id="embasamentosimulador" class="square" src="https://i.imgur.com/gGIFS5N.png">
            Metodologia e Uso do Simulador de Retomada Presencial das Atividades Escolares
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            {embasamentosimulador}
        </div>
        """,
        unsafe_allow_html=True,
    )
    utils.gen_title(title="Fontes e referências", subtitle="<br>")
    st.write(
        f"""
        <div class="conteudo main-padding">
            <div class="table-responsive">
            <table>
                <thead>
                    <tr>
                        <th>Título</th>
                        <th>Fonte</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>[1] COVID-19 Mathematical Modeling for Cornell’s Fall Semester </td>
                        <td> <a href="https://people.orie.cornell.edu/pfrazier/COVID_19_Modeling_Jun15.pdf">
                            Cornell University
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[2] Framework for reopening schools</td>
                        <td> <a href="https://unesdoc.unesco.org/ark:/48223/pf0000373348">
                            United Nations Educational, Scientific and Cultural Organization (UNESCO)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[3] Education during Covid-19 and beyond </td>
                        <td> <a href="https://www.un.org/development/desa/dspd/wp-content/uploads/sites/22/2020/08/sg_policy_brief_covid-19_and_education_august_2020.pdf">
                             United Nations (UN)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[4] COVID-19 response – hybrid learning</td>
                        <td> <a href="https://en.unesco.org/sites/default/files/unesco-covid-19-response-toolkit-hybrid-learning.pdf">
                            United Nations Educational, Scientific and Cultural Organization (UNESCO)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[5] LIGHTING OUR WAY FORWARD: North Carolina’s Guidebook for Reopening Public Schools </td>
                        <td> <a href="https:https://www.dpi.nc.gov/news/covid-19-response-resources/lighting-our-way-forward">
                            DPI
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[6] Restarting and Reinventing School </td>
                        <td> <a href="https://restart-reinvent.learningpolicyinstitute.org/">
                            Learning Policy Institute
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[7]  Determining  the  optimal  strategy  for  reopening  schools,  work  and  society  in  the  UK: balancing  earlier  opening  and  the  impact  of  test  and  trace  strategies  with  the  risk  of occurrence of a secondary COVID-19 pandemic wave </td>
                        <td> <a href="https://www20.anvisa.gov.br/segurancadopaciente/images/documentos/ManualLimpezaeDesinfeccaofinal.pdf">
                           ANVISA
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[8] Mathematical model of Covid-19 spread: How to reopen a college campus </td>
                        <td> <a href="https://www.youtube.com/watch?v=9K_BjXRe-wk">
                           Michigan Technological University
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[9] An Examination of School Reopening Strategies during the SARS-CoV-2 Pandemic</td>
                        <td> <a href="https://doi.org/10.1101/2020.08.05.20169086">
                           DOI
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[10] Manual de Protocolos de Saúde</td>
                        <td> <a href="http://www.educacao.am.gov.br/wp-content/uploads/2020/07/PROTOCOLOS-DE-SAuDE02.pdf">
                           Governo do Estado do Amazonas
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[11] Ferramenta de Planejamento e Cálculo de Custos de Preparações Alcoólicas para a Higiene das Mãos</td>
                        <td> <a href="https://proqualis.net/sites/proqualis.net/files/FerramentadePlanejamentoeClculodeCustosgrfica.pdf">
                            Proqualis
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[12] Segurança do paciente em serviços de saúde: limpeza e desinfecção de superfícies</td>
                        <td> <a href="https://www20.anvisa.gov.br/segurancadopaciente/index.php/publicacoes/item/seguranca-do-paciente-em-servicos-de-saude-limpeza-e-desinfeccao-de-superficies">
                            ANVISA
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[13] NOTA TÉCNICA Nº 47/2020/SEI/GIALI/GGFIS/DIRE4/ANVISA
Uso de luvas e máscaras em estabelecimentos da área de
alimentos no contexto do enfrentamento ao COVID-19.
</td>
                        <td> <a href="https://www.gov.br/anvisa/pt-br/arquivos-noticias-anvisa/310json-file-1">
                            ANVISA
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[14] Appendix A – Risk-assessment for determining environmental cleaning method and frequency</td>
                        <td> <a href="https://www.cdc.gov/hai/prevent/resource-limited/risk-assessment.html">
                            Centers for Disease Control and Prevention (CDC)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[15] Checklist: Planning for In-Person Classes
Instituição: Centers for Disease Control and Prevention (CDC)
</td>
                        <td> <a href="https://www.cdc.gov/coronavirus/2019-ncov/community/pdf/Back-to-School-Planning-for-In-Person-Classes.pdf">
                            CDC
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[16] Orientações para Retomada Segura das Atividades Presenciais nas Escolas de Educação Básica no Contexto da Pandemia da COVID-19</td>
                        <td> <a href="http://antigo.saude.gov.br/images/pdf/2020/September/18/doc-orientador-para-retomada-segura-das-escolas-no-contexto-da-covid-19.pdf">
                            Ministério da Saúde
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[17] Manual sobre Biossegurança para Reabertura de Escolas no Contexto da COVID-19</td>
                        <td> <a href="https://portal.fiocruz.br/sites/portal.fiocruz.br/files/documentos/manualreabertura.pdf">
                            Fiocruz
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[18] Guia de Implementação de Protocolos de Retorno das Atividades Presenciais nas Escolas de Educação Básica</td>
                        <td> <a href="https://www.gov.br/mec/pt-br/assuntos/GuiaderetornodasAtividadesPresenciaisnaEducaoBsica.pdf">
                            Ministério da Educação
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[19] Considerations for school-related public health measures in the context of COVID-19</td>
                        <td> <a href="https://www.who.int/publications/i/item/considerations-for-school-related-public-health-measures-in-the-context-of-covid-19">
                            Organização Mundial da Saúde (OMS)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[20] Operating schools during COVID-19: CDC's Considerations</td>
                        <td> <a href="https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools.html?CDC_AA_refVal=https%3A%2F%2Fwww.cdc.gov%2Fcoronavirus%2F2019-ncov%2Fcommunity%2Fschools-childcare%2Fguidance-for-schools.html">
                            Centers for Disease Control and Prevention (CDC)
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[21] SCHOOLS FOR HEALTH: Risk Reduction Strategies for Reopening Schools</td>
                        <td> <a href="https://schools.forhealth.org/risk-reduction-strategies-for-reopening-schools/">
                            Harvard T.H. Chan School of Public Health
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[22] PLANO DE RETOMADA DAS ATIVIDADES DE EDUCAÇÃO PÚBLICA NO MUNICÍPIO DE SOBRAL</td>
                        <td> <a href="https://drive.google.com/file/d/1H2Gzr5C2I0dAA7fyGD5MZHVjwaolND3N/view">
                            Instituição: Município de Sobral - CE
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[23] Cálculo de estudantes por sala</td>
                        <td> <a href="https://www.fe.unicamp.br/salas/">
                            FE/Unicamp
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td>[24] LEI Nº 9.394
</td>
                        <td> <a href="http://www.planalto.gov.br/ccivil_03/leis/l9394.htm">
                            Presidência da República - Casa Civil
                            </a>
                        </td>
                    </tr>
                </tbody>
            </table>
            </div>
        </div>
        """,
        unsafe_allow_html=True,
    )

    tm.genSimule()
    foo.genFooter()
Exemplo n.º 16
0
def main():
    utils.localCSS("localCSS.css")
    he.genHeader("guia10passos")
    if os.getenv("IS_HEROKU") == "TRUE":
        urlpath = os.getenv("urlpath")
    else:
        urlpath = 'https://escolasegura.coronacidades.org/'

    protocol_icon = utils.load_image("imgs/plan_protocol_icon.png")
    verify_icon = utils.load_image("imgs/prepare_verify_icon.png")
    verify_image = utils.load_image("imgs/prepare_verify_forms.png")
    notify_icon = utils.load_image("imgs/monitor_notify_icon.png")
    notify_image = utils.load_image("imgs/monitor_notify_forms.png")
    plan_icon = utils.load_image("imgs/monitor_plan_icon.png")
    plan_image = utils.load_image("imgs/monitor_plan_forms.png")
    st.write(
        f"""
        <div class="conteudo main-title" style="padding-top: 50px;"> 
            Como sua rede pode se preparar para a retomada das atividades presenciais? Temos 10 passos para auxiliar no processo.
        </div>
        <div class="conteudo" style="padding-bottom: 10px;">
            Revisamos a literatura científica, protocolos e melhores práticas encontradas no Brasil e no mundo para criar 10 passos para você, gestor da educação, preparar e gerir a retomada das atividades presenciais nas escolas, diante dos desafios impostos pela Covid-19. 
            <br><br>
            Aqui, você encontra orientações que começam desde o planejamento da reabertura, com a definição dos protocolos sanitários e regras que devem ser adotados pelas escolas antes de reabrir, até a gestão da rede após a retomada, com recomendações sobre o que fazer diante de algum caso confirmado de Covid-19 dentro da unidade escolar. 
            <br><br>
            Ao longo desse processo de retomada, você pode definir prioridades de acordo com a sua realidade local, mas lembre-se de seguir todas as recomendações presentes nos 10 passos para estruturar uma reabertura mais segura para toda a comunidade escolar.
            <br><br>
            Acesse <a href="https://drive.google.com/file/d/1HqWKjM8uD4HM64fbFcbjS-pPD3SzWcmt/view?usp=sharing" target="blank_" style="text-decoration: none;">aqui</a> os 10 Passos em forma de lista.
        </div>
        <div class="conteudo title-section" style="padding-bottom:20px;"> 
            <img class="square" src="https://i.imgur.com/gGIFS5N.png">
            Passos:
        </div>
        """,
        unsafe_allow_html=True,
    )

    obj1 = "Definir os atores responsáveis por planejar, preparar e monitorar a rede para a retomada de atividades presenciais e estabelecer um canal de comunicação com a comunidade escolar."
    term1 = "Ter clareza sobre os papéis e responsabilidades de cada órgão dentro do processo de retomada, com um comitê estruturado para tomar decisões com agilidade, com discursos e comunicação alinhados. "
    prat1 = """Ação 1. Forme uma Comissão de Reabertura com os atores-chave presentes nos diversos órgãos que devem ser engajados nessa retomada. Além da Secretaria de Educação, a comissão pode envolver membros da Secretaria de Saúde, Secretaria de Assistência/Desenvolvimento Social e também lideranças regionais, caso sua rede conte com essa estrutura. 
<br><br>
Ação 2. Crie um canal para comunicação constante da comissão com a comunidade, em especial com diretores, funcionários de escola, professores, pais e responsáveis. Prepare uma pessoa para ser porta-voz e ponto de referência de todo o processo de retomada para a comunidade escolar e para a imprensa. 
<br><br>
Ação 3. Estabeleça um plano de comunicação, definindo o que, quando, como e com qual frequência a estratégia de reabertura das atividades presenciais será comunicada."""
    obj2 = "Definir os critérios e condições sanitárias que serão considerados para o retorno das atividades presenciais nas escolas, uma vez que o cenário da Covid-19 é variável."
    term2 = "Projetar uma data de retomada das atividades presenciais, de acordo com os critérios definidos."
    prat2 = """Ação 1. Pactue com a Secretaria de Saúde sobre quais condições sanitárias, critérios e dados da Covid-19 devem ser considerados na hora de decidir sobre o retorno seguro de atividades escolares presenciais na sua rede.
<br><br>
Ação 2.  Com base nos critérios pactuados com a Secretaria de Saúde, defina a data de retomada, mesmo que parcial, das atividades presenciais e comece a preparação para o retorno. 
<br><br>
Ação 3. Articule com atores-chave externos, como sindicato de professores, líderes comunitários locais e outros atores relevantes, sobre os critérios pactuados e a data pensada para a  retomada."""
    obj3 = "Estabelecer o protocolo sanitário a ser seguido por todas as escolas da rede que retomarem as atividades presenciais, com orientações sobre adaptação de estrutura física e a necessidade de aquisição de materiais de limpeza e EPIs para prevenir o contágio da Covid-19 dentro das unidades de ensino."
    term3 = "Adequar suas unidades de ensino ao protocolo estabelecido e comunicar as medidas de prevenção adotadas a toda a comunidade escolar. "
    prat3 = """Ação 1. Prepare, com o apoio da Secretaria de Saúde, um protocolo sanitário a ser seguido por todas as escolas que retomarem as atividades presenciais, com a definição da lista de materiais necessários para sua implementação. 
<br><br>
Ação 2. Distribua o protocolo para os diretores escolares.
<br><br>
Ação 3. Organize a compra e distribuição de materiais de limpeza e de proteção individual para as unidades escolares.
<br><br>
Ação 4. Forme um time de inspeção, composto por gestores da Secretaria de Educação e da Vigilância Sanitária, para avaliar a adequação das unidades de ensino ao protocolo e identificar a necessidade de realização de pequenas reformas.  
<br><br>
Ação 5. Agende e realize visitas de inspeção nos prédios das escolas da sua rede. 
<br><br>
Ação 6. Implemente as obras de adequação necessárias.
<br><br>
Ação 7. Faça uma nova rodada de visitas de inspeção e certifique-se que as unidades têm as condições definidas no protocolo sanitário para a retomada. 
<br><br>
Ação 8. Comunique sobre o retorno. Prepare materiais informativos sobre a Covid-19 e os protocolos sanitários adotados, para que a comunidade escolar e a sociedade em geral estejam bem informadas sobre as medidas de prevenção tomadas nessa retomada. 
<br><br>
<b>Quer saber quais são as principais recomendaçõe sanitárias e protocolos para um retomada segura? Clique e confira o material que criamos com as principais recomendações para da Covid-19 dentro e fora da escola:</b>"""
    obj4 = "Identificar, a partir da definição de grupos de risco para Covid-19, quantos estudantes e professores poderão retornar às atividades presenciais em cada unidade escolar."
    term4 = "Projetar a quantidade de estudantes e professores que não retornarão às salas de aula presenciais. Só assim você terá informação qualificada para avaliar o modelo de reabertura mais adequado à realidade da sua comunidade escolar. "
    prat4 = """Ação 1. Peça aos diretores das escolas que dimensionem quantos alunos de cada unidade de ensino, provavelmente, não irão retornar às salas de aula diante de uma retomada das atividades presenciais. Sugerimos que você utilize o canal de comunicação estabelecido pela Comissão de Reabertura, conforme orientado no Passo 1 deste guia, para essa comunicação.  
<br><br>
Ação 2. Dimensione quantos professores estão em grupo de risco e não poderão retornar para atividades presenciais por esse motivo. 
<br><br>
<b>Informe os dados da sua rede e Simule o retorno:</b>"""
    obj5 = "Planejar e definir qual modelo de reabertura das escolas é mais adequado para sua realidade."
    term5 = "Saber quais grupos de estudantes terão prioridade na retomada de atividades presenciais, reorganizando turmas e salas de acordo com o modelo adotado."
    prat5 = """Ação 1. Determine como será usado o tempo presencial e o tempo remoto, se existir. 
<br><br>
Ação 2. Estabeleça qual modelo será adotado no retorno à sala de aula: serão priorizados os anos terminais ou será dada prioridade a alunos com dificuldade de acompanhar o ensino remoto, por exemplo?
<br><br>
Ação 3. Feito o diagnóstico de professores e alunos que podem retornar, conforme definido no passo 4 deste guia, e com base no modelo de retomada escolhido, reorganize a divisão de salas e turmas. Caso necessário, programe a contratação de professores substitutos para suprir a falta de professores que integram o grupo de risco e não poderão retornar.
<br><br>
Ação 4. Comunique à comunidade escolar o modelo adotado e a nova organização de estudantes e professores. 
<br><br>
<b>Entenda que critérios adotar para definir o melhor modelo para sua rede></b>"""
    obj6 = "Preparação do material pedagógico de acordo com o modelo de reabertura definido."
    term6 = "Dispor do material mais adequado para dar sequência ao processo de aprendizado dos estudantes. "
    prat6 = """Ação 1. Revise e prepare o material pedagógico para possibilitar um retorno adequado da rede, considerando o modelo de reabertura adotado. 
<br><br>
Ação 2. Prepare o apoio pedagógico (currículo, formação, avaliação, busca ativa). 
<br>
Recomendamos que o estudante tenha a opção de dar continuidade a sua formação no modo remoto. Caso seja adotado esse modelo, sugerimos que professores que não podem retornar para sala de aula fiquem responsáveis pela produção de material de alunos que continuam remotos."""
    obj7 = "Identificar e atuar sobre alunos que não têm acompanhado as atividades remotas e estão em risco de perder o vínculo com a comunidade escolar. "
    term7 = "Estabelecer uma rotina de busca ativa e suporte aos estudantes da sua comunidade escolar, para superar os desafios impostos pela Covid-19. "
    prat7 = """Ação 1. Estabeleça  junto à Secretaria de Assistência/Desenvolvimento Social uma rotina de identificação e busca ativa de alunos que não retornaram à sala de aula.
<br><br>
Ação 2. Implemente, em parceria com a Secretaria de Saúde do estado ou município, canais de atenção à saúde mental para apoiar profissionais, estudantes e responsáveis nesse processo de retorno."""
    obj8 = "Estruturar um plano de contingência para identificar, isolar e acompanhar casos suspeitos de Covid-19 dentro de unidades escolares.  "
    term8 = "Saber o que fazer e a quem acionar diante do surgimento de um caso suspeito de Covid-19 após a retomada das atividades presenciais. "
    prat8 = """Ação 1. Pactue com a Unidade Básica de Saúde da região de cada escola como será feito o acompanhamento da comunidade escolar.<br>
<br>
Ação 2. Prepare um processo de tomada de decisão sobre fechamento de escolas, definindo papéis e responsabilidades de professores, diretores, secretaria e pais e responsáveis.<br>
<br>
Ação 3. Prepare o porta-voz da Comissão de Reabertura, prevista no passo 1 deste guia, para uma rotina de comunicação acerca da suspensão de atividades de turmas e em escolas à comunidade e à imprensa.<br> 
<br>
Ação 4. Prepare um fluxograma para atribuir responsabilidades diante de um possível caso suspeito e comunique os procedimentos de contingência à comunidade escolar.
<br><br>
<b>Acesse nossa ferramenta para conhecer as indicações de como se preparar, agir e monitorar casos suspeitos ou confirmados de Covid-19:</b>"""
    obj9 = "Instruir e capacitar todos os envolvidos no retorno às atividades presenciais nas escolas."
    term9 = "Ter equipe e comunidade escolar alinhadas e bem informadas sobre os protocolos e procedimentos de prevenção à Covid-19."
    prat9 = """Ação 1. Instrua os gestores escolares, docentes e demais colaboradores das escolas, bem como pais e responsáveis, para que todos estejam alinhados com as novas condutas e responsabilidades, para garantir a observação do protocolo sanitário adotado para reabertura das escolas.
<br><br>
Ação 2. Distribua para as escolas e para a comunidade os materiais de comunicação de procedimentos e novas diretrizes, como cartazes e posters."""
    obj10 = "Manter uma rotina de acompanhamento regular das escolas após a reabertura e da situação da doença na sua cidade."
    term10 = "Saber qual a situação da Covid-19 no seu terrítório e na sua rede escolar para agir com velocidade diante de alguma mudança de cenário. "
    prat10 = """Ação 1. Pactue com a Secretaria de Saúde uma rotina de atualização sobre a situação epidemiológica da doença na sua cidade. 
<br><br>
Ação 2. Acompanhe também a situação epidemiológica da rede e dos casos nas escolas. 
<br><br>
Ação 3. Prepare comunicados internos sobre a situação da rede e determine uma periodicidade de envio.
<br><br>
Ação 4. Planeje e realize uma estratégia de comunicação com a imprensa sobre a situação das escolas.
<br><br>
Ação 5. Acompanhe também a situação epidemiológica da rede e dos casos nas escolas.
<br><br>
<b>Você pode utilizar este formulário como modelo para distribuir para as escolas utilizarem para informar a secretária sobre o caso suspeito ou confirmado:</b>"""
    st.write(
        f"""
        <div class="conteudo" style="padding-top:50px;">
            <div class="flat-tabs-left flat-tabs-orange tabs-zoom-in">
                <input type="radio" id="tab-1" name="flat-tabs-left" class="section-one">
                <label for="tab-1">1. Diálogo</label>
                <input type="radio" id="tab-2" name="flat-tabs-left" class="section-two">
                <label for="tab-2">2. Critérios</label>
                <input type="radio" id="tab-3" name="flat-tabs-left" class="section-three">
                <label for="tab-3">3. Protocolos</label>
                <input type="radio" id="tab-4" name="flat-tabs-left" class="section-four">
                <label for="tab-4">4. Dimensionamento</label>
                <input type="radio" id="tab-5" name="flat-tabs-left" class="section-five">
                <label for="tab-5">5. Modelo</label>
                <input type="radio" id="tab-6" name="flat-tabs-left" class="section-six">
                <label for="tab-6">6. Pedagógico </label>
                <input type="radio" id="tab-7" name="flat-tabs-left" class="section-seven">
                <label for="tab-7">7. Pessoas</label>
                <input type="radio" id="tab-8" name="flat-tabs-left" class="section-eight">
                <label for="tab-8">8. Contingência</label>
                <input type="radio" id="tab-9" name="flat-tabs-left" class="section-nine">
                <label for="tab-9">9. Capacitação</label>
                <input type="radio" id="tab-10" name="flat-tabs-left" class="section-ten">
                <label for="tab-10">10. Acompanhamento </label>           
                <ul>
                    <li class="section-one" id="section-one">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>1. Diálogo</b>
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                 <div style="padding-bottom: 10px;">
                                    {obj1}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term1}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat1}
                                </div>
                                <div>
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-two">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>2. Determine as condições do retorno
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj2}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term2}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat2}
                                </div>
                                <div>
                                </div>
                            </div>  
                        </div>                      
                    </li>
                     <li class="section-three">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>3. Protocolos sanitários
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj3}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term3}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat3}
                                </div>
                                <div class="upper-padding row">
                                    <div class="col card-plan container">
                                        <div class="left-margin">
                                            <div class="text-title-section main-orange-span minor-padding"> 
                                                <img class="icon" src="data:image/png;base64,{protocol_icon}" alt="Fonte: Flaticon">
                                                <b>Protocolos</b>
                                            </div>
                                            <div class="minor-padding main-black-span">
                                                O PDF que você encontrará aqui inclui as <b>recomendações sanitárias e protocolos</b> que podem ser utilizados com a rede para conferir sua adequação dentro das unidades, durante o transporte escolar e até mesmo nas secretarias.
                                            </div><br>
                                            <div class="button-position" style="padding-bottom: 10px;">
                                                <a href="https://drive.google.com/file/d/1T8OsZ5PKFC5vn6QrtSJdkOlONaJjS8lc/view?usp=sharing" target="blank_">
                                                <button class="button"; style="border-radius: .25rem;">acesse ></button><br>
                                                </a>
                                            </div>
                                            <div class="minor-padding main-black-span">
                                                <br>Ou confira o arquivo em forma de <b>lista para verifição</b>.
                                            </div><br>
                                            <div class="button-position" style="padding-bottom: 10px;">
                                                <a href="https://drive.google.com/file/d/1MH6Cpf43Eq31MKqqE39FGMK-aruCD9_c/view?usp=sharing" target="blank_">
                                                <button class="button"; style="border-radius: .25rem;">acesse ></button><br>
                                                </a>
                                            </div>
                                        </div><br>
                                    </div>
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-four">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>4. Dimensione a rede
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj4}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term4}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat4}
                                </div>
                                <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                    <a href='{urlpath}?page=simulation' target="_blank">
                                    <button class="button"; style="border-radius: 0.8rem;">Simular ></button><br>
                                    </a>
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-five">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>5. Decida o modelo de reabertura
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj5}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term5}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat5}
                                </div>
                                <div>
                                <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                        <a href='{urlpath}?page=simulation' target="_blank">
                                        <button class="button"; style="border-radius: 0.8rem;">Simular ></button><br>
                                        </a>
                                    </div>
                                </div>
                            </div> 
                        </div>
                    </li>
                    <li class="section-six">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>6. Prepare o material pedagógico
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj6}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term6}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat6}
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-seven">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>7. Dê atenção aos alunos
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj7}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term7}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat7}
                                </div>
                            </div>  
                        </div>
                    </li>
                     <li class="section-eight">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>8. Plano de contingência
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj8}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term8}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat8}
                                </div>
                                <div class="upper-padding row">
                                    <div class="col card-plan container" style="padding:20px;">
                                        <div>
                                         <div class="text-title-section minor-padding main-orange-span"> 
                                            <img class="icon" src="data:image/png;base64,{notify_icon}" alt="Fonte: Flaticon">
                                            <b>Ferramenta de notificação</b>
                                        </div>
                                        <br>
                                        <b><i>O que é?</b></i><br>
                                        Arquivo PDF com perguntas que podem ser utilizadas para criar formulário de notificação de casos suspeitos ou confirmados na escola.<br><br>
                                        <div class="minor-padding button-position">
                                            <a href="https://drive.google.com/file/d/1-vmLPk7Cw6CBBC1aNrj9pQFt7aN-uskz/view" target="_blank">
                                                <button class="button"; style="border-radius: .25rem;"> acesse aqui ></button>
                                            </a>
                                        </div>
                                        </div><br>
                                    </div>
                                    <div class="col card-plan container" style="padding:20px;">
                                        <div>
                                         <div class="text-title-section minor-padding main-orange-span"> 
                                                <img class="icon" src="data:image/png;base64,{plan_icon}" alt="Fonte: Flaticon">
                                                <b>Plano de contingência</b>
                                            </div>
                                            <div>
                                                <br>
                                                <b><i>O que é?</b></i><br>Plano de Ação e Monitoramento na identificação de casos.
                                                <br><br>
                                            </div>
                                            <div class="minor-padding button-position">
                                                <a href="https://drive.google.com/file/d/1L6FXolCFTGQrfz_TT9zzxh1ojR5KfWEB/view">
                                                    <button class="button"; style="border-radius: .25rem;"> acesse aqui > </button>
                                                </a>
                                            </div>
                                        </div><br>
                                    </div>
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-nine">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>9. Instrua os profissionais
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj9}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                 <div style="padding-bottom: 10px;">
                                   {term9}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;">
                                    {prat9}
                                </div>
                            </div>  
                        </div>
                    </li>
                    <li class="section-ten" id="section-ten">
                        <div class="grid-container">
                            <div class="column-twelve">
                                <div class="title-section">
                                    <img class="square" src="https://i.imgur.com/gGIFS5N.png"><b>10. Acompanhe sua rede!
                                </div>
                                <div class="title-section">OBJETIVO DESTA ETAPA</div>
                                <div style="padding-bottom: 10px;">
                                    {obj10}
                                </div>
                                <div class="title-section">AO TÉRMINO DESTA ETAPA VOCÊ CONSEGUIRÁ</div>
                                <div style="padding-bottom: 10px;">
                                    {term10}
                                </div>
                                <div class="title-section">COLOCANDO EM PRÁTICA</div>
                                <div style="padding-bottom: 10px;"> 
                                    {prat10}
                                </div>
                                <div class="row">
                                    <div class="col card-plan container" style="padding:15px;">
                                        <div>
                                         <div class="text-title-section minor-padding main-orange-span"> 
                                            <img class="icon" src="data:image/png;base64,{notify_icon}" alt="Fonte: Flaticon">
                                            <b>Ferramenta de notificação</b>
                                        </div>
                                        <br>
                                        <b><i>O que é?</b></i><br>
                                        Arquivo PDF com perguntas que podem ser utilizadas para criar formulário de notificação de casos suspeitos ou confirmados na escola.<br><br>
                                        <div class="minor-padding button-position">
                                            <a href="https://drive.google.com/file/d/1-vmLPk7Cw6CBBC1aNrj9pQFt7aN-uskz/view" target="_blank">
                                                <button class="button"; style="border-radius: .25rem;"> acesse aqui ></button>
                                            </a>
                                        </div>
                                        </div><br>
                                    </div>
                                    <div class="col card-plan container" style="padding:15px;">
                                        <div>
                                         <div class="text-title-section minor-padding main-orange-span"> 
                                            <img class="icon" src="data:image/png;base64,{protocol_icon}" alt="Fonte: Flaticon"><b>Todos os Passos</b>
                                        </div>
                                        <br>
                                        Gostou do conteúdo? Acesse o Guia com os 10 Passos em forma de lista abaixo e aproveite para distribuir ele para sua rede!<br><br>
                                        <div class="minor-padding button-position">
                                            <a https://drive.google.com/file/d/1HqWKjM8uD4HM64fbFcbjS-pPD3SzWcmt/view?usp=sharing" target="_blank">
                                                <button class="button"; style="border-radius: .25rem;"> acesse aqui ></button>
                                            </a>
                                        </div>
                                        </div><br>
                                    </div>
                                </div>
                            </div>  
                        </div>
                    </li>
                </ul>
            </div>
        </div>""",
        unsafe_allow_html=True,
    )
    tm.genSimule()
    foo.genFooter()
Exemplo n.º 17
0
def main():

    utils.localCSS("style.css")

    # Time
    time = {
        "ana": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4E03AQGdLO2wZpvasA/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=BsnUsaEI-eLrn_oxLf7cEyXKGx2_7OBJZ9suUrRev_8",
            "bio":
            "<b>Ana Paula Pellegrino</b><br><i>Coordenação</i><br> Doutoranda em Ciência Política da Georgetown University"
        },
        "diego": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4D03AQGc03RUyqn7rQ/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=VQeYTDAIkwXnCBISvvBne6GO-hOnHUu70s35OwcH4RE",
            "bio":
            "<b>Diego Oliveira</b><br><i>Voluntário Desenvolvimento BE</i><br>Mestre em Física Aplicada pela Unicamp"
        },
        "fernanda": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4D03AQFveYuReCqBVg/profile-displayphoto-shrink_200_200/0?e=1593043200&v=beta&t=14iMvOQdBESRi2OmsqmAdDBWVh0xdb_77Tw_dUycAto",
            "bio":
            "<b>Fernanda Scovino</b><br><i>Coordenação e Desenvolvimento</i><br> Graduada em Matemática Aplicada pela FGV"
        },
        "francisco": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C5103AQEgizhRREvpXw/profile-displayphoto-shrink_400_400/0?e=1595462400&v=beta&t=4tbQssvl-9TbFcnYCs2m7KpC_Y9wGry8lHKUt2XNk2o",
            "bio":
            "<b>Francisco Nogueira</b><br><i>Voluntário Desenvolvimento BE</i><br>Graduando em Engenharia Civil na Universidade Federal do Ceará"
        },
        "gabriel_saru": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C5603AQHB6rggvacwQw/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=jj_atUnkJJm8SDKB1GQBF5n8bM-8dUKsTJE1Nsph3qE",
            "bio":
            "<b>Gabriel Saruhashi</b><br><i>Voluntário Desenvolvimento FE</i><br>Graduando em Ciência da Computação e Psicologia na Yale University"
        },
        "joao_abreu": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4E03AQF-9YgG5RDaMA/profile-displayphoto-shrink_400_400/0?e=1595462400&v=beta&t=DqvapZaWe1nRo9HgQS6bmZtX8U-j1DmvV2RbE37oY-4",
            "bio":
            "<b>João Abreu</b><br><i>Coordenação</i><br>Co-fundador da Impulso e Mestre em Desenvolvimento Internacional pela Universidade de Harvard"
        },
        "joao_carabetta": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4D03AQF8rJe40DpQqA/profile-displayphoto-shrink_200_200/0?e=1591833600&v=beta&t=6smhmNk7Ppktq5cX4vxhD4x-A6mMTdZnIAEu5DlV18g",
            "bio":
            "<b>João Carabetta</b><br><i>Voluntário Desenvolvimento BE</i><br>Mestre em Matemática Aplicada pela FGV"
        },
        "luiz": {
            "foto":
            "https://www.gravatar.com/avatar/1617e0d1d8ac9ec461c5f215772f7552?s=200&d=mm&r=g",
            "bio":
            "<b>Luiz Felipe Costa</b><br><i>Voluntário Desenvolvimento BE</i><br>Graduado em Sistemas de Informação pela UNIFEI"
        },
        "paula": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4D03AQG8RMTG5WMF3A/profile-displayphoto-shrink_800_800/0?e=1595462400&v=beta&t=1g8QyLGjF0NiGlhJeud0PKtdSIMnu9_RlpFiZNOa7tI",
            "bio":
            "<b>Paula Minardi Fonseca</b><br><i>Programa Embaixadores</i><br>Mestre em Administração Financeira pelo Insper"
        },
        "sarah": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4D03AQGSIQDtT8mcFw/profile-displayphoto-shrink_400_400/0?e=1595462400&v=beta&t=AQdHfqJ9Ly3wxdYiHSBCePGldEnxOyHpp89TOS-A1K4",
            "bio":
            "<b>Sarah Leal</b><br><i>Programa Embaixadores</i><br>Médica no Hospital Israelita Albert Einstein"
        },
        "victor": {
            "foto":
            "https://media-exp1.licdn.com/dms/image/C4E03AQHCS8t2-1adVw/profile-displayphoto-shrink_800_800/0?e=1595462400&v=beta&t=ER4ycSCGwPHR1fT8I4AxiPS0JKl--QskB6ouFBaeOkY",
            "bio":
            "<b>Victor Cortez</b><br><i>Voluntário Desenvolvimento BE</i><br>Graduando em Engenharia Mecânica na Columbia University"
        }
    }

    colaboradores = {
        "<span><b>Fátima Marinho</b>: Doutora em Epidemiologia e Medicina Preventiva pela USP e professora da Faculdade de Medicina da Universidade de Minas Gerais</span>",
        "<span><b>H. F. Barbosa</b>: Mestre em Relações Internacionais pela Universidade da Califórnia, San Diego</span>",
        "<span><b>Teresa Soter</b>: Mestranda em Sociologia na Oxford University</span>"
    }

    def quem_somos(time):
        text = ""
        for nome, info in time.items():
            text += "<div class='profile'><img class='profile-photo' src='{}'/><br><span class='profile-name'>{}</span></div>".format(
                time[nome]["foto"], time[nome]["bio"])

        return text

    st.write("""
        <div class="base-wrapper">
            <a href="https://coronacidades.org/"><img class="coronacidades-logo" src="%s" width="300"/></a><br><br>
                <span>
                Coronacidades é uma plataforma feita para gestores públicos, que reúne
                ferramentas e informações chave para superar a COVID-19.<br>Além dos recursos online, 
                nosso time multidisciplinar está a postos para apoiar municípios e estados
                parceiros no planejamento e implementação de ações específicas nas áreas
                de saúde, assistência social, planejamento e economia. Entre em contato
                conosco.<br><br>
                <i>O CoronaCidades é uma iniciativa da Impulso, do Instituto Arapyau e do
                Instituto de Estudos de Políticas de Saúde (IEPS).</i>
                </span><br><br><br>
            <a href="https://www.impulsogov.com.br/"><img class="impulso-logo" src="%s" width="150"/></a><br><br>
                <span>
                O FarolCovid e SimulaCovid são desenvolvidos pela Impulso, uma
                organização não-governamental sem fins lucrativos cujo principal
                objetivo é criar capacidade analítica em governos. Fortalecemos o
                processo de coleta e análise de dados para auxiliar gestores públicos na
                tomada de decisão diária, visando aprimoramento contínuo de suas
                políticas.
                </span><br><br>
            <h1 class="primary-span">Quem Somos</h1>
                <div class="profiles-container">
                    %s
            </div>
            <div class="collaborator-container">
                <h1 class="primary-span">Com colaboração de:</h1>
                    %s
            </div>
        </div>
        """ % (Logo.CORONACIDADES.value, Logo.IMPULSO.value, quem_somos(time),
               "".join(colaboradores)),
             unsafe_allow_html=True)
Exemplo n.º 18
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)
Exemplo n.º 19
0
def main(session_state):
    """ 
    This is a function that returns the "about" page
      
    Parameters: 
        session_state (type): section dataset
    """

    utils.localCSS("style.css")
    utils.genHeroSection(
        title1="Escola",
        title2="Segura",
        header=True,
    )
    st.write(
        f"""
        <div class="container main-padding">
            <div class="text-title-section bold"> Quem somos? </div>
            <div class="minor-padding">
                <span class="text-card-section main-orange-span"> Impulso </span>
                <br>
                <span>
                    A Impulso é uma organização não governamental com a missão auxiliar governos na melhora da entrega de 
                    serviços públicos de saúde à população através do uso de dados e tecnologia, apoiando o processo de 
                    tomada de decisão e visando o aprimoramento contínuo de políticas públicas. Foi fundada em 2019 e é 
                    uma das idealizadoras da plataforma <a target="_blank" href="https://coronacidades.org/">CoronaCidades.org</a>.
                </span>
            </div><br>
            <div class="minor-padding">
                <span class="text-card-section main-orange-span" style="font-size: 20px;">Banco Interamericano de Desenvolvimento</span>
                <br>
                <span> O Banco Interamericano de Desenvolvimento tem como missão melhorar vidas. 
                    Criado em 1959, o BID é uma das principais fontes de financiamento de longo prazo para o desenvolvimento 
                    econômico, social e institucional da América Latina e do Caribe. O BID também realiza projetos de pesquisas 
                    de vanguarda e oferece assessoria sobre políticas, assistência técnica e capacitação a clientes públicos e 
                    privados em toda a região.
                </span>
            </div><br>
            <div class="minor-padding">
                <span class="text-card-section main-orange-span" style="font-size: 20px;">Fundação Lemann</span>
                <br>
                <span> A Fundação Lemann acredita que um Brasil feito por todos e para todos é um Brasil 
                que acredita no seu maior potencial: gente. Isso só acontece com educação de qualidade e com 
                o apoio a pessoas que querem resolver os grandes desafios sociais do país. Nós realizamos 
                projetos ao lado de professores, gestores escolares, secretarias de educação e governos 
                por uma aprendizagem de qualidade. Também apoiamos centenas de talentos, lideranças e organizações 
                que trabalham pela transformação social. Tudo para ajudar a construir um país mais justo, 
                inclusivo e avançado. Saiba mais em: <a target="_blank" href="fundacaolemann.org.br">fundacaolemann.org.br</a>
                </span>
            </div><br>
            <div class="minor-padding">
                <span class="text-card-section main-orange-span" style="font-size: 20px;">Imaginable Futures</span>
                <br>
                <span> Imaginable Futures é uma empresa de investimento filantrópico global que acredita 
                que a aprendizagem tem o poder de estimular o potencial humano e tem como missão oferecer 
                a cada aluno oportunidades e ferramentas para que eles imaginem e realizem um futuro brilhante. 
                Com compromisso com a parceria e a cocriação, a organização está capacitando alunos, famílias 
                e comunidades para serem os agentes que moldam o futuro. A Imaginable Futures é um empreendimento 
                do The Omidyar Group, fundada e financiada por Pierre e Pam Omidyar.
                </span>
            </div><br>
            <div class="minor-padding">
                <span class="text-card-section main-orange-span" style="font-size: 20px;">Programa Formar</span>
                <br>
                <span> O programa Formar foi concebido na Fundação Lemann e atua em parceria com 
                redes públicas de educação em todo o Brasil. Sua gestão é feita por uma equipe 
                multidisciplinar de consultores e especialistas que buscam o aprimoramento da gestão 
                pedagógica e administrativa, a partir do engajamento de dirigentes e equipes gestoras 
                das secretarias e escolas que compõem os sistemas de educação. Buscam também estimular 
                a adoção de políticas públicas perenes que contribuam na melhoria do processo de 
                aprendizagem juntamente com professores e estudantes.
                </span>
            </div><br>
        </div>
        """,
        unsafe_allow_html=True,
    )
Exemplo n.º 20
0
def main(session_state):
    # Analytics
    user_analytics = amplitude.gen_user(utils.get_server_session())
    opening_response = user_analytics.safe_log_event(
        "opened saude_em_ordem_description", session_state, is_new_page=True)

    # Layout
    utils.localCSS("style.css")
    he.genHeader("1")
    st.write(
        f"""
        <div class="base-wrapper" style="background-color:#0090A7;">
            <div class="hero-wrapper">
                <div class="hero-container" style="width:60%;">
                    <div class="hero-container-content">
                        <span class="subpages-container-product white-span">MODELOS, LIMITAÇÕES <br>E FONTES</span>
                        <span class="subpages-container-subtitle white-span"></span>
                    </div>
                </div>
                <div class="subpages-container-image">   
                    <img style="width: 100%;" src="https://i.imgur.com/FiNi6fy.png"/>
                </div>
            </div><br>
        </div>
        <div>
            <br><br>
        </div>
        """,
        unsafe_allow_html=True,
    )

    st.write(
        """<div class="base-wrapper primary-span">
            <span class="section-header">FERRAMENTAS E FONTES</span>
        </div>
        """,
        unsafe_allow_html=True,
    )

    item = st.radio(
        "Selecione abaixo um dos itens para ver mais detalhes:",
        [
            "FarolCovid",
            "SimulaCovid",
            "Saúde em Ordem",
            "Fontes de dados e Referências",
        ],
    )

    if item == "FarolCovid":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">FAROLCOVID: Como saber se estou no controle da Covid-19?</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        risk_description.main(session_state)

    if item == "SimulaCovid":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">SIMULACOVID: Modelo Epidemiológico</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        model_description.main(session_state)

    if item == "Saúde em Ordem":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">SAÚDE EM ORDEM</span>
            </div>
            """,
            unsafe_allow_html=True,
        )

        saude_em_ordem_description.main(session_state)

    if item == "Fontes de dados e Referências":
        st.write(
            """<div class="base-wrapper primary-span">
                <span class="section-header">FONTES DE DADOS E REFERÊNCIAS</span>
            </div>""",
            unsafe_allow_html=True,
        )

        gen_sources_table()

        st.write(
            """<div class="base-wrapper">
            Agência Nacional de Saúde Suplementar, 2012. Taxa de Ocupação Operacional Geral. Disponível em:
            http://www.ans.gov.br/images/stories/prestadores/E-EFI-03.pdf <br> <br>CDC, 2019. Severe Outcomes
            Among Patients with Coronavirus Disease 2019 (COVID-19) — United States, February 12–March 16, 2020.
            MMWR Morb Mortal Wkly Rep. ePub: 18 March 2020. DOI: http://dx.doi.org/10.15585/mmwr.mm6912e2.<br>
            <br>G. Stein, V. N. Sulzbach and Lazzari. Nota Técnica sobre o Índice Setorial para Distanciamento
            Controlado.  Technical report, 2020<br> <br>Cori, A., Ferguson, N.M., Fraser, C. and Cauchemez, S., 2013. A new framework and software to estimate time-varying reproduction numbers during epidemics. American journal of epidemiology, 178(9), pp.1505-1512. 
            <br> <br> Hill, A, 2020. Model Description. Modelling COVID-19 Spread vs
            Healthcare Capacity. Disponível em: https://alhill.shinyapps.io/COVID19seir/<br> <br>Lazaro Gamio.
            The workers who face the greatest coronavirus risk, 2020.
            https://www.nytimes.com/interactive/2020/03/15/business/economy/coronavirus-worker-risk.html.<br> <br>
            Li, R., Pei, S., Chen, B., Song, Y., Zhang, T., Yang, W., & Shaman, J., 2020. Substantial
            undocumented infection facilitates the rapid dissemination of novel coronavirus (SARS-CoV2).
            Science, 3221(March), eabb3221. DOI: https://doi.org/10.1126/science.abb3221<br> <br>Max Roser, Hannah
            Ritchie, Esteban Ortiz-Ospina and Joe Hasell (2020) - "Coronavirus Disease (COVID-19)". Published
            online at OurWorldInData.org. Retrieved from: 'https://ourworldindata.org/coronavirus' [Online
            Resource]<br> <br>Ministério da Saúde do Brasil, 2020. Boletim Diário. 28 mar. 2020. Disponível em:
            https://www.saude.gov.br/images/pdf/2020/marco/28/28.03%20-%20COVID.pdf
            <br> <br>Nishiura, Hiroshi, Natalie M. Linton, and Andrei R. Akhmetzhanov. "Serial interval of novel coronavirus (COVID-19) infections." International journal of infectious diseases (2020).<br> <br>Vanessa Neumann Sulzbach.
            Essays on Labor Market Polarization in Brazil. Unpublished PhD’s Thesis, 2020.<br> <br>Verity, Robert, et
            al. "Estimates of the severity of coronavirus disease 2019: a model-based analysis." The Lancet
            infectious diseases (2020). Disponível em:
            https://www.medrxiv.org/content/10.1101/2020.03.09.20033357v1 <br> <br>Walker, P.G., Whittaker, C., Watson,
            O., Baguelin, M., Ainslie, K.E.C., Bhatia, S., Bhatt, S., Boonyasiri, A., Boyd, O., Cattarino, L.
            and Cucunubá, Z., 2020. The global impact of COVID-19 and strategies for mitigation and suppression.
            Imperial College London, doi: https://doi. org/10.25561/77735. <br> <br>[1] Wang, C, et al. (2020) Evolving
            Epidemiology and Impact of Non-pharmaceutical Interventions on the Outbreak of Coronavirus Disease
            2019 in Wuhan, China. DOI: https://doi.org/10.1101/2020.03.03.20030593 e pdf de apresentação
            https://docs.google.com/presentation/d/1-rvZs0zsXF_0Tw8TNsBxKH4V1LQQXq7Az9kDfCgZDfE/edit#slide=id.p1
            <br> <br>[2] Wang, J., Zhou, M., & Liu, F., 2020. Reasons for healthcare workers becoming infected with novel
            coronavirus disease 2019 (COVID-19) in China. Journal of Hospital Infection. DOI:
            https://doi.org/10.1016/j.jhin.2020.03.002 <br> <br>Y. O. de Lima, D. M. Costa, and J. M. de Souza. Covid-19:
            Risco de contágio por ocupação no Brasil: Nota metodológica. Technical report, 2020.
            <br>
            </div>""",
            unsafe_allow_html=True,
        )
Exemplo n.º 21
0
def main():
    """ 
    This function generates Escola Segura webpage
    Parameters: 
        session_state (type): section dataset
    """
    if os.getenv("IS_HEROKU") == "TRUE":
        urlpath = os.getenv("urlpath")
    else:
        urlpath = 'https://escolasegura.coronacidades.org/'
        GOOGLE_ANALYTICS_CODE = "UA-161606940-3"
        import pathlib
        from bs4 import BeautifulSoup
        TAG_MANAGER = """
            function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
            'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
            })(window,document,'script','dataLayer','GTM-5ZZ5F66');
            """
        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)
            script_tag_manager = soup.new_tag("script",
                                              id="google-tag-manager")
            script_tag_manager.string = TAG_MANAGER
            soup.head.append(script_tag_manager)
            script_tag_manager_body = soup.new_tag(
                "script",
                src="https://www.googletagmanager.com/gtm.js?id=GTM-5ZZ5F66")
            soup.head.append(script_tag_manager_body)
            index_path.write_text(str(soup))
    utils.localCSS("inicio.css")
    utils.localCSS("localCSS.css")
    utils.genHeroSection(
        title1="Escola",
        title2="Segura",
        header=True,
    )
    utils.appdescription(
        title=
        "A Escola Segura foi criada para apoiar integrantes de secretarias de educação e gestores escolares de todo o Brasil na retomada de atividades presenciais em escolas da rede pública, após o fechamento provocado pela Covid-19. Em 10 passos, mostramos como preparar e gerir o retorno escolar e oferecemos ferramentas para apoiar as etapas desse processo. Queremos contribuir para uma retomada segura das aulas presenciais e reduzir os prejuízos que o fechamento das escolas tem trazido ao aprendizado de milhões de estudantes brasileiros.",
        subtitle="")

    # utils.gen_title(title="Como <b>retomar</b> as atividades presenciais?", subtitle="")
    title = "Siga 10 passos para reabrir escolas com segurança!"
    sub = "Priorize os passos de acordo com a realidade da sua rede de ensino. É importante seguir todas as recomendações para garantir uma reabertura mais segura. "
    st.write(
        f"""
        <div class="conteudo row" style="margin-top:50px; margin-right:0px; margin-left:0px;">
            <div class="card-plan" style="width:100%;">
                <div>
                    <div style="font-size:1.3rem; padding:5px; text-align: center; border-top-right-radius: 0.8rem; border-top-left-radius: 0.8rem; background:#2b14ff; color:white;">
                    {title}
                    </div>
                    <div style="margin:10px">
                        <div class="card-title">
                        {sub}
                        </div>
                        <div>
                            <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                <a href='{urlpath}?page=guia10passos' target="_self">
                                <button class="button"; style="border-radius: 0.8rem;">Conheça os passos ></button><br>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        """,
        unsafe_allow_html=True,
    )

    # utils.gen_title(title="Como podemos te <b>ajudar</b>?", subtitle="")
    simulador = "Simule o retorno"
    simuladorsub = "Informe os dados da sua rede ou escola e calcule quantas turmas podem voltar em segurança e quais materiais você precisa providenciar."
    title1 = "Quem Somos"
    sub1 = "Reunimos organizações atuantes nas áreas de educação, saúde e análise de dados para criar este conteúdo técnico, fundamentado em fontes nacionais e internacionais, para apoiar gestores escolares neste desafio."
    title2 = "Dúvidas Frequentes"
    sub2 = "Saiba o que outros gestores e gestoras públicos já perguntaram sobre o desafio da retomada das atividades presenciais em escolas."
    # title3="Quem Somos"
    # sub3="Saiba mais sobre os envolvidos e o desenvolvimento da plataforma."
    st.write(
        f"""
        <div class="conteudo row" style="margin-top: 30px; margin-right:0px; margin-left:0px;">
            <div class="card-plan" style="width:100%;">
                <div>
                    <div style="font-size:1.3rem; padding:5px; text-align: center; border-top-right-radius: 0.8rem; border-top-left-radius: 0.8rem; background:#2b14ff; color:white;">
                    {simulador}
                    </div>
                    <div style="margin:10px">
                        <div class="card-title">
                        {simuladorsub}
                        </div>
                        <div>
                            <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                <a href='{urlpath}?page=simulation' target="_self">
                                <button class="button"; style="border-radius: 0.8rem;">Simule já ></button><br>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="conteudo row" style="margin-right:0px; margin-left:0px;">
           <div class="col card-plan" style="width:100%; margin-top:15px; margin-botton:15px;">
                <div>
                    <div style="font-size:1.3rem; padding:5px; text-align: center; border-top-right-radius: 0.8rem; border-top-left-radius: 0.8rem; background:#7ACCA9; color:white;">
                    {title1}
                    </div>
                    <div style="margin:10px">
                        <div class="card-title">
                        {sub1}
                        </div>
                        <div>
                            <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                <a href='{urlpath}?page=sobre' target="_self">
                                <button class="button"; style="border-radius: 0.8rem;">Saiba mais ></button><br>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col card-plan" style="width:100%; margin-top:15px; margin-botton:15px;">
                <div>
                    <div style="font-size:1.3rem; padding:5px; text-align: center; border-top-right-radius: 0.8rem; border-top-left-radius: 0.8rem; background:#7ACCA9; color:white;">
                    {title2}
                    </div>
                    <div style="margin:10px">
                        <div class="card-title">
                        {sub2}
                        <br><br>
                        </div>
                        <div>
                            <div align="center" style="padding-top:15px; padding-bottom: 15px;">
                                <a href='{urlpath}?page=duvidasfrequentes' target="_self">
                                <button class="button"; style="border-radius: 0.8rem;">Confira ></button><br>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <br>
        """,
        unsafe_allow_html=True,
    )

    tm.genTermo()
    foo.genFooter()
Exemplo n.º 22
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)
def main():
    utils.localCSS("style.css")
    utils.localCSS("icons.css")

    # HEADER
    utils.genHeroSection()
    utils.genVideoTutorial()

    # GET DATA
    config = yaml.load(open('configs/config.yaml', 'r'),
                       Loader=yaml.FullLoader)
    # if abs(datetime.now().minute - FIXED) > config['refresh_rate']:
    #         caching.clear_cache()
    cities = loader.read_data('br', config, refresh_rate=refresh_rate(config))

    # REGION/CITY USER INPUT
    user_input = dict()

    utils.genStateInputSectionHeader()

    user_input['state'] = st.selectbox('Estado',
                                       add_all(cities['state_name'].unique()))
    cities_filtered = filter_options(cities, user_input['state'], 'state_name')

    utils.genMunicipalityInputSection()

    user_input['region'] = st.selectbox(
        'Região SUS',
        add_all(cities_filtered['health_system_region'].unique()))
    cities_filtered = filter_options(cities_filtered, user_input['region'],
                                     'health_system_region')

    user_input['city'] = st.selectbox(
        'Município', add_all(cities_filtered['city_name'].unique()))
    cities_filtered = filter_options(cities_filtered, user_input['city'],
                                     'city_name')

    sources = cities_filtered[[
        c for c in cities_filtered.columns
        if (('author' in c) or ('last_updated_' in c))
    ]]

    selected_region = cities_filtered.sum(numeric_only=True)

    # GET LAST UPDATE DATE
    if not np.all(cities_filtered['last_updated'].isna()):
        last_update_cases = cities_filtered['last_updated'].max().strftime(
            '%d/%m')

    # GET NOTIFICATION RATE
    if len(cities_filtered
           ) > 1:  # pega taxa do estado quando +1 municipio selecionado
        notification_rate = round(
            cities_filtered['state_notification_rate'].mean(), 4)

    else:
        notification_rate = round(
            cities_filtered['notification_rate'].values[0], 4)

    # pick locality according to hierarchy
    locality = choose_place(user_input['city'], user_input['region'],
                            user_input['state'])

    st.write('<br/>', unsafe_allow_html=True)

    utils.genInputCustomizationSectionHeader(locality)

    # SOURCES USER INPUT
    source_beds = sources[['author_number_beds',
                           'last_updated_number_beds']].drop_duplicates()
    authors_beds = source_beds.author_number_beds.str.cat(sep=', ')

    source_ventilators = sources[[
        'author_number_ventilators', 'last_updated_number_ventilators'
    ]].drop_duplicates()
    authors_ventilators = source_ventilators.author_number_ventilators.str.cat(
        sep=', ')

    if locality == 'Brasil':
        authors_beds = 'SUS e Embaixadores'
        authors_ventilators = 'SUS e Embaixadores'

    user_input['n_beds'] = st.number_input(
        f"Número de leitos destinados aos pacientes com Covid-19 (fonte: {authors_beds}, atualizado: {source_beds.last_updated_number_beds.max().strftime('%d/%m')})",
        0, None, int(selected_region['number_beds']))

    user_input['n_ventilators'] = st.number_input(
        f"Número de ventiladores destinados aos pacientes com Covid-19 (fonte: {authors_ventilators}, atualizado: {source_ventilators.last_updated_number_ventilators.max().strftime('%d/%m')}):",
        0, None, int(selected_region['number_ventilators']))

    # POP USER INPUTS
    user_input['population_params'] = {'N': int(selected_region['population'])}
    user_input['population_params']['D'] = st.number_input(
        'Mortes confirmadas:', 0, None, int(selected_region['deaths']))

    # get infected cases
    infectious_period = config['br']['seir_parameters'][
        'severe_duration'] + config['br']['seir_parameters'][
            'critical_duration']

    if selected_region['confirmed_cases'] == 0:
        st.write(f'''<div class="base-wrapper">
                Seu município ou regional 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'] = st.number_input(
            'Casos ativos estimados:', 0, None, 1)

    else:
        user_input['population_params']['I'] = int(
            selected_region['infectious_period_cases'] / notification_rate)

        st.write(f'''<div class="base-wrapper">
                O número de casos confirmados oficialmente no seu município ou regional de saúde é de {int(selected_region['confirmed_cases'].sum())} em {last_update_cases}. 
                Dada a progressão clínica da doença (em média, {infectious_period} dias) e a taxa de notificação ajustada para a região ({int(100*notification_rate)}%), 
                <b>estimamos que o número de casos ativos é de {user_input['population_params']['I']}</b>.
                <br><br>Caso queria, você pode mudar esse número para a simulação abaixo:
                        </div>''',
                 unsafe_allow_html=True)

        user_input['population_params']['I'] = st.number_input(
            'Casos ativos estimados:', 0, None,
            user_input['population_params']['I'])

    # calculate recovered cases
    user_input = calculate_recovered(user_input, selected_region,
                                     notification_rate)

    # AMBASSADOR SECTION
    utils.genAmbassadorSection()
    st.write('<br/>', unsafe_allow_html=True)

    # DEFAULT WORST SCENARIO
    user_input['strategy'] = {'isolation': 90, 'lockdown': 90}
    user_input['population_params']['I'] = [
        user_input['population_params']['I']
        if user_input['population_params']['I'] != 0 else 1
    ][0]
    _, dday_beds, dday_ventilators = simulator.run_evolution(
        user_input, config)

    worst_case = SimulatorOutput(
        color=BackgroundColor.GREY_GRADIENT,
        min_range_beds=dday_beds['worst'],
        max_range_beds=dday_beds['best'],
        min_range_ventilators=dday_ventilators['worst'],
        max_range_ventilators=dday_ventilators['best'])

    # DEFAULT BEST SCENARIO
    user_input['strategy'] = {'isolation': 0, 'lockdown': 90}
    _, dday_beds, dday_ventilators = simulator.run_evolution(
        user_input, config)

    best_case = SimulatorOutput(
        color=BackgroundColor.LIGHT_BLUE_GRADIENT,
        min_range_beds=dday_beds['worst'],
        max_range_beds=dday_beds['best'],
        min_range_ventilators=dday_ventilators['worst'],
        max_range_ventilators=dday_ventilators['best'])

    resources = ResourceAvailability(locality=locality,
                                     cases=selected_region['active_cases'],
                                     deaths=selected_region['deaths'],
                                     beds=user_input['n_beds'],
                                     ventilators=user_input['n_ventilators'])

    utils.genSimulationSection(int(user_input['population_params']['I']),
                               locality, resources, worst_case, best_case)

    utils.genActNowSection(locality, worst_case)
    utils.genStrategiesSection(Strategies)

    st.write('''
        <div class="base-wrapper">
                <span class="section-header primary-span">Etapa 4: Simule o resultado de possíveis intervenções</span>
                <br />
                <span>Agora é a hora de planejar como você pode melhor se preparar para evitar a sobrecarga hospitalar. Veja como mudanças na estratégia adotada afetam a necessidade de internação em leitos.</span>
        </div>''',
             unsafe_allow_html=True)

    user_input['strategy']['isolation'] = st.slider(
        'Em quantos dias você quer acionar a Estratégia 2, medidas restritivas? (deixe como 0 se a medida já estiver em vigor)',
        0,
        90,
        0,
        key='strategy2')

    user_input['strategy']['lockdown'] = st.slider(
        'Em quantos dias você quer acionar a Estratégia 3, quarentena?',
        0,
        90,
        90,
        key='strategy3')

    st.write('<br/><br/>', unsafe_allow_html=True)

    # SIMULATOR SCENARIOS: BEDS & RESPIRATORS
    fig, dday_beds, dday_ventilators = simulator.run_evolution(
        user_input, config)

    utils.genChartSimulationSection(
        user_input['strategy']['isolation'],
        user_input['strategy']['lockdown'],
        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']), fig)

    utils.genWhatsappButton()
    utils.genFooter()
Exemplo n.º 24
0
def main():

    session_state = session.SessionState.get(
        update=False,
        number_beds=None,
        number_ventilators=None,
        deaths=None,
        cases=None,
        state="Acre",
        city="Todos",
        refresh=False,
    )

    utils.localCSS("style.css")

    utils.genHeroSection(
        "Farol", "Entenda e controle a Covid-19 em sua cidade e estado."
    )

    # GET DATA
    config = yaml.load(open("configs/config.yaml", "r"), Loader=yaml.FullLoader)
    df_cities, df_states = get_data(config)

    # REGION/CITY USER INPUT
    user_input = dict()

    user_input["state_name"] = st.selectbox(
        "Estado", df_cities["state_name"].sort_values().unique()
    )

    user_input["city_name"] = st.selectbox(
        "Município",
        utils.add_all(
            df_cities[df_cities["state_name"] == user_input["state_name"]][
                "city_name"
            ].unique()
        ),
    )

    user_input, data = filter_options(user_input, df_cities, df_states, config)

    # SOURCES PARAMS
    user_input = utils.get_sources(user_input, data, df_cities, ["beds", "ventilators"])
    print(user_input["number_ventilators"], user_input["number_beds"])

    # POPULATION PARAMS
    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]),
    }

    user_input["last_updated_cases"] = data["last_updated_subnotification"].max()

    if data["confirmed_cases"].sum() == 0:
        st.write(
            f"""<div class="base-wrapper">
                    Seu município ou regional 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"]
        )
        st.write(
            f"""<div class="base-wrapper">
        O número de casos confirmados oficialmente no seu município ou estado é de {int(data['confirmed_cases'].sum())} em {pd.to_datetime(data["data_last_refreshed"].values[0]).strftime("%d/%m/%Y")}. 
        Dada a progressão clínica da doença (em média, {infectious_period} dias) e a taxa de notificação ajustada para o município ou estado de ({int(100*data['notification_rate'].values[0])}%), 
        <b>estimamos que o número de casos ativos é de {int(data['active_cases'].sum())}</b>.<br>
        <br>Caso queria, você pode mudar esse número para a simulação abaixo:
                </div>""",
            unsafe_allow_html=True,
        )

    # INDICATORS CARDS
    indicators = IndicatorCards

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

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

    # SPACE AFTER CARDS
    st.write("<div class='base-wrapper product-section'></div>", unsafe_allow_html=True)
    st.write(
        """
        <div class='base-wrapper'>
            <i>* Utilizamos 50&percnt; da capacidade hospitalar reportada por %s em %s (leitos) e %s em %s (ventiladores) 
            para o cálculo da projeção de dias para atingir a capacidade máxima. 
            Caso tenha dados mais atuais, sugerimos que mude os valores e refaça essa estimação abaixo.</i>
        </div>
        """
        % (
            user_input["author_number_beds"],
            user_input["last_updated_number_beds"],
            user_input["author_number_ventilators"],
            user_input["last_updated_number_ventilators"],
        ),
        unsafe_allow_html=True,
    )

    if st.button("Confira a evolução de indicadores-chave"):

        if st.button("Esconder"):
            pass

        st.write(
            f"""
            <div class="base-wrapper">
                    <span class="section-header primary-span">TAXA DE ISOLAMENTO SOCIAL EM {user_input["locality"]}</span>
                    <br><br>
                    Percentual de smartphones que não deixou o local de residência, em cada dia, calculado pela inloco. 
                    Para mais informações, <a target="_blank" style="color:#3E758A;" href="https://mapabrasileirodacovid.inloco.com.br/pt/">veja aqui</a>.
            </div>
            """,
            unsafe_allow_html=True,
        )

        if user_input["city_id"]:
            locality_id = user_input["city_id"]
        else:
            df_state_mapping = pd.read_csv("./configs/states_table.csv")
            locality_id = df_state_mapping.loc[
                df_state_mapping["state_name"] == data["state_name"].values[0]
            ].iloc[0]["state_num_id"]

        try:
            fig = plts.gen_social_dist_plots_placeid(locality_id)
            st.plotly_chart(fig, use_container_width=True)
        except:
            st.write("Seu município ou estado não possui mais de 30 dias de dado.")
        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 = plts.plot_rt_wrapper(locality_id)
            st.plotly_chart(fig2, use_container_width=True)
        except:
            st.write("Seu município ou estado não possui mais de 30 dias de dado.")
        st.write(
            "<div class='base-wrapper'><i>Em breve:</i> gráficos de subnotificação.</div>",
            unsafe_allow_html=True,
        )

    # CHANGE DATA SECTION
    utils.genInputCustomizationSectionHeader(user_input["locality"])
    user_input, session_state = utils.genInputFields(user_input, config, session_state)

    if session_state.update:

        session_state.refresh = True
        session_state.update = False

        session.rerun()

    # AMBASSADOR SECTION
    utils.genAmbassadorSection()

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

    # TOOLS
    products = ProductCards
    products[1].recommendation = f'Risco {data["overall_alert"].values[0]}'
    utils.genProductsSection(products)

    product = st.selectbox(
        "",
        [
            "Como você gostaria de prosseguir?",
            "SimulaCovid",
            "Saúde em Ordem (em breve)",
        ],
    )

    if product == "SimulaCovid":
        sm.main(user_input, indicators, data, config, session_state)

    elif product == "Saúde em Ordem (em breve)":
        pass

    st.write(
        """
    <div class="base-wrapper">
        Estamos à disposição para apoiar o gestor público a aprofundar a 
        análise para seu estado ou município, de forma inteiramente gratuita. 
        <a target="_blank" style="color:#3E758A;" href="https://coronacidades.org/fale-conosco/"><b>Entre em contato conosco</a>
    </div>
    """,
        unsafe_allow_html=True,
    )
Exemplo n.º 25
0
def main():
    session_state = session.SessionState.get(
        key=session.get_user_id(),
        update=False,
        state_name="Acre",
        state_id="AC",
        city_name="Todos",
        administrative_level="Todos",
        refresh=False,
        reset=False,
        already_generated_user_id=None,
        pages_open=None,
        amplitude_events=None,
        button_styles=dict(),
        continuation_selection=None,
        button_simule=0,
        section1_organize=False,
        section2_manage=False,
    )
    utils.localCSS("style.css")
    config = yaml.load(open("config/config.yaml", "r"), Loader=yaml.FullLoader)
    df = get_data(config)
    genSelectBox(df, session_state)

    params = dict()
    main_icon = utils.load_image("imgs/simulation_main_icon.png")
    st.write(
        f"""
            <div class="text-title-section minor-padding">
                 Quantos <span class="bold main-orange-span">estudantes e professores(as)</span> retornam às salas de aula em diferentes modelos?
            </div>
            <div class="container main-padding" style="padding-left:0px;">
                <div class="container minor-padding main-orange-span" style="font-size: 20px; color:#FF934A; font-weight: bold;"> 
                    <img class="minor-icon" src="data:image/png;base64,{main_icon}" alt="Fonte: Flaticon">
                    Simule o retorno
                </div>
                <div class="minor-padding">
                    O retorno às atividades presenciais deve ser pensado em etapas para definir não só <b>quem pode retornar</b>, mas também <b>como</b>. Trazemos abaixo um passo a passo para construir a simulação da sua rede - experimente!
                </div>
                 <div class="minor-padding" style="font-size: 20px; color:#FF934A; font-weight: bold;">
                    <br>Para qual etapa de ensino você está planejando?
            </div>
            """,
        unsafe_allow_html=True,
    )

    # TODO: colocar por estado somente também
    # if city_name:
    data = df[
        (df["city_name"] == session_state.city_name)
        & (df["administrative_level"] == session_state.administrative_level)]
    col1, col2 = st.beta_columns([0.9, 0.2])
    with col1:
        education_phase = st.selectbox(
            "", data["education_phase"].sort_values().unique())
        data = data[data["education_phase"] == education_phase]
    with col2:
        st.write(
            f"""<div class="container">
                <br>
                </div>
                <br>
            """,
            unsafe_allow_html=True,
        )

    st.write(
        f"""<br>
            <div class="container" style="padding-left:0px;">
                <div class="minor-padding" style="font-size: 20px; color:#FF934A;"><b>1. Escolha o modelo de retorno às atividades</b></div>
                <div class="minor-padding">
                    Existem diversos modelos possíveis de retorno avaliadas de acordo com as etapas de aprendizado. Separamos abaixo 5 opções possíveis indicadas pela UNESCO.
                </div>
            </div>
        """,
        unsafe_allow_html=True,
    )

    UNESCO_models = {
        'Totalmente Presencial': {
            "description":
            """Neste modelo, todos os estudantes <b>retornam às aulas
            presenciais padrão</b>, isto é, os mesmos horários em sala de
            aula, porém seguindo os novos protocolos de distanciamento e segurança
            sanitária.
            <br><br><b>Por que este modelo?</b><br>
            Modelo tradicional, onde os estudantes e docentes estão habituados.""",
            "hours_per_day": 5,
            "priority": False
        },
        'Aulas presenciais + Tarefas remota': {
            "description": """Neste modelo professores(as) <b>transmitem
            conceitos para os estudantes presencialmente</b>, e, em seguida,
            <b>estudantes completam exercícios e tarefas em casa</b>.
            <br><br><b>Por que este modelo?</b><br>
            Alunos e professores mantêm um contato próximo, e estudantes podem tirar dúvidas durante a exposição da matéria.""",
            "hours_per_day": 3,
            "priority": False
        },
        'Aulas por vídeo + Tarefas presenciais': {
            "description": """Neste modelo estudantes <b>aprendem
            novos conceitos de forma remota</b> e, em seguida, <b>concluem exercícios e 
            tarefas presencialmente</b> com o(a) professor(a).
            <br><br><b>Por que este modelo?</b><br>
            Alunos e professores mantêm o convívio, e os estudantes podem tirar dúvidas 
            urante a realização dos exercícios e se beneficiarem com as dúvidas dos colegas.""",
            "hours_per_day": 2,
            "priority": False
        },
        'Grupo prioritário presencial': {
            "description":
            """Neste modelo, os professores têm uma <b>aula normal completa com um grupo
            de estudantes presencial, enquanto outro grupo acompanha remotamente 
            por meio de videoconferência (VC)</b>.
            <br><br><b>Por que este modelo?</b>
            Turma mantém o convívio, mesmo que virtual, e os professores atentem todos da turma no mesmo momento.""",
            "hours_per_day": 5,
            "priority": True
        }
    }

    col1_1, col1_2, col1_3, col1_4 = st.beta_columns([0.35, 0.05, 0.85, 0.3])
    with col1_1:
        params["education_model"] = st.selectbox("",
                                                 list(UNESCO_models.keys()))
        params["priority"] = UNESCO_models[
            params["education_model"]]["priority"]
    with col1_2:
        st.write(
            f"""
            <div class="container main-padding">
                <br>
            </div>
            """,
            unsafe_allow_html=True,
        )
    with col1_3:
        # Sobre o modelo
        st.write(
            f"""
                <div class="col light-green-simulator-bg card-simulator" style="border-radius:30px;">
                    <div style="font-family: 'Roboto Condensed', sans-serif; padding:10px; margin-bottom:0px; margin-top: 16px;margin-left: 16px; margin-right: 16px;">
                        <b>{params["education_model"]}</b>
                        <br><br>{UNESCO_models[params["education_model"]]["description"]}
                        <br><br><b><a href="https://en.unesco.org/sites/default/files/unesco-covid-19-response-toolkit-hybrid-learning.pdf">FONTE: UNESCO</a></b>
                    </div>
                    <div class="button-position" style="margin-bottom: 0px;padding: 10px;margin-top: 16px;margin-right: 16px;margin-left: 16px;">
                        <a href="#entenda-modelo">
                            <button class="button-protocolos" style="border-radius: .25rem; font-size:16px; margin-right: 10px;margin-left: 10px;">
                                leia sobre todos os modelos >
                            </button>
                        </a>
                    </div>
                    <div class="button-position" style="margin-bottom: 0px;padding: 10px;margin-top: 16px;margin-right: 16px;margin-left: 16px;">
                        <a href="#entenda-etapa">
                            <button class="button-protocolos" style="border-radius: .25rem; font-size:16px; margin-right: 10px;margin-left: 10px;">
                                veja considerações por etapa de ensino >
                            </button>
                        </a>
                    </div>
                </div>
                <div id="entenda-modelo" class="info-modal-window" style="width: 80%; height: 70%;">
                    <div>
                        <a href="#" title="Close" class="info-btn-close" style="color: white;">&times</a>
                        <h1 class="main-orange-span bold" style="padding: 0px 50px 0px 50px;">Modelos</h1>
                        <div style="font-size: 16px; padding: 0px 50px 0px 50px;">
                            Abaixo há o quadro completo. Caso não consiga ver a imagem, clique na imagem para baixa-la ou <a href="https://drive.google.com/u/1/uc?id=1tqBItM8XkLdY9u2wk0ZcPrVcHccgdp1f&export=download">[AQUI]</a>.
                        </div>
                        <a href="https://drive.google.com/u/1/uc?id=1tqBItM8XkLdY9u2wk0ZcPrVcHccgdp1f&export=download"><img style="padding: 50px 50px 50px 50px;" class="images" src="https://i.imgur.com/ZByy47a.jpg"></a>
                    </div>
                </div>
                <div id="entenda-etapa" class="info-modal-window" style="width: 80%; height: 70%;">
                    <div>
                        <a href="#" title="Close" class="info-btn-close" style="color: white;">&times</a>
                        <h1 class="main-orange-span bold" style="padding: 0px 50px 0px 50px;">Etapas de Ensino</h1>
                        <div style="font-size: 16px; padding: 0px 50px 0px 50px;">
                            <br>
                            <b>4 - 8 anos</b><br>
                            Pontos principais para consideração:<br>
                            <li>Crianças desta faixa etária possuem menor risco de apresentar sintomas graves.</li>                            
                            <li>Pais e responsáveis necessitam de creches e suporte para manter demais atividades do dia a dia</li>
                            <li>Eficácia muito baixa do ensino remoto</li><br>
                            <b>8 - 12 anos</b><br>
                            Pontos principais para consideração:<br>
                            <li>Crianças desta faixa etária possuem menor risco de apresentar sintomas graves, mas há maior dificuldade em adotar medidas sanitárias.</li>
                            <li>Já possuem maior autonomia no cotidiano e pode</li><br>
                            <b>12 - 17 anos</b><br>
                            Pontos principais para consideração:<br>
                            <li>Crianças desta faixa etária possuem maior risco intrínseco de contrair e desenvolver sintomas, mas apresentam maior aderência aos protocolos sanitários</li>
                            <li>Logística de agendamento presencial pode ser mais complexa, pois os anos possuem matérias e professores diversos.</li><br>
                            <b>17 - 18 anos</b><br>
                            Pontos principais para consideração:<br>
                            <li>Crianças desta faixa etária possuem maior risco intrínseco de contrair e desenvolver sintomas, mas apresentam maior aderência aos protocolos sanitários.</li>
                            <li>Alta eficácia e adesão ao método remoto</li>
                            <br>Abaixo há o quadro completo. Caso não consiga ver a imagem, clique na imagem para baixa-la ou <a href="https://drive.google.com/u/1/uc?id=1Sj65MXPkRcw6VxojYBLsJ8otIuvpLfq_&export=download">[AQUI]</a>.
                        </div>
                        <a href="https://drive.google.com/u/1/uc?id=1Sj65MXPkRcw6VxojYBLsJ8otIuvpLfq_&export=download"><img style="padding: 50px 50px 50px 50px;" class="images" src="https://i.imgur.com/FyoIFe9.jpg"></a>
                    </div>
                </div>
                """,
            unsafe_allow_html=True,
        )
    with col1_4:
        st.write(
            f"""<div class="container">
                <br>
                </div>
                <br>
            """,
            unsafe_allow_html=True,
        )

    st.write(
        f"""<br>
            <div class="container" style="padding-left:0px;">
                <div class="minor-padding" style="font-size: 20px; color:#FF934A;"><b>2. Escolha quem pode retornar</b></div>
            </div>
        """,
        unsafe_allow_html=True,
    )

    col2a_1, col2a_2, col2a_3, col2a_4 = st.beta_columns(
        [0.35, 0.05, 0.85, 0.3])
    with col2a_1:
        params["number_students"] = st.number_input(
            "Quantos estudantes retornam às aulas presenciais?",
            format="%d",
            value=data["number_students"].values[0],
            step=1,
        )
        if params["priority"]:
            params["number_remote_students"] = st.number_input(
                "Quantos estudantes acompanham às aulas somente de forma remota?",
                format="%d",
                value=data["number_students"].values[0],
                step=1,
            )

    with col2a_2:
        st.write(
            f"""
            <div class="container main-padding">
                <br>
            </div>
            """,
            unsafe_allow_html=True,
        )
    with col2a_3:
        st.write(
            f"""
            <div class="col light-green-simulator-bg card-simulator" style="border-radius:30px;">
                <div class="row" style="font-family: 'Roboto Condensed', sans-serif; margin-bottom:0px; padding:10px;">
                    <b>Iniciamos com total de estudantes reportados no Censo Escolar 2019 (INEP).</b>
                    <br>Você pode alterar esse valor ao lado. Leve em consideração quais grupos de estudantes podem ser vulneráveis ou ter prioridade.
                </div>
                <div class="button-position" style="padding-bottom: 15px;">
                    <a href="#entenda-estudantes">
                        <button class="button-protocolos" style="border-radius: .25rem; font-size:16px; margin-right: 10px;margin-left: 10px;">
                            grupos que requerem atencão especial >
                        </button>
                    </a>
                </div>
            </div>
            <div id="entenda-estudantes" class="info-modal-window" style="width: 80%; height: 70%;">
                <div>
                    <a href="#" title="Close" class="info-btn-close" style="color: white;">&times</a>
                    <h1 class="main-orange-span bold" style="padding: 0px 50px 0px 50px;">Estudantes</h1>
                    <div style="font-size: 20px; padding: 0px 50px 0px 50px;">
                        <b>Grupos que requerem atencão especial</b>
                    </div>
                    <br>
                    <div style="font-size: 16px; padding: 0px 50px 0px 50px;">
                        <b>Exemplos de grupos vulneráveis ou/e marginalizados</b>
                        <li>Minorias</li>
                        <li>Meninas adolescentes</li>
                        <li>Crianças com deficiência de aprendizagem</li>
                        <li>Crianças que vivem em instituições de abrigo</li>
                        <li>Crianças vivendo em condição de pobreza, em residências com alta ocupância ou improvisadas</li>
                        <li>Orfãos</li>
                        <li>Crianças separadas de seus responsáveis</li>
                        <li>Crianças e adolescentes em risco de abandono escolar</li>
                    </div>
                </div>
            </div>
            """,
            unsafe_allow_html=True,
        )
    with col2a_4:
        st.write(
            f"""<div class="container">
                <br>
                </div>
                <br>
            """,
            unsafe_allow_html=True,
        )
    st.write(
        f"""
        <div class="container main-padding">
            <br>
        </div>
        """,
        unsafe_allow_html=True,
    )

    col2b_1, col2b_2, col2b_3, col2b_4 = st.beta_columns(
        [0.35, 0.05, 0.85, 0.3])
    with col2b_1:
        params["number_teachers"] = st.number_input(
            "Quantos professores(as) retornam?",
            format="%d",
            value=data["number_teachers"].values[0],
            step=1,
        )
    col2b_2 = col2a_2
    with col2b_3:
        st.write(
            f"""
            <div class="col light-green-simulator-bg card-simulator" style="border-radius:30px;">
                <div class="row" style="font-family: 'Roboto Condensed', sans-serif; margin-bottom:0px; padding:10px;">
                    <b>Iniciamos com total de professores reportados no Censo Escolar 2019 (INEP).</b> 
                    <br>Você pode alterar esse valor ao lado. Leve em consideração quais grupos de professores podem ser de risco, confortáveis para retorno e outros.
                </div>
                <div class="button-position" style="padding-bottom: 15px;">
                    <a href="#entenda-professores">
                        <button class="button-protocolos" style="border-radius: .25rem; font-size:16px; margin-right: 10px;margin-left: 10px;">
                            como retornar professores(as) >
                        </button>
                    </a>
                </div>
                <div id="entenda-professores" class="info-modal-window" style="width: 80%; height: 70%;">
                    <div>
                        <a href="#" title="Close" class="info-btn-close" style="color: white;">&times</a>
                        <h1 class="main-orange-span bold" style="padding: 0px 50px 0px 50px;">Professores</h1>
                        <div style="font-size: 16px; padding: 0px 50px 0px 50px;">
                            <b>Fatores a serem considerados:</b> grupos vulneráveis, número de casos suspeitos, desconforto da rede com o retorno presencial, dificuldade logística e a disponibilidade de retorno presencial.
                            <br><br>O quadro explicativo traz para cada fator um desafio e uma ação sugerida.
                            <br><br>Caso não consiga ver a imagem, clique na imagem para baixa-la ou <a href="https://drive.google.com/u/1/uc?id=1lLtbEMau4nIj8tZ5rQF51ThV2Q8K1DzE&export=download">[AQUI]</a>.
                        </div>
                        <a href="https://drive.google.com/u/1/uc?id=1lLtbEMau4nIj8tZ5rQF51ThV2Q8K1DzE&export=download"><img style="padding: 50px 50px 50px 50px;" class="images" src="https://i.imgur.com/4ai7xDK.jpg"></a>
                    </div>
                </div>
            </div>
            """,
            unsafe_allow_html=True,
        )
    col2b_4 = col2a_4
    st.write(
        f"""
        <br>
        <div class="container" style="padding-left:0px;">
            <div class="minor-padding" style="font-size: 20px; color:#FF934A;"><b>3. Defina as restrições de retorno</b></div><br>
                </div>
            </div>
        </div>
        """,
        unsafe_allow_html=True,
    )

    col3_1, col3_2, col3_3, col3_4, col3_5, col3_6 = st.beta_columns(
        [0.35, 0.05, 0.4, 0.05, 0.4, 0.3])
    with col3_1:
        params["number_classrooms"] = st.number_input(
            "Quantas salas de aula disponíveis?",
            format="%d",
            value=data["number_classroms"].values[0],
            step=1,
        )
        st.write(
            f"""
            <div class="row" style="margin:0px; padding:10px; background:#DDFBF0; border-radius: 1rem 1rem 1rem 1rem;">
                O número de salas restringe o número de turmas que podem voltar de forma simultânea.
            </div>
        """,
            unsafe_allow_html=True,
        )
    col3_2 = col2a_2
    with col3_3:
        params["max_students_per_class"] = st.slider(
            "Selecione o máximo de estudantes por turma:", 0, 20, 20, 1)
        st.write(
            f"""
            <div class="row" style="margin:0px; padding:10px; background:#DDFBF0; border-radius: 1rem 1rem 1rem 1rem;">
                Limitamos em 20 estudantes por sala para diminiuir o risco de transmissão seguindo critérios sanitários.
            </div>
            """,
            unsafe_allow_html=True,
        )
    col3_4 = col2a_2
    with col3_5:
        params["hours_per_day"] = int(
            st.slider(
                "Selecione o número de horas presenciais diárias na escola por turma:",
                min_value=1,
                max_value=5,
                value=UNESCO_models[params["education_model"]]
                ["hours_per_day"],
                step=1,
            ))

        st.write(
            f"""
            <div class="row" style="margin:0px; padding:10px; background:#DDFBF0; border-radius: 1rem 1rem 1rem 1rem;">
                As restrições sanitárias limitam a quantidade de tempo e estudantes que conseguem retornar à sala de aula.
            </div>

            <div class="container">
            <br>
            </div>
            <br>
            """,
            unsafe_allow_html=True,
        )
    col3_6 = col2a_4

    with st.beta_expander("simular retorno"):
        user_analytics = amplitude.gen_user(utils.get_server_session())
        opening_response = user_analytics.safe_log_event(
            "clicked simule retorno", session_state, is_new_page=True)
        print(params)
        genSimulationResult(params, config)
    '''if st.button("Simular retorno"):
        if st.button("Esconder"):
            pass
        genSimulationResult()
    utils.stylizeButton(
        name="SIMULAR RETORNO",
        style_string="""
        box-sizing: border-box;
        border-radius: 15px; 
        width: 150px;padding: 0.5em;
        text-transform: uppercase;
        font-family: 'Oswald', sans-serif;
        background-color: #0097A7;
        font-weight: bold;
        text-align: center;
        text-decoration: none;font-size: 18px;
        animation-name: fadein;
        animation-duration: 3s;
        margin-top: 1.5em;""",
        session_state=session_state,
    )'''

    # TODO: escrever metodologia v1.2
    with st.beta_expander("ler metodologia"):
        user_analytics = amplitude.gen_user(utils.get_server_session())
        opening_response = user_analytics.safe_log_event(
            "clicked simule metodologia", session_state, is_new_page=True)
        methodology_text = load_markdown_content("methodology_short.md")
        st.write(methodology_text)