コード例 #1
0
        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));
        }
コード例 #2
0
        private ResultadoDto SimularTempoNormalFeminino(InformacoesDto informacoesDto)
        {
            int    tempoMinimoContribuicao       = 32;
            int    idadeMinimaParaAposentar      = 63;
            double percentualAplicadoParaCalculo = GetPercentualParaCalculo(informacoesDto.Salario, informacoesDto.Tipo);

            return(SimularContribuicao(informacoesDto, idadeMinimaParaAposentar, tempoMinimoContribuicao, percentualAplicadoParaCalculo));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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)");
            }
        }
コード例 #5
0
        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)");
            }
        }
コード例 #6
0
 private double GetValorContribuicao(InformacoesDto informacoesDto, double percentual)
 => ((percentual * informacoesDto.Salario) / 100);