RF-007 Requisitos - Validação de Documentos

Permite que qualquer pessoa verifique a autenticidade de um documento processual do TCE-GO a partir de uma chave criptografada informada via URL ou digitada manualmente. Após validação via CAPTCHA, o sistema valida o documento e exibe o resultado; se válido, o cidadão pode abrir o PDF em nova aba. | Menu/Local de Acesso: `/validar-documento`

Nível Perfil Autenticação Abrangência
Público Cidadão Não requerida Acesso irrestrito via link externo ou acesso direto à rota

Elemento Tipo Obrigatório Observação
Número do Documento Campo de texto Sim Pré-preenchido com o valor do parâmetro `?key` quando presente na URL
Confirmação CAPTCHA Checkbox “Não sou um robô” Sim Padrão visual do projeto (simulado); deve ser resetado após abertura do PDF
Botão “Consultar” Ação Submete o formulário; habilitado somente com CAPTCHA confirmado
Botão “Limpar” Ação Limpa o campo, remove mensagens de erro e desmarca o CAPTCHA
Elemento Tipo Observação
Indicador de progresso Ícone animado (Loader2) Exibido enquanto aguarda resposta da API
Texto informativo Rótulo estático “Validando documento…”

Elemento Tipo Observação
Faixa verde Cabeçalho do card Exibe ícone ShieldCheck + “Documento autêntico e válido”
Metadados da consulta Painel informativo Exibe: chave consultada, data/hora da consulta e validade do link (10 minutos)
Botão “Abrir Documento PDF” Ação Abre o PDF em nova aba via `window.open`; ao clicar, reseta o CAPTCHA
Botão “Nova Consulta” Ação Retorna ao estado `form` com campos limpos

Elemento Tipo Observação
Faixa amber Cabeçalho do card Exibe ícone Lock + “Acesso restrito — Processo em sigilo”
Mensagem de sigilo Texto Mensagem retornada pela API (HTTP 403)
Painel informativo Bloco amber Explica o sigilo processual e orienta o cidadão a contatar o TCE-GO
Botão “Nova Consulta” Ação Retorna ao estado `form` com campos limpos

