Ir para o conteúdo principal

Implementação de notificação via e-mail e meu acesso no SID

Data de elaboração

 26/05/2022

Responsável pelo estudo

João Pedro Rocha Brito (Assessor)

José Henrique dos Santos Nogueira (Assessor)


Equipe do estudo

João Pedro Rocha Brito (Assessor)

José Henrique dos Santos Nogueira (Assessor)

José Lucas da Silva Costa (Analista de Desenvolvimento Full-Stack)

Jônatas Neves Legal (Técnico emTecnologia da Informação e Comunicação) 

Alvo Sistema Integrado de Descanso.
Origem

Implementação: Notificação via e-mail e meu acesso no SID.

Objetivo

Revisar o sistema de forma preventiva para evitar que problemas durante o período de marcação do planejamento anual.
Documentação Correlata Sem documentação correlata.

Observações

Sem observações.

1. Glossário de Termos

  1. API Application Programming Interface (interface de Programação de Aplicações).
  2. CDS - Cargo de Direção Superior.
  3. ELASTICSEARCH - é um mecanismo de pesquisa e análise de código aberto distribuído.
  4. IP - Internet Protocol (protocolo de rede).
  5. KPIs - Key Performance Indicators - são os Indicadores-Chave de Desempenho observados por um negócio.
  6. KIBANA - Plugin de visualização de dados de fonte aberta para o Elasticsearch.
  7. PAF - Planejamento Anual de Férias.
  8. PPE - Plataforma de Publicação Eletrônica.
  9. RH - Recursos Humanos.
  10. SID - Sistema Integrado de Descanso.
 

2. Introdução


O SID (Sistema Integrado de Descanso) é responsável pelo controle de férias dos servidores do poder executivo do Estado De Rondônia.  O fluxo principal deste sistema funciona basicamente todos os anos no mês de setembro, onde todos os servidores devem indicar suas preferências de período de férias para o ano subsequente. Acontece que durante esse período é comum ocorrer problemas técnicos, principalmente problemas relacionados ao sistema e  as outras vezes por situação cadastral irregular. O time Titãs assumiu a responsabilidade das manutenções referente ao SID e vem fazendo correções de extrema importância para que não aconteçam imprevistos durante o período de marcação do planejamento anual. O objetivo deste estudo é realizar uma revisão do sistema de forma preventiva para evitar que problemas nesta fase prejudique o andamento do feito.

3. Desenvolvimento - Implementação de notificação via e-mail e meu acesso no SID


O SID por complexidade começa seu fluxo para o planejamento anual de férias através do portal do servidor, a partir deste momento o servidor irá informar quais são os períodos deseja solicitar para suas férias, o sistema irá verificar se existem datas disponíveis ou até mesmo conflitantes. Há casos de servidores que ainda não completaram 1 ano de trabalho e não podem exercer tal direito. Visto o prosseguimento do feito, o chefe imediato tem a função de avaliar se a solicitação de férias está de acordo com interesse público, não podem haver conflitos entre servidores que exercem funções similares. Caso o período solicitado haja algum tipo de conflito poderá será reprovado pelo chefe imediato. Prosseguindo o processo, o chefe da pasta, tem a atribuição de acrescentar todas as solicitações aprovadas em bloco de assinatura para portariar. Por fim o sistema conclui todo o fluxo agendamento a publicação para homologar as férias do servidor. Vejamos o processo ilustrado graficamente a seguir:

image-1649129363213.pngFonte: SETIC/RO

3.2. Possíveis problemas

Anteriormente o SID não possuía uma ferramenta de monitoramento de falhas, acontece que para o novo PAF (Planejamento Anual de Férias) do ano de 2022 será possível realizar uma análise criteriosa dos possíveis problemas que acontecerem nesta etapa. Atualmente a SETIC conta com a integração ferramenta tecnológica do Kibana + Elasticsearch.

