Ir para o conteúdo principal

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:

lista-de-dependentes.png

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:

novo-dependente.png

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:

dependente.png

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. Sendo assim, a seguinte história de usuário seria suficiente para atender a demanda:

História

O quê: Eu, dev, preciso adicionar validação no cadastro de dependente com IRRF

Por quê: Para que possa ser adicionado o dependente, com incidência de IRRF, a servidores em diferentes fontes pagadoras

Regras e Validações Permitir adicionar o mesmo dependente, com incidência de IRRF, a servidores em fonte pagadoras distintas