Example #1
0
        private void CalcularRepasse(
            DateTime dataNascimentoTitular,
            Cobertura cobertura,
            Model.Produto produto,
            ModeloPropostaCompleto modeloProposta,
            Dictionary <int, decimal> valoresRepasse,
            List <Cobertura> coberturasNaoExibidas)
        {
            if (cobertura != null && cobertura.EhServico && cobertura.ValorServicoSomadoNaCoberturaDeReferencia)
            {
                decimal valorRepasse  = 0;
                int     idItemProduto = 0;
                if (cobertura.ValoresRepassadoAoCliente != null)
                {
                    valorRepasse = cobertura.ValoresRepassadoAoCliente.Where(
                        c => (c.TipoRepasseCliente == ContratosEnum.TipoRepasseClienteEnum.PorIdade &&
                              dataNascimentoTitular.Idade() >= c.IdadeInicial &&
                              dataNascimentoTitular.Idade() <= c.IdadeFinal) ||
                        (c.TipoRepasseCliente == ContratosEnum.TipoRepasseClienteEnum.Fixo))
                                   .Sum(x => x.Valor);
                }

                if (cobertura.ValorServicoSomadoNaCoberturaDeReferencia && produto.ReferenciaCoberturaId.HasValue)
                {
                    idItemProduto = produto.Coberturas.Find(x => x.IdCoberturaEsim.GetValueOrDefault() == produto.ReferenciaCoberturaId.Value).IdEsim.GetValueOrDefault();
                }
                else
                {
                    idItemProduto = cobertura.IdEsim.GetValueOrDefault();
                }

                if (idItemProduto != 0 && valorRepasse != 0)
                {
                    if (valoresRepasse.ContainsKey(idItemProduto))
                    {
                        valorRepasse += valoresRepasse[idItemProduto];
                        valoresRepasse.Remove(idItemProduto);
                    }

                    valoresRepasse.Add(idItemProduto, valorRepasse);
                }

                if (cobertura.EhServico && !cobertura.ExibeServicoNaListaDeCobertura)
                {
                    coberturasNaoExibidas.Add(cobertura);
                }
            }
        }
Example #2
0
        private void ValidarCobertura(Cobertura cobertura, Model.Produto produto)
        {
            if (cobertura.CapitalSegurado == 0 || cobertura.Premio == 0)
            {
                return;
            }

            var s = string.Format("IdItemProduto: {0} | Produto: {1}", cobertura.IdEsim, produto.IdEsim);

            var obs = ObservacaoHelper.PreencherObservacao(id: 5,
                                                           origem: typeof(ContratacaoCobertura).ToString(),
                                                           itens: new[] { s });

            Mensagens.Add(obs);
            throw new ProdutoException(obs);
        }
Example #3
0
        private bool ProdutoRestrito(Model.Produto produto, Model.Enum.TipoRelacaoSegurado?tipoRelacaoSegurado, Produto.Profissao profissaoProponente, out string motivo)
        {
            motivo = string.Empty;

            //produto.ProfissoesAceitas

            if (produto.ProfissoesAceitas.Any() && !produto.ProfissoesAceitas.Contains(profissaoProponente.Id))
            {
                motivo = $"Produto {produto.Id} - {produto.Descricao} removido da simulação pois profissão do proponente ({profissaoProponente.CBO} - {profissaoProponente.Descricao}) não é aceita para contratação";

                return(true);
            }

            if ((tipoRelacaoSegurado.HasValue && produto.TipoProponente.Id != (int)tipoRelacaoSegurado) || (!tipoRelacaoSegurado.HasValue && produto.TipoProponente.Id == TIPOPROPONENTECONJUGE))
            {
                motivo = $"Produto {produto.Id} - {produto.Descricao} removido da simulação pois é um produto de cônjugue e o proponente da simulação é titular";

                return(true);
            }

            return(false);
        }
Example #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
            });
        }
Example #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);
        }