Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
pres:gerti:gestao_de_ativos:portal:er_008 [07/09/2026 13:11] – pramorimpres:gerti:gestao_de_ativos:portal:er_008 [08/09/2026 16:49] (atual) – pramorim
Linha 7: Linha 7:
   * Página de confirmação: ''/acompanhar-processo/confirmar?token={token}''   * Página de confirmação: ''/acompanhar-processo/confirmar?token={token}''
   * Página de gerenciamento: ''/acompanhar-processo/gerenciar?token={token}''   * Página de gerenciamento: ''/acompanhar-processo/gerenciar?token={token}''
-  * Página de cancelamento: ''/acompanhar-processo/cancelar?token={token}&processo={id}''+  * Página de cancelamento: ''/acompanhar-processo/cancelar?hash={hash}&acompanhamento={idAcompanhamento}''
  
 ---- ----
Linha 135: Linha 135:
  
 ==== E-mail 02 – Notificação de Movimentação ==== ==== E-mail 02 – Notificação de Movimentação ====
-{{:pres:gerti:gestao_de_ativos:portal:movimentacao_-_tce_go_push-_localhost_.png?direct&600|}} \\+{{:pres:gerti:gestao_de_ativos:portal:pasted:20260907-131356.png?direct&600}} \\
  
 Disparado sempre que houver uma movimentação em um processo já confirmado. **O disparo e a montagem da mensagem ocorrem na rotina PL/SQL de notificação, dentro do banco** (ver [[#mecanismo_de_disparo_da_notificacao_legado|Mecanismo de Disparo da Notificação]]). O RF-008 **especifica** o conteúdo, o layout e os links; a implementação do template é feita onde o disparo acontece. Disparado sempre que houver uma movimentação em um processo já confirmado. **O disparo e a montagem da mensagem ocorrem na rotina PL/SQL de notificação, dentro do banco** (ver [[#mecanismo_de_disparo_da_notificacao_legado|Mecanismo de Disparo da Notificação]]). O RF-008 **especifica** o conteúdo, o layout e os links; a implementação do template é feita onde o disparo acontece.
Linha 147: Linha 147:
 |Link "Ver processo completo"|Redireciona para ''/processo/{id}''|Consulta pública do processo, sem necessidade de token.| |Link "Ver processo completo"|Redireciona para ''/processo/{id}''|Consulta pública do processo, sem necessidade de token.|
 |Link "Solicitar link de gerenciamento"|Redireciona para ''/acompanhar-processo/gerenciar'' — **sem token**|A rota sem token apresenta o formulário de solicitação, acionando o **Fluxo 05**. Este e-mail **não carrega token de sessão**: chega semanas ou meses após a inscrição, quando qualquer token de 48h já expirou (RN02).| |Link "Solicitar link de gerenciamento"|Redireciona para ''/acompanhar-processo/gerenciar'' — **sem token**|A rota sem token apresenta o formulário de solicitação, acionando o **Fluxo 05**. Este e-mail **não carrega token de sessão**: chega semanas ou meses após a inscrição, quando qualquer token de 48h já expirou (RN02).|
-|Link "Parar de acompanhar este processo"|Redireciona para ''/acompanhar-processo/cancelar?token={tokenDescadastro}&processo={id}''|Aciona o **Fluxo 04**, com o **token de descadastro** (RN16) — persistente e de escopo único. Remove apenas o processo referenciado, e **não dá acesso ao painel** (RN07).|+|Link "Parar de acompanhar este processo"|Redireciona para ''/acompanhar-processo/cancelar?hash={hash}&acompanhamento={idAcompanhamento}''|Aciona o **Fluxo 04**, com o **hash de descadastro** (RN16) — persistente e de escopo único — e o ID do acompanhamento. Remove apenas o vínculo referenciado, e **não dá acesso ao painel** (RN07, RN17).|
  
 ==== E-mail 03 – Reenvio de Link de Gerenciamento ==== ==== E-mail 03 – Reenvio de Link de Gerenciamento ====
Linha 223: Linha 223:
 |01|Usuário recebe o e-mail de notificação com link "Parar de acompanhar este processo"| |E-mail 02| |01|Usuário recebe o e-mail de notificação com link "Parar de acompanhar este processo"| |E-mail 02|
 |02|Usuário clica no link| | | |02|Usuário clica no link| | |
-|03|O sistema redireciona para ''/acompanhar-processo/cancelar?token={tokenDescadastro}&processo={id}''|RN16|Tela 04|+|03|O sistema redireciona para ''/acompanhar-processo/cancelar?hash={hash}&acompanhamento={idAcompanhamento}''|RN16 RN17|Tela 04|
 |04|O sistema exibe o estado loading: "Processando cancelamento…" e valida o token de descadastro|RN06 RN16|Tela 04| |04|O sistema exibe o estado loading: "Processando cancelamento…" e valida o token de descadastro|RN06 RN16|Tela 04|
 |05|Token válido|RN06| | |05|Token válido|RN06| |
Linha 266: Linha 266:
 |RN14|**Paginação na tela de gerenciamento** – Como não há limite máximo de processos por e-mail (RN10), a lista de acompanhamentos da Tela 03 é paginada em **12 processos por página**, exibindo o componente de paginação somente quando esse total é ultrapassado. O tamanho da página é **fixo** — não há seletor de itens por página. Reaproveita o componente ''Pagination'' já utilizado em ''/processos'' (mesmo padrão visual e de navegação).| |RN14|**Paginação na tela de gerenciamento** – Como não há limite máximo de processos por e-mail (RN10), a lista de acompanhamentos da Tela 03 é paginada em **12 processos por página**, exibindo o componente de paginação somente quando esse total é ultrapassado. O tamanho da página é **fixo** — não há seletor de itens por página. Reaproveita o componente ''Pagination'' já utilizado em ''/processos'' (mesmo padrão visual e de navegação).|
 |RN15|**Conformidade de acessibilidade** – Todas as telas do RF-008 seguem a diretriz **e-MAG 3.1** adotada pelo Portal. São verificáveis, em cada tela: nome acessível dos controles e dos campos, contraste mínimo do texto e dos elementos de interface, e aumento de fonte/zoom até 200% sem perda de conteúdo ou de função.| |RN15|**Conformidade de acessibilidade** – Todas as telas do RF-008 seguem a diretriz **e-MAG 3.1** adotada pelo Portal. São verificáveis, em cada tela: nome acessível dos controles e dos campos, contraste mínimo do texto e dos elementos de interface, e aumento de fonte/zoom até 200% sem perda de conteúdo ou de função.|
-|RN16|**Token de descadastro** – Gerado no momento da inscrição e vinculado ao par e-mail/processo, é **persistente** (não expira), de **escopo único** — remove exclusivamente o acompanhamento a que se refere — e **não concede acesso ao painel de gerenciamento**. É o único token presente no e-mail de notificação de movimentação. Garante o cancelamento em um clique, a qualquer tempo, sem expor a lista de processos acompanhados pelo endereço: um link de descadastro vazado custa uma inscrição, enquanto um link de gerenciamento vazado revelaria todos os interesses processuais daquela pessoa. A forma de materialização — coluna dedicada em `PRO_ACOMPANHAPROCESSO` ou derivação criptográfica determinística — é **decisão técnica de implementação**, a cargo do time de desenvolvimento; em qualquer das formas, a rotina de disparo deve apenas **ler** o token, nunca gerá-lo.| +|RN16|**Token de descadastro** – Gerado **na confirmação da inscrição**, na mesma requisição que cria a linha de acompanhamento, e vinculado a ela (`PROACPR_ID`). É **persistente** (não expira), de **escopo único** — remove exclusivamente o acompanhamento a que se refere — e **não concede acesso ao painel de gerenciamento**. É o único token presente no e-mail de notificação de movimentação. Garante o cancelamento em um clique, a qualquer tempo, sem expor a lista de processos acompanhados pelo endereço: um link de descadastro vazado custa uma inscrição, enquanto um link de gerenciamento vazado revelaria todos os interesses processuais daquela pessoa. **Materialização decidida:** coluna nova em `PRO_ACOMPANHAPROCESSO`, `DEFAULT NULL` para não impactar o schema existente, com hash MD5 derivado de GUID gerado no backend, exposta pela view `VPRO_ACOMPANHAMENTOPROCESSOS` para que a rotina de disparo apenas **leia** o valor ao montar o link, nunca o gere. Como a linha só é criada após a confirmação (RN03), a coluna preenchida passa a ser a marca de vínculo confirmado.| 
-|RN17|**Cancelamento aceita os dois tipos de token** – A remoção de um acompanhamento pode ser acionada por duas origens: o link do e-mail de movimentação (**token de descadastro**) e o botão "Parar de acompanhar" da tela de gerenciamento (**token de sessão**).+|RN17|**Dois endpoints de cancelamento, um por origem** – A remoção de um acompanhamento é acionada por duas origens, cada uma com seu endpoint: o botão "Parar de acompanhar" da **tela de gerenciamento**, autenticado por **token de sessão**; e o link do **e-mail de movimentação**, autenticado pelo **hash de descadastro** somado ao ID do acompanhamento (RN16). Ambos executam a **mesma rotina de remoção** no banco — muda apenas a autenticação. A separação em dois endpoints garante por construção que o hash de descadastro não alcance outros acompanhamentos do mesmo endereço: o endpoint que o aceita resolve um único vínculo, identificado pelo próprio hash, e não recebe ID de processo nem de usuário.|
  
 ---- ----
Linha 279: Linha 279:
 ^ Tabela ^ Papel no legado ^ Reaproveitamento no novo modelo ^ ^ Tabela ^ Papel no legado ^ Reaproveitamento no novo modelo ^
 |`TCE_GO.PSH_USUARIOS`|Cadastro do usuário do serviço Push (nome, e-mail, senha, dados de contato, flag `Habilitado`)|**Reaproveitada como cadastro implícito.** Ao inscrever um e-mail em um processo (RN03), o backend deve verificar se já existe uma linha com aquele e-mail; se não existir, criar uma nova (cadastro invisível ao usuário); se já existir, **reutilizar o registro sem sobrescrever dados preexistentes** (RN12).| |`TCE_GO.PSH_USUARIOS`|Cadastro do usuário do serviço Push (nome, e-mail, senha, dados de contato, flag `Habilitado`)|**Reaproveitada como cadastro implícito.** Ao inscrever um e-mail em um processo (RN03), o backend deve verificar se já existe uma linha com aquele e-mail; se não existir, criar uma nova (cadastro invisível ao usuário); se já existir, **reutilizar o registro sem sobrescrever dados preexistentes** (RN12).|
-|`PRO_ACOMPANHAPROCESSO`|Tabela de associação entre `PSH_USUARIOS` (`PSHUSUA_ID`) e `PRO_AUTUACAO` (`PROAUTU_ID`) — representa "quais processos este usuário acompanha"; a coluna `PROANDA_ID` funciona como fila de notificação pendente|**Reaproveitada.** É exatamente a estrutura que sustenta a lista exibida nas telas de Confirmação e Gerenciamento (RF-008). **Pode requerer uma coluna adicional** para o token de descadastro (RN16), caso o time técnico opte por armazená-lo em vez de derivá-lo criptograficamente. Nenhuma outra alteração de schema é prevista.|+|`PRO_ACOMPANHAPROCESSO`|Tabela de associação entre `PSH_USUARIOS` (`PSHUSUA_ID`) e `PRO_AUTUACAO` (`PROAUTU_ID`) — representa "quais processos este usuário acompanha"; a coluna `PROANDA_ID` funciona como fila de notificação pendente|**Reaproveitada, com uma coluna nova.** É exatamente a estrutura que sustenta a lista exibida nas telas de Confirmação e Gerenciamento (RF-008). **Requer uma coluna adicional** para o hash de descadastro (RN16) — MD5 derivado de GUID, `DEFAULT NULL` —, que também precisa ser exposta pela view `VPRO_ACOMPANHAMENTOPROCESSOS` para uso da rotina de disparo. As inscrições anteriores ao corte recebem o hash por //update// incremental, para não perderem o descadastro em um clique. Nenhuma outra alteração de schema é prevista.|
 |`PRO_AUTUACAO`|Tabela de processos autuados|**Reaproveitada apenas para leitura** (validação de existência do processo — RN05 — e composição dos dados exibidos: número, interessado, assunto, ano).| |`PRO_AUTUACAO`|Tabela de processos autuados|**Reaproveitada apenas para leitura** (validação de existência do processo — RN05 — e composição dos dados exibidos: número, interessado, assunto, ano).|
  
Linha 304: Linha 304:
 ^ Endpoint legado ^ Reaproveitamento no RF-008 ^ ^ Endpoint legado ^ Reaproveitamento no RF-008 ^
 |`POST api/push/login`|**Descontinuado.** Dependia de senha; o novo modelo não tem login.| |`POST api/push/login`|**Descontinuado.** Dependia de senha; o novo modelo não tem login.|
 +|Portal legado `/Push` (formulário de inscrição)|**Desligado no corte.** Encerra a criação de acompanhamentos por fora do fluxo de confirmação do RF-008, garantindo que toda linha nova de `PRO_ACOMPANHAPROCESSO` nasça com hash de descadastro (RN16).|
 |`POST api/push/email` (cadastro)|**Substituído** pelo cadastro implícito descrito acima — o novo `POST /api/push/inscrever` (PRD §7) deve criar o registro em `PSH_USUARIOS` internamente, sem expor os campos `Nome`/`Senha` ao cliente.| |`POST api/push/email` (cadastro)|**Substituído** pelo cadastro implícito descrito acima — o novo `POST /api/push/inscrever` (PRD §7) deve criar o registro em `PSH_USUARIOS` internamente, sem expor os campos `Nome`/`Senha` ao cliente.|
 |`GET api/push/verifica/{numeroProcesso}`|**Reaproveitável como base, com correção de parâmetro:** no RF-008 o parâmetro deve ser `idAutuacao`, não o número público — a página do processo (`/processo/{id}`) já tem o ID de autuação em contexto, o usuário não precisa informá-lo.| |`GET api/push/verifica/{numeroProcesso}`|**Reaproveitável como base, com correção de parâmetro:** no RF-008 o parâmetro deve ser `idAutuacao`, não o número público — a página do processo (`/processo/{id}`) já tem o ID de autuação em contexto, o usuário não precisa informá-lo.|
 |`PUT api/push/adiciona/processos`|**Reaproveitável como base, com a mesma correção:** a lista recebida deve conter IDs de autuação, não números de processo, antes de repassar para `WEB_PACKAGE.PWEB_ACOMPANHAPROCESSO` (que exigirá a conversão pontual citada acima).| |`PUT api/push/adiciona/processos`|**Reaproveitável como base, com a mesma correção:** a lista recebida deve conter IDs de autuação, não números de processo, antes de repassar para `WEB_PACKAGE.PWEB_ACOMPANHAPROCESSO` (que exigirá a conversão pontual citada acima).|
-|`DELETE api/push/remove/{numeroProcesso}`|**Reaproveitável como base:** apesar do nome do parâmetro na rota legada, o valor é repassado como ID interno para `RemoveAcompanhamentoDeProcesso`. No RF-008 o parâmetro deve se chamar explicitamente `idAutuacao`, para não sugerir que aceita o número público.|+|`DELETE api/push/remove/{numeroProcesso}`|**Reaproveitável como base** para `DELETE /api/push/cancelar`, usado pela tela de gerenciamento: apesar do nome do parâmetro na rota legada, o valor é repassado como ID interno para `RemoveAcompanhamentoDeProcesso`. No RF-008 o parâmetro deve se chamar explicitamente `idAutuacao`, para não sugerir que aceita o número público.| 
 +|— (não existe no legado)|**Desenvolvimento novo:** `DELETE /api/push/cancelar/email`, acionado pelo link do e-mail de movimentação. Recebe o hash de descadastro e o ID do acompanhamento (RN16, RN17), e executa a **mesma rotina de remoção** do endpoint acima — muda apenas a autenticação.|
 |`GET api/push/processos`|**Reaproveitável** como base para `GET /api/push/gerenciar`.| |`GET api/push/processos`|**Reaproveitável** como base para `GET /api/push/gerenciar`.|
 |Autenticação `BasicAuthorizationPush` (header `Authorization: Basic {id}@{tokenCriptografado}`, sem expiração — risco S4 do relatório técnico)|**Não reaproveitada.** O RF-008 exige token de e-mail com expiração (RN02) e sem exigência de login prévio; é necessário um mecanismo novo de emissão/validação de token (ex.: JWT com `exp`).| |Autenticação `BasicAuthorizationPush` (header `Authorization: Basic {id}@{tokenCriptografado}`, sem expiração — risco S4 do relatório técnico)|**Não reaproveitada.** O RF-008 exige token de e-mail com expiração (RN02) e sem exigência de login prévio; é necessário um mecanismo novo de emissão/validação de token (ex.: JWT com `exp`).|
Linha 357: Linha 359:
 |**Escopo do "desabilitado"**|O indicador de habilitação vive no **usuário**, não na inscrição. Desabilitar um e-mail interrompe as notificações de **todos** os processos daquela pessoa de uma só vez.|O novo modelo exige controle **por inscrição** (RN03 e Fluxo 04) — não há como cancelar um processo isoladamente reaproveitando o indicador atual.| |**Escopo do "desabilitado"**|O indicador de habilitação vive no **usuário**, não na inscrição. Desabilitar um e-mail interrompe as notificações de **todos** os processos daquela pessoa de uma só vez.|O novo modelo exige controle **por inscrição** (RN03 e Fluxo 04) — não há como cancelar um processo isoladamente reaproveitando o indicador atual.|
 |**Confiabilidade do envio**|Falhas de envio são descartadas sem registro, e não existe histórico de e-mails enviados. Uma notificação perdida é indetectável e irrecuperável.|Definir se o RF-008 exige registro de envio e reenvio automático em caso de falha.| |**Confiabilidade do envio**|Falhas de envio são descartadas sem registro, e não existe histórico de e-mails enviados. Uma notificação perdida é indetectável e irrecuperável.|Definir se o RF-008 exige registro de envio e reenvio automático em caso de falha.|
-|**Inscrição automática**|Uma conta específica é inscrita automaticamente em **toda autuação nova**, por regra fixa no banco, sem dono documentado.|Confirmar se a regra deve ser preservada, e a quem pertence.|+|**Tratamento especial de uma conta**|Uma regra fixa no banco, acionada a cada autuação nova, dá tratamento diferenciado às inscrições de **uma conta identificada por ID literal**, atualizando o campo de andamento delas. Não cria acompanhamentos — a criação é exclusiva do fluxo de confirmação.|Confirmar a quem a regra pertence e se deve ser preservada. O RF-008 não depende dela, mas quem alterar o mecanismo de disparo precisa saber que existe.|
  
 ==== Riscos e Pontos de Atenção para o Backend ==== ==== Riscos e Pontos de Atenção para o Backend ====
Linha 371: Linha 373:
  
 ^ Data ^ Alteração ^ Motivo ^ ^ Data ^ Alteração ^ Motivo ^
 +|2026-09-06|RN16 — hash gerado **na confirmação** (não na inscrição), coluna `DEFAULT NULL`; registrados o //update// incremental para a base existente e o desligamento do portal legado `/Push` no corte|Decisões do time. A linha só nasce após a confirmação, o que torna a coluna preenchida a marca de vínculo confirmado; sem a migração, a base antiga perderia o descadastro em um clique que o e-mail legado já oferece|
 +|2026-09-06|**Decisões técnicas registradas:** RN16 fixa a materialização do token (coluna nova em `PRO_ACOMPANHAPROCESSO`, MD5 de GUID, exposta na view); RN17 passou de endpoint único para **dois endpoints**, um por origem; parâmetros do link de cancelamento passaram de `token`+`processo` para `hash`+`acompanhamento`|Decisões do time em 06/09/2026. A separação em dois endpoints substitui, por construção, a verificação de escopo que o endpoint único exigiria; o ID do acompanhamento (`PROACPR_ID`) identifica o vínculo diretamente, em vez do ID do processo|
 |2026-09-06|**RN17 acrescentada** — cancelamento aceita os dois tipos de token, em endpoint único, com escopo determinado pelo tipo; Fluxo 03 passo 06.3 passou a citá-la|A tela de gerenciamento precisa cancelar acompanhamentos com o token de sessão, o que a RN16 não cobria. A regra também explicita que o processo informado na requisição é ignorado quando o token é de descadastro — sem isso, um link vazado alcançaria outros acompanhamentos do mesmo endereço| |2026-09-06|**RN17 acrescentada** — cancelamento aceita os dois tipos de token, em endpoint único, com escopo determinado pelo tipo; Fluxo 03 passo 06.3 passou a citá-la|A tela de gerenciamento precisa cancelar acompanhamentos com o token de sessão, o que a RN16 não cobria. A regra também explicita que o processo informado na requisição é ignorado quando o token é de descadastro — sem isso, um link vazado alcançaria outros acompanhamentos do mesmo endereço|
 |2026-09-06|**RN02 desdobrada em dois tipos de token** (sessão, 48h; descadastro, persistente) e **RN16 acrescentada**; E-mail 02, RN07, RN09 e Fluxo 04 alinhados|O e-mail de movimentação não responde a uma ação do usuário — chega muito depois da inscrição, quando um token de 48h já expirou, e é montado por rotina que não emite tokens. Além disso, o link de gerenciamento expõe toda a lista de processos do endereço, exigindo escopo de segurança distinto do link de cancelamento| |2026-09-06|**RN02 desdobrada em dois tipos de token** (sessão, 48h; descadastro, persistente) e **RN16 acrescentada**; E-mail 02, RN07, RN09 e Fluxo 04 alinhados|O e-mail de movimentação não responde a uma ação do usuário — chega muito depois da inscrição, quando um token de 48h já expirou, e é montado por rotina que não emite tokens. Além disso, o link de gerenciamento expõe toda a lista de processos do endereço, exigindo escopo de segurança distinto do link de cancelamento|
Linha 390: Linha 394:
 //Gerado com: documentar-funcionalidade-v1.md// \\ //Gerado com: documentar-funcionalidade-v1.md// \\
 //Revisado por: Paulo Ricardo Amorim Silva - pramorim@tce.go.gov.br// //Revisado por: Paulo Ricardo Amorim Silva - pramorim@tce.go.gov.br//
- 
  • pres/gerti/gestao_de_ativos/portal/er_008.1788786688.txt.gz
  • Última modificação: 07/09/2026 13:11
  • por pramorim