Beispiel #1
0
        public dynamic BuscarSaldoCD(DateTime DT_REFERENCIA, int SQ_CONTRATO_TRABALHO, int SQ_PLANO_PREVIDENCIAL, int CD_PESSOA)
        {
            var saldoIndividual = base.BuscarIndividualPorPlanoDataReferenciaPessoa(DateTime.Now, SQ_PLANO_PREVIDENCIAL, CD_PESSOA, "E");
            var saldoPatronal   = base.BuscarIndividualPorPlanoDataReferenciaPessoa(DateTime.Now, SQ_PLANO_PREVIDENCIAL, CD_PESSOA, "D");

            var plano = new PlanoVinculadoProxy().BuscarPorContratoTrabalhoPlano(SQ_CONTRATO_TRABALHO, SQ_PLANO_PREVIDENCIAL);

            var indice = new IndiceProxy().BuscarPorCdIndice(plano.CD_INDICE_VALORIZACAO);

            var valorSaldoIndividual = saldoIndividual.QT_COTA_CONTRIBUICAO ?? 0;
            var valorsaldoPatronal   = saldoPatronal.QT_COTA_CONTRIBUICAO ?? 0;

            var valorContribIndividalAtualizado = (valorSaldoIndividual) * indice.First().VL_INDICE.Value;
            var valorContribPatronalAtualizado  = (valorsaldoPatronal) * indice.First().VL_INDICE.Value;
            var valorTotal    = valorContribIndividalAtualizado + valorContribPatronalAtualizado;
            var rentabilidade = valorTotal - (saldoIndividual.VL_CONTRIBUICAO + saldoPatronal.VL_CONTRIBUICAO);

            return(new
            {
                SaldoIndividual = saldoIndividual.VL_CONTRIBUICAO,
                SaldoPatronal = saldoPatronal.VL_CONTRIBUICAO,
                Total = (saldoIndividual.VL_CONTRIBUICAO + saldoPatronal.VL_CONTRIBUICAO) + rentabilidade,
                Rentabilidade = rentabilidade
            });
        }
        public IActionResult BuscarPorPlano(string cdPlano)
        {
            try
            {
                var plano     = new PlanoVinculadoProxy().BuscarPorFundacaoEmpresaMatriculaPlano(CdFundacao, CdEmpresa, Matricula, cdPlano);
                var histSaldo = new HistSaldoProxy().BuscarPorFundacaoEmpresaPlanoEspecieNumAnoProcesso(CdFundacao, CdEmpresa, cdPlano,
                                                                                                        plano.ProcessoBeneficio.CD_ESPECIE, plano.ProcessoBeneficio.NUM_PROCESSO, plano.ProcessoBeneficio.ANO_PROCESSO);

                var empresaPlano = new EmpresaPlanosProxy().BuscarPorFundacaoEmpresaPlano(CdFundacao, CdEmpresa, cdPlano);
                var indice       = new IndiceProxy().BuscarUltimoPorCodigo(empresaPlano.IND_RESERVA_POUP);

                var dataCota = indice.VALORES.First().DT_IND;

                var valorIndice = indice.BuscarValorEm(dataCota);

                var totalCotas = histSaldo.First().SALDO_ATUAL;
                var total      = totalCotas * valorIndice;

                return(Json(new
                {
                    TotalCotas = totalCotas,
                    Valor = total,
                    Parcela = histSaldo.First().QTD
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        int CalcularCarencia(int sqPlano)
        {
            var plano      = new PlanoVinculadoProxy().BuscarPorContratoTrabalhoPlano(SqContratoTrabalho, sqPlano);
            var idadePlano = new Intervalo(DateTime.Now, plano.DT_INSC_PLANO, new CalculoAnosMesesDiasAlgoritmo2()).Anos;
            var carencia   = Math.Min(idadePlano, 15);

            return(carencia);
        }
        public IActionResult BuscarPorPlano(string cdPlano)
        {
            try
            {
                var plano = new PlanoVinculadoProxy().BuscarPorFundacaoEmpresaMatriculaPlano(CdFundacao, CdEmpresa, Matricula, cdPlano);

                return(Json(new MensagemProxy().BuscarPorFundacaoEmpresaPlanoSitPlanoCodEntid(CdFundacao, CdEmpresa, cdPlano, plano.CD_SIT_PLANO, CodEntid)));
            } catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public IActionResult Get()
        {
            try
            {
                var planos = new PlanoVinculadoProxy().BuscarPorFundacaoInscricao(CdFundacao, Inscricao).Where(x => x.CD_CATEGORIA != "2").ToList();

                return(Json(planos));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public IActionResult Get()
        {
            try
            {
                var funcionario = new FuncionarioProxy().BuscarPorCodEntid(CodEntid);
                var plano       = new PlanoVinculadoProxy().BuscarPorFundacaoEmpresaMatricula(funcionario.CD_FUNDACAO, funcionario.CD_EMPRESA, Matricula).First();

                return(Json(new DependenteProxy().BuscarPorFundacaoInscricaoPlano(funcionario.CD_FUNDACAO, funcionario.NUM_INSCRICAO, plano.CD_PLANO)));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Beispiel #7
0
        public static void PreencherSaldo(this SaldoContribuicoesEntidade saldo, List <FichaFinanceiraEntidade> contribuicoes, string cdFundacao, string cdEmpresa, string cdPlano, string numInscricao, string cdFundo = null, string dataSaldo = null)
        {
            //saldo.DataReferencia = DateTime.ParseExact($"01/{contribuicoes.First().MES_REF}/{contribuicoes.First().ANO_REF}", "dd/MM/yyyy", new CultureInfo("pt-BR"));
            saldo.DataReferencia = DateTime.Now;

            var func           = new FuncionarioProxy().BuscarPorInscricao(numInscricao);
            var plano          = new PlanoProxy().BuscarPorCodigo(cdPlano);
            var planoVinculado = new PlanoVinculadoProxy().BuscarPorFundacaoEmpresaMatriculaPlano(cdFundacao, cdEmpresa, func.NUM_MATRICULA, cdPlano);
            var empresaPlano   = new EmpresaPlanosProxy().BuscarPorFundacaoEmpresaPlano(cdFundacao, cdEmpresa, cdPlano);

            IndiceEntidade indice;

            if (plano.UTILIZA_PERFIL == "S")
            {
                var perfil = new PerfilInvestIndiceProxy().BuscarPorFundacaoEmpresaPlanoPerfilInvest(cdFundacao, cdEmpresa, cdPlano, planoVinculado.CD_PERFIL_INVEST.ToString());
                indice = new IndiceProxy().BuscarUltimoPorCodigo(perfil.CD_CT_RP);
            }
            else
            {
                indice = new IndiceProxy().BuscarPorCodigo(empresaPlano.IND_RESERVA_POUP);
            }

            var dataCota = indice.VALORES.First().DT_IND;

            if (dataSaldo != null)
            {
                dataCota = Convert.ToDateTime(dataSaldo);
            }


            var valorIndice = indice.BuscarValorEm(dataCota);

            if (cdFundo != null)
            {
                var fundoContrib = new FundoContribProxy().BuscarPorFundacaoPlanoFundo(cdFundacao, cdPlano, cdFundo);

                contribuicoes = contribuicoes.Select(contrib =>
                {
                    if (fundoContrib.Any(fundo => fundo.CD_TIPO_CONTRIBUICAO == contrib.CD_TIPO_CONTRIBUICAO))
                    {
                        contrib.FundoContrib = fundoContrib.First(x => x.CD_TIPO_CONTRIBUICAO == contrib.CD_TIPO_CONTRIBUICAO);
                        return(contrib);
                    }

                    return(null);
                })
                                .Where(x => x != null)
                                .ToList();
            }

            foreach (var contribuicao in contribuicoes)
            {
                var dataReferencia = new DateTime();

                try
                {
                    dataReferencia = new DateTime(Convert.ToInt32(contribuicao.ANO_REF), Convert.ToInt32(contribuicao.MES_REF), 1);
                }
                catch (Exception ex)
                { }

                if (dataReferencia <= dataCota)
                {
                    var valorCotaRPParticipante = 0M;
                    var valorCotaRPEmpresa      = 0M;

                    if (cdFundo != null)
                    {
                        switch (contribuicao.FundoContrib.CD_MANTENEDORA)
                        {
                        case DMN_MANTENEDORA.EMPRESA:
                            //valorCotaRPParticipante = contribuicao.QTD_COTA_RP_EMPRESA ?? 0;
                            valorCotaRPEmpresa = contribuicao.QTD_COTA_RP_EMPRESA ?? 0;
                            break;

                        case DMN_MANTENEDORA.PARTICIPANTE:
                            valorCotaRPParticipante = contribuicao.QTD_COTA_RP_PARTICIPANTE ?? 0;
                            //valorCotaRPEmpresa = contribuicao.QTD_COTA_RP_PARTICIPANTE ?? 0;
                            break;

                        case DMN_MANTENEDORA.AMBOS:
                            valorCotaRPParticipante = (contribuicao.QTD_COTA_RP_PARTICIPANTE ?? 0) + (contribuicao.QTD_COTA_RP_EMPRESA ?? 0);
                            valorCotaRPEmpresa      = (contribuicao.QTD_COTA_RP_PARTICIPANTE ?? 0) + (contribuicao.QTD_COTA_RP_EMPRESA ?? 0);
                            break;
                        }
                    }
                    else
                    {
                        valorCotaRPParticipante = contribuicao.QTD_COTA_RP_PARTICIPANTE ?? 0;
                        valorCotaRPEmpresa      = contribuicao.QTD_COTA_RP_EMPRESA ?? 0;
                    }

                    if (contribuicao.CD_OPERACAO == "C")
                    {
                        saldo.QuantidadeCotasParticipante += valorCotaRPParticipante;
                    }
                    else
                    {
                        saldo.QuantidadeCotasParticipante -= valorCotaRPParticipante;
                    }

                    if (contribuicao.CD_OPERACAO == "C")
                    {
                        saldo.QuantidadeCotasPatrocinadora += valorCotaRPEmpresa;
                    }
                    else
                    {
                        saldo.QuantidadeCotasPatrocinadora -= valorCotaRPEmpresa;
                    }
                }

                saldo.ValorParticipante  = saldo.QuantidadeCotasParticipante * valorIndice;
                saldo.ValorPatrocinadora = saldo.QuantidadeCotasPatrocinadora * valorIndice;
                saldo.DataCota           = dataCota;
                saldo.ValorCota          = valorIndice;
            }
        }
        public IActionResult GetSimulacao(int sqPlanoPrevidencial, [FromBody] dynamic dados)
        {
            try
            {
                //TODO: Jogar pra proxy

                var sqPlano = 3;

                var dadosPessoais      = new DadosPessoaisProxy().BuscarPorCdPessoa(CdPessoa).First();
                int idadeAposentadoria = Convert.ToInt32(dados.idadeAposentadoria);
                Add("Idade Aposentadoria", idadeAposentadoria.ToString());

                decimal contribBasica = Convert.ToDecimal(dados.contribBasica, new CultureInfo("pt-BR"));
                Add("Contribuição Básica", contribBasica.ToString());

                decimal contribFacultativa = Convert.ToDecimal(dados.contribFacultativa, new CultureInfo("pt-BR"));
                Add("Contribuição Facultativa", contribFacultativa.ToString());

                decimal saldo = new SaldoProxy().BuscarSaldoCD(DateTime.Now, SqContratoTrabalho, sqPlano, CdPessoa).Total;
                Add($"Saldo em {DateTime.Now:dd/MM/yyyy}", saldo.ToString());

                var taxaJuros = new FatorValidadeProxy().BuscarUltimo().VL_TX_JUROS;
                Add($"Taxa de Juros", taxaJuros.ToString());

                var dataAtual      = DateTime.Now;//.PrimeiroDiaDoMes();
                var dataNascimento = new DadosPessoaisProxy().BuscarPorCdPessoa(CdPessoa).First().DT_NASCIMENTO.Value;

                var dataAposentadoria = dataNascimento.AddYears(idadeAposentadoria);
                Add($"Data de Aposentadoria por Idade", dataAposentadoria.ToString("dd/MM/yyyy"));

                var plano         = new PlanoVinculadoProxy().BuscarPorContratoTrabalhoPlano(SqContratoTrabalho, sqPlano);
                var dataInscricao = plano.DT_INSC_ANTERIOR ?? plano.DT_INSC_PLANO;
                Add($"Data de Inscrição", dataInscricao.ToString("dd/MM/yyyy"));

                var dataAposentadoria2 = dataInscricao.AddYears(10);
                Add($"Data de Aposentadoria por Tempo de Plano", dataAposentadoria2.ToString("dd/MM/yyyy"));

                dataAposentadoria = DateTime.Compare(dataAposentadoria, dataAposentadoria2) > 0 ? dataAposentadoria : dataAposentadoria2;
                Add($"Data de Aposentadoria Real", dataAposentadoria.ToString("dd/MM/yyyy"));

                var data         = DateTime.Compare(dataAtual, dataAposentadoria) > 0 ? dataAposentadoria : dataAtual;
                var contribBruta = contribBasica * 2 + contribFacultativa;
                Add($"Contribuição Bruta", $"{contribBasica} * 2 + {contribFacultativa} = {contribBruta}");

                var taxaMensal = BuscarTaxaMensal(taxaJuros);
                Add($"Taxa Mensal", taxaMensal.ToString());

                var valorFuturo = saldo;

                while (data < dataAposentadoria)
                {
                    var decimoTerceiro = data.Month == 12;
                    var contribMensal  = contribBruta;

                    if (decimoTerceiro)
                    {
                        contribMensal *= 2;
                    }

                    var valorFuturoAtual = valorFuturo;
                    valorFuturo = (valorFuturo + (valorFuturo * taxaMensal / 100)) + contribMensal;

                    Add($"Saldo em {data:dd/MM/yyyy}", $"({valorFuturoAtual} + ({valorFuturoAtual} * {taxaMensal} / 100)) + {contribMensal} = {valorFuturo}");

                    data = data.AddMonths(1);
                }

                // Valor do saque
                var valorSaque = valorFuturo / 100 * (decimal)dados.saque;
                Add($"Valor Saque", $"{valorFuturo} / 100 * {(decimal)dados.saque} = {valorSaque}");

                // Dependentes
                var idadeDependente           = 0;
                var sexoDependente            = "";
                var idadeDependenteTemporario = 0;
                var dependenteProxy           = new DependenteProxy();

                // Dependente vitalício
                var dependenteVitalicio = dependenteProxy.BuscarDependentePorContratoTrabalhoDtValidadeTipo(SqContratoTrabalho, "V", dataAposentadoria);

                if (dependenteVitalicio != null)
                {
                    var dadosDependente = new DadosPessoaisProxy().BuscarDependentePorCdPessoa(dependenteVitalicio.CD_PESSOA_DEP);

                    if (dadosDependente == null)
                    {
                        throw new Exception("Não existem dados cadastrados para um de seus dependentes. Por favor, entre em contato com a Faceb.");
                    }

                    if (string.IsNullOrEmpty(dadosDependente.IR_SEXO))
                    {
                        throw new Exception("Existe um dependente cadastrado que não possui o campo \"Sexo\" preenchido. Por favor, entre em contato com a Faceb.");
                    }

                    sexoDependente = dadosDependente.IR_SEXO;

                    var dataNascDependente = dependenteVitalicio.DT_NASCIMENTO;
                    idadeDependente = new Intervalo(dataAposentadoria, dataNascDependente).Anos;
                }

                // Dependente temporário
                var dependenteTemporario = dependenteProxy.BuscarDependentePorContratoTrabalhoDtValidadeTipo(SqContratoTrabalho, "T", dataAposentadoria);

                if (dependenteTemporario != null)
                {
                    var dadosDependente = new DadosPessoaisProxy().BuscarDependentePorCdPessoa(dependenteTemporario.CD_PESSOA_DEP);

                    if (dadosDependente == null)
                    {
                        throw new Exception("Não existem dados cadastrados para um de seus dependentes. Por favor, entre em contato com a Faceb.");
                    }

                    if (string.IsNullOrEmpty(dadosDependente.IR_SEXO))
                    {
                        throw new Exception("Existe um dependente cadastrado que não possui o campo \"Sexo\" preenchido. Por favor, entre em contato com a Faceb.");
                    }

                    sexoDependente = dadosDependente.IR_SEXO;

                    var dataNascDependenteTemporario = dependenteTemporario.DT_NASCIMENTO;
                    idadeDependenteTemporario = new Intervalo(dataAposentadoria, dataNascDependenteTemporario).Anos;
                }

                // Fator atuarial
                var fatorAtuarialProxy = new FatorAtuarialMortalidadeProxy();
                var axiPar             = fatorAtuarialProxy.BuscarPorIdadeSexo(idadeAposentadoria, dadosPessoais.IR_SEXO).VL_FATOR_A.Value;
                Add("Fator AXI", axiPar.ToString());

                var axiDep = 0M;
                var axyi   = 0M;
                if (idadeDependente > 0)
                {
                    axiDep = fatorAtuarialProxy.BuscarPorIdadeSexo(idadeDependente, sexoDependente).VL_FATOR_A.Value;
                    var fator = fatorAtuarialProxy.BuscarPorIdadePartIdadeDepSexo(idadeAposentadoria, idadeDependente, sexoDependente);
                    axyi = fator.VL_FATOR_A.Value;
                    Add("Fator AXYI", axyi.ToString());
                }

                var prazoDepentendeTemporario = 20 - idadeDependenteTemporario;
                var xn = idadeAposentadoria + prazoDepentendeTemporario;

                var fatorDxn = fatorAtuarialProxy.BuscarPorTabelaIdadeSexo("lxdx", xn, dadosPessoais.IR_SEXO).VL_FATOR_B.Value;
                var fatorDx  = fatorAtuarialProxy.BuscarPorTabelaIdadeSexo("lxdx", idadeAposentadoria, dadosPessoais.IR_SEXO).VL_FATOR_B.Value;
                var fatorAxn = fatorAtuarialProxy.BuscarPorTabelaIdadeSexo("ax", xn, dadosPessoais.IR_SEXO).VL_FATOR_A.Value;
                Add("Fator Dxn", fatorDxn.ToString());
                Add("Fator Dx", fatorDx.ToString());
                Add("Fator Axn", fatorAxn.ToString());

                decimal fatorAn = 0;
                if (prazoDepentendeTemporario > 0 && !string.IsNullOrEmpty(sexoDependente))
                {
                    fatorAn = fatorAtuarialProxy.BuscarPorTabelaIdadeSexo("an", prazoDepentendeTemporario, sexoDependente).VL_FATOR_A.Value;
                    Add("Fator Axn", fatorAn.ToString());
                }

                var apuracaoAxn = axiPar - (fatorDxn / fatorDx) * fatorAxn;
                Add("Apuração Axn", $"{axiPar} - ({fatorDxn} / {fatorDx}) * {fatorAxn} = {apuracaoAxn}");

                var fatorAtuarialSemPensaoMorte = 13 * axiPar;
                var fatorAtuarialPensaoMorte    = 13 * (axiPar + Math.Max(fatorAn - apuracaoAxn, axiDep - axyi));
                Add("Fator Atuarial Sem Pensão de Morte", $"13 * {axiPar} = {fatorAtuarialSemPensaoMorte}");
                Add("Fator Atuarial Com Pensão de Morte", $"13 * ({axiPar} + {Math.Max(fatorAn - apuracaoAxn, axiDep - axyi)} = {fatorAtuarialPensaoMorte}");

                // Renda por prazos indeterminados
                var rendaPrazoIndeterminadoSemPensaoMorte = (valorFuturo - valorSaque) / fatorAtuarialSemPensaoMorte;
                var rendaPrazoIndeterminadoPensaoMorte    = (valorFuturo - valorSaque) / fatorAtuarialPensaoMorte;
                Add("Renda Prazo Indeterminado Sem Pensão de Morte", $"({valorFuturo} - {valorSaque}) / {fatorAtuarialSemPensaoMorte} = {rendaPrazoIndeterminadoSemPensaoMorte}");
                Add("Renda Prazo Indeterminado Com Pensão de Morte", $"({valorFuturo} - {valorSaque}) / {fatorAtuarialPensaoMorte} = {rendaPrazoIndeterminadoPensaoMorte}");

                // Renda por prazo certo
                var listaPrazos = new List <KeyValuePair <int, decimal> >();

                for (int prazo = 15; prazo <= 25; prazo++)
                {
                    decimal valor = (valorFuturo - valorSaque) / (prazo * 13);
                    listaPrazos.Add(new KeyValuePair <int, decimal>(prazo, valor));
                }

                // Renda por percentual do saldo de contas
                var listaSaldoPercentuais = new List <KeyValuePair <string, decimal> >();

                for (decimal percentual = 0.5M; percentual <= 2.0M; percentual += 0.5M)
                {
                    decimal valor = (valorFuturo - valorSaque) * percentual / 100;
                    listaSaldoPercentuais.Add(new KeyValuePair <string, decimal>(percentual.ToString("N1").Replace(".", ","), valor));
                }

                return(Json(new
                {
                    valorFuturo,
                    dataAposentadoria,
                    valorSaque,
                    idadeDependente,
                    fatorAtuarialPensaoMorte,
                    fatorAtuarialSemPensaoMorte,
                    rendaPrazoIndeterminadoPensaoMorte,
                    rendaPrazoIndeterminadoSemPensaoMorte,
                    listaPrazos,
                    listaSaldoPercentuais,
                    memoria = MemoriaCalculo
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public IActionResult GetSimulacao()
        {
            try
            {
                var sqPlano = 1;

                int     idadeParticipante = CalcularIdadeParticipante();
                int     idadeMinima       = CalcularIdadeMinima(idadeParticipante);
                decimal SRC            = CalcularSRC(sqPlano);
                decimal inssHipotetico = CalcularINSSHipotetico(sqPlano);
                int     carencia       = CalcularCarencia(sqPlano);

                var valor1 = (SRC - inssHipotetico) * carencia / 15;
                var valor2 = (SRC * 0.25M) * carencia / 15;

                var valorSuplementacao        = Math.Max(valor1, valor2);
                var dataNascimento            = new DadosPessoaisProxy().BuscarPorCdPessoa(CdPessoa).First().DT_NASCIMENTO;
                var dataAposentadoriaPorIdade = dataNascimento.Value.AddYears(idadeMinima);

                var plano = new PlanoVinculadoProxy().BuscarPorContratoTrabalhoPlano(SqContratoTrabalho, sqPlano);
                var dataAposentadoriaPorPlano = plano.DT_INSC_PLANO.AddYears(15);

                var tempoServico = new TempoServicoProxy().BuscarPorCdPessoa(CdPessoa);

                var tempoTotal = new Intervalo(new CalculoAnosMesesDiasAlgoritmo2());

                foreach (var tempo in tempoServico)
                {
                    DateTime fim;

                    if (tempo.DT_TERM_ATIVIDADE.HasValue)
                    {
                        fim = tempo.DT_TERM_ATIVIDADE.Value;
                    }
                    else
                    {
                        fim = DateTime.Today;
                    }

                    var intervaloTrabalho = new Intervalo(fim, tempo.DT_INIC_ATIVIDADE.Value, new CalculoAnosMesesDiasAlgoritmo2());

                    tempoTotal.Adiciona(intervaloTrabalho);
                }

                var dadosPessoais = new DadosPessoaisProxy().BuscarPorCdPessoa(CdPessoa).First();
                var fatorSexo     = dadosPessoais.IR_SEXO == null || dadosPessoais.IR_SEXO == "M" ? 35 : 30;

                var dataAposentadoriaPorTempoTrabalho
                    = tempoTotal.Anos < fatorSexo
                    ? tempoServico.First().DT_INIC_ATIVIDADE.Value.AddYears(fatorSexo)
                    : tempoServico.First().DT_INIC_ATIVIDADE.Value.AddDays(tempoTotal.Dias);

                var listaDatas = new List <DateTime>
                {
                    dataAposentadoriaPorIdade,
                    dataAposentadoriaPorPlano,
                    dataAposentadoriaPorTempoTrabalho
                };

                var dataAposentadoria = listaDatas.Max(x => x);

                var dataReferencia = DateTime.Now;

                return(Json(new
                {
                    valorSuplementacao,
                    dataAposentadoria,
                    dataReferencia
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }