Dependente do Servidor com Incidência de Imposto de Renda
Data de elaboração | 17/04/2023 |
---|---|
Responsável pelo estudo |
Jônatas Neves Legal (Técnico em Tecnologia da Informação e Comunicação) (Assessor) |
Equipe do estudo | Caos |
Alvo |
Produto: GOVERNA Funcionalidade: Cadastro de Dependentes do Servidor |
Origem |
Implementação: Novas implementações |
Objetivo | Analisar a funcionalidade para implementar a validação prevista no item 2.2.2 do estudo técnico realizado anteriormente. |
Documentação correlata | |
Observações | Sem observações. |
Glossário
- for - Palavra utilizada em programação para executar uma rotina de repetição no programa (do inglês, "para");
- if - Palavra utilizada em programação para realizar verificações de condições verdadeiras ou falsas (do inglês, "se");
1. Introdução
...Este estudo visa analisar o comportamento da funcionalidade de cadastro de dependentes do servidor a fim de encontrar uma maneira simples e eficaz de atender ao critério proposto no item 2.2.2 do estudo técnico "Alteração da Formação da Alíquota no Método de Cálculo do Imposto de Renda", onde é requerida uma nova validação ao cadastrar um dependente ao servidor quanto o dependente incidir em imposto de renda.
2. Desenvolvimento
No módulo de recursos humanos do sistema Governa, navegando pelo menu Servidor, posteriormente em Cadastro de Servidor, ao abrir a janela de edição das informações mensais de um servidor encontramos o submenu de Dependentes onde podemos realizar o cadastro e edição dos dependentes daquele servidor, podemos visualizar essa tela na imagem a seguir:
Ao clicar no botão Adicionar é aberta a janela para preenchimento dos dados de um novo dependente onde o usuário deve selecionar qual dependente do servidor estará cadastrando, o tipo de dependente (cônjuge, filho e etc.), se aquele dependente incide imposto de renda entre outras opções como podemos visualizar na imagem a seguir:
Nesta tela, caso o usuário marque a opção Imposto de Renda e confirmando o cadastro através do botão Confirmar, algumas validações ocorrem previamente antes de efetivar o cadastro desse dependente às informações mensais do servidor. Neste caso, o método confirmarDependenteIrrf da classe ServidorMB é chamado na aplicação contendo o seguinte trecho de código:
mensagem = servidorMensalBO.verificarDependenteIrrfOutroServidor(this.servidorMensal, this.servidorDependente);
if (mensagem == null || mensagem.equals(""))
{
confirmarDependente();
}
else
{
servidorDependente.setImpostoRenda(false);
super.primefacesUpdate("formVisualizarServidorMensal:tabServidorMensal:tabDependente");
super.enviarMensagemErro(mensagem);
}
Neste trecho, a variável mensagem (linha 1) guarda a resposta das validações que são realizadas com relação ao dependente com incidência de imposto de renda, caso a resposta da validação seja nula ou vazia significa que o dependente é válido neste contexto e o sistema pode prosseguir com o cadastro do dependente através do método confirmarDependente (linha 4).
Ainda na primeira linha, a variável mensagem invoca o método verificarDependenteIrrfOutroServidor que de fato realiza a validação daquele dependente ao receber os dados do servidor mensal e os dados do dependente propriamente dito. Este método pode ser analisado no trecho de código a seguir:
Long idDoServidor = servidorDependente.getPessoaParentesco().getParente().getId();
List<ServidorDependente> servidorDependenteList = servidorDependenteRepositorio.findByParenteMesRefencia(idDoServidor, servidorMensal.getMesReferencia());
for (ServidorDependente servidorDependenteCadastrado : servidorDependenteList) {
boolean mesmoServidor = idDoServidor.equals(servidorDependenteCadastrado.getServidorMensal().getServidor().getId());
boolean mesmaMatricula = servidorDependenteCadastrado.getServidorMensal().getServidor().getMatricula().equals(servidorDependente.getServidorMensal().getServidor().getMatricula());
// verifica se o dependente de imposto de renda já é dependente de imposto de renda de outro servidor
if (!mesmoServidor)
{
Campo campo = new Campo(rotuloServicoRh.getRotulo(RotuloChaveRh.ROTULO_MANTER_SERVIDOR_DEPENDENTE_DEPENDENTE));
return mensagemServicoRh.getMensagem(MensagemChaveRh.MENSAGEM_GENERICA_REGISTRO_JA_CADASTRADO_PENSIONISTA_SERVIDOR,
"O " + campo.getNome() + ": " + servidorDependenteCadastrado.getPessoaParentesco().getParente().getNome() + " já está ",
"Servidor: " + servidorDependenteCadastrado.getServidorMensal().getServidor().getPessoaFisica().getNome() +
", com incidência de imposto de renda.");
}
// verifica se o dependente de imposto de renda já é dependente do servidor em outra matricula
if ( mesmoServidor && !mesmaMatricula) {
Campo campo = new Campo(rotuloServicoRh.getRotulo(RotuloChaveRh.ROTULO_MANTER_SERVIDOR_DEPENDENTE_DEPENDENTE));
return mensagemServicoRh.getMensagem(MensagemChaveRh.MENSAGEM_GENERICA_REGISTRO_JA_CADASTRADO_PENSIONISTA_SERVIDOR,
"O " + campo.getNome() + ": " + servidorDependenteCadastrado.getPessoaParentesco().getParente().getNome() + " já está ",
"Servidor: " + servidorDependenteCadastrado.getServidorMensal().getServidor().getPessoaFisica().getNome() +
", com incidência de imposto de renda, em outra mattrícula.");
}
}
No início do código percebemos a variável idDoServidor (linha 1) guardando o id do servidor mensal a qual o dependente será cadastrado. Logo abaixo, a variável servidorDependenteList (linha 2) armazena uma lista de servidores na qual aquele dependente já foi cadastrado.
Prosseguindo, temos um laço de repetição for (linha 4) que percorre a lista de servidores armazenados na variável servidorDependenteList. Para cada servidor na lista, é realizada duas verificações. Primeiro, são criadas as variáveis mesmoServidor (que verifica se o servidor atual da lista é o mesmo servidor mensal, linha 5) e mesmaMatricula (para verificar se as matriculas do servidor mensal e do servidor atual da lista são diferentes, linha 6). Logo após na primeira verificação if (linha 9), caso não se trate do mesmo servidor a condição é atendida tornando o dependente inapropriado para cadastro (pois o dependente já foi cadastrado em outro servidor com incidência de imposto de renda) e assim retornando uma mensagem de erro adequada. Caso contrário a segunda verificação if (linha 19) é invocada, caso seja o mesmo servidor mas com matrículas distintas as condições são atendidas e o dependente não pode ser cadastrado (pois o dependente já foi cadastrado em outra matrícula daquele servidor com incidência de imposto de renda) e assim retorna uma mensagem de erro apropriada conforme a imagem a seguir:
Para atender a demanda adicionando uma validação para verificar também se os servidores previamente vinculados aquele dependente são da mesa fonte pagadora ou não, pode ser inserido no método as seguintes linhas de código resultando no trecho a seguir do método verificarDependenteIrrfOutroServidor recodificado:
Long idDoServidor = servidorDependente.getPessoaParentesco().getParente().getId();
String fontePagadoraDoServidor = servidorMensal.getLotacaoMensal().getAdministracao().getFontePagadora();
List<ServidorDependente> servidorDependenteList = servidorDependenteRepositorio.findByParenteMesRefencia(idDoServidor, servidorMensal.getMesReferencia());
for (ServidorDependente servidorDependenteCadastrado : servidorDependenteList) {
boolean mesmoServidor = idDoServidor.equals(servidorDependenteCadastrado.getServidorMensal().getServidor().getId());
boolean mesmaMatricula = servidorDependenteCadastrado.getServidorMensal().getServidor().getMatricula().equals(servidorDependente.getServidorMensal().getServidor().getMatricula());
boolean mesmaFontePagadora = fontePagadoraDoServidor.equals(servidorDependenteCadastrado.getServidorMensal().getLotacaoMensal().getAdministracao().getFontePagadora());
// verifica se o dependente de imposto de renda já é dependente de imposto de renda de outro servidor na mesma fonte pagadora
if (!mesmoServidor && mesmaFontePagadora) {
Campo campo = new Campo(rotuloServicoRh.getRotulo(RotuloChaveRh.ROTULO_MANTER_SERVIDOR_DEPENDENTE_DEPENDENTE));
return mensagemServicoRh.getMensagem(MensagemChaveRh.MENSAGEM_GENERICA_REGISTRO_JA_CADASTRADO_PENSIONISTA_SERVIDOR,
"O " + campo.getNome() + ": " + servidorDependenteCadastrado.getPessoaParentesco().getParente().getNome() + " já está ",
"Servidor: " + servidorDependenteCadastrado.getServidorMensal().getServidor().getPessoaFisica().getNome() +
", com incidência de imposto de renda, na fonte pagadora: " + FontePagadoraEnum.parse(fontePagadoraDoServidor).getDescricao());
}
// verifica se o dependente de imposto de renda já é dependente do servidor em outra matricula na mesma fonte pagadora
if ( mesmoServidor && !mesmaMatricula && mesmaFontePagadora) {
Campo campo = new Campo(rotuloServicoRh.getRotulo(RotuloChaveRh.ROTULO_MANTER_SERVIDOR_DEPENDENTE_DEPENDENTE));
return mensagemServicoRh.getMensagem(MensagemChaveRh.MENSAGEM_GENERICA_REGISTRO_JA_CADASTRADO_PENSIONISTA_SERVIDOR,
"O " + campo.getNome() + ": " + servidorDependenteCadastrado.getPessoaParentesco().getParente().getNome() + " já está ",
"Servidor: " + servidorDependenteCadastrado.getServidorMensal().getServidor().getPessoaFisica().getNome() +
", com incidência de imposto de renda, em outra mattrícula, na fonte pagadora: " + FontePagadoraEnum.parse(fontePagadoraDoServidor).getDescricao());
}
}
Primeiramente, uma nova variável é adicionada logo no início do método chamada fontePagadoraDoServidor (linha 2) que guarda a informação da fonte pagadora do servidor mensal a qual se deseja cadastrar o dependente. O segundo ponto, dentro do laço de repetição for (linha 5) há outra variável acrescentada que chamamos de mesmaFontePagadora (linha 8) para guardar a verificação se a fonte pagadora do servidor mensal é igual a fonte pagadora do atual servidorDependenteCadastrado (linha 5). Para finalizar a validação, acrescentamos a variável mesmaFontePagadora às duas verificações if (linhas 11 e 20) para que a fonte pagadora seja verificada em conjunto com as demais condições.
3. Conclusão
Após análise, percebemos que mudança não aparenta ser demasiadamente complexa, nem que afetará outras funcionalidades além da necessária. No entanto, vale lembrar que essa alteração só terá impacto nos novos cadastros. Os cadastros anteriores a esta alteração deverão ser editados a fim de estarem em conformidade com essa nova regra.