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)); } }
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)); } }