Esempio n. 1
0
 public List <ContratacaoProduto> CalcularPremioCapitalComCustoFixo(DateTime dataNascimentoTitular,
                                                                    Model.Enum.SexoEnum sexoTitular,
                                                                    string ufTitular,
                                                                    string cboTitular,
                                                                    Model.Enum.SexoEnum sexoConjuge,
                                                                    DateTime dataNascimentoConjuge,
                                                                    short periodicidade,
                                                                    short prazoCerto,
                                                                    short tempoPrazoAntecipado,
                                                                    short idadePagamentoAntecipado,
                                                                    short prazoDecrescimo,
                                                                    ModeloPropostaCompleto modeloProposta)
 {
     return(CalcularPremioCapital(dataNascimentoTitular,
                                  sexoTitular,
                                  ufTitular,
                                  cboTitular,
                                  periodicidade,
                                  sexoConjuge,
                                  dataNascimentoConjuge,
                                  prazoCerto,
                                  tempoPrazoAntecipado,
                                  idadePagamentoAntecipado,
                                  prazoDecrescimo,
                                  modeloProposta,
                                  EnumTipoCalculoPremioCapital.CalculoComCustoFixo));
 }
Esempio n. 2
0
        public RegrasContratacao ObterRegrasContratacao(ModeloPropostaCompleto modeloProposta,
                                                        long cpfTitular,
                                                        DateTime dataNascimentoTitular,
                                                        Model.Enum.SexoEnum sexoTitular,
                                                        string ufTitular,
                                                        Produto.Profissao profissaoTitular,
                                                        short periodicidade,
                                                        Model.Enum.SexoEnum sexoConjuge,
                                                        DateTime dataNascimentoConjuge,
                                                        short prazoCerto,
                                                        short tempoPrazoAntecipado,
                                                        short idadePagamentoAntecipado,
                                                        short prazoDecrescimo,
                                                        Model.Enum.TipoRelacaoSegurado tipoRelacaoSegurado,
                                                        decimal renda)
        {
            var produtosParaSimulacao = this.ObterProdutosSemRestricoes(modeloProposta.Produtos, tipoRelacaoSegurado, profissaoTitular, dataNascimentoTitular, ufTitular);
            var limitesOperacionais   = this.ObterLimitesDisponiveis(modeloProposta.PoliticaAceitacao, cpfTitular, dataNascimentoTitular, ufTitular, profissaoTitular, renda, modeloProposta.Produtos);
            var calculo = CalcularPremioCapitalSemCustoFixo(dataNascimentoTitular, sexoTitular, ufTitular, profissaoTitular.CBO, periodicidade, sexoConjuge, dataNascimentoConjuge, prazoCerto, tempoPrazoAntecipado, idadePagamentoAntecipado, prazoDecrescimo, modeloProposta);
            var retorno = MontarRegrasContratacao(limitesOperacionais, calculo);

            retorno.TicketMinimo = (decimal)modeloProposta.TicketMinimo.GetValueOrDefault();

            return(retorno);
        }
Esempio n. 3
0
 private void AdicionarConjuge(Model.Enum.SexoEnum sexo, DateTime dataNascimento, Produto.ParametrosCalculo parametroDeCalculo)
 {
     parametroDeCalculo.Conjuge = new Produto.Conjuge
     {
         Sexo           = (ContratosEnum.SexoEnum)Enum.Parse(typeof(ContratosEnum.SexoEnum), Enum.GetName(typeof(Model.Enum.SexoEnum), sexo)),
         DataNascimento = dataNascimento
     };
 }
Esempio n. 4
0
        private Produto.ParametrosCalculo CriarParametroDeCalculo(Model.Enum.SexoEnum sexoTitular,
                                                                  DateTime dataNascimentoTitular,
                                                                  string ufTitular,
                                                                  string cboTitular,
                                                                  short periodicidade,
                                                                  short PrazoCerto,
                                                                  short TempoPrazoAntecipado,
                                                                  short IdadePagamentoAntecipado,
                                                                  short PrazoDecrescimo,
                                                                  ModeloPropostaCompleto modeloProposta,
                                                                  Cobertura cobertura,
                                                                  Model.Produto produto)
        {
            ValidarCobertura(cobertura, produto);

            //TODO: Repassar valores de serviços marcados ao cliente
            return(new Produto.ParametrosCalculo
            {
                ValorBeneficio = cobertura.CapitalSegurado,
                ValorPremio = cobertura.Premio,
                DataCalculo = DateTime.Now,
                DataInicioVigencia = DateTime.Now,
                ItemProdutoId = cobertura.IdEsim.GetValueOrDefault(),
                PrazoCobertura = ObterPrazoCobertura(PrazoCerto, TempoPrazoAntecipado),
                Segurado = new Produto.Segurado {
                    Sexo = (ContratosEnum.SexoEnum)Enum.Parse(typeof(ContratosEnum.SexoEnum), Enum.GetName(typeof(Model.Enum.SexoEnum), sexoTitular)), DataNascimento = dataNascimentoTitular, UF = ufTitular, ProfissaoCBO = cboTitular
                },
                FormaContratacaoId = ObterFormaContratacaoDoModelo(cobertura.IdEsim.GetValueOrDefault(), modeloProposta),
                IdentificadorExterno = cobertura.IdEsim.ToString(),
                PeriodicidadeId = ObterPeriodicidade(periodicidade),
                TipoRenda = ObterTipoRenda(modeloProposta, cobertura),
                ClasseRiscoId = ObterClasseDeRiscoPadrao(modeloProposta, produto.IdEsim.GetValueOrDefault(), cobertura.IdEsim.GetValueOrDefault()),
                PrazoDecrecimo = PrazoDecrescimo,
                IdadePagamentoAntecipado = IdadePagamentoAntecipado,
                TempoPrazoAntecipado = TempoPrazoAntecipado
            });
        }
