private ResultadoDto SimularContribuicao(InformacoesDto informacoesDto, int idadeMinimaParaAposentar, int tempoMinimoContribuicao, double percentualAplicadoParaCalculo) { int quantidadeMesesAno = 12; int idadeAtual = GetIdade(informacoesDto.Nascimento); int tempoFaltaParaAposentar = idadeMinimaParaAposentar - idadeAtual; int tempoJaRealizado = idadeAtual - informacoesDto.IdadeComQueComecouContribuicao; int tempoTotalRealizado = tempoJaRealizado + tempoFaltaParaAposentar; if (tempoTotalRealizado < tempoMinimoContribuicao) { tempoFaltaParaAposentar += (tempoMinimoContribuicao - tempoTotalRealizado); } int quantidadeContribuicoesParaPagarIniciandoMesAtual = (tempoFaltaParaAposentar * quantidadeMesesAno); DateTime dataUltimaContribuicao = DateTime.Now.AddMonths(quantidadeContribuicoesParaPagarIniciandoMesAtual); double valorPagoMes = GetValorContribuicao(informacoesDto, percentualAplicadoParaCalculo); SimulacaoDto simulacaoDto = _mapper.Map <SimulacaoDto>(informacoesDto); simulacaoDto.IdUsuario = _usuarioService.FindByNome(informacoesDto.Usuario).Id; Create(simulacaoDto); Resultado resultado = new Resultado(quantidadeContribuicoesParaPagarIniciandoMesAtual, dataUltimaContribuicao, valorPagoMes, percentualAplicadoParaCalculo, simulacaoDto.Id); _resultadoService.Create(resultado); return(_mapper.Map <ResultadoDto>(resultado)); }
private ResultadoDto SimularTempoNormalFeminino(InformacoesDto informacoesDto) { int tempoMinimoContribuicao = 32; int idadeMinimaParaAposentar = 63; double percentualAplicadoParaCalculo = GetPercentualParaCalculo(informacoesDto.Salario, informacoesDto.Tipo); return(SimularContribuicao(informacoesDto, idadeMinimaParaAposentar, tempoMinimoContribuicao, percentualAplicadoParaCalculo)); }
private ResultadoDto SimularTempoReduzido(InformacoesDto informacoesDto) { if (!informacoesDto.Sexo.Equals("M") && !informacoesDto.Sexo.Equals("F")) { throw new SimuladorContribuicaoAposentadoriaException("Sexo invalido. (Masculino = M, Feminino = F)"); } int tempoMinimoContribuicao = 25; int idadeMinimaParaAposentar = 67; double percentualAplicadoParaCalculo = GetPercentualParaCalculo(informacoesDto.Salario, informacoesDto.Tipo); return(SimularContribuicao(informacoesDto, idadeMinimaParaAposentar, tempoMinimoContribuicao, percentualAplicadoParaCalculo)); }
public ResultadoDto Simular(InformacoesDto informacoesDto) { switch (informacoesDto.Tipo) { case "N": return(SimularTempoNormal(informacoesDto)); case "R": return(SimularTempoReduzido(informacoesDto)); default: throw new SimuladorContribuicaoAposentadoriaException("Tipo de aposentadoria invalido. (Tempo Normal = N, Tempo Reduzido = R)"); } }
private ResultadoDto SimularTempoNormal(InformacoesDto informacoesDto) { switch (informacoesDto.Sexo) { case "M": return(SimularTempoNormalMasculino(informacoesDto)); case "F": return(SimularTempoNormalFeminino(informacoesDto)); default: throw new SimuladorContribuicaoAposentadoriaException("Sexo invalido. (Masculino = M, Feminino = F)"); } }
private double GetValorContribuicao(InformacoesDto informacoesDto, double percentual) => ((percentual * informacoesDto.Salario) / 100);