private RegraViolada ObterRegraViolada(DocumentoComProblemaViewModel viewModel)
        {
            var regrasVioladas = this.regraVioladaRepositorio.ObterRegraEmAbertoPorProcesso(viewModel.ProcessoId, viewModel.RegraId, viewModel.DocumentoId);

            if (regrasVioladas.Any() == false)
            {
                return new RegraViolada
                {
                    Regra = new Regra { Id = viewModel.RegraId },
                    Processo = viewModel.ObterProcesso(),
                    Documento = viewModel.ObterDocumento()
                };
            }

            return regrasVioladas.Last();
        }
        public void Executar(DocumentoComProblemaViewModel viewModel)
        {
            var regraViolada = this.ObterRegraViolada(viewModel);
            regraViolada.Observacao = viewModel.TipoDeProblemaCompleto();
            regraViolada.Pagina = viewModel.Pagina;
            regraViolada.Hora = DateTime.Now;
            regraViolada.Usuario = (Usuario)this.userSession.UsuarioAtual;

            switch (viewModel.RegraId)
            {
                case Regra.CodigoRegraDocumentoComProblemaNaClassificacao:
                    regraViolada.Status = RegraVioladaStatus.Pendente;
                    this.MarcarDocumento(viewModel.DocumentoId, 
                        LogDocumento.AcaoMarcadoComProblemaNaClassificacao, 
                        "Documento marcado com problema na classificação");
                    break;
                case Regra.CodigoRegraQualidadeM2:
                    regraViolada.Status = RegraVioladaStatus.Pendente;
                    this.MarcarDocumento(viewModel.DocumentoId,
                        LogDocumento.AcaoMarcadoComProblemaNaQualidadeM2Ssys, 
                        "Documento marcado com problema na qualidade M2sys");
                    break;
                case Regra.CodigoRegraQualidadeCef:
                    regraViolada.Status = RegraVioladaStatus.Pendente;
                    this.MarcarDocumento(viewModel.DocumentoId,
                        LogDocumento.AcaoMarcadoComProblemaNaQualidadeCef, 
                        "Documento marcado com problema na qualidade CEF");
                    break;
                default:
                    regraViolada.Status = RegraVioladaStatus.Marcada;
                    break;
            }

            this.regraVioladaRepositorio.Salvar(regraViolada);

            this.gravaLogDoProcessoServico.Executar(LogProcesso.AcaoDocumentoMarcadoComProblema, 
                viewModel.ObterProcesso(), 
                string.Format("{0} - MDoc: {1} - Página: {2}", viewModel.TipoProblema, viewModel.DocumentoId, viewModel.Pagina));
        }