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

4.7 KiB

Conferência do período de stock em lotes

03/11/2026. Continuação técnica da valorização sintética autorizada e da leitura das dependências anteriores. Código funcional na fonte; não altera o pacote congelado das demonstrações nem introduz efeitos financeiros.

Implementação

StockValuation::period() passa a percorrer livros, taxas e revisões por chave crescente, com lotes de até 100 linhas. Os movimentos do período também são lidos por chave, sem materializar todo o período no PDO através de cursor().

Cada lote de movimentos recebe uma leitura conjunta dos identificadores e revisões contabilísticas. A consulta transfere apenas estes dois campos, com uma referência por movimento; não traz os snapshots completos dos lançamentos. As condições de tenant, empresa e unidade mantêm-se. A unicidade do writer de stock permanece responsável por impedir duplicações; a projecção é adicionalmente limitada a uma referência por movimento, ordenada pelo identificador contabilístico.

A ordem de construção do hash, os factos abrangidos, as pendências e a revalidação individual de cada origem permanecem no mesmo serviço. A confirmação contabilística não passa a confiar numa prévia ou num resultado guardado. Não se criou uma cache persistente.

Uma consulta autónoma ao período usa uma única transacção REPEATABLE READ READ ONLY. Se o chamador já tem uma transacção, conserva a sua propriedade e nível de isolamento: o serviço não a confirma nem a reconfigura.

Provas dirigidas

Manifesto e resultados: 33 verificações, sendo 27 de equivalência/lotes/recusas/contexto e seis de leitura concorrente entre lotes. A baseline é uma cópia privada da fonte imediatamente anterior, com hash fixado, sem substituir provas existentes.

Movimentos na fixture Antes: leituras do snapshot contabilístico completo para estado final Depois: consultas conjuntas de estado Depois: snapshots completos para esse estado
0 0 0 0
1 1 1 0
100 100 1 0
101 101 2 0
205 205 3 0

São contagens do passo de conferência do estado final, não de todo o SQL. O contador auxiliar queries regista chamadas Connection.select; não mede todos os comandos/cursos SQL e não serve como total comparável. Não se mediram tempos, memória ou capacidade nesta passagem.

Os ensaios usam IDs físicos espaçados, fronteiras de lote, ausência de lançamento, revisão nula, taxa recusada, outro tenant/empresa/unidade e recusa de consulta. Os resultados completos, incluindo hash e pendências, são comparados com a baseline. A fixture de metadados é exclusiva da regressão: não contém linhas contabilísticas, saldos ou lançamentos de negócio. Nenhum índice foi criado.

O período nativo já encerrado, com os três movimentos efectivos, foi consultado apenas em transacção de leitura: hash, três factos e zero pendências permanecem exactamente equivalentes. As provas de negócio anteriores não foram repetidas.

Na prova concorrente, uma segunda ligação confirma uma alteração à revisão do último registo de metadados depois da leitura do primeiro lote. A consulta em curso mantém o resultado original; a consulta seguinte identifica uma pendência. A alteração é restaurada no fim e ambas as ligações terminam sem transacção ou cursor aberto. Não é um ensaio de concorrência sustentada nem uma nova confirmação financeira.

Três tentativas incompletas do auxiliar ficaram preservadas: classificação indevida de um EXISTS pelo contador; mistura do controlo transaccional de dois wrappers do mesmo PDO; e ausência do dispatcher de eventos na ligação instrumentada. Foram corrigidas no auxiliar antes da execução final. Não se contam essas tentativas como provas aprovadas.

Limites e preservação

A conferência de cada origem ainda volta a ler o seu prefixo de dependências. Esta alteração elimina a leitura repetida dos snapshots de estado final e limita a enumeração do período; não elimina todo o trabalho repetido entre origens. A leitura conjunta de prefixos por página/período continua pendente, assim como carga sustentada, revisão visual e capacidade de implantação.

As medições anteriores de 1.000/5.000/10.000 referências conservam o âmbito próprio do leitor de prefixos; não são apresentadas como medições do período completo nesta versão. O método de prefixos não foi alterado nesta passagem.

Demonstrações, seis registos protegidos, cache bloqueada, provas válidas e trabalho alheio preservados. Sem operações/direitos reais, migração no destino, activação de Compras, publicação, aceitação ou checkpoint presumidos.