Esempio n. 5
0
        private List <Produto.ParametrosCalculo> GerarParametrosParaCalculo(
            DateTime dataNascimentoTitular,
            Model.Enum.SexoEnum sexoTitular,
            string ufTitular,
            string cboTitular,
            short periodicidade,
            Model.Enum.SexoEnum sexoConjuge,
            DateTime dataNascimentoConjuge,
            short PrazoCerto,
            short TempoPrazoAntecipado,
            short IdadePagamentoAntecipado,
            short PrazoDecrescimo,
            ModeloPropostaCompleto modeloProposta,
            Model.Produto produto,
            Dictionary <int, decimal> valoresRepasse,
            List <Model.Cobertura> coberturasNaoExibidas)
        {
            var retorno = new List <Produto.ParametrosCalculo>();

            foreach (var cobertura in produto.Coberturas)
            {
                try
                {
                    CalcularRepasse(dataNascimentoTitular, cobertura, produto, modeloProposta, valoresRepasse, coberturasNaoExibidas);

                    var parametroDeCalculo = CriarParametroDeCalculo(sexoTitular, dataNascimentoTitular, ufTitular, cboTitular, periodicidade, PrazoCerto, TempoPrazoAntecipado, IdadePagamentoAntecipado, PrazoDecrescimo, modeloProposta, cobertura, produto);

                    AdicionarConjuge(sexoConjuge, dataNascimentoConjuge, parametroDeCalculo);
                    parametroDeCalculo.EhSimulacao = true;
                    retorno.Add(parametroDeCalculo);
                }
                catch (ProdutoException) { }
            }

            return(retorno);
        }
Esempio n. 6
0
        private List <ContratacaoProduto> CalcularPremioCapital(DateTime dataNascimentoTitular,
                                                                Model.Enum.SexoEnum sexoTitular,
                                                                string ufTitular,
                                                                string cboTitular,
                                                                short periodicidade,
                                                                Model.Enum.SexoEnum sexoConjuge,
                                                                DateTime dataNascimentoConjuge,
                                                                short prazoCerto,
                                                                short tempoPrazoAntecipado,
                                                                short idadePagamentoAntecipado,
                                                                short prazoDecrescimo,
                                                                ModeloPropostaCompleto modeloProposta,
                                                                EnumTipoCalculoPremioCapital tipoCalculoPremio)
        {
            var coberturasCalculadas  = new List <ContratacaoCobertura>();
            var parametrosCalculo     = new List <Produto.ParametrosCalculo>();
            var valoresRepasse        = new Dictionary <int, decimal>();
            var coberturasNaoExibidas = new List <Model.Cobertura>();

            foreach (var produto in modeloProposta.Produtos)
            {
                parametrosCalculo.AddRange(GerarParametrosParaCalculo(dataNascimentoTitular,
                                                                      sexoTitular,
                                                                      ufTitular,
                                                                      cboTitular,
                                                                      periodicidade,
                                                                      sexoConjuge,
                                                                      dataNascimentoConjuge,
                                                                      prazoCerto,
                                                                      tempoPrazoAntecipado,
                                                                      idadePagamentoAntecipado,
                                                                      prazoDecrescimo,
                                                                      modeloProposta,
                                                                      produto,
                                                                      valoresRepasse,
                                                                      coberturasNaoExibidas));
            }

            try
            {
                AbaterValorServicos(valoresRepasse, parametrosCalculo);
                var resultado = ServiceWcf <ICalculoService> .UseSync(s => s.CalcularValorContribuicaoBeneficio(parametrosCalculo));

                if (resultado.HouveErrosDuranteProcessamento)
                {
                    throw new CalculoException(string.Join(Environment.NewLine, resultado.Mensagens));
                }

                coberturasCalculadas.AddRange(resultado.Valor.Select(calculo => new ContratacaoCobertura
                {
                    CapitalSegurado = calculo.ValorBeneficio,
                    ModelosProposta = new List <string> {
                        modeloProposta.Nome
                    },
                    Premio        = tipoCalculoPremio == EnumTipoCalculoPremioCapital.CalculoSemCustoFixo ? ObterPremioSemCustoFixo(calculo.ValorPremioComercial, calculo.CustoFixoCarregamento) : calculo.ValorPremioComercial,
                    IdItemProduto = Convert.ToInt32(calculo.IdentificadorExterno),
                    CustoFixo     = calculo.CustoFixoCarregamento
                }));

                AdicionarValorServicos(valoresRepasse, coberturasCalculadas);
            }
            catch (TimeoutException)
            {
                AdicionarObservacaoTimeout(parametrosCalculo);
            }
            catch (CommunicationException)
            {
                AdicionarObservacaoTimeout(parametrosCalculo);
            }

            return(RetornarProdutosPreenchidos(modeloProposta.Produtos,
                                               coberturasCalculadas,
                                               coberturasNaoExibidas, prazoCerto,
                                               tempoPrazoAntecipado,
                                               idadePagamentoAntecipado,
                                               prazoDecrescimo));
        }