Exemple #1
0
 public static Margens Criar(MargensEntidade Margens)
 {
     return(new Margens
     {
         CD_PLANO = "",
         CD_FUNDACAO = Margens.CD_FUNDACAO,
         DT_VIGENCIA = Margens.DT_VIGENCIA,
         CD_MODAL = Margens.CD_MODAL,
         CD_NATUR = Margens.CD_NATUR,
         TP_SALDO_RP = Margens.TP_SALDO_RP,
         TP_TX_ATIVO = Margens.TP_TX_ATIVO,
         TX_ATIVO_RP = Margens.TX_ATIVO_RP,
         TX_ATIVO_SP = Margens.TX_ATIVO_SP,
         TX_ATIVO_CR = Margens.TX_ATIVO_CR,
         TX_ATIVO_MC = Margens.TX_ATIVO_MC,
         VL_ATIVO_RP = Margens.VL_ATIVO_RP,
         VL_ATIVO_SP = Margens.VL_ATIVO_SP,
         VL_ATIVO_CR = Margens.VL_ATIVO_CR,
         TETO_MAXIMO_ATIVO = Margens.TETO_MAXIMO_ATIVO,
         TP_TX_ASSIST = Margens.TP_TX_ASSIST,
         TP_BENEFICIO = Margens.TP_BENEFICIO,
         TX_ASSIST_BL = Margens.TX_ASSIST_BL,
         TX_ASSIST_BB = Margens.TX_ASSIST_BB,
         VL_ASSIST_BL = Margens.VL_ASSIST_BL,
         VL_ASSIST_BB = Margens.VL_ASSIST_BB,
         TETO_MAXIMO_ASSIST = Margens.TETO_MAXIMO_ASSIST,
         TX_ASSIST_MC = Margens.TX_ASSIST_MC,
         SSCA_ASSIST = Margens.SSCA_ASSIST,
         SSCA_ATIVO = Margens.SSCA_ATIVO,
         TX_ATIVO_PREST_SP = Margens.TX_ATIVO_PREST_SP,
         VL_ATIVO_PREST_SP = Margens.VL_ATIVO_PREST_SP,
         TX_ASSIST_PREST_BL = Margens.TX_ASSIST_PREST_BL,
         VL_ASSIST_PREST_BL = Margens.VL_ASSIST_PREST_BL,
         CD_EMPRESA = Margens.CD_EMPRESA,
         TP_DT_CONV_RP = Margens.TP_DT_CONV_RP,
         MARGEM_CSA_EXTERNA = Margens.MARGEM_CSA_EXTERNA,
         TX_FIADOR_ATIVO_RP = Margens.TX_FIADOR_ATIVO_RP,
         MARGEM_BPA_EXTERNA = Margens.MARGEM_BPA_EXTERNA,
         TX_ASSIST_RMV = Margens.TX_ASSIST_RMV,
         VL_ASSIST_RMV = Margens.VL_ASSIST_RMV,
         TX_ASSIST_PREST_CP = Margens.TX_ASSIST_PREST_CP,
         ID_ATIVOS_SAD = Margens.ID_ATIVOS_SAD,
         TX_ATIVO_PREST_MEDIA_SP = Margens.TX_ATIVO_PREST_MEDIA_SP,
         TX_ASSISTIDO_PREST_MEDIA_SP = Margens.TX_ASSISTIDO_PREST_MEDIA_SP,
         DT_CONVERSAO_RP = Margens.DT_CONVERSAO_RP,
         TX_MANTENEDOR_RP = Margens.TX_MANTENEDOR_RP,
         TX_MANTENEDOR_PREST_SP = Margens.TX_MANTENEDOR_PREST_SP,
         VL_MANTENEDOR_RP = Margens.VL_MANTENEDOR_RP,
         VL_MANTENEDOR_PREST_SP = Margens.VL_MANTENEDOR_PREST_SP,
         QTD_ASSIST_SAL_MININO = Margens.QTD_ASSIST_SAL_MININO,
         TX_MANTENEDOR_CR = Margens.TX_MANTENEDOR_CR,
         TX_MANTENEDOR_SP = Margens.TX_MANTENEDOR_SP,
         VL_MANTENEDOR_CR = Margens.VL_MANTENEDOR_CR,
         VL_MANTENEDOR_SP = Margens.VL_MANTENEDOR_SP,
         TETO_MAXIMO_MANTENEDOR = Margens.TETO_MAXIMO_MANTENEDOR,
         SSCA_MANTENEDOR = Margens.SSCA_MANTENEDOR,
         TX_DIFERIDO_CR = Margens.TX_DIFERIDO_CR,
         VL_DIFERIDO_CR = Margens.VL_DIFERIDO_CR,
         TX_DIFERIDO_RP = Margens.TX_DIFERIDO_RP,
         VL_DIFERIDO_RP = Margens.VL_DIFERIDO_RP,
         TX_DIFERIDO_SP = Margens.TX_DIFERIDO_SP,
         VL_DIFERIDO_SP = Margens.VL_DIFERIDO_SP,
         TETO_MAXIMO_DIFERIDO = Margens.TETO_MAXIMO_DIFERIDO,
         SSCA_DIFERIDO = Margens.SSCA_DIFERIDO,
         TX_DIFERIDO_PREST_SP = Margens.TX_DIFERIDO_PREST_SP,
         VL_DIFERIDO_PREST_SP = Margens.VL_DIFERIDO_PREST_SP,
         PERC_PREST_MIN_ATIVO = Margens.PERC_PREST_MIN_ATIVO,
         TIPO_PREST_MIN_ATIVO = Margens.TIPO_PREST_MIN_ATIVO,
         PERC_PREST_MIN_ASSISTIDO = Margens.PERC_PREST_MIN_ASSISTIDO,
         TIPO_PREST_MIN_ASSISTIDO = Margens.TIPO_PREST_MIN_ASSISTIDO,
         PERC_PREST_MIN_MANTENEDOR = Margens.PERC_PREST_MIN_MANTENEDOR,
         TIPO_PREST_MIN_MANTENEDOR = Margens.TIPO_PREST_MIN_MANTENEDOR,
         PERC_PREST_MIN_DIFERIDO = Margens.PERC_PREST_MIN_DIFERIDO,
         TIPO_PREST_MIN_DIFERIDO = Margens.TIPO_PREST_MIN_DIFERIDO,
         TETO_MINIMO_ATIVO = Margens.TETO_MINIMO_ATIVO,
         TETO_MINIMO_ASSISTIDO = Margens.TETO_MINIMO_ASSISTIDO,
         TETO_MINIMO_MANTENEDOR = Margens.TETO_MINIMO_MANTENEDOR,
         TETO_MINIMO_DIFERIDO = Margens.TETO_MINIMO_DIFERIDO,
         TX_FIADOR_ATIVO_SP = Margens.TX_FIADOR_ATIVO_SP,
         TX_FIADOR_ATIVO_CR = Margens.TX_FIADOR_ATIVO_CR,
         TX_FIADOR_ASSIST_BL = Margens.TX_FIADOR_ASSIST_BL,
         TX_FIADOR_ASSIST_BB = Margens.TX_FIADOR_ASSIST_BB,
         VL_TETO_MINIMO_FIADOR_ATIVO = Margens.VL_TETO_MINIMO_FIADOR_ATIVO,
         VL_TETO_MINIMO_FIADOR_ASSIST = Margens.VL_TETO_MINIMO_FIADOR_ASSIST,
         PR_MAX_AVALIZADO_ATIVO = Margens.PR_MAX_AVALIZADO_ATIVO,
         PR_MAX_AVALIZADO_ASSIST = Margens.PR_MAX_AVALIZADO_ASSIST,
         LIMITE_AVALIZADO_ATIVO = Margens.LIMITE_AVALIZADO_ATIVO,
         LIMITE_AVALIZADO_ASSIST = Margens.LIMITE_AVALIZADO_ASSIST,
         PERC_LIM_DISP_ATIVO = Margens.PERC_LIM_DISP_ATIVO,
         PERC_LIM_DISP_ASSISTIDO = Margens.PERC_LIM_DISP_ASSISTIDO,
         PERC_LIM_DISP_MANTENEDOR = Margens.PERC_LIM_DISP_MANTENEDOR,
         PERC_LIM_DISP_DIFERIDO = Margens.PERC_LIM_DISP_DIFERIDO,
         VL_MAX_LIQUIDO_ASSIST = Margens.VL_MAX_LIQUIDO_ASSIST,
         VL_MAX_LIQUIDO_RENOV_ASSIST = Margens.VL_MAX_LIQUIDO_RENOV_ASSIST,
         ID_SALARIO_ATIVO = Margens.ID_SALARIO_ATIVO,
         ID_SALARIO_ASSISTIDO = Margens.ID_SALARIO_ASSISTIDO,
         ID_SALARIO_AUTOPATROCINADO = Margens.ID_SALARIO_AUTOPATROCINADO,
         ID_SALARIO_DIFERIDO = Margens.ID_SALARIO_DIFERIDO,
         TETO_MAX_REFORMA_ASSIST = Margens.TETO_MAX_REFORMA_ASSIST,
         DT_CONVERSAO_RP_AP = Margens.DT_CONVERSAO_RP_AP,
         TP_DT_CONV_RP_AP = Margens.TP_DT_CONV_RP_AP,
         TP_SALDO_RP_AP = Margens.TP_SALDO_RP_AP,
         DT_MAX_IND_AT = Margens.DT_MAX_IND_AT,
         DT_MAX_IND_AP = Margens.DT_MAX_IND_AP,
         DT_MAX_IND_DF = Margens.DT_MAX_IND_DF,
         TP_SALDO_RP_DF = Margens.TP_SALDO_RP_DF,
         TP_DT_CONV_RP_DF = Margens.TP_DT_CONV_RP_DF,
         DT_CONVERSAO_RP_DF = Margens.DT_CONVERSAO_RP_DF,
         RESGATE_RESERVA_AT = Margens.RESGATE_RESERVA_AT,
         RESGATE_RESERVA_AP = Margens.RESGATE_RESERVA_AP,
         RESGATE_RESERVA_DF = Margens.RESGATE_RESERVA_DF,
         TX_ATIVO_VINC_MAIOR_SP = Margens.TX_ATIVO_VINC_MAIOR_SP,
         VL_ATIVO_VINC_MAIOR_SP = Margens.VL_ATIVO_VINC_MAIOR_SP,
         TX_ATIVO_VINC_MENOR_SP = Margens.TX_ATIVO_VINC_MENOR_SP,
         VL_ATIVO_VINC_MENOR_SP = Margens.VL_ATIVO_VINC_MENOR_SP,
         TMP_VINC_PATROC = Margens.TMP_VINC_PATROC,
         QTD_MESES_VINC = Margens.QTD_MESES_VINC,
         ID_INSS = Margens.ID_INSS,
         CD_FUNDO_RESERVA = Margens.CD_FUNDO_RESERVA
     });
 }
        public decimal CalcularMargem(PlanoVinculadoEntidade plano, string cdEmpresa, decimal cdModal, decimal cdNatur, DateTime dtCredito, string matricula, decimal origem, MargensEntidade margem, TaxasEncargosEntidade encargo, TaxasConcessaoEntidade taxaConcessao)
        {
            var valorMargemCalculada = 0M;

            var parametros = new ParametrosProxy().Buscar();

            if (parametros.REGRA_MARGEM_PLANO == DMN_SN.SIM)
            {
                //TODO: Regra pelo plano
            }
            else
            {
                if (margem.MARGEM_BPA_EXTERNA == "E")
                {
                    decimal numeroGrFamil = 0;

                    var margemCalDados = new MargensCalculadasProxy()
                                         .BuscarPorFundacaoEmpresaOrigemMatriculaGrupo(plano.CD_FUNDACAO, cdEmpresa, origem, matricula, numeroGrFamil);

                    valorMargemCalculada = margemCalDados.VL_MARGEM ?? 0;
                }
                else if (margem.MARGEM_BPA_EXTERNA == "C")
                {
                    // Regra não existia no simulador antigo
                }

                decimal  przMax                = ObterPrazoMaximo(cdNatur);
                decimal  percTaxa              = taxaConcessao.TX_JUROS.Value / 100;
                decimal  jurosPorPrazo         = (decimal)Math.Pow((double)(1 + percTaxa), (double)przMax);
                decimal  w_tx_assist_prest_bl  = margem.TX_ASSIST_MC.Value;
                decimal  w_vl_prest            = plano.UltimoSalario * (w_tx_assist_prest_bl / 100);
                decimal  w_fator_taxas         = 1;
                DateTime dtAniversarioNatureza = ObterDataAniversarioNatureza(cdNatur, dtCredito);
                decimal  diferencaDias         = (dtAniversarioNatureza - dtCredito).Days;
                decimal  w_fator_aplicado      = Convert.ToDecimal(Math.Pow((double)(1 + percTaxa), (double)(diferencaDias / dtCredito.UltimoDiaDoMes().Day)));

                switch (plano.CD_CATEGORIA)
                {
                case DMN_CATEGORIA.ATIVO:
                    valorMargemCalculada = plano.UltimoSalario * (margem.TX_ATIVO_SP.Value / 100);     // futuramente utilizar parametrização
                    break;

                case DMN_CATEGORIA.AUTOPATROCINIO:
                    valorMargemCalculada = plano.UltimoSalario * (margem.TX_MANTENEDOR_SP.Value / 100);     // futuramente utilizar parametrização
                    break;

                case DMN_CATEGORIA.DIFERIDO:
                    valorMargemCalculada = plano.UltimoSalario * (margem.TX_MANTENEDOR_SP.Value / 100);     // futuramente utilizar parametrização
                    break;

                case DMN_CATEGORIA.EM_LICENCA:                                                      //Ativos, Autopatrocinados ou Em licença
                    valorMargemCalculada = plano.UltimoSalario * (margem.TX_ASSIST_BL.Value / 100); // futuramente utilizar parametrização
                    break;

                case DMN_CATEGORIA.ASSISTIDO:
                    w_vl_prest = w_vl_prest / w_fator_taxas;
                    //valorMargemCalculada = Convert.ToDecimal(GeneralFinanceFormulas.CalcPresentValue(percTaxa, przMax, w_vl_prest)) / w_fator_aplicado;

                    break;
                }
            }

            return(valorMargemCalculada);
        }