Files
SGF/docs/SGF_REQUEST_HISTORY_DELIVERY.md
2026-11-04 09:37:20 +02:00

5.2 KiB

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: 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, 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.