De acordo com o site oficial da empresa temos por definição o Kibana como:

Comece explorando seus dados com visualizações impressionantes no Kibana, desde gráficos de waffle e mapas de calor até análise de séries temporais e muito mais. Use dashboards pré-configurados para suas diversas fontes de dados, crie apresentações ao vivo para destacar KPIs e gerencie a implantação em uma única UI.

Já em outro trecho do mesmo site temos a definição conjunta do Elasticsearch:

Independentemente de você estar procurando ações de um endereço IP específico, analisando um pico nas solicitações de transação ou querendo achar uma pizzaria no raio de um quilômetro, os problemas que todos nós estamos tentando resolver com os dados se resumem à busca. O Elasticsearch permite armazenar, buscar e analisar com facilidade e em escala.

Essas ferramentas serão de grande ajuda durante o novo PAF 2022, pois ajudam a encontrar a razão de problemas de forma técnica e incisiva, categorizando melhor os problemas que são graves ou problemas menores e isolados. 

No PAF de 2021 foram feitas correções importantes para as portarias anuais, uma delas objetivou corrigir problemas de duplicidade nas portarias, os servidores envolvidos neste tipo de problema tinham seus nomes duplicados na portaria oficial da escala anual de férias e isso ocasionava uma série de problemas para os emissores deste documento.

Em decorrência do problema anterior, existiam alguns servidores que por diversas razões, não estariam presentes na portaria da escala anual de férias, estes servidores posteriormente devem ser integrados no mesmo PAF do ano corrente, acontece que o sistema não contemplava tal situação no PAF de 2021, então agora para o PAF de 2022 esperamos que tal problema não ocorra já que foi resolvido e que os servidores remanescentes consigam serem enquadrados em outra portaria com suas respectivas marcações de férias.

Os servidores com cargo de PROCURADOR se tornaram uma demanda frequente para a equipe de desenvolvimento do time TITÃS, este tipo de cargo tem direito a duas férias de 30 dias, ou seja, 60 dias totais. Acontece que grande parte dos PROCURADORES possuem outras matrículas devido as ocupações em cargos CDS (Cargo de Direção Superior).

Houve certa dificuldade da equipe em entender o que o sistema deveria fazer neste cenário, afinal de contas se um procurador tem duas matrículas, ele teria 60 dias de férias da matrícula do cargo de PROCURADOR e mais 30 dias de férias da matrícula de CDS. Em consulta ao RH da SETIC o que ficou entendido é que mesmo que ele tenha duas matrículas, as férias marcadas na matrícula do CDS deve ser colidida com um dos períodos das férias do cargo de PROCURADOR para que não excedesse 60 dias de férias.

Outro problema frequente no PAF de 2021 e também nas remarcações de férias foi a ausência de períodos nas solicitações. Isso ocasionava a existência de solicitações no banco de dados sem período e incidia em períodos de férias.

Uma situação mais crítica que pode ocasionar problemas no PAF de 2022 é a assinatura e agendamento de portarias, no ano de 2022 houveram mudanças no PPE (Plataforma de Publicação Eletrônica) que ocasionaram problemas ao SID. Esse problema foi corrigido e se espera que não ocorra mais para o ano corrente.

