public decimal CalculaFatorIOF(decimal taxaJuros, PrazosDisponiveisEntidade PrazoDisponivel) { decimal valorInicial = 1; decimal valorAtualizado = 0; decimal mesesDeCarencia = 0; decimal fatorIOF = CalculaValorIOF(valorInicial, valorAtualizado, taxaJuros, mesesDeCarencia, PrazoDisponivel); return(fatorIOF); }
public decimal CalculaFatorCalculo(decimal taxaJuros, decimal valorLiquido, PrazosDisponiveisEntidade PrazoDisponivel) { decimal taxaADM = CalculaValorAdministracao(valorLiquido, 0); decimal taxaSeguro = CalculaValorSeguro(valorLiquido, 0); var fatorIOF = CalculaFatorIOF(taxaJuros, PrazoDisponivel); var valorIOF = (valorLiquido + CalculaValorJurosAd()) * fatorIOF; decimal fatorCalculo = (taxaADM + taxaSeguro + valorIOF) / valorLiquido; return(fatorCalculo); }
/*public static decimal CalculaValorSeguro(TaxaEncargo encargo, decimal valorSolicitado, decimal somaReformados, decimal prazo, DateTime dataCredito) * { * decimal calculado = 0; * * if (encargo.TP_COBRANCA_SEGURO == "C") * { * if (encargo.CONSIDERAR_RENOVACOES_SEGUROS == DMN_SN.SIM) * { * if (encargo.SEGURO_TABELADO == DMN_SN.SIM) * { * calculado = CalculaValorSeguroTabelado(valorSolicitado - somaReformados, prazo, dataCredito); * } * else * { * calculado = (valorSolicitado - somaReformados) * (encargo.TX_SEGURO.Value / 100M); * } * } * else * { * if (encargo.SEGURO_TABELADO == DMN_SN.SIM) * { * calculado = CalculaValorSeguroTabelado(valorSolicitado, prazo, dataCredito); * } * else * { * calculado = (valorSolicitado * (encargo.TX_SEGURO.Value / 100M)); * } * } * } * * return calculado.Arredonda(2); * } * * public static decimal CalculaValorSeguroTabelado(decimal valor, decimal prazo, DateTime dataCredito) * { * var idadeDataCredito = new Intervalo(dataCredito, Dados.DadosPessoais.DT_NASCIMENTO, new CalculoAnosMesesDiasAlgoritmo2()).Anos; * var prxTaxasSegurosTabelados = new TaxasSegurosTabeladosProxy(); * var rowTaxasSegurosTabelados = prxTaxasSegurosTabelados.BuscarPorFundacaoEmpresaPrazoDataCreditoIdade(Fundacao, Empresa, prazo, dataCredito, idadeDataCredito).Single(); * * if (Plano.CD_CATEGORIA == DMN_CATEGORIA.ATIVO || Plano.CD_CATEGORIA == DMN_CATEGORIA.AUTOPATROCINIO) * return Convert.ToDecimal(valor * rowTaxasSegurosTabelados.TX_QQM_ASSISTIDO.Value).Arredonda(2); * else if (Plano.CD_CATEGORIA == DMN_CATEGORIA.ASSISTIDO) * return Convert.ToDecimal(valor * rowTaxasSegurosTabelados.TX_QQM_ATIVO.Value).Arredonda(2); * * return 0; * }*/ #endregion #region Calculos #region Valor Bruto Pelo Liquido public decimal CalcularValorBrutoPeloLiquido(decimal ValorSolicitado, decimal sumReformar, decimal taxaJuros, PrazosDisponiveisEntidade PrazoDisponivel) { decimal fatorCalculo = CalculaFatorCalculo(taxaJuros, ValorSolicitado, PrazoDisponivel); decimal valorIOFSaldoDevedor = CalculaValorIOF(sumReformar, 0, taxaJuros, 0, PrazoDisponivel); decimal valorSomaBaseBruto = ValorSolicitado + sumReformar - valorIOFSaldoDevedor; decimal valorBruto = ((valorSomaBaseBruto) / (1 - fatorCalculo) - (valorSomaBaseBruto)) + (valorSomaBaseBruto); return(valorBruto); }
/*public static decimal CalcalaValorIOF(NaturezaEntidade natureza) * { * var modalidade = new ModalidadeProxy().BuscarPorCodigo((int)natureza.CD_MODAL); * * if (modalidade.TIPO_CALC_PREST == "13") * return CalculaValorIOFSAC(...); * * return CalculaValorIOFPrice(...); * }*/ #region Valor IOF public decimal CalculaValorIOF(decimal valorSolicitado, decimal valorCorrigido, decimal taxaJuros, decimal mesesDeCarencia, PrazosDisponiveisEntidade PrazoDisponivel) { int wj, w_mes, w_ano, w_dia, w_num_dias, w_prazo; decimal w_saldo_atual, w_vl_principal, w_vl_iof, w_carencia, w_valor_iof; DateTime w_data_prest; DateTime dataRef = DataCredito; w_saldo_atual = 0; w_vl_principal = 0; w_vl_iof = 0; w_num_dias = 0; w_carencia = 0; int prazo = (int)PrazoDisponivel.PRAZO; if (TaxaEncargo.TP_COBRANCA_IOF != DMN_TP_COBRANCA_TX.COBRANCA_NA_CONCESSAO) //nao calcular na concessao, retorna zero { return(0); } if (taxaJuros == 0) //nao tem tx juros, retorna zero { return(0); } var carenciaProxy = new CarenciasDisponiveisProxy(); var carencia = carenciaProxy.BuscarPorNatureza(Natureza.CD_NATUR) .Where(x => x.MES == mesesDeCarencia) .FirstOrDefault(); if (carencia == null) { w_carencia = 0; } else { if (Natureza.CONSIDERAR_CARENCIA_CONCESSAO == DMN_SN.SIM) { if (carencia.MES > 0) { w_carencia = carencia.MES; } } else { if (Natureza.MES_CALC_PREST > 1) { w_carencia = Natureza.MES_CALC_PREST; } } } w_saldo_atual = valorSolicitado + valorCorrigido; w_vl_principal = (valorSolicitado / prazo).Arredonda(2); w_prazo = prazo; w_mes = dataRef.Month; w_ano = dataRef.Year; //Ajuste Miguel 04/02/2010 //Quando a solicitacao acontecer apos o dia do vencimento do mes que estamos(data de solicitacao) //, o IOF deverá ser calculado a partir do mes seguinte ao próximo if ((carencia != null) && (dataRef.Day > Natureza.DIA_VENC_PREST) && (dataRef.Month == DateTime.Now.Month)) { w_carencia += 1; } for (wj = 1; wj <= prazo; wj++) { if (wj == 1) { w_mes = w_mes + (int)Natureza.MES_CALC_PREST + (int)w_carencia; } else { w_mes++; } if (w_mes > 12) { w_mes = w_mes - 12; w_ano++; } if ((Natureza.DIA_VENC_PREST == 99) || (Natureza.DIA_VENC_PREST == 0)) { w_dia = (new DateTime(w_ano, w_mes, 1)).UltimoDiaDoMes().Day; } else { w_dia = (int)Natureza.DIA_VENC_PREST; if ((w_dia > 28) && (w_mes == 2)) { w_dia = (new DateTime(w_ano, w_mes, 1).UltimoDiaDoMes().Day); } // Dias_Mes(EncodeDate(w_ano, w_mes, 1)); } w_vl_principal = (decimal)((double)w_saldo_atual * (Math.Pow((double)(1 + taxaJuros / 100), (prazo - w_prazo)) * (double)(taxaJuros / 100)) / (Math.Pow((double)(1 + taxaJuros / 100), prazo) - Math.Pow((double)(1 + taxaJuros / 100), (prazo - w_prazo)))); w_prazo = w_prazo - 1; w_data_prest = new DateTime(w_ano, w_mes, w_dia); if (w_data_prest.DayOfWeek == DayOfWeek.Sunday) { if (Natureza.DT_VENC_FSF == "A") { w_data_prest = w_data_prest.AddDays(-2); } if (Natureza.DT_VENC_FSF == "P") { w_data_prest = w_data_prest.AddDays(1); } } else { if (w_data_prest.DayOfWeek == DayOfWeek.Saturday) { if (Natureza.DT_VENC_FSF == "A") { w_data_prest = w_data_prest.AddDays(-1); } if (Natureza.DT_VENC_FSF == "P") { w_data_prest = w_data_prest.AddDays(2); } } } w_num_dias = (w_data_prest - dataRef).Days; if (w_num_dias > 365) { w_num_dias = 365; } w_saldo_atual = w_saldo_atual - w_vl_principal; w_vl_iof += (((TaxaEncargo.TX_IOF.Value / 100M) * w_num_dias) * w_vl_principal).Arredonda(6); } if (TaxaEncargo.TX_IOF_FIXA > 0) { w_valor_iof = w_vl_iof + (valorSolicitado * (TaxaEncargo.TX_IOF_FIXA.Value / 100M)); } else { w_valor_iof = w_vl_iof; } return(w_valor_iof); }