/// <summary>
        /// Recebe coleção de passagens reprovadas para processamento no ConectSys.
        /// </summary>
        /// <param name="PassagensReprovadas">PassagemReprovadaEdiDto[]</param>
        /// <returns>PassagensReprovadasEdiResponse</returns>
        public PassagensReprovadasEdiResponse Execute(List <PassagemReprovadaEdiDto> PassagensReprovadas)
        {
            var response = new PassagensReprovadasEdiResponse();

            var execucaoId = Guid.NewGuid();

            response.ExecucaoId = execucaoId;

            Log.Info($"ID: {execucaoId} - Início - Execução Passagens Reprovadas Edi.");


            if (PassagensReprovadas != null && PassagensReprovadas.Any())
            {
                SalvarReprovadasStagingConectSys(PassagensReprovadas, response, execucaoId);
            }

            var jsonResponse = JsonConvert.SerializeObject(response);

            Log.Info($"ID: {execucaoId} - Fim - Execução Passagens Reprovadas Edi. Retorno: {jsonResponse}.");

            return(response);
        }
        /// <summary>
        /// Salva as passagens reprovadas nas tabelas de Staging do ConectSys.
        /// </summary>
        /// <param name="passagensReprovadas">PassagemReprovadaEdiDto</param>
        /// <param name="response">PassagensReprovadasEdiResponse</param>
        /// <param name="execucaoId">Sessão de execução.</param>
        private void SalvarReprovadasStagingConectSys(List <PassagemReprovadaEdiDto> passagensReprovadas, PassagensReprovadasEdiResponse response, Guid execucaoId)
        {
            var sw = new Stopwatch();

            sw.Start();

            try
            {
                TransactionContextHelper.ExecuteTransaction((reprovadas) =>
                {
                    Log.Debug($"ID: {execucaoId} - Início - Staging Passagens Reprovadas Edi - ConectSys.");
                    using (var datasourceConectSys = AdoDataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSys))
                    {
                        try
                        {
                            var detalheTrfRecusados        = passagensReprovadas.Any(c => c.DetalheTRFRecusado != null) ? passagensReprovadas.Select(c => c.DetalheTRFRecusado) : null;
                            var detalheTRFRecusadosStaging = Mapper.Map <List <DetalheTRFRecusadoLoteStaging> >((detalheTrfRecusados ?? new List <DetalheTRFRecusadoDto>()));
                            detalheTRFRecusadosStaging.ForEach(x => x.ExecucaoId = execucaoId);
                            datasourceConectSys.Connection.BulkInsert(detalheTRFRecusadosStaging, "DetalheTRFRecusadoLoteStaging");

                            var veiculos            = passagensReprovadas.Any(c => c.Veiculo != null) ? passagensReprovadas.Select(c => c.Veiculo) : null;
                            var veiculosLoteStaging = Mapper.Map <List <VeiculoLoteStaging> >((veiculos ?? new List <VeiculoDto>()));
                            veiculosLoteStaging.ForEach(x => x.ExecucaoId = execucaoId);
                            datasourceConectSys.Connection.BulkInsertTransacoes(veiculosLoteStaging, "VeiculoLoteStaging");

                            var transacoesRecusadasParceiro        = passagensReprovadas.Any(c => c.TransacaoRecusadaParceiro != null) ? passagensReprovadas.Select(c => c.TransacaoRecusadaParceiro) : null;
                            var transacoesRecusadasParceiroStaging = Mapper.Map <List <TransacaoRecusadaParceiroLoteStaging> >((transacoesRecusadasParceiro ?? new List <TransacaoRecusadaParceiroEdiDto>()));
                            transacoesRecusadasParceiroStaging.ForEach(x => x.ExecucaoId = execucaoId);
                            datasourceConectSys.Connection.BulkInsertTransacoes(transacoesRecusadasParceiroStaging, "TransacaoRecusadaParceiroLoteStaging");

                            response.QtdDetalheTRFRecusadoStaging        = detalheTRFRecusadosStaging.Count;
                            response.QtdVeiculoStaging                   = veiculosLoteStaging.Count;
                            response.QtdTransacaoRecusadaParceiroStaging = transacoesRecusadasParceiroStaging.Count;
                        }
                        catch (Exception ex)
                        {
                            Log.Fatal($"ID: {execucaoId} - Erro Fatal - Staging Passagens Reprovadas Edi - ConectSys.", ex);
                            response.SucessoStagingConectSys = false;
                        }
                    }
                    Log.Debug($"ID: {execucaoId} - Fim - Staging Passagens Reprovadas Edi - ConectSys.");
                }, passagensReprovadas);
            }
            catch (Exception ex)
            {
                Log.Fatal($"ID: {execucaoId} - Erro Fatal. Erro: {ex.Message}", ex);
            }

            sw.Stop();
            response.TempoExecucaoStagingConectSys = sw.Elapsed;
        }