Tabela de conteúdos

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`

Atores

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

Telas

Tela 01 - Formulário de Validação

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

Tela 02 - Loading

Elemento Tipo Observação
Indicador de progresso Ícone animado (Loader2) Exibido enquanto aguarda resposta da API
Texto informativo Rótulo estático “Validando documento…”

Tela 03 - Sucesso

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

Tela 04 - Acesso Restrito (Sigilo)

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

Tela 05 - Erro Geral

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

Fluxos

Fluxo 01 - Acesso com Chave via URL

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

Fluxo 02 - Acesso Manual sem Chave

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

Fluxo 03 - Validação do Documento

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

Fluxo 04 - Abertura do PDF

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`

RN – Regras de Negócio

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.