コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /*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);
        }
コード例 #4
0
        /*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);
        }