6.3 KiB
Fornecedores no SGF — bloco funcional QA
03/11/2026. Implementados cadastro, alteração, revisão independente, activação/suspensão, pesquisa e histórico de fornecedores, ligados às propostas existentes. Reutilizam os métodos originais de SupplierController, SaveSupplierRequest, SupplierParticipation e SupplierPolicy de Compras, no pacote privado fixado por manifesto. Não há outro motor de fornecedores.
Experimentar
- Preparação — Compras.
- Revisão — Finanças.
- Armazém, sem acesso ao cadastro económico.
A demonstração nova8067 começa com três fornecedores sintéticos preparados na fixture e uma requisição nativa aprovada de100MZN, com reserva única de100MZN. Não há fornecedores novos criados pela interface, propostas, avaliações, adjudicação, ordens, recepções ou movimentos iniciais. As entradas de perfil são exclusivas do launcher privado em loopback.8064/8065/8066 e anteriores permanecem preservadas.
Compras prepara uma nova ficha, com NUIT sintético de nove algarismos e contactos fictícios. A prévia apresenta os estados anterior e posterior; a confirmação deixa a ficha pendente. Finanças confere a versão exacta e fundamenta uma activação ou suspensão. O fornecedor activo, não impedido e com revisão vigente passa a estar disponível nas propostas do mesmo contexto. Os links permitem continuar até à adjudicação, ordem e recepção já entregues. As avaliações e escolhas permanecem individuais.
Uma alteração material da ficha incrementa a versão, retira o estado activo e limpa a revisão anterior, segundo as regras originais. A revisão é distinta de quem criou ou alterou por último. NUIT repetido, fornecedor impedido e diligência vencida são recusados pelo circuito original. Referências documentais são texto declarado; este bloco não implementa anexos ou certifica evidência externa.
Confirmação e isolamento
Prévia através do controlador original num savepoint de rollback obrigatório: não persiste ficha, auditoria ou decisão. Sequências podem avançar. A prévia de criação não mostra um identificador temporário como definitivo. A confirmação volta a verificar direitos, função nativa, empresa/unidade, ligação explícita, revisão e validade da prévia de dez minutos. Revalida os dados no controlador original.
O recibo sgf.supplier.command é append-only, na mesma transacção da ficha e da auditoria nativa. Inclui autor, data, contexto, manifesto, estado anterior, operação, hash do conteúdo e resultado/versionamento; o evento nativo preserva o estado posterior completo. Repetição da mesma chave/conteúdo recupera o resultado; conteúdo diferente é recusado. A falha desse recibo reverte toda a operação. A exclusão concorrente reutiliza o mutex de empresa nativo e os bloqueios de autoridade do host.
Fornecedores preparados na interface pertencem ao contexto empresa/unidade registado no recibo, visível a outras identidades autorizadas nesse contexto. As três fichas de origem continuam ligadas explicitamente à fixture. A API de propostas verifica a mesma admissibilidade, além da elegibilidade nativa: conhecer o ID de um fornecedor do mesmo tenant mas fora da ligação não permite utilizá-lo. Não se atribuem associações antigas ou partilha entre unidades por inferência.
Pesquisa por nome/NUIT, filtro de estado e paginação estável de15 fichas são executados no servidor. O histórico por fornecedor também é paginado em15 e não agrega eventos de outros fornecedores. O selector das propostas mantém o limite anterior de100 fornecedores; a pesquisa integral desse selector continua pendente.
Direitos novos apresentados antes da preparação das fixtures: purchasing_suppliers.view, .prepare, .review, de unidade. Apenas a nova fixture concede consulta/preparação a Compras e consulta/revisão a Finanças. Não se alterou o catálogo público nem contas/concessões reais. O módulo está desactivado por omissão e recusa execução fora do ambiente/bases/roles/cluster QA guardados.
Provas e limites
Consolidação das provas: 64 verificações —34 do percurso funcional, seis de fronteiras, três das guardas, seis da navegação,12 da demonstração e três do build/assets. Incluem criação/alteração/revisão/suspensão, prévia sem persistência, idempotência, chave com outro conteúdo, dois workers com respostas201/200 e uma ficha, falha injectada e recuperação, permissões revogadas, contexto/unidade/tenant, auto-revisão, diligência vencida, versão desactualizada, mudança de ligação e elegibilidade do fornecedor na proposta efectiva. Pesquisa/paginação produzem16 resultados em páginas15+1 sem sobreposição.
As34 provas válidas foram preservadas. Depois do reforço da admissibilidade na API e dos ajustes de apresentação, executaram-se apenas as seis fronteiras e as12 provas da demonstração. O percurso anterior de propostas até à recepção, com74 verificações, foi reutilizado, não repetido. O build privado passou; o verificador de assets foi corrigido para o caminho Laravel build/manifest.json, reutilizando esse build sem o repetir. Provas de integridade verificam o pacote original e as fontes realmente entregues.
São bases novas no cluster isolado55439, com funções QA próprias; as credenciais ficam apenas no directório privado de execução. Não houve ligação à base do destino, alteração dos seis registos protegidos, limpeza da cache bloqueada, alteração de demonstrações existentes ou operações reais. Nenhum push, publicação, activação de Compras, aceitação presumida ou checkpoint.
Este bloco fecha o cadastro/revisão de fornecedores nesta composição sintética. Permanecem separados: passagem de requisições internas SGF para a origem de Compras com responsabilidade orçamental única; regimes formais e correcções posteriores; anexos/pesquisa integral do selector; instalação geral e política operacional de partilha de cadastro. Revisão visual e capacidade de implantação continuam pendentes. Os ensaios não validam carga sustentada, configuração fiscal real ou separação proprietário/runtime para implantação.