public ActionResult AprovacaoFrm(string chaveurl)
        {
            int idSolicitacao     = 0;
            int idSolicitacaoTipo = 0;
            int idPapel           = 0;

            if (!string.IsNullOrEmpty(chaveurl))
            {
                List <ParametroCriptografia> param = Cripto.DescriptografarUrl(chaveurl, Key);
                Int32.TryParse(param.First(p => p.Name == "idSolicitacao").Value, out idSolicitacao);
                Int32.TryParse(param.First(p => p.Name == "idSolicitacaoTipo").Value, out idSolicitacaoTipo);
                Int32.TryParse(param.First(p => p.Name == "idPapel").Value, out idPapel);
            }

            FichaCadastralWebForLinkVM ficha = new FichaCadastralWebForLinkVM(idSolicitacao);
            SOLICITACAO solicitacao          = _solicitacaoService.BuscarAprovacaoPorId(idSolicitacao);

            int?grupoTramite = solicitacao.WFD_SOLICITACAO_TRAMITE.FirstOrDefault(t => t.PAPEL_ID == idPapel && t.SOLICITACAO_STATUS_ID == 1).GRUPO_DESTINO;

            ViewBag.NecessitaExecucaoManual = _fluxoSequenciaBp.NecessitaExecucaoManual(solicitacao.CONTRATANTE_ID, solicitacao.FLUXO_ID, idPapel, solicitacao.ID);
            ViewBag.QtdGrupoEmpresa         = _grupoBp.QuantidadeEmpresa(solicitacao.CONTRATANTE_ID);

            switch (solicitacao.Fluxo.FLUXO_TP_ID)
            {
            // CADASTRO FORNECEDOR
            case 10:
            case 30:
            case 20:
            case 40:
            case 50:
                this.CadastroFornecedor(ficha, solicitacao);
                this.FornecedorRobo(ficha, solicitacao);
                break;

            // AMPLIAÇÃO DE FORNECEDOR
            case 60:
                this.AmpliacaoFornecedor(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // MODIFICAÇÕES GERAIS
            case 70:
                this.ModificacoesGerais(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // MODIFICAÇÕES DE DADOS FISCAIS
            case 80:
                this.ModificacoesDadosFiscais(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // MODIFICAÇÕES DE DADOS BANCÁRIOS
            case 90:
                this.ModificacoesDadosBancarios(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // MODIFICAÇÕES DE DADOS CONTATOS
            case 100:
                this.ModificacoesDadosContatos(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // BLOQUEIO DO FORNECEDOR
            case 110:
                this.BloqueioFornecedor(ficha, solicitacao);
                ViewBag.BloqueioMotivoQualidade = _tipoBloqueioRoboService.ListarTodosPorCodigoFuncaoBloqueio();
                if (solicitacao.Fornecedor != null)
                {
                    this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                }
                break;

            // DESBLOQUEIO DO FORNECEDOR
            case 120:
                this.DesbloqueioFornecedor(ficha, solicitacao);
                if (solicitacao.Fornecedor != null)
                {
                    this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                }
                break;

            // ATUALIZAÇÃO DE DOCUMENTOS
            case 130:
                this.AtualizacaoDocumentos(ficha, solicitacao);
                this.FornecedorRobo(ficha, solicitacao);
                break;

            // MODIFICAÇÕES DE DADOS BANCÁRIOS
            case 140:
                this.ModificacoesInformacoesComplementares(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            case 150:
                this.ModificacaoDadosEnderecos(ficha, solicitacao);
                this.FornecedorRobo(ficha, this.RetornaFornecedor(solicitacao));
                break;

            // MODIFICACAO DE UNSPSC
            case 160:
                this.AtualizacaoUnspsc(ficha, solicitacao);
                this.FornecedorRobo(ficha, solicitacao);
                break;
            }

            // Solicitação
            if (solicitacao.SolicitacaoCadastroFornecedor.Count > 0)
            {
                ficha.CategoriaNome = solicitacao.SolicitacaoCadastroFornecedor.First().WFD_PJPF_CATEGORIA.DESCRICAO;
            }
            else if (solicitacao.Fornecedor != null)
            {
                ficha.CategoriaNome = solicitacao.Fornecedor.WFD_CONTRATANTE_PJPF.First(x => x.CONTRATANTE_ID == solicitacao.CONTRATANTE_ID).WFD_PJPF_CATEGORIA.DESCRICAO;
            }
            else
            {
                ficha.CategoriaNome = solicitacao.FORNECEDORBASE.WFD_PJPF_CATEGORIA.DESCRICAO;
            }

            ficha.Aprovacao.ID                  = solicitacao.ID;
            ficha.ContratanteID                 = solicitacao.CONTRATANTE_ID;
            ficha.Aprovacao.NomeContratante     = solicitacao.Contratante.RAZAO_SOCIAL;
            ficha.Aprovacao.Solicitacao_Dt_Cria = solicitacao.SOLICITACAO_DT_CRIA;
            ficha.Aprovacao.NomeSolicitacao     = solicitacao.Fluxo.FLUXO_NM;
            ficha.Aprovacao.FluxoId             = solicitacao.FLUXO_ID;
            ficha.Aprovacao.FluxoTPId           = solicitacao.Fluxo.FLUXO_TP_ID;
            ficha.Aprovacao.Login               = solicitacao.Usuario != null ? solicitacao.Usuario.NOME : null;
            ficha.Aprovacao.Solicitacao_Tramite = solicitacao.WFD_SOLICITACAO_TRAMITE.FirstOrDefault(x => x.PAPEL_ID == idPapel);

            ficha.Solicitacao.Tramite = new SolicitacaoTramiteVM {
                Papel = new PapelVM {
                    ID = idPapel
                }
            };

            int tpFluxoId = solicitacao.Fluxo.FLUXO_TP_ID;

            ViewBag.Fluxo = tpFluxoId;

            this.PreencheStatusRobo(ficha, solicitacao, tpFluxoId);

            //Mapear UNSPSC
            ficha.FornecedoresUnspsc =
                Mapper.Map <List <SOLICITACAO_UNSPSC>, List <FornecedorUnspscVM> >(solicitacao.WFD_SOL_UNSPSC.ToList());

            ficha.Questionarios = new RetornoQuestionario <QuestionarioVM>
            {
                QuestionarioDinamicoList =
                    Mapper.Map <List <QuestionarioDinamico>, List <QuestionarioVM> >(
                        _cadastroUnicoService.BuscarQuestionarioDinamico(new QuestionarioDinamicoFiltrosDTO()
                {
                    //PapelId = papelAtual,
                    //UF = "RJ",
                    ContratanteId = solicitacao.CONTRATANTE_ID,
                    PapelId       = idPapel,
                    CategoriaId   = ficha.CategoriaId,
                    Alteracao     = true,
                    SolicitacaoId = solicitacao.ID
                })
                        )
            };

            ViewBag.Bancos       = _bancoService.ListarTodosPorNome();
            ViewBag.TipoEndereco = new SelectList(_enderecoService.ListarTodosTiposEnderecosPorNome(), "ID", "NM_TP_ENDERECO");
            ViewBag.UF           = new SelectList(_enderecoService.ListarTodosPorNome(), "UF_SGL", "UF_NM");

            return(View(ficha));
        }