Ir para o conteúdo principal

Otimização da estrutura interna do sistema SISNE

Data de elaboração 26/09/22
Responsável pelo estudo
  • Alexandre dos Santos Freire Ferreira (Assessor)
Equipe do estudo Caveiras
Alvo SISNE - Sistema de Nomeação e Exoneração
Origem
  • Melhoria: Otimização do código fonte e base e dados.
Objetivo Deixar o sistema menos complexo, através de limpeza, remodelagem e otimização do projeto.
Observações Continuar o projeto na atual condição é possível, porem deve haver ciência de que existe todos estas situações negativas.

1. Introdução

No decorrer do desenvolvimento do SISNE muitas funcionalidades novas foram acrescentadas e outras foram retiradas, muitas regras mudaram, e tudo isso, sem nem mesmo o sistema ter sido lançado em produção, o que resultou em grande volume de “lixo” dentro do projeto, sendo necessário uma refatoração e um novo alinhamento com o time acerca do fluxo do SISNE neste momento.

2. Desenvolvimento

3.1 Remodelagem do banco de dados

O banco de dados é um importante alicerce do sistema, portanto se a modelagem não estiver otimizada, tal condição é refletida diretamente no projeto, sendo necessário usar de artifícios complexos para resolver problemas que não existiriam, se o sistema estivesse construído em cima de uma base modelada de maneira adequada. Na prática o resultado é consultas lentas e código complexo. 

Inicialmente a ideia é otimizar a principal tabela do sistema que é a tabela de atos. Um ato pode ser referente a uma nomeação, exoneração, retificação, designação, exoneração, dispensa (FG), cessar designação, cessar interino, tornar sem efeito (TSF). Porém atualmente o banco não refleti isso. O que existe é uma única tabela para agrupar todos esses tipos de atos listados, os quais tem finalidades destintas.  

Diagrama

Descrição gerada automaticamente

 “Visão parcial da atual modelagem do banco de dados.” 

Logo temos um problema, pois uma única tabela para todos os tipos de atos, além de resultar em confusão no compreendimento da regra de negócio, causa também baixa performance e dificulta a manutenção do projeto.  

Algo que poderia ser feito é manter na tabela atos apenas os campos que são comuns entre os subtipos de atos, e separar os demais em tabelas diferentes (ex: nomeação, exoneração....), referenciando nestas apenas a qual ato pertencem, deixando a estrutura do banco mais organizada. 

 

“Imagem ilustrativa, desconsiderar os campos e tipos neles especificados” 

 

3.2 Unificação de códigos repetidos e otimização das regras de negócios

No decorrer do desenvolvimento do SISNE muita coisa nova foi acrescentada, retirada, muitas regras mudaram, e tudo isso sem nem mesmo o sistema ter sido lançado em produção, o que resultou em grande volume de “lixo” dentro do projeto. Por exemplo, anteriormente o sistema fazia comunicação direta com a base de dados da DECAANE, para consultar os decretos gerados pelo CECAANE, sistema o qual será substituído pelo SISNE, foi feita uma grande estrutura para que essa integração fosse possível, porém em determinado momento foi decidido que não seria mais necessário e toda essa comunicação foi removida. 

Outra situação parecida é referente aos dados pessoais. Antes de existir o sistema Pentágono, o SISNE tinha uma estrutura própria para manter esses registros, porém em determinado momento foi decidido que existia a necessidade de concentrar estes dados em um único lugar e então toda a estrutura criada no SISNE deixou de existir e aconteceu assim, a necessidade de realizar uma nova integração com esse novo sistema chamado pentágono.  

Com toda essa mudança ocorrendo é de se esperar inconsistências e falhas, principalmente se considerarmos a dimensão do projeto. (link para acessar este quadro) 

Gráfico, Gráfico de dispersão

Descrição gerada automaticamente 

O exemplo abaixo é referente a consulta de uma nomeação. Na tela do usuário, irá aparecer apenas uma informação básica, porém a consulta traz muito mais dados, além do necessário, relacionando diversas outras tabelas no banco de dados, resultando em lentidão e consumo de processamento desnecessário. 

Uma imagem contendo Texto

Descrição gerada automaticamente 

Outro exemplo é do status "situações". Atualmente existem 4 arquivos diferentes que poderiam ser unificados e dessa maneira deixar o sistema mais limpo e simples de trabalhar. 

Texto

Descrição gerada automaticamenteTexto

Descrição gerada automaticamente Texto

Descrição gerada automaticamenteTexto

Descrição gerada automaticamente  

 

Telas do Perfil RH:


  • Após a criação do ato, a situação deverá mudar para "AGUARDANDO ENVIO DOS DOCUMENTOS"

image.png

Detalhes do ato após criação



Atualizar regra: quando o RH receber o Ato,  a situação mudará para "EM ANDAMENTO, AGUARDANDO ANALISE"

image.png

Detalhes do Ato de Nomeação.

Obs.: essa situação será exibida sempre que o candidato a servidor enviar o documento para o RH pela primeira vez.



Hipótese:  A analise só será  concluída quando o candidato enviar toda documentação corretamente. Caso contrario, o Ato será reenviado para o candidato corrigir a documentação conforme as justificativas do RH.

image.png

Ato com documentos reprovados


Atualizar Regra: a situação do Ato mudará para "AGUARDANDO REANALISE DO RH" somente quando o candidato a servidor reenviar um ato com situação "EM ANDAMENTO, AGUARDANDO CORREÇÃO DOS DOCUMENTOS"

