private void ExcluirEventosNaoListados(NlParametrizacao entity)
        {
            var eventos = _parametrizacaoEventoDal.Fetch(new NlParametrizacaoEvento()
            {
                IdNlParametrizacao = entity.Id
            });

            foreach (var evento in eventos)
            {
                if (!entity.Eventos.Any(x => x.Id == evento.Id))
                {
                    _parametrizacaoEventoDal.Remove(evento.Id);
                }
            }
        }
        private ReclassificacaoRetencao FormacaoRepasse(ConfirmacaoPagamento confirmacaoPagamento, List <ParaRestoAPagar> tiposRap, List <NlParametrizacao> parametrizacoesCadastradas, Usuario usuario, List <Regional> regionais)
        {
            //Os itens ja se encontram separados por Tipo de Despesa
            var infoBaseItem = confirmacaoPagamento.Items.FirstOrDefault();

            //Informações do item na parametrização
            var infoBaseParametrizacao = parametrizacoesCadastradas.Where(x => x.Id == 74).FirstOrDefault();

            infoBaseParametrizacao.Eventos = _nlParametrizacaoEventoDal.Fetch(new NlParametrizacaoEvento {
                IdNlParametrizacao = infoBaseParametrizacao.Id
            });

            ReclassificacaoRetencao entidadeNl = new ReclassificacaoRetencao();

            if (regionais.Any(x => x.Descricao.Contains(infoBaseItem.IdRegional.ToString())))
            {
                entidadeNl.RegionalId = regionais.Where(x => x.Descricao.Contains(infoBaseItem.IdRegional.ToString())).FirstOrDefault().Id;
            }

            //Atributos em comum
            entidadeNl.Id                   = 0;                                      // geral
            entidadeNl.DataEmissao          = entidadeNl.DataCadastro = DateTime.Now; // geral
            entidadeNl.CodigoUnidadeGestora = infoBaseParametrizacao.UnidadeGestora.HasValue ? infoBaseParametrizacao.UnidadeGestora.Value.ToString() : string.Empty;
            entidadeNl.NumeroProcesso       = infoBaseItem.NumeroProcesso;
            entidadeNl.NumeroDocumento      = infoBaseItem.NrDocumento;
            entidadeNl.DataCadastro         = DateTime.Now.Date;

            entidadeNl.CodigoAplicacaoObra       = infoBaseItem.CodigoObra;
            entidadeNl.NumeroCNPJCPFFornecedorId = infoBaseItem.NumeroCnpjCpfUgCredor;
            entidadeNl.NormalEstorno             = "1";
            entidadeNl.NotaLancamenoMedicao      = infoBaseItem.NumeroNlDocumento;
            entidadeNl.NumeroContrato            = infoBaseItem.NumeroContrato;
            entidadeNl.CadastroCompleto          = true;
            entidadeNl.Origem = OrigemReclassificacaoRetencao.ConfirmacaoDePagamento;
            // entidadeNl.NumeroCNPJCPFCredor = infoBaseParametrizacao.FavorecidaCnpjCpfUg; comentado  - verificar
            entidadeNl.NumeroCNPJCPFCredor  = infoBaseItem.NumeroCnpjCpfUgCredor;
            entidadeNl.CodigoGestaoCredor   = infoBaseItem.CodigoGestaoCredor;
            entidadeNl.CodigoGestao         = "16055";
            entidadeNl.DescricaoObservacao1 = SepararObservacao(infoBaseParametrizacao.Observacao, TAMANHOOBS, 1);
            entidadeNl.DescricaoObservacao2 = SepararObservacao(infoBaseParametrizacao.Observacao, TAMANHOOBS, 2);
            entidadeNl.DescricaoObservacao3 = SepararObservacao(infoBaseParametrizacao.Observacao, TAMANHOOBS, 3);
            entidadeNl.Valor = confirmacaoPagamento.Items.Sum(x => x.ValorDocumento * 100) ?? 0;
            entidadeNl.AgrupamentoConfirmacao   = confirmacaoPagamento.CodigoAgrupamentoConfirmacaoPagamento;
            entidadeNl.id_confirmacao_pagamento = confirmacaoPagamento.Id;
            AtribuiValorCampoAnoExercicio(infoBaseItem, entidadeNl);

            var NLPGOBRAS = AtribuiValoresQuandoNLPGOBRAS(usuario, infoBaseItem, infoBaseParametrizacao, entidadeNl);

            List <ReclassificacaoRetencaoEvento> eventos = new List <ReclassificacaoRetencaoEvento>();

            var parametrosGeracaoNl = new ParametrosGeracaoNl(confirmacaoPagamento, infoBaseItem, null, tiposRap);
            var tipoDocumento       = infoBaseItem.NumeroDocumentoGerador.Substring(0, 2);

            parametrosGeracaoNl.IsNlPgObras          = NLPGOBRAS;
            parametrosGeracaoNl.IsSubempenho         = tipoDocumento.Equals(EnumTipoDocumento.Subempenho.GetHashCode().ToString("d2"));
            parametrosGeracaoNl.IsRap                = tipoDocumento.Equals(EnumTipoDocumento.Rap.GetHashCode().ToString("d2"));
            parametrosGeracaoNl.valorAcumuladoNl     = entidadeNl.Valor;
            entidadeNl.NumeroOriginalSiafemSiafisico = infoBaseItem.NumeroEmpenhoSiafem;
            entidadeNl.CodigoCredorOrganizacaoId     = infoBaseItem.CodigoOrganizacaoCredor ?? 0;

            //***********novos campos - rafael magna see ************
            entidadeNl.DocumentoTipoId = infoBaseItem.IdTipoDocumento;
            //********** fim ****************************************

            GerarEventosSaida(parametrosGeracaoNl, eventos, infoBaseParametrizacao);
            GerarEventoEntrada(parametrosGeracaoNl, entidadeNl, eventos, infoBaseParametrizacao);
            entidadeNl.NormalEstorno = ((int)EnumNormalEstorno.Normal).ToString();


            entidadeNl.itensPertenceNl = confirmacaoPagamento.Items.ToList();

            return(entidadeNl);
        }