Elemento Tipo Observação
Faixa vermelha Cabeçalho do card Exibe ícone AlertTriangle + “Não foi possível processar a solicitação”
Mensagem de erro Texto Mensagem retornada pela API ou mensagem padrão de falha de conexão
Painel de causas Lista Possíveis causas: falha de comunicação, serviço indisponível, tempo excedido
Botão “Nova Consulta” Ação Retorna ao estado `form` com campos limpos
Passo Ação Regra Tela
01 O cidadão acessa a rota `/validar-documento?key=<chave_criptografada>`
02 O sistema detecta o parâmetro `?key` na URL via `useSearchParams()` RN07 Tela 01
03 O sistema pré-preenche o campo “Número do Documento” com o valor da chave Tela 01
04 O sistema exibe o formulário no estado `form` aguardando confirmação do CAPTCHA RN01 Tela 01
05 O cidadão confirma o CAPTCHA e clica em “Consultar” RN01 Tela 01
06 O sistema executa o Fluxo 03
Passo Ação Regra Tela
01 O cidadão acessa a rota `/validar-documento` sem parâmetro `?key`
02 O sistema detecta ausência do parâmetro e exibe o formulário com campo vazio RN07 Tela 01
03 O cidadão digita a chave manualmente no campo “Número do Documento” Tela 01
04 O cidadão confirma o CAPTCHA e clica em “Consultar” RN01 Tela 01
05 O sistema executa o Fluxo 03
Passo Ação Regra Tela
01 O sistema valida se o campo “Número do Documento” está preenchido RN02 Tela 01
01.1 Campo vazio: o sistema exibe mensagem inline no campo: “O número do Documento deve ser informado.” RN02 Tela 01
02 O sistema valida se o CAPTCHA foi confirmado RN01 Tela 01
03 O sistema altera o estado para `loading` Tela 02
04 O sistema realiza `POST /api/validar-documento/obter` com `{ key, captcha }`
05 O backend descriptografa a chave extraindo `idProcesso`, `idDocumento`, `tipoDocumento`
06 O backend executa a verificação de liberação conforme o tipo do documento RN09, RN10, RN11, RN12
06.1 `tipoDocumento ∈ {A, R, H}`: integração com serviço de autuação para verificar decisões julgadas RN09
06.2 `tipoDocumento = GED`: integração com serviço de documento para verificar existência ativa RN10
06.3 Demais tipos (andamento processual): integração com serviço de andamento para verificar `FoiJulgado` ou `UltimaSituacaoId = 11` RN11
06.4 `tipoDocumento = K1`: caso andamento não encontrado, verifica andamento pai via `PRO_ANEXOS` RN12
07 Processo em sigilo: a API retorna HTTP 403; o sistema altera o estado para `erro-sigilo` RN08 Tela 04
08 Chave inválida ou documento inexistente: o sistema exibe mensagem inline: “O documento não é válido ou não existe.” e retorna ao estado `form` RN03 Tela 01
09 Documento não julgado: o sistema exibe mensagem inline: “Este documento só poderá ser visualizado após o julgamento.” e retorna ao estado `form` RN04 Tela 01
10 Erro de conexão (catch de rede): o sistema altera o estado para `erro-geral` com a mensagem “Não foi possível conectar ao servidor. Tente novamente.” Tela 05
11 Erro inesperado de API: o sistema altera o estado para `erro-geral` e exibe a mensagem retornada Tela 05
12 Validação bem-sucedida: a API retorna `{ success: true, keyValid: <chave_temporaria> }` RN05
13 O sistema altera o estado para `sucesso`, registra data/hora da consulta e aguarda ação do cidadão Tela 03
Passo Ação Regra Tela
01 O cidadão clica em “Abrir Documento PDF” na Tela 03 Tela 03
02 O sistema chama `window.open('/api/validar-documento/pdf?keyValid=<keyValid>', '_blank')` RN05, RN06
03 O sistema reseta o CAPTCHA na tela de origem RN06 Tela 03
04 O backend descriptografa `keyValid` extraindo `idProcesso`, `idDocumento`, `tipoDocumento`, `dataLink`
05 O backend verifica se `dataLink + 10 minutos > agora` RN05
05.1 Token expirado: o sistema retorna erro; o cidadão deve iniciar nova consulta RN05 Tela 03
06 O backend baixa os bytes do PDF conforme o tipo do documento
06.1 `tipoDocumento = GED`: integração com `DOC_DOCUMENTO + GER_ANEXO` via `DownloadDocumentoNaoProcessual`
06.2 `tipoDocumento = K1`: leitura do arquivo físico via `PRO_ANEXOS + GER_ANEXO` (fileserver)
06.3 Demais tipos processuais: integração com `VWEB_BUSCADOCUMENTOS.TEXT_DOCASSINADO_B` via `DownloadDocumento`
07 O backend retorna stream `application/pdf`
Regra Descrição
RN01 O formulário não pode ser submetido sem que o CAPTCHA seja confirmado pelo cidadão.
RN02 Quando o campo “Número do Documento” estiver vazio no momento da submissão, o sistema exibe a mensagem: “O número do Documento deve ser informado.”
RN03 Quando a chave informada não puder ser descriptografada ou não corresponder a um documento existente, o sistema exibe a mensagem: “O documento não é válido ou não existe.”
RN04 Quando o documento existir mas não estiver liberado para visualização (não julgado), o sistema exibe a mensagem: “Este documento só poderá ser visualizado após o julgamento.”
RN05 O token `keyValid` possui validade de 10 minutos a partir da emissão. Após esse prazo, a requisição de PDF é bloqueada. O `keyValid` não deve ser armazenado em localStorage ou cookie.
RN06 Após o cidadão clicar em “Abrir Documento PDF”, o CAPTCHA deve ser resetado na tela de origem, exigindo nova confirmação para consulta subsequente.
RN07 O acesso à rota `/validar-documento` sem o parâmetro `?key` exibe o formulário com o campo vazio. Não há redirecionamento externo.
RN08 Quando o processo estiver marcado como em sigilo (`INDR_BLOQUEIODOC_A = 'T'`), a API retorna HTTP 403 e o sistema exibe a Tela 04 (Acesso Restrito), distinta da Tela 05 (Erro Geral).
RN09 Para documentos do tipo `A`, `R` ou `H` (Acórdão, Resolução, Histórico), a liberação ocorre somente se existirem registros na consulta de decisões julgadas (`VWEB_BUSCADECISOES_DOE + VWEB_PROCJULGAMENTO WHERE JULGADO = 'JULGADO'`). Lista vazia bloqueia o documento.
RN10 Para documentos do tipo `GED` (não-processual), a liberação ocorre somente se o documento existir e estiver ativo (`INDR_CANCELADO_N = 0` e `INDR_TIPOPROCESSUAL_N = 0`).
RN11 Para demais tipos de andamento processual, a liberação ocorre quando `FoiJulgado = true` ou `UltimaSituacaoId = 11` no andamento correspondente ao `idDocumento` da chave.
RN12 Para documentos do tipo `K1` (anexo processual), quando o andamento não for localizado diretamente, o sistema busca pelo andamento pai via `PRO_ANEXOS`. A liberação segue a mesma regra de julgamento do andamento pai.
  • pres/gerti/gestao_de_ativos/portal/er_007.txt
  • Última modificação: 30/03/2026 20:43
  • por pramorim