# Oficina → entrega já abatida: ligação sem novo movimento Continuação posterior: [repartição de entregas, devolução não consumida e histórico paginado](WORKSHOP_MATERIAL_CYCLE.md). As pendências descritas abaixo registam o âmbito inicial; a continuação tem provas e limites próprios. 02/11/2026. `WORKSHOP-DELIVERY-LINK-SIM-v1`. Continuação da [saída individual conferida](WORKSHOP_STOCK_DELIVERY.md): um consumo verificado pode agora ser ligado individualmente a uma saída física já existente. **O efeito físico da confirmação é zero.** A saída anterior e a respectiva fotografia permanecem intactas. ## Tratamento entregue A interface permite escolher explicitamente entre saída nova e ligação de uma entrega já registada. Não há opção escolhida por omissão. A preparação de ligação exige movimento, armazém, origem/versão, fundamento e evidência. A prévia identifica o movimento original, a quantidade ligada, o saldo antes/depois e a nova saída igual a zero. Outra identidade confirma o tratamento no endpoint existente, com novo fundamento. `POST /api/workshop-stock/prepare-delivery` reutiliza as propostas imutáveis, os direitos `workshop_stock.view/prepare/confirm`, o isolamento e o circuito de confirmação. Não cria outro motor de Stock nem altera o pacote escritor ou o circuito nativo de Compras. Não foram necessários direitos novos. Nenhuma concessão real foi aplicada. A elegibilidade é uma configuração QA explícita de movimento → ordem, além da correspondência de recurso/unidade/armazém e da elegibilidade da ordem já exigidas. Não se inferem vínculos a partir de nomes, referências ou proximidade de datas. Isto **não constitui importação de histórico** ou reconciliação automática de entregas antigas. ## Revalidação e unicidade Para a ligação, a origem continua a exigir consumo autorizado de material da empresa, versão actual e verificação técnica independente. A entrega deve ser uma saída simples anterior ao consumo, da mesma fonte/artigo/armazém e com a quantidade integral exactamente igual. A fotografia do movimento deve conter o hash íntegro da operação gerada pelo escritor comum. Sem essa evidência, exige-se um percurso histórico próprio. O livro admitido neste recorte contém entradas `receipt_in` e saídas `issue`. Estornos, ajustes e transferências recusam a ligação: não se presume que uma saída revertida continua disponível para consumo. Lotes, reservas, peças e conversões continuam fora do recorte. Não é exigido saldo suficiente para uma nova saída, porque a entrega já foi abatida; foi comprovado o caso de saldo esgotado. Na confirmação, o servidor volta a conferir direitos/contexto, fonte/versão/verificação, mapa, elegibilidade, operação/movimento e revisão/saldo do livro. A alteração exige nova conferência. Usa a transacção e o bloqueio de empresa existentes; bloqueia também os registos de origem e entrega. A unicidade da origem, movimento, operação e proposta impede uma segunda associação. O replay devolve a associação/movimento original. Só é inserida a associação append-only, com autor da preparação/confirmação, datas, versão, fundamentos, evidência preservada na proposta, hash e antes/depois iguais. A auditoria distingue `delivery_prepared` e `delivery_linked`. Não se inserem operações/movimentos nem se editam os anteriores. Uma falha na associação desfaz a decisão e permite retoma sem duplicação. ## Provas e preservação Resultados e hashes: [workshop-delivery-link-20261102.json](proofs/workshop-delivery-link-20261102.json). A regressão usa apenas novas ordens, identidades e esquemas em `sgf_tempo_test`, no cluster isolado/porta 55439. Sem reset. A entrega anterior e os ensaios nativos de Compras são provas separadas; não foram repetidas suites nativas porque o pacote e o adaptador nativo não mudaram. | Casos afectados aprovados | Testes | Asserções | | --- | ---: | ---: | | Saída nova, versões, isolamento e concorrência existentes | 6 | 222 | | Ligação integral, recusas, saldo zero, retoma e concorrência | 5 | 163 | | Fotografia original e acesso por outra empresa | 2 | 47 | | Total seleccionado | **13** | **432** | Uma passagem intermédia teve três erros de carregamento do pacote na fixture dos casos novos. Esses casos não foram contados como provas aprovadas; corrigiu-se o carregamento explícito, executaram-se os casos de ligação afectados e reutilizaram-se apenas os casos anteriores aprovados. O relatório identifica os XML e os hashes, sem declarar uma suite intermédia integralmente aprovada. O caso principal usa o escritor comum para criar uma entrega sintética de 2 UN: saldo 10 → 8. A confirmação liga o consumo à entrega e mantém **8 → 8**, os dois movimentos totais (entrada e saída), uma operação e uma associação. O mesmo movimento e a sua fotografia permanecem intactos. A consulta de Stock observa 8 no mesmo livro. Os casos afectados abrangem repetição, autoconfirmação recusada, propostas concorrentes sobre a mesma entrega, quantidade diferente, movimento não elegível, livro alterado, elegibilidade/direitos revogados, falha/retoma e saldo zero. Dois processos PHP foram observados em bloqueio real: após a primeira transacção libertar a linha da empresa, a segunda termina com replay e o mesmo movimento, sem segunda associação. As provas anteriores de versões, isolamento e saída nova foram executadas na passagem afectada e os casos aprovados reutilizados. O render estático verifica a apresentação de efeito zero e do movimento/quantidade ligados; a verificação de fonte confirma escolha explícita de tratamento. Build aprovado. Isto não demonstra interacção no navegador nem substitui a revisão visual. O pós-ensaio verifica que os direitos temporários foram removidos, a constraint original foi restaurada e nenhuma fonte operacional ficou configurada. Seis registos protegidos, cache bloqueada, dados/acessos reais, demonstrações e alterações alheias preservados. Sem activação de Compras, publicação ou checkpoint. ## Pendências - Repartição de uma entrega entre vários consumos, consumo parcial e entrega com quantidade diferente: recusados; ainda não entregues. - Devoluções, compensações físicas e revisão de uma ligação já confirmada: continuam separadas. Corrigir a origem não gera movimento nem desfaz a ligação automaticamente. - Configuração/instalação operacional das tabelas e fontes, composição única desde procurement/recepção até consumo, outros drivers, carga da escrita e capacidade de implantação: não validados por estes ensaios. - Revisão visual permanece pendente; não se repetiu a via de navegador bloqueada.