public void Executar(AcaoDeTriagemPreOcr acao, LoteTriagemViewModel lote)
        {
            var ordemPagina    = 1;
            var ordemDocumento = 1;
            var documentoAtual = new DocumentoParaSeparacaoViewModel();

            foreach (var paginaId in acao.Paginas)
            {
                var documentoDaPagina = lote.ObterDocumentoDaPagina(paginaId);
                var pagina            = lote.ObterPagina(paginaId);

                if (documentoAtual != documentoDaPagina)
                {
                    ordemDocumento++;
                    documentoAtual = documentoDaPagina;

                    if (ordemDocumento != documentoAtual.Ordem)
                    {
                        documentoAtual.NovaOrdem = ordemDocumento;
                        this.documentoRepositorio.AlterarOrdem(documentoAtual.Id, documentoAtual.NovaOrdem);
                        this.documentoRepositorio.AlterarOrdemPais(documentoAtual.Id, documentoAtual.NovaOrdem);

                        this.gravaLogDoDocumentoServico.Executar(LogDocumento.AcaoMudancaDeOrdem,
                                                                 documentoAtual.Id,
                                                                 string.Format("Mudança de ordem. De #{0} para #{1}. [{2}]", documentoAtual.Ordem, documentoAtual.NovaOrdem, lote.Fase));

                        lote.MarcaDocumentoManipulado(documentoAtual.Id);

                        this.AtualizarOrdemDocumentoNovo(lote, documentoAtual);
                    }
                }

                var ordemOriginal = pagina.Ordem;
                if (ordemOriginal != ordemPagina)
                {
                    pagina.Ordem = ordemPagina;
                    this.paginaRepositorio.AlterarOrdem(pagina.Id, ordemPagina);

                    this.gravaLogDaPaginaServico.Executar(LogPagina.AcaoMudarOrdem,
                                                          paginaId, pagina.DocumentoAtualId(),
                                                          string.Format("Mudança de ordem. De #{0} para #{1}. [{2}]", ordemOriginal, ordemPagina, lote.Fase));

                    lote.MarcaDocumentoManipulado(pagina.DocumentoAtualId());
                }

                ordemPagina++;
            }
        }
        private Documento ObterDocumento(int paginaId, LoteTriagemViewModel lote)
        {
            var documentoViewModel = lote.ObterDocumentoDaPagina(paginaId);

            if (documentoViewModel != null && documentoViewModel.Id > 0)
            {
                return(new Documento {
                    Id = documentoViewModel.Id
                });
            }

            var pagina = this.paginaRepositorio.ObterPorId(paginaId);

            if (pagina != null && pagina.Documento != null)
            {
                return(pagina.Documento);
            }

            return(new Documento {
                Id = 0
            });
        }