# Stock — produtos sem movimento na instalação existente Entregue em10/11/2026 na mesma8085: Stock → Relatórios → Produtos sem movimento. Usa o direito existente `stock.view`, o contexto empresa/unidade/pessoa e a ligação física SELECT-only já instalada. Sem novos direitos, bases, demonstrações, índices ou comandos de Stock. Configuração de origem desligada por omissão; disponibilização limitada à instalação QA autorizada. ## Significado e utilização Escolher explicitamente o dia de corte UTC, dias consecutivos sem registo físico (1–3650), código/nome literal, armazém autorizado e página25/100. O selector de armazéns é paginado e não escolhe o primeiro registo. A opção Existências no mesmo menu abre também a consulta física existente, em vez da indicação antiga de indisponibilidade. Com corte10/11 e30 dias, o intervalo sem registo vai de12/10 às00:00 até10/11 às23:59:59…; um último movimento de11/10 ainda é elegível, um de12/10 não. Só se conclui sobre pares artigo/armazém com movimento físico conhecido antes do fim do corte. Cada linha tem artigo/unidade, armazém, último registo UTC, dias e quantidade física exacta no corte. Artigos sem história não são atribuídos a armazéns, nem declarados inactivos ou com saldo zero. São considerados todos os tipos de movimento físico da fonte; não se classificam automaticamente causas comerciais. Metadados são actuais. Sem totais entre unidades, valorização, reservas, bloqueios ou disponibilidade. Um corte futuro consulta apenas registos conhecidos, sem prever actividade por registar. ## Consulta e guardas Agrupamento, filtros, contagem e paginação SQL, sem transportar todo o universo para PHP. Cinco SELECTs na projecção: três de revisão existente, contagem e página; exclui autenticação/guardas do host e verificação da fonte. O hash de metadados existente continua agregado na base; não se declara optimização de carga/memória dessa revisão. Uma transacção própria REPEATABLE READ/READ ONLY e limite SQL3s. Referência cifrada600s ligada à revisão física, pessoa/contexto/filtros/tamanho; mudança exige nova leitura. A página seguinte conserva essa referência, sem a transformar em autorização de escrita. Direitos e mapeamento de armazéns são revalidados pelo controlador existente; falhas não apresentam saldos zero. O cliente descarta respostas de consultas abandonadas. ## Provas dirigidas -23 verificações na regressão existente:128 pares frios, páginas25/100, fronteira UTC30/29 dias, pesquisa literal `%_!`, história futura/desconhecida excluída, precisão superior ao inteiro seguro JavaScript, cinco SELECTs nos dois tamanhos, armazém fora do mapa, contexto/filtro/referência adulterada/expirada, validações, refusas de actor/unidade, leitura sem escrita e nova revisão após append explícito. - As fixtures são127 artigos frios e quatro casos de fronteira/recentidade/futuro/sem história,131 artigos no total;131 movimentos iniciais mais um append de revisão **apenas na regressão**. São metadados SQL de relatório, não recepções/ordens/custos executados pelos workflows. Nenhum livro de valorização foi criado/adoptado. Linhas físicas anteriores conservadas. A regressão usa a ligação nativa existente em transacção READ ONLY para testar a projecção; a prova da role SELECT-only efectiva é HTTP na8085. Não se criou uma role de leitura na regressão. -15 verificações HTTP reais na8085: origem SELECT-only e opção no contexto, datas/páginas/quantidades, referências inválidas/alteradas, armazém não autorizado e actor de Compras recusados. Zero POSTs de negócio; apenas a escolha normal auditada de contexto. Corte futuro explícito usado para obter história elegível sem alterar datas/movimentos existentes. -Sete verificações do cliente: renderização estática dos campos, selector e aviso, tamanhos25/100, descarte de resposta atrasada e transporte literal do filtro. Build privado aprovado, componente diferido. Não é revisão visual de navegador nem prova de todas as interacções DOM. -Comparação dos quatro conjuntos completos na8085 antes/depois: `stock_movements`, `stock_items`, `warehouses`, `gl_journals` idênticos. Diário continua27, incluindo os25 anteriores preservados pelo incremento Caixa. Não se repetiram os comandos válidos dos outros módulos. Índice verificável: [provas](proofs/sgf-stock-inactivity-20261110.json). Dados, perfis, credenciais e provas detalhadas ficam fora do repositório. Assets anteriores e alterações alheias retidos; sem limpar a cache, tocar nos seis registos, SGC, publicação, candidata, aceitação ou checkpoint. ## Limitações O relatório mede ausência de registo na história conhecida, não prova ausência de actividade real ou completude histórica. Não inclui produtos sem localização histórica, exportação, classificação por vendas/consumos, alertas ou criação de compras. Carga sustentada, revisão visual, conformidade e capacidade de implantação continuam separadas. Não houve ensaio de carga nem índices neste incremento.