34 lines
5.2 KiB
Markdown
34 lines
5.2 KiB
Markdown
# Histórico detalhado integral da requisição — 03/11/2026
|
|
|
|
`SGF-REQUEST-HISTORY-CURSOR-QA-v1` remove o limite de consulta aos últimos25 eventos da requisição. A interface passa a percorrer eventos mais antigos/recentes em blocos de25 ou100, mantendo o histórico próprio da etapa e o formulário ainda não gravado.
|
|
|
|
## Implementação
|
|
|
|
O detalhe reutiliza a primeira página já carregada. As seguintes usam `GET /api/purchasing-requests/{id}/history`, com `cursorPaginate` e ordenação por ID descendente. A consulta aplica primeiro a origem autorizada e o filtro `ProcessHistory` existente; não materializa o histórico inteiro nem calcula uma contagem global. A implementação de paginação lê apenas o bloco e a entrada adicional necessária para detectar continuação.
|
|
|
|
Os cursores são cifrados e autenticados, vinculados à requisição, utilizador, perfil/contexto e tamanho do bloco, com validade de dez minutos. Cada consulta volta a verificar direito `purchasing_requests.view`, fonte e contexto actual. Trocar utilizador, requisição, contexto ou tamanho exige começar uma consulta nova. Cursor inválido/expirado tem recuperação explícita por **Actualizar histórico**; não se escolhe outra origem ou se confirma uma operação.
|
|
|
|
O componente tem protecção contra respostas atrasadas e consulta de um registo entretanto substituído. Actualizar/paginar só altera o painel do histórico: não apaga o formulário da requisição. Sem a flag `receipt_qa.request_history_enabled`, mantém-se a consulta legada dos últimos25 e a guarda do controlador novo recusa antes de consultar dados. Não existem direitos novos. Os blocos de preparação/confirmação da requisição e o filtro de etapas são iguais aos da entrega8079.
|
|
|
|
## Provas
|
|
|
|
[Consolidação técnica](proofs/request-history-composition-20261103.json): **36 verificações** —20 API/preservação/guardas,10 de interface com DOM simulado e seis da demonstração.
|
|
|
|
Na base nova `0fe2284727df`, cluster isolado55439, foram preparados dois rascunhos e125 notas de auditoria QA pelo serviço nativo. A requisição de ensaio tinha127 eventos. Após consultar a primeira página, entrou mais uma nota no topo; a navegação antiga percorreu os127 IDs originais exactamente uma vez. Actualizar passou a incluir128, com páginas100/28. O cursor de regresso mostrou o bloco imediatamente mais recente.
|
|
|
|
Inclui recusa de cursor de outra requisição/pessoa, tamanho alterado, expiração, geração de contexto nova, módulo/unidade indevidos, direito retirado, fonte estrangeira, parâmetros inválidos e ID zero. Nas sondas directas ao controlador, flag desligada e ID zero recusam sem SQL; esta medição não abrange o middleware de autenticação/contexto. O estado da requisição permanece rascunho/versão1; não há recepção, factura, obrigação ou pagamento criados pelas consultas.
|
|
|
|
O primeiro harness herdou uma preparação de ordem100MZN anterior à requisição de histórico. Essa fixture sintética foi preservada, identificada pela sequência temporal e removida da preparação de futuras execuções. A asserção final foi corrigida para preservar essa origem existente, em vez de exigir uma base sem ordens. Os17 resultados válidos de paginação/recusas foram reutilizados; não se repetiu esse percurso. As126 notas de auditoria totais são volume de teste assinalado, não126 revisões operacionais da requisição ou decisões reais.
|
|
|
|
Os dez testes da interface cobrem reutilização da página inicial, cursores opacos, direcção, tamanho, actualização sem perda do formulário, ausência de payload de comando, respostas fora de ordem, mudança de registo e recuperação de erro. As provas anteriores de isolamento dos históricos e dos restantes percursos foram preservadas, com o mesmo `ProcessHistory` e escritores.
|
|
|
|
Verificação final: sintaxe de oito ficheiros PHP e oito JavaScript aprovada; `git diff --check` sem erros de espaços. Inventário/matriz actualizados: seis módulos,13 etapas,87 fontes, zero ciclos obrigatórios e136 critérios documentais conferidos. Estes números não são testes operacionais adicionais nem validação da aplicação completa.
|
|
|
|
## Demonstração e limites
|
|
|
|
Nova composição `92a2386b386b`, [**8080 — Solicitante**](http://127.0.0.1:8080/qa/enter/requester?open=1), sem requisições principais ou volume artificial de histórico. Conserva o percurso integrado, anexos, cartografia e atalhos anteriores. Os probes de leitura preservam requisições, auditoria e concessões da demonstração.
|
|
|
|
8079 e anteriores, seis registos protegidos, cache bloqueada, provas e trabalho alheio preservados. Sem publicação, activação de Compras, migração/concessão real, aceitação ou checkpoint.
|
|
|
|
A sequência de eventos permite navegação limitada sem repetição por novas entradas no topo; não é uma fotografia MVCC persistente perante quaisquer escritores externos. O cursor não substitui uma versão de conferência ou aprovação. O DOM simulado e os testes HTTP não constituem revisão visual, acessibilidade ou aceitação no navegador. Não foi repetida a via bloqueada de navegador ou o build React/Vite inalterado: os módulos afectados são ES estáticos. Carga sustentada, instalação geral e capacidade de implantação continuam pendentes.
|