44 lines
4.7 KiB
Markdown
44 lines
4.7 KiB
Markdown
# 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](STOCK_PREFIX_STREAM_DELIVERY.md). 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](proofs/stock-period-batches-20261103.json): 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.
|