Visto todas as situações abordadas fica exposto a seguir o código responsável por realizar a recepção do planejamento anual vista todas as refatorações já efetuadas no SID:

        [HttpPost]
        public async Task<IActionResult> PostSolicitacao(ReceberSolicitacaoDto solicitacaoDTO)
        {
            if (solicitacaoDTO.DatasIniciaisDasFerias.Any(x => x.DataInicial.Date == DateTime.MinValue.Date))
            {
                return Response("Ocorreu um erro, alguma das datas informadas é inválida!");
            }

            var servidor = await servidorRepository.BuscarPorMatricula(solicitacaoDTO.MatriculaDoServidor);

            var mensagemErro = injecaoDeDependencia.validacaoDaSolicitacaoService.ValidarServidorDaSolicitacao(servidor, solicitacaoDTO);
            if (!string.IsNullOrEmpty(mensagemErro))
                return Response(mensagemErro);

            var quantidadeDeFeriasMarcadas = await context.Solicitacao
                .Include(x => x.Servidor)
                .CountAsync(x => x.Servidor.Matricula == solicitacaoDTO.MatriculaDoServidor &&
                               x.AnoAquisitivo == solicitacaoDTO.AnoAquisitivo &&
                               (x.Status == StatusDaSolicitacao.Deferida || x.Status == StatusDaSolicitacao.AguardandoHomologacao));

            var podeMarcarMaisDeUmaSolicitacao = servidor.PossuiCargoDeProcurador() || servidor.PossuiCargoDeRaioX();

            if (podeMarcarMaisDeUmaSolicitacao && quantidadeDeFeriasMarcadas > 1)
            {
                return Response("Ocorreu um erro, o servidor já possui férias marcadas nessa matrícula!");
            }

            if (!podeMarcarMaisDeUmaSolicitacao && quantidadeDeFeriasMarcadas > 0)
            {
                return Response("Ocorreu um erro, o servidor já possui férias marcadas nessa matrícula!");
            }

            Solicitacao solicitacao = null;
            if (solicitacaoDTO.FormaDoPeriodoDeFerias == FormaDoPeriodoDeFerias.Outros.ToString())
                solicitacao = SolicitacaoFactory.MontarSolicitacaoDeFeriasPendentes(
                    solicitacaoDTO.DatasIniciaisDasFerias.First().DataInicial,
                    solicitacaoDTO.QuantidadeDeDiasPendentes,
                    servidor,
                    solicitacaoDTO.AnoAquisitivo);
            else
                solicitacao = SolicitacaoFactory.MontarSolicitacaoParaEnviarParaHomologacao(solicitacaoDTO, servidor);

            mensagemErro = await injecaoDeDependencia.validacaoDaSolicitacaoService.ValidarSolicitacao(solicitacao, solicitacaoDTO);
            if (!string.IsNullOrEmpty(mensagemErro))
                return Response(mensagemErro);

            if (!string.IsNullOrWhiteSpace(solicitacaoDTO.CpfDoUsuarioQueHomologou))
                solicitacao.Deferir(solicitacaoDTO.CpfDoUsuarioQueHomologou);

            await context.Solicitacao.AddAsync(solicitacao);
            context.SaveChangesAsync().Wait();

            if (solicitacao.Id == 0)
                return ErroContateOAdministrador();

            var ehUmaEdicaoDeSolicitacao = solicitacaoDTO.Id != 0;
            if (ehUmaEdicaoDeSolicitacao)
                await RemoverSolicitacaoAntiga(solicitacaoDTO);

            return Response("Solicitacão enviada com sucesso", solicitacao.Id);
        }


3.3. Valor agregado

A revisão no processo de PAF beneficia os desenvolvedores do time TITÃS e amplia o entendimento de todos os membros do time sobre os aspectos do desenvolvimento do produto. Também beneficia os servidores em geral por melhorar a eficiência e reduzir erros dispendiosos no processo de planejamento das férias. Mais importante ainda, a revisão de código garante otimização de código de alta qualidade por meio do trabalho em equipe interno.

4. Conclusão


O presente ESTUDO TÉCNICO PRELIMINAR, elaborado pelos integrantes TÉCNICOS do time TITÃS, considerando a análise dos desafios técnicos envolvidos e citados, conclui pela VIABILIDADE DO PLANEJAMENTO ANUAL DO ANO DE 2022, uma vez que foram considerados potenciais problemas que afetem a disponibilidade do serviço. Em complemento, os contratempos identificados são administráveis, pelo que RECOMENDAMOS o prosseguimento da demanda.

5. Referências