# Requisitos Funcionais e Não Funcionais

# Aurora - Requisitos

<span style="font-size: medium;">Requisitos Funcionais</span>

- <span style="font-size: medium;">Servidor:</span>
    
    
    - <span style="font-size: medium;">Login com credenciais do Solar</span>
    - <span style="font-size: medium;">Seleciona o Evento</span>
    - <span style="font-size: medium;">Pesquisa pelo assistido(a) (Solar) </span>
        
        
        - <span style="font-size: medium;">Caso não encontre, pode o registrar (Solar)</span>
    - <span style="font-size: medium;">Registra o atendimento</span>
    - <span style="font-size: medium;">**Comprovantes de voluntário \***</span>

- <span style="font-size: medium;">Admin</span>
    
    
    - <span style="font-size: medium;">Login com credenciais prórpias do Aurora</span>
    - <span style="font-size: medium;">Acesso ao painel de Admin</span>
    - <span style="font-size: medium;">Criação de eventos</span>
        
        
        - <span style="font-size: medium;">O admin cria uma “Categoria” para o evento. Ex: Dia do Cidadão, Dia da Mulher</span>
        - <span style="font-size: medium;">A categoria vai ser cadastrada e terá “Presets”, os presets serão qualificações pré-definidas, que podem ou não ser usadas em um cadastro de novo evento, servindo como base.</span>
        - <span style="font-size: medium;">Após a criação da categoria, o evento poderá ser criado, usando da categoria como base, evitando o recadastro de serviços.</span>
        - <span style="font-size: medium;">O evento contém:</span>
            
            
            - <span style="font-size: medium;">Categoria</span>
            - <span style="font-size: medium;">Data</span>
            - <span style="font-size: medium;">Qualificações</span>
    - <span style="font-size: medium;">Estátisticas</span>
        
        
        - <span style="font-size: medium;">O admin deve ser capaz de visualizar estatisticas por evento.</span>
        - <span style="font-size: medium;">Também deverá ser possível extrair as estatisticas para um PowerBI, por isso a aplicação deverá usar SQL Server como banco, para facilitar esse processo.</span>
        - <span style="font-size: medium;">O admin seleciona um evento já cadastrado</span>
            
            
            - <span style="font-size: medium;">Cai no painel de admin, onde será possível visualizar as estatisticas de cada evento.</span>
            - <span style="font-size: medium;">Deverá ser possível ver:</span>
                
                
                - <span style="font-size: medium;">Serviços associados</span>
                - <span style="font-size: medium;">Ver atendimentos</span>
                - <span style="font-size: medium;">Indicadores</span>
                    
                    
                    - <span style="font-size: medium;">Servidores</span>
                    - <span style="font-size: medium;">Serviços</span>
                    - <span style="font-size: medium;">Atendimentos gerados no Solar</span>
                    - <span style="font-size: medium;">Data do evento</span>
                - <span style="font-size: medium;">Estatisticas detalhadas</span>
                    
                    
                    - <span style="font-size: medium;">Pessoas atendidas</span>
                    - <span style="font-size: medium;">Parceiros</span>
                    - <span style="font-size: medium;">Média de Serviços por pessoa</span>
                    - <span style="font-size: medium;">Atendimentos</span>
                    - <span style="font-size: medium;">Voluntários</span>
                - <span style="font-size: medium;">Alguns serviços podem precisar de estatísticas diferentes das comuns a outros eventos, uma solução pode ser o sistema disponibilizar alguns campos que podem ser adicionados ou removidos das estatisticas, por exempĺo:</span>
                    
                    
                    - <span style="font-size: medium;">Cor da Pele</span>
                    - <span style="font-size: medium;">Lanches Entregues.</span>
                - <span style="font-size: medium;">Esses campos devem estar prontos no sistema, e devem funcionar de maneira modular, permitindo com que sejam selecionados ou não, sem prejuízos a outros eventos.</span>
    - <span style="font-size: medium;">Logs do sistema, toda operação deverá gerar um log que seja rastreável, assim podendo ser filtrado, pesquisado e etc.</span>
    - <span style="font-size: medium;">O log deve conter:</span>
        
        
        - <span style="font-size: medium;">Rash (Identificador)</span>
        - <span style="font-size: medium;">Ação</span>
        - <span style="font-size: medium;">Usuário</span>
        - <span style="font-size: medium;">Data e Hora</span>

<span style="font-size: medium;">Requisitos Não Funcionais</span>

- <span style="font-size: medium;">Design Moderno, inspirado no Liquid Glass e Frosted Glass.</span>
- <span style="font-size: medium;">O Banco de Dados deverá ser SQL Server, para facilitar a integração com o PowerBI.</span>
- <span style="font-size: medium;">Aplicação deverá ser modular, evitando configurações hardcoded</span>
- <span style="font-size: medium;">A aplicação deverá conter ampla segurança, portanto:</span>
    
    
    - <span style="font-size: medium;">Operações devem ser realizadas na API, mesmo chamadas que sejam chamadas diretas ao solar.</span>
    - <span style="font-size: medium;">Tokens JWT com assinatura</span>
    - <span style="font-size: medium;">Verificação de permissões</span>
    - <span style="font-size: medium;">A comunicação deverá ser feita por HTTPS, ao menos da comunicação interna do Aurora.</span>
    - <span style="font-size: medium;">Rate Limiting, para evitar ataques de força bruta.</span>
    - <span style="font-size: medium;">CORS restrito e bem configurado</span>
    - <span style="font-size: medium;">Proteção CSRF</span>
    - <span style="font-size: medium;">Proteção XSS</span>
    - <span style="font-size: medium;">Headers de segurança (HelmetJS)</span>
    - <span style="font-size: medium;">Não deve ser feito o armazenamento de qualquer informação sensível em localStorage/sessionStorage</span>
    - <span style="font-size: medium;">Cookies apenas HTTPOnly, com flag secure (PROD)</span>
    - <span style="font-size: medium;">Em produção, não expor portas do banco ou api, tudo ser feito pelo traefik ou nginx.</span>
    - <span style="font-size: medium;">Travas de carregamento para evitar spam de requests.</span>
- <span style="font-size: medium;">CI/CD para checagem automática de erros e segurança</span>
- <span style="font-size: medium;">Testes unitários, especialmente em funções críticas para o sistema.</span>
- <span style="font-size: medium;">Monitoramento de dependencias para garantir que não existam vulnerabilidades em bibliotecas de terceiros.</span>
- <span style="font-size: medium;">Eslint e Prettier para melhorar o padrão de código.</span>
- <span style="font-size: medium;">Tecnologias a serem usadas:</span>
    
    
    - <span style="font-size: medium;">ReactJS com Vite e TypeScript</span>
        
        
        - <span style="font-size: medium;">TailwindCSS</span>
        - <span style="font-size: medium;">HeroUI</span>
    - <span style="font-size: medium;">NodeJS com Express e TypeScript</span>