46 lines
6.9 KiB
Markdown
46 lines
6.9 KiB
Markdown
# Continuidade utilizável e isolamento de históricos — 03/11/2026
|
|
|
|
`SGF-PURCHASING-USABLE-CONTINUITY-QA-v1` corrige duas falhas da interface de recepção, completa as ligações recepção → factura → obrigação e fecha uma fuga de eventos entre históricos de etapas do percurso QA.
|
|
|
|
## Correcções funcionais e integração
|
|
|
|
A linha de recepção criava um elemento `select` simples, embora o restante formulário tentasse usar `activate` e `selected` do selector pesquisável. Foi ligada ao `stockChoice` já existente. Marcar a linha agora activa a pesquisa por linha, permite escolha expressa do artigo e envia o ID e a impressão da versão na prévia. Alterar/desmarcar a escolha mantém as invalidações existentes.
|
|
|
|
O primeiro pedido do selector enviava `search=`. O middleware convertia esse texto vazio em `null`, que era recusado por `sometimes|string`. Os catálogos de artigos e fornecedores agora aceitam o filtro vazio/nulo como ausência de pesquisa. Pesquisa literal não vazia, paginação, isolamento, estados do processo e rejeição de arrays/parâmetros desconhecidos mantêm-se. Não se retirou uma regra nativa para tornar o catálogo disponível num processo fechado.
|
|
|
|
A recepção abre as facturas da mesma ordem. Cada factura abre a obrigação dessa origem, as recepções da ordem e, havendo acesso, o dossiê da requisição. A obrigação volta à factura exacta e à sua ordem física. Os atalhos adicionais só aparecem quando a etapa consta do menu apresentado; isso é uma indicação de interface, não autoridade. Cada API de destino continua a validar o contexto e o acesso actual. A funcionalidade adicional fica desligada por omissão em `receipt_qa.continuity_enabled`.
|
|
|
|
## Isolamento dos históricos
|
|
|
|
Os detalhes da requisição e o histórico paginado das propostas consultavam toda a auditoria da requisição. Numa origem com factura/obrigação posteriores, podiam devolver esses eventos e respectivos payloads a um perfil limitado à etapa anterior. A prova antiga do dossiê não cobria esta via alternativa.
|
|
|
|
`ProcessHistory` aplica o âmbito **na consulta SQL, antes do limite, contagem e paginação**. Requisição mostra apenas `requisition.*`/`sgf.request.command`; propostas mostram os eventos da requisição, propostas e adjudicação. Facturas conservam o seu endpoint próprio de histórico autorizado. A auditoria original não foi apagada, alterada ou reclassificada. O dossiê continua a fazer a consulta transversal filtrada pelas permissões de cada etapa.
|
|
|
|
Não foram criados direitos, writers ou endpoints de confirmação. Os blocos `preview`/`confirm` dos controladores de requisição, propostas e recepção foram comparados com8078 e são iguais; os controladores de factura/obrigação e os manifestos nativos também se mantêm.
|
|
|
|
## Provas afectadas
|
|
|
|
[Consolidação técnica](proofs/purchasing-continuity-composition-20261103.json): **55 verificações**.
|
|
|
|
- 17 de interface simulada com **HTTP real**: carregar a ordem, activar a linha, pesquisar, escolher o artigo, enviar versão, conferir, invalidar prévia por edição, confirmar e recuperar uma resposta perdida após commit. Resultado real:201/200, uma recepção e um movimento de1000milésimos/1UN, artigo escolhido preservado. Não é uma nova prova de concorrência.
|
|
- 8 de fronteiras dos filtros: pesquisa inicial vazia igual à omitida; espaços tratados como filtro vazio; arrays/tamanho de página/parâmetros inválidos recusados; direito de Compras e fecho por adjudicação respeitados. Mantém uma recepção/movimento e zero facturas, obrigações ou pagamentos.
|
|
- 12 de históricos: o livro canónico anterior contém os eventos financeiros que reproduziam a falha; requerente/Compras/Finanças recebem apenas a história da requisição nesse endpoint; todas as páginas de propostas mantêm os seus eventos únicos e excluem os posteriores. Finanças conserva o histórico da factura e o acesso indevido continua recusado.
|
|
- 9 de ligações na interface: origem exacta, menu limitado, modo desligado, compatibilidade do dossiê e abertura só com GET.
|
|
- 9 da demonstração: estados iniciais, flags nas três áreas e SHA dos quatro módulos estáticos afectados, sem alteração dos dados/auditoria/concessões seleccionados.
|
|
|
|
A regressão de interface usa a composição nova `ce4c9bef1a51`, no cluster isolado55439. A ordem de100MZN foi preparada pelos workflows efectivos necessários. Uma requisição adicional aberta de1MZN é fixture delimitada para ensaiar o selector de fornecedores antes da adjudicação: reserva própria100unidades menores no mesmo livro, sem segunda ordem/dívida. Não é repetição da suite financeira anterior.
|
|
|
|
Os históricos reutilizam o livro já concluído `b4093c6f6707`, através da aplicação de leitura nova `purchasing-continuity-read-e266c0e778c2`: **142 tabelas e sequências intactas**, sem repetir comandos. As provas válidas de catálogo/paginação/concorrência/dossiê anteriores foram preservadas.
|
|
|
|
Verificação final: sintaxe de11 ficheiros PHP e12 JavaScript aprovada; `git diff --check` sem erros de espaços. Matriz/inventário actualizados: seis módulos,13 etapas,85 fontes, zero ciclos obrigatórios e134 critérios documentais conferidos. Os números do inventário não são testes operacionais adicionais ou validação dos módulos completos.
|
|
|
|
O primeiro ensaio de interface parou antes da confirmação, o que revelou a validação de pesquisa vazia. Os diagnósticos privados foram conservados; após a correcção, o percurso real terminou com as17 verificações. Não se declara esse ensaio inicial como aprovado ou uma revisão no navegador.
|
|
|
|
## Demonstração e limites
|
|
|
|
Nova demonstração **8079**: [Solicitante](http://127.0.0.1:8079/qa/enter/requester?open=1), [Compras](http://127.0.0.1:8079/qa/enter/actor?open=1), [Armazém](http://127.0.0.1:8079/qa/enter/validator?open=1), [Finanças](http://127.0.0.1:8079/qa/enter/issuer?open=1). Composição `2d2d938a3bec`, sem operações principais/recepções/facturas/obrigações iniciais, com fornecedores e orçamento QA preparados. Conserva as funcionalidades de dossiê, cartografia e anexos já entregues.
|
|
|
|
8078 e anteriores, seis registos protegidos, cache bloqueada, provas e trabalho alheio preservados. Sem migração/concessão real, activação de Compras, publicação, aceitação ou checkpoint.
|
|
|
|
Os testes usam DOM simulado; a ligação HTTP real comprova o contrato funcional, não renderização, acessibilidade ou aceitação visual. A revisão visual continua separada, sem repetir a via bloqueada de navegador. Os atalhos não aprovam, determinam prontidão ou executam a etapa seguinte. A requisição conserva os últimos25 eventos próprios no detalhe; propostas continuam paginadas e o dossiê mantém evidência transversal filtrada. Não foram alterados React/CSS/dependências do build Vite: preserva-se a prova válida anterior, verificando sintaxe e bytes servidos dos módulos ES estáticos afectados. Carga sustentada, instalação e capacidade de implantação exigem provas próprias.
|