image.png

Detalhes do ato após o receber reenvio do candidato

Foi observado que,  o campo "Situação dos Dados do Servidor" ficará redundante pois, esta informação já poderia estar na situação do ato. Ex: Situação do Ato: EM ANDAMENTO, AGUARDANDO REANÁLISE

Além disso, a Situação dos dados do servidor, ficam armazenadas no histórico do Ato


Telas do candidato a servidor:


Complexidade na implementação de código pois, não é possível saber se o documento esta sendo editado ates do primeiro envio ou corrigido conforme as justificativas do RH.

Cenário: Como servidor, preciso corrigir minha declaração, pois anexei o documento errado;

Verificar Hipótese:  Disponibilizar botão Corrigir Declaração caso situação do ato esteja "EM ANDAMENTO, AGUARDANDO CORREÇÃO DOS DOCUMENTOS" e/ou documentos possuir Justificativas;

image.png

Atos com documentos para corrigir e reenviar para o RH

3.3 Divisão interna de responsabilidades por perfis

Atualmente existe muita reutilização de arquivos/códigos entre os diferentes perfis do SISNE. A reutilização não é um problema, porém da maneira que foi aplicada no SISNE, percebe-se que está causando muita dificuldade na manutenção e de na novas implementações. Essa dificuldade ocorre devido ao grande excesso de regras que se fazem necessários em resultado da reutilização inadequada de códigos e arquivos. 

Por exemplo, há casos em que se está desenvolvendo código para uma história de usuário específica para um determinado perfil, e ao final é validada, pois cumpriu os requisitos exigidos. Porém pelo fato de ter sido alterado arquivos que estão sendo utilizados por outros perfis, pode acontecer inconsistências nestes outros perfis, por exemplo RH/CHEFE DA PASTA/CASA CIVIL, utilizam o mesmo arquivo responsável por exibir a análise dos documentos do candidato, logo estes se tornam sensíveis a alterações.  

A solução encontrada foi dividir as áreas por perfis, deixando as views mais simples de realizar manutenção. Ao invés de apenas uma para Análise e outra para Servidor, dividir um para cada perfil. Removendo essa área análise, que é genérica. 

Interface gráfica do usuário, Texto

Descrição gerada automaticamente com confiança média 

Por exemplo, esse trecho abaixo da linha 30 a 69 só para mostrar um botão, além de envolver muitas regras que não estão visíveis aqui, pois são processadas em outro momento, esse mesmo arquivo é responsável por mostrar botão de Aprovar/Reprovar/Análise da SEGEP/Deferir, além de mostrar a situação da certidão/situação da analise. 

 

 

Já este outro é apenas para mostrar um botão de Aprovar e Reprovar 

Texto

Descrição gerada automaticamente 

3.4 Otimização ou remoção das solicitações

Apenas os perfis ASTEC/SEGEP, DECAANE E GOVERNADOR visualizam atos individuais, os demais perfis utilizam o sistema de solicitações, ou seja, se uma solicitação com 10 atos estiver no CHEFE DA PASTA, e 9 deles estiverem assinados e 1 não estiver a CASA CIVIL não vai conseguir visualizar esta solicitação Essa mesma lógica se aplica nos demais perfis, salvo as exceções listadas anteriormente.  

Abaixo estão algumas soluções que poderiam ser implementadas para resolver essa questão. 

  • Permitir que os perfis vejam os atos de forma individual, mantendo a estrutura da solicitação, criando um novo menu para visualiza da lista de atos;

  • Remover por completo a estrutura de solicitações, deixando apenas atos individuais;
  • Tratar solicitação como se fosse um grupo de cadastro e no momento que for cadastrar um ato, dizer a qual grupo (que é solicitação) que ele pertence, porém deixando que estes atos caminhem de forma individual.

3.5 Focar no Produto Mínimo Viável – MVP 

Este é um artificio que pode ajudar a levar o SISNE para produção o mais breve possível, atualmente o foco já está sendo apenas em nomeações e exonerações, portanto a ideia é enxugar o código deixando apenas o necessário para que essas duas ações ocorram 

Todavia seria mantido uma cópia geral do projeto contendo as regras atuais já criadas para os demais tipos de atos. Dessa maneira, dentro do projeto atual, esses arquivos referentes aos outros tipos de atos seriam apagados, pois não seriam implementados agora. E depois quando o projeto estiver em produção e validado, então seriam adicionados estes outros tipos de Atos gradualmente, para ser possível que estes sejam validados de maneira mais assertiva. 

Um projeto limpo é mais fácil de trabalhar e manter. O SISNE logo no começo iniciou com a ideia de abranger todos as funcionalidades de uma única vez, resultado assim em um longo período de desenvolvimento, dado que não existiu um MVP naquele momento. 

Abaixo esta um resumo do fluxo completo do SISNE, partindo do perfil RH e finalizando no perfil Governador. 

Gráfico, Gráfico de dispersão

Descrição gerada automaticamente 

(Fluxo do completo do SISNE) 

O processo envolve muito stakeholders, gerando uma complexibilidade imensa, que é multiplicada ainda mais quando se tem que traduzir tudo isso em código. 


3. Conclusão

O projeto SISNE possui um banco de dados/código fonte não otimizado e suscetível a erros. Portanto, novas implementações na atual condição poderá custar muito tempo. Ainda que simples, uma vez que o código é sensível, bugs podem ser criados a partir de novas features, podendo ser percebido imediatamente ou não