Data de elaboração | 05/04/2022 |
Responsável pelo estudo | João Pedro Rocha Brito (Assessor) |
Equipe do estudo | João Pedro Rocha Brito (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 | Objetivo Estratégico: Revisão do Planejamento Anual de Férias de 2022 do SID. |
Objetivo | Revisar o Sistema Integrado de Descanso de forma preventiva para evitar que problemas durante o planejamento anual de férias. |
Documentação correlata | -/- |
Observações | -/- |
API: Application Programming Interface (interface de Programação de Aplicações).
CDS: Cargo de Direção Superior.
ELASTICSEARCH: é um mecanismo de pesquisa e análise de código aberto distribuído.
IP: Internet Protocol (protocolo de rede).
KPIs: Key Performance Indicators - são os Indicadores-Chave de Desempenho observados por um negócio.
KIBANA: Plugin de visualização de dados de fonte aberta para o Elasticsearch.
PAF: Planejamento Anual de Férias.
PPE: Plataforma de Publicação Eletrônica.
RH: Recursos Humanos.
SID: Sistema Integrado de Descanso.
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:
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.
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.